تعرفنا في الدروس السابقة كيفية عمل مشاريع بالأردوينو وكيفية قراءة المخرجات من خلال شاشة الإتصال التسلسلي أو ما يعرف باسم serial monitor، لذا قد يختلف هذا الدرس بعض الشيء لأنه سوف ينقل مشاريعك إلى مستوى أكثر احترافيه وذلك عن طريق استخدام إحدى لغات البرمجة المساندة وهي Python لعمل مشاريع إحترافية تعمل بتقنية الرؤية الحاسوبية أو ما يسمى بـ Computer vision.
من المعروف أن التعامل مع لوحة الأردوينو يتقيد دائماً ببعض الحدود حيث أنه لا يمكن قراءة أي بيانات منها إلا عن طريق شاشة الـ serial monitor وتكون البيانات المقروءة دائماً في صورة نصية و بدائية للغاية لذا كيف نبني بيئة رسومية افتراضية لمشاريع الأردوينو.
تعريف الرؤية حاسوبية
هي إحدى مجالات علم الحاسوب، تهدف إلى بناء تطبيقات ذكية قادرة على فهم محتوى الصور كما يفهمها الإنسان ويمكن عنطريقها بناء تطبيقات واقع افتراضي. حيث من الممكن أن تأخذ بيانات الصور عدة أشكال كالصور المتعاقبة والمشاهد من عدة كاميرات، وكذلك البيانات ذات عدة أبعاد المأخوذة من جهاز تصوير طبي على سبيل المثال.
الهدف
إنشاء واقع افتراضي ثلاثي الأبعاد يحاكي مستشعرات الأردوينو
الخطوة الأولى: تحميل البرمجيات اللازمة
1- تحميل لغة بايثون
لغة بايثون هي لغة برمجة من لغات المستوى العالي تتميز ببساطة كتابتها وقراءتها، سهلة التعلم، تستخدم أسلوب البرمجة الكائنية، مفتوحة المصدر، وقابلة للتطوير.
وفي العادة تستخدم هذه اللغة في العديد من المجالات ومنها مجال الإلكترونيات. رابط التحميل.
2- تحميل بايثون سيريال pyserial
وهي مجموعة من المكتبات المشابهة لمكتبات الأردوينو والتي تعمل مع بايثون تتيح الفرصة للتعامل مع شاشة الاتصال التسلسلي الخاصة بالأرديونو. رابط التحميل.
3- vpython
وهي مكتبة برمجية تتيح تصميم واقع افتراضي موازي ثلاثي الأبعاد لمحاكاة مستشعرات الأردوينو. رابط التحميل.
هكذا ستبدو الأيقونات بعد التحميل يرجي عمل Setup للملفات حسب الترتيب في المقال:
الخطوة الثانية: تجهيز المكونات الإلكترونية
1- مستشعر موجات فوق صوتية ultrasonic sensor
2- لوحة أرديونو أونو Arduino Uno
3- اسلاك توصيل Jumper wires
الخطوة الثالثة: توصيل المكونات الإلكترونية
قم بتوصيل المستشعر كما هو موضح
الخطوة الرابعة : تحميل كود الأردوينو
أولاً: قم بفتح برنامج الأردوينو
ثانياً: ألصق الكود التالي:
// Code Written By Ahmed Azouz
int trigPin=13; //Sensor Trig pin connected to Arduino pin 13
int echoPin=11; //Sensor Echo pin connected to Arduino pin 11
float pingTime; //time for ping to travel from sensor to target and return
float targetDistance; //Distance to Target in inches
float speedOfSound=776.5; //Speed of sound in miles per hour when temp is 77 degrees.
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(trigPin, LOW); //Set trigger pin low
delayMicroseconds(2000); //Let signal settle
digitalWrite(trigPin, HIGH); //Set trigPin high
delayMicroseconds(15); //Delay in high state
digitalWrite(trigPin, LOW); //ping has now been sent
delayMicroseconds(10); //Delay in low state
pingTime = pulseIn(echoPin, HIGH); //pingTime is presented in microceconds
pingTime=pingTime/1000000; //convert pingTime to seconds by dividing by 1000000 (microseconds in a second)
pingTime=pingTime/3600; //convert pingtime to hourse by dividing by 3600 (seconds in an hour)
targetDistance= speedOfSound * pingTime; //This will be in miles, since speed of sound was miles per hour
targetDistance=targetDistance/2; //Remember ping travels to target and back from target, so you must divide by 2 for actual target distance.
targetDistance= targetDistance*63360; //Convert miles to inches by multipling by 63360 (inches per mile)
Serial.println(targetDistance);
delay(100); //delay tenth of a second to slow things down a little.
}
الخطوة الخامسة : تجهيز واجهة الواقع الافتراضي بلغة بايثون
أولاً: كيفية الرسم ثلاثي الابعاد باستخدام بايثون
من خلال برنامج Vpython يمكنك انشاء و رسم أشكال ثلاثية الأبعاد ببساطه، فمثلاً إذا أردنا رسم مستشعر Ultrasonic:
- قم بفتح برنامج Vpython واكتب الكود التالي:
- من قائمة RUN اختر Run Module
حيث أن كل المجسمات لها نفس المتغيرات، فمثلاً كيف يتم رسم المكعب:
الـ color هو المتغير الخاص باللون
و الـ width المتغير الخاص بالعرض و Height للطول
أما المتغير pos هو مكان الـ OBJECT في شاشة العالم الافتراضي (x,y,z)
و لمزيد من المعلومات عن تقنية الرسم بلغة Python من هنا.
ثانياً: قم بفتح برنامج VIDLE for VPython وكتابة الكود التالي
import serial
from visual import * # Add All visual libraries
MyScene = display(title= 'Arduino VR')
MyScene.width = 800 # Screen width
MyScene.height = 800 # Screen height
ArduinoSerialData = serial.Serial('com4', 9600)
L=0.1
rod = cylinder(length=6 ,color=color.yellow, radius=.1, pos=(-3,-2,0)) # Draw cylinder
lenghtLabel = label(text = 'Target Distance is:', pos=(0,2,0), height=20, box= false) # Add label
target = box (color=color.red,length=L, width=3, height=3,pos =(3,-.5,0)) # Draw opject
# Ultrasonic Sensor draw
sensorBox = box (color=color.green,length=L, width=2, height=1,pos = (-3.5,-1.5,0)) # Draw Board
sensorc1 = cylinder(length=0.5 ,color=color.white, radius=.3, pos=(-3.5,-1.5,.5)) # Draw cylinder
sensorc1 = cylinder(length=0.5 ,color=color.white, radius=.3, pos=(-3.5,-1.5,-.5)) # Draw cylinder
while (1==1): #loop while the sensor is reading
rate(25)
while(ArduinoSerialData.inWaiting()==0):
pass
if(ArduinoSerialData.inWaiting()>0):
myData= ArduinoSerialData.readline()
distance= float(myData) #conevert to floating number
print distance
Mylabel = 'Target Distance is:' + distance
lenghtLabel.text = Mylabel
target.pos = vector(-3+distance,-.5,0) # move the target depent on real opject
rod.lenght=distance # dynamic change lenght with ultrasonic
الخطوة السادسة: تشغيل برنامج المحاكاه الافتراضي
- تأكد من توصيل لوحة الأدروينو وتأكد من رقم المنفذ التسلسلي
- أغلق شاشة المنفذ التسلسلي الخاصة بالأردوينو
- افتح نافذة VIDLE for VPython
- ألصق الكود
- تأكد من كتابة المنفذ الصحيح في كود البايثون حسب رقم المنفذ بجهازك ArduinoSerialData = serial.Serial(‘com4’, 9600)
- من قائمة Run اختر Run module
- قم بتحريك شيء أمام المستشعر، في الحقيقة ستلاحظ أنه يتم تحريك الشكل ثلاثي الأبعاد في نفس الوقت بالواقع الافتراضي الذي أنشأته.
اريد شخص لمساعدتي في تعلم arduino