صناعة منقلة رقمية باستخدام حساس التسارع والاردوينو

مقدمة

المنقلة الرقمية واحدة من الأدوات المستخدمة لقياس الزوايا، ولها دورًا مهمًا في عملية الصناعة فكلما كانت أدوات القياس دقيقة كل ما كان المخرج النهائي أكثر دقة، في هذا الدرس ستتعلم كيفية صناعة منقلة رقمية باستخدام والاردوينو حساس الحركة والتسارع في ثلاث اتجاهات .

منقلة رقمية

الأدوات والمواد

arduino-digital-protractor-mpu6050

اردوينو اونو

منقلة رقمية

1× سلك الاردوينو

منقلة رقمية

 حزمة أسلاك توصيل (ذكر- ذكر)

arduino-digital-protractor-mpu6050

حزمة أسلاك توصيل (ذكر – أنثى)

منقلة رقمية

حساس الحركة والتسارع في ثلاث اتجاهات

arduino-smoke-gas-sensor

1× لوحة تجارب – حجم كبير

الشاشة تستخدم في مع الاردوينو وحساس الغاز/ الدخان

 1× شاشة كرستالية

arduino-smoke-gas-sensor

مقاومة متغيرة

منقلة رقمية

محرك سيرفو

شفرة

1× 40 رأس دبوس

حساس الحركة والتسارع في ثلاث اتجاهات

حساس التسارع والحركة مصمم لقياس أبسط وأدق التغيرات في معدل الحركة في ثلاث اتجاهات.

منقلة رقمية

يستخدم حساس التسارع والحركة في مجالات كثيرة، أبسط مثال هو شاشة هاتفك المحمول عند إمالة الهاتف يتغير اتجاه الشاشة إما بشكل عرضي أو بشكل طولي.

arduino-digital-protractor-mpu6050

يحتوي الحساس على 8 مداخل وهي موضحة بالشكل التالي:

منقلة رقمية

توصيل الدائرة

لمعرفة المزيد حول الشاشة الكرستالية يمكنك الرجوع للدرس التحكم بالشاشة الكرستالية LCD

لابد من تلحيم المنافذ مع الشاشة الكرستالية، للمزيد حول اللحام يمكنك الرجوع للدرس تعلم كيفية التلحيم – تلحيم القطع باللوحة الإلكترونية

منقلة رقمية

الكود البرمجي

#include <Servo.h>                 //Include Servo Motor library for using Servo 
#include <LiquidCrystal.h>         //Include LCD library for using LCD 
#include <Wire.h>                  //Include WIre library for using I2C 
LiquidCrystal lcd(2,3,4,5,6,7);   //Define LCD display pins RS,E,D4,D5,D6,D7
const int MPU_addr=0x68;         //I2C MPU6050 Address
Servo myservo;                  //myservo object for class servo 
int16_t axis_X,axis_Y,axis_Z;    
int minVal=265;
int maxVal=402; double x;
double y; double z; int pos = 0;   void setup() {   Wire.begin();                        //Begins I2C communication
  Wire.beginTransmission(MPU_addr);    //Begins Transmission with MPU6050
  Wire.write(0x6B);                    //Puts MPU6050 in Sleep Mode   Wire.write(0);                       //Puts MPU6050 in power mode    Wire.endTransmission(true);          //Ends Trasmission myservo.attach(9);               //Servo PWM pin as 9 in UNO
  lcd.begin(16,2);                 //Sets LCD in 16X2 Mode
} void loop() {   Wire.beginTransmission(MPU_addr); //Begins I2C transmission    Wire.write(0x3B);                 //Start with register 0x3B (ACCEL_XOUT_H)         Wire.endTransmission(false);   Wire.requestFrom(MPU_addr,14,true); //Request 14 Registers from MPU6050   axis_X=Wire.read()<<8|Wire.read(); //Obtain 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)    axis_Y=Wire.read()<<8|Wire.read(); //0x3B (ACCEL_YOUT_H) & 0x3C (ACCEL_YOUT_L)
  axis_Z=Wire.read()<<8|Wire.read(); //0x3B (ACCEL_ZOUT_H) & 0x3C (ACCEL_ZOUT_L)
    int xAng = map(axis_X,minVal,maxVal,-90,90); 
    int yAng = map(axis_Y,minVal,maxVal,-90,90);
    int zAng = map(axis_Z,minVal,maxVal,-90,90);
   x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI);     //Formula to calculate x values in degree
     int pos = map(x,0,180,0,180); // As X value is from 0 to 360 deg      myservo.write(pos);           // Write angle obtained 0 to 180 to servo
     lcd.setCursor(0,0);
     lcd.print("Angle");      lcd.setCursor(0,1);      lcd.print(x);                
     delay(500);
     lcd.clear();
}

شرح الكود البرمجي

هنا نستدعي مكتبة الشاشة الكرستالية ومكتبة Wire.h التي تحتوى على الدوال اللازمة للتواصل بين الاردوينو وحساس التسارع ومكتبة محرك السيرفو.

نستطيع تحميل مكتبة الشاشة الكرستالية بتتبع المسار التالي:

Sketch > Include libraries > Manage libraries

ثم نكتب بخانة البحث Liquid crystal by Arduino

ثم نضغط على Install.

#include <Servo.h>              
#include <LiquidCrystal.h>
#include <Wire.h>       

بعد ذلك أعلنا عن المتغيرات اللازمة مثل المتغيرات الخاصة بالشاشة الكرستالية.

LiquidCrystal lcd(2,3,4,5,6,7);  

بعد ذلك يتم تحديد بروتوكول الاتصال التسلسلي l2c الخاص بحساس التسارع.

const int MPU_addr=0x68;   

هذا السطر يعرف myservo الخاص بمحرك السيرفو ثم يتم تعريف القيم الخاصة بحساس التسارع على ثلاثة محاور x و y و z.

Servo myservo;                
int16_t axis_X,axis_Y,axis_Z;   

يتم تحدد أقصى قيمة وأقل قيمة يقرأها الحساس بين (265-402) لقياس الزوايا من 0 إلى 360.

int minVal=265;
int maxVal=402;

في دالة ()void يبدأ الاتصال التسلسلي والنقل بين حساس التسارع والعنوان 0x68.

  Wire.begin();            
  Wire.beginTransmission(MPU_addr);  

في هذا السطر يدخل حساس التسارع في وضع السكون بعد توصيله مع العنوان 0x6B, يستأنف العمل بعد ادخال القيمة صفر.

Wire.write(0x6B);                   
Wire.write(0);     

بعد تفعيل حساس التسارع انهِ النقل.

Wire.endTransmission(true);      

محرك السيرفو تم ربطه مسبقًا مع المدخل الرقمي 9 على لوحة الاردوينو.

  myservo.attach(9);  

في دالة ()loop يستأنف الاتصال من جديد.

 Wire.beginTransmission(MPU_addr);

ويبدأ مع المسجل 0x3B (ACCEL_XOUT_H)

Wire.write(0x3B);        

يستأنف الاتصال من جديد لكن بإضافة False لكن الاتصال هنا مفعل.

Wire.endTransmission(false);

هذا السطر يطلب بيانات حساس التسارع (x و y و z) من المسجل 14.

Wire.requestFrom(MPU_addr,14,true);

بعد أخذ البيانات المسجلة لكلًا من (x و y و z) يتم تخزينها في axis_X,axis_Y,axis_Z.

 axis_X=Wire.read()<<8|Wire.read();
  axis_Y=Wire.read()<<8|Wire.read();
  axis_Z=Wire.read()<<8|Wire.read();

اجعل القيم لكل الثلاث محاور (x و y و z) بين (265-402) يتم تمثيلها كـ90 و -90

 int xAng = map(axis_X,minVal,maxVal,-90,90);
    int yAng = map(axis_Y,minVal,maxVal,-90,90);
    int zAng = map(axis_Z,minVal,maxVal,-90,90);

هنا قيمة x لحساب الزاوية من 0 – 360 نقوم بتحويل فقط قيمة x لأن دوران محرك السيرفو يعتمد عليها.

x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI);    

قيمة الزاوية x التي بين 0 -360 يتم تحويلها لـ0-180.

 int pos = map(x,0,180,0,180);

هذا السطر يأخذ قيمة الزاوية من حساس التسارع وعلى أساس تلك القيم يدور محرك السيرفو ويتم طباعة قيمة الزاوية على الشاشة الكرستالية.

 myservo.write(pos);         
lcd.setCursor(0,0);
lcd.print("Angle");
lcd.setCursor(0,1);
lcd.print(x);               
delay(500);
lcd.clear();

بعد رفع الكود على لوحة الاردوينو ستكون هناك عدة قيم يتم تسجيلها من حساس التسارع والحركة وبناء على تلك القيم يتم دوران محرك السيرفو وطباعة قيمة الزاوية على الشاشة الكرستالية.

زاوية تقريبًا 50.منقلة رقمية

زاوية تقريبًا 3.

منقلة رقمية

 




نقل البيانات بين 2 أردوينو باستخدام الليزر

 يعتبر الضوء من الوسائل الأكثر سرعة في نقل البيانات، في هذا الدرس سنتعلم نقل البيانات بين جهازين أردوينو لا سلكيا و باستخدام أشعة الليزر بحيث يكون الاردوينو الأول جهاز ارسال يعمل على تشفير النصوص ، و الثاني جهاز استقبال يعمل على فك شفرة النصوص و طباعتها على الشاشة الكرستالة

البيانات أردوينو باستخدام الليزر

المواد و الأدوات

اردوينو

X 2 اردوينو أونو 

سلك اردوينو

X 1 سلك أردوينو

محول طاقة

X 1 محول طاقة

لوحة تجارب

X 1 لوحة تجارب

شاشة lcd

X 1شاشة كرستالية

X1رأس دبوس 

مقاومة 220

X 1مقاومة 220 أوم 

 

مرسل ليزر

X 1 مرسل ليزر 

مستقبل ليزر

X 1 مستقبل ليزر

أسلاك توصيل

أسلاك توصيل (أنثى/ذكر)

أسلاك توصيل

أسلاك توصيل (ذكر/ذكر)

 

توصيل الدائرة

دائرة المستقبل :

دائرة مستقبل البيانات

دائرة المرسل:

دائرة مرسل البيانات أردوينو باستخدام الليزر

يجب أن يثبت المرسل و المستقبل على خط واحد كما هو ظاهر بالصورة

البيانات أردوينو باستخدام الليزر

الكود البرمجي

الكود البرمجي للمرسل يتم رفعه على الأردوينو الذي سيرسل البيانات

int ledPin = 13;

void setup() {                
  pinMode(ledPin, OUTPUT);     
  Serial.begin(9600);
}

void loop() {
  
  byte input;
    while (Serial.available() > 0) {
    input = Serial.read();
    
    digitalWrite(ledPin, HIGH);   
    delay(10);
    digitalWrite(ledPin, LOW);


    for (int i = 0; i < 8; i++) {
      digitalWrite(ledPin, (input & (1 << i)) >> i);
      delay(100);
    }
    digitalWrite(ledPin, LOW);
    
    delay(10);
  } 
}

الكود البرمجي للمستقبل يتم رفعه على الأردوينو الذي يستقبل بيانات

 
#define NUM_SAMPLES 10
int sensorPin = A0;    // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor
double average;
#include <LiquidCrystal.h>   //Load Liquid Crystal Library
LiquidCrystal lcd(12, 11, 5, 6, 7, 8);

void setup() {
  lcd.begin(16,2);
  Serial.begin(9600);
  sensorValue = analogRead(sensorPin);
  average = sensorValue;
}

void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin);
  boolean high = false;
  high = isSignalHigh(average, sensorValue);
  if (high) {    
    byte incoming = 0;
    delay(10);
    for (int i = 0; i < 8; i++) {
    incoming |= ( isSignalHigh(average, analogRead(sensorPin)) << i);
    delay(100);
    }
    lcd.print((char)incoming); //Print measured distance
    Serial.print((char)incoming);
  }
    average = approxRollingAverage(average, sensorValue);   
}

double approxRollingAverage(double avg, double new_sample) {

  avg -= avg / NUM_SAMPLES;
  avg += new_sample / NUM_SAMPLES;

  return avg;
   
}

boolean isSignalHigh(double average, double sample) {
  if (sample - average > 10)
    return true;
  return false; 
    
}

شرح الكود البرمجي

شرح الكود البرمجي للمرسل

نعرف المنفذ الذي سيتم توصيله مع مرسل أشعة الليرز به باسم (ledpin) الذي تم توصيله مع منفذ رقم 13

int ledPin = 13;

نعين المنفذ (ledpin) كمخرجات
و نفعل الاتصال التسلسلي

void setup() { 
// initialize the digital pin as an output.
pinMode(ledPin, OUTPUT); 
Serial.begin(9600);
}

في الدالة المتكرره نفعل القراءة من شاشة الاتصال التسلسلي

void loop() {

byte input;

// Read character from serial
while (Serial.available() > 0) {
input = Serial.read();

 نعطي أوامر بتشغيل الليزرلارسال البيانات من أردوينو باستخدام الليزر

digitalWrite(ledPin, HIGH); 
delay(10);
digitalWrite(ledPin, LOW);

نحدد تشغيل الليد بناء على معادلة بين متغير I له قيم بين 0 و 8 و المدخلات من شاشة الاتصال التسلسلي

for (int i = 0; i < 8; i++) {
digitalWrite(ledPin, (input & (1 << i)) >> i);
delay(100);
}
digitalWrite(ledPin, LOW);

delay(10);
} 
}

شرح الكود البرمجي للمستقبل

نعرف منفذ مستقبل الليزر و منافذ شاشة الLCD

#define NUM_SAMPLES 10
int sensorPin = A0; 
int sensorValue = 0; 
double average;
#include <LiquidCrystal.h> //Load Liquid Crystal Library
LiquidCrystal lcd(12, 11, 5, 6, 7, 8);

نحدد العدد الأقصى لخانات السطر الواحد وعدد السطور الأقصى التي تسمح بها الشاشة .
و نحدد متغير باسم sensorValue للقيم التي يتم قراءتها من الحساس

void setup() {
lcd.begin(16,2);
Serial.begin(9600);
sensorValue = analogRead(sensorPin);
average = sensorValue;
}

لقراءة البيانات المرسلة من أردوينو باستخدام الليزر و تحويلها إلى نصوص و عرضها على الشاشة الكرستالية

void loop() {

sensorValue = analogRead(sensorPin);
boolean high = false;
high = isSignalHigh(average, sensorValue);
if (high) { 
byte incoming = 0;
delay(10);
for (int i = 0; i < 8; i++) {
incoming |= ( isSignalHigh(average, analogRead(sensorPin)) << i);
delay(100);
}
lcd.print((char)incoming); //Print measured distance
Serial.print((char)incoming);
}
average = approxRollingAverage(average, sensorValue); 
}

double approxRollingAverage(double avg, double new_sample) {

avg -= avg / NUM_SAMPLES;
avg += new_sample / NUM_SAMPLES;

return avg;

}

boolean isSignalHigh(double average, double sample) {
if (sample - average > 10)
return true;
return false; 

}



تحكم في طابعة 3D عن بُعد باستخدام راسبيري باي و octopi

يمكن أن تكون تجربة الطباعة ثلاثية الأبعاد أسهل إذ كان بالإمكان التحكم في الطابعة ومراقبة عملية الطباعة على متصفح الويب وطباعة الأشياء عن بُعد . ولتحقيق ذلك نستطيع الاعتماد لوحة الراسبيري (RaspberryPi) باي و اوكتو برنت (OctoPrint)الذي يعد خادم ويب مفتوح المصدر يتيح لك مراقبة جميع جوانب الطابعة ثلاثية الأبعاد، و يمكنك من تحميل مطبوعات جديدة عن بُعد ومراقبة درجة حرارة الطارد وإيقاف تشغيل الطابعة وتشغيلها والتحقق من حالة المطبوعات ومشاهدة مطبوعاتك من خلال بث فيديو مباشر، ومراقبة التقدم في الطباعة، عندما يكون جهاز الحاسوب الخاص بك و الراسبيري باي (RaspberryPi) متصلين على ذات الشبكة المحلية (LAN). في هذا الدرس سنتعلم تهيئة خادم اوكتوبرنت (OctoPrint) على (RaspberryPi) الراسبيري باي

المواد و الأدوات

راسبيري باي

1X راسبيري باي 
راسبيري باي كاميرا

 1X كاميرا للراسبري باي (raspberry pi camera module) أو USB webcam

 

ذاكرة

1X ذاكرة صغيرة (Micro SD card) 8 قيقا كحد أدنى

قارئ بطاقة الذاكرة

1X قارئ بطاقة الذاكرة 

سلك يو اس بى A-B

1X سلك يو اس بي (USB) A-B

محول طاقة راسبيري باي

1X محول طاقة 5V 2A 

تثبيت أوكتو باي (OctoPi):

تهيئة الراسبيري باي (Raspberry Pi):

يتضمن الأوكتو باي (Octopi) كل ما يلزم لتشغيل كل من راسبيري باي (Raspberry Pi) وخادم (OctoPrint). وخطوات تثبيت الأوكتو باي (Octopi)تشبه تثبيت أي نظام تشغيل بمجرد تهيئة اللوحة سيعمل النظام بدون أي تكوين إضافي. بالبداية لا تنس أن تقوم بتهيئة الذاكرة باستخدام برنامج (SD Card Formatter)

أولا:  قم بتنزيل الأوكتو باي (Octopi) من خلال الرابط  ثم قم بفك الضغط عن الملف

ثانيا : استخدم (install Raspberry Pi Imager) لرفع نظام التشغيل على الذاكرة يمكنك معرفة خطوات التحميل بزيارة الرابط 

الاتصال بالشبكة:

لتوصيل الراسبيري باي (Raspberry Pi) بالشبكة ستحتاج إلى تحرير ملف نصي على بطاقة الذاكرة، حدد موقع بطاقة SD الخاصة بك في (Finder (MacOS)) أو (Explorer (Windows)) بعد ذلك، افتح ملف octopi-wpa-supplicant.txt في Notepad أو Sublime Text. لا تستخدم (Microsoft Word) أو (Wordpad )

قم بإلغاء التعليق على الأسطر أدناه، وأدخل شبكة اسم الشبكة اللاسلكية وكلمة المرور الخاصة بك:

## WPA/WPA2 secured 
network={ 
    ssid="your-wifi-network-name" 
    psk="your-wifi-password" 
}

إلغاء التعليق أو إضافة رمز البلد الخاص بك:

# Uncomment the country your Pi is in to activate Wifi in RaspberryPi 3 B+ and above 
# For full list see: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 
#country=GB # United Kingdom 
#country=CA # Canada 
#country=DE # Germany 
#country=FR # France 
#country=US # United States
country=SA #add my country Saudi Arabia

ابحث عن رمز بلد ISO 3166-1 المكون من رقمين واستخدمه بدلاً من الرمز المستخدم .

 قم بتوصيل الراسبيري باي (Raspberry Pi) مع الشاشة ولوحة المفاتيح والفأرة، أو التحكم بالراسبيري عن بعد من خلال الدرس لمعرفة رقم (IP) على الشبكة

 

sudo ifconfig

 

يمكنك الآن الاتصال بـ OctoPrint لعرض واجهة OctoPrint. من جهاز جهاز الحاسوب الخاص بك، تأكد من أنك على نفس الشبكة مع الراسبيري باي (Raspberry Pi) الخاص بك، ثم قم بكتابة رقم (IP) للخادم في شريط العنوان على متصفح الويب الخاص بك. إذا لم تستطع الوصول إلى الخادم قم بتوصيل الراسبيري باي (Raspberry Pi) مع الراوتر باستخدام سلك ايثرنت، للتأكد من سبب المشكلة إذا استطعت الوصول إلى الخادم فان المشكلة من في اعدادات الاتصال قم بمراجعتها

 

اعدادات الأوكتوبرنت (OctoPrint):

OCTOPRINT

بعد تحميل واجهة (OctoPrint) على  متصفحك، سترى معالج إعداد (OctoPrint)

صلاحية التحكم بالدخول (Access Control)

استخدم الصلاحية لتعيين اسم مستخدم وكلمة مرور آمنين للتحكم في الوصول.

راسبيري باي RASBERRY PI

التحقق من الاتصال عبر الإنترنت (Online Connectivity Check)

سيؤدي هذا إلى اختبار اتصال خادم DNS الخاص بـ Google بشكل دوري للتأكد من اتصال Pi الخاص بك عبر الإنترنت، قم بتمكينه، واتركه في الفاصل الزمني الافتراضي لمدة 15 دقيقة.

OCTOPRINT

القائمة السوداء للمكونات الإضافية (Plugin Blacklist)

يمنع هذا الإعداد تثبيت المكونات الإضافية غير الموقعة أو التي يحتمل أن تكون ضارة على Pi الخاص بك. قم بتمكين هذا حتى تتمكن لاحقًا من اكتشاف إضافات OctoPrint الآمنة.

Enable-Plugin-Blacklist

قم بتكوين الطابعة الخاصة بك (Configure your printer for OctoPrint)

أدخل تفاصيل الطابعة الخاصة بك.

إذا لم تكن متأكدًا من مواصفات الطابعة قد تجدها في برنامج التقطيع (مثل Cura) أو بإجراء بحث سريع على Google.

اعدادات الطابعة

 




اصنع منبه لرسائل البريد الإلكتروني باستخدام الراسبيري باي

مقدمة

يعتبر المنبه من الوسائل التي يستخدمها الأفراد لتذكيرهم بمواعيدهم المهمة في السابق اعتاد الناس على وضع الساعة الرملية وفي وقتنا الحاضر أصبحت الأجهزة الذكية محلًا لها، في هذا الدرس ستتعلم كيفية صناعة منبه لرسائل البريد الإلكتروني باستخدام الراسبيري باي والثنائي المشع للضوء.

منبه لرسائل البريد الإلكتروني

المواد والأدوات

raspberry-pi-e-mail-notifier-using-leds

 1× راسبيري باي

raspberry-pi-e-mail-notifier-using-leds

 1× سلك (HDMI)

raspberry-pi-e-mail-notifier-using-leds

1× محول تيار (5V-2A)

منبه لرسائل البريد الإلكتروني

 1× كرت ذاكرة

منبه لرسائل البريد الإلكتروني

1× لوحة تجارب – حجم كبير

منبه لرسائل البريد الإلكتروني

حزمة أسلاك توصيل (ذكر – أنثى)

منبه لرسائل البريد الإلكتروني

 1× ثنائي مشع للضوء أحمر (LED)

 

منبه لرسائل البريد الإلكتروني1× ثنائي مشع للضوء أخضر (LED)

raspberry-pi-e-mail-notifier-using-leds

2× مقاومة 220 Ω

توصيل الدائرة

وصل الدائرة الكهربائية كما في الشكل حتى تتمكن من صنع منبه لرسائل البريد الإلكتروني.

للمزيد حول توصيل الراسبيري باي مع الثنائي المشع للضوء يمكنك الرجوع للدرس نظام التحكم ومراقبة الإضاءه عن بعد

منبه لرسائل البريد الإلكتروني

تهيئة الراسبيري باي

أولا، سوف تحتاج إلى تثبيت نظام الراسبيان على الراسبيري باي إذا لم تكن قد فعلت ذلك قم بالإطلاع على  الدرس الأول نظام تشغيل الراسبيري باي

وبعد تثبيت النظام، يمكنك تهيئة النظام من خلال الرجوع  للدرس الثاني تهيئة نظام التشغيل

افتح الشاشة السوداء LXterminal للبدء باستخدام الراسبيري باي.

raspberry-pi-e-mail-notifier-using-leds

للبدء، قم بإستخدام الـ Termial  لتحديث الراسبيري باي إلى أحدث إصدار.

sudo apt-get update
sudo apt-get upgrade

ثم أعد تشغيل الراسبيري باي.

reboot

حمّل البايثون على الراسبيري باي.

sudo apt install python3 idle3

بعد ذلك حمّل مكتبة adafruitblinka.

sudo pip3 install adafruit-blinka

حمّل آخر مكتبة imapclient.

sudo pip3 install imapclient

الكود البرمجي

ستشاهد في قائمة Programming وجود برنامج جديد وهو Python 3 (IDLE) انقر عليه.

التحكم بالمصابيح

 من قائمة File اختر  New File.

انسخ الكود لنظام منبه لرسائل البريد الإلكتروني والصقه بالملف الفارغ لكن هناك أمور مهمة عليك العمل بها قبل رفع الكود البرنامجي إلى الراسبيري باي.

import time
import board
from imapclient import IMAPClient
from digitalio import DigitalInOut, Direction HOSTNAME = 'imap.gmail.com' MAILBOX = 'Inbox' MAIL_CHECK_FREQ = 10 # check mail every 10 seconds # The following three variables must be customized for this # script to work USERNAME = 'Your Email' PASSWORD = 'Your Passsword' NEWMAIL_OFFSET = 0 # setup Pi pins as output for LEDs green_led = DigitalInOut(board.D18) red_led = DigitalInOut(board.D23) green_led.direction = Direction.OUTPUT red_led.direction = Direction.OUTPUT def mail_check(): # login to mailserver server = IMAPClient(HOSTNAME, use_uid=True, ssl=True) server.login(USERNAME, PASSWORD) # select our MAILBOX and looked for unread messages unseen = server.folder_status(MAILBOX, ['UNSEEN']) # number of unread messages # print to console to determine NEWMAIL_OFFSET newmail_count = (unseen[b'UNSEEN']) print('%d unseen messages' % newmail_count) if newmail_count > NEWMAIL_OFFSET: green_led.value = True red_led.value = False else: green_led.value = False red_led.value = True time.sleep(MAIL_CHECK_FREQ) while True: mail_check()
شرح الكود البرمجي

هنا نستعدي المكتبات الضرورية لنظام منبه لرسائل البريد الإلكتروني مثل time و board و imapclient و DigitalInOut, Direction.

import time
import board
from imapclient import IMAPClient
from digitalio import DigitalInOut, Direction

في HOSTNAME يتم تعريف اسم المستضيف جميل Gmail.

وفي MAILBOX يتم توضيح أي المجلدات التي سيتم فحصها هنا سنستخدم المجلد Inbox.

HOSTNAME = 'imap.gmail.com'
MAILBOX = 'Inbox'

المتغير NEWMAIL_OFFSET يحمل القيمة 0 وستستخدم هذه القيمة فيما بعد لمقارنة عدد رسائل البريد الالكتروني.

NEWMAIL_OFFSET = 0

في المتغير MAIL_CHECK_FREQ يتم تعيين المدة الزمنية التي سيتم بها فحص مجلد Inbox هنا سيتم فحصه كل ثانية للتأكد من وجود رسائل جديدة أم لا.

MAIL_CHECK_FREQ = 1 # check mail every 1 second

في المتغير USERNAME ضع الايميل الخاص بك.

وفي المتغير PASSWORD ضع كلمة السر.

USERNAME = 'Your Email'
PASSWORD = 'Your Passsword'

في المتغير green_led يتم تعريف المدخل المستخدم لربط الثنائي المشع للضوء الأخضر وهو GPIO 18.

 وفي المتغير red_led يتم تعريف المدخل المستخدم لربط الثنائي المشع للضوء الأحمر وهو GPIO 23.

green_led = DigitalInOut(board.D18)
red_led = DigitalInOut(board.D23)

في الدالة def mail_check سيتم أخذ الصلاحية لتسجيل الدخول للبريد الالكتروني بناء على البيانات الموجودة في المتغيرين USERNAME  و PASSWORD.

def mail_check():
# login to mailserver
server = IMAPClient(HOSTNAME, use_uid=True, ssl=True)
server.login(USERNAME, PASSWORD)

في المتغير unseen يتم فحص مجلد Inbox.

unseen = server.folder_status(MAILBOX, ['UNSEEN'])

في المتغير newmail_count يتم حساب عدد الرسائل التي لم تقرأ بعد.

سينطبع على الشاشة unseen messages وبجانبها عدد الرسائل التي لم تقرأ وسيتم تحديث المتغير كل ثانية.

newmail_count = (unseen[b'UNSEEN'])
print('%d unseen messages' % newmail_count)

raspberry-pi-e-mail-notifier-using-leds

إذا كان عدد الرسائل المرسلة المخزنة في NEWMAIL_OFFSET أكبر من القيمة المعينة في المتغير NEWMAIL_OFFSET سيضيء الثنائي المشع للضوء الأخضر ليفيد الأفراد بوجود رسائل جديدة.

وإذا كان أقل سيضيء الثنائي المشع للضوء الأحمر وهكذا يستمر النظام.

if newmail_count > NEWMAIL_OFFSET:
green_led.value = True
red_led.value = False
else:
green_led.value = False
red_led.value = True

time.sleep(MAIL_CHECK_FREQ)

يمكنك رفع الكود البرمجي واختبار صحة الخطوات.

لا تنس فصل وحدة مزود الطاقة بعد الانتهاء من استخدام نظام منبه لرسائل البريد الإلكتروني.

 




سيارة تفادي الحواجز باستخدام اللتل بتس littlebits

المقدمة

يمكن أن تصنع سيارة تتفادى الاصطدام بالحواجز باستخدام قطع اللتل بتس وبرمجتها ، بحيث تستطيع السيارة تغير مسارها اذا تحسس حساس القرب وجود حاجز امامه

سيارة ذكية

المواد و الأدوات

متوفرة الأدوات لعمل السيارة الذكية في مجموعة البرمجة سفيرو ليتل بيتس و مجموعة اللتل بتس لتعلم التكنولوجيا:

littlebits-hello-world

1× سلك (USB)

لتيل بتس

1× وحدة برمجة

لتيل بتس

1× ناقل الطاقة

ناقل طاقة

1X وصلة

لتيل بتس

1× ناقل التعليمات البرمجية

لتيل بتس

1× بطارية

 

سيارة ذكية

1× محرك تيار مستمر

حساس الاقتراب

1X حساس الاقتراب

العجلة الكروية لـ العربة الجوالة باستخدام ليتل بيتس

1X عجلة كروية

لوحة التوصيل

1Xلوحة التثبيت

توصيل الدائرة

يمكن أن توصل قطع ليتل بيتس  بسهولة و بدون لحام لبناء الدائرة بالخطوات التالية

وصل وحدة البرمجة مع  ناقل الطاقة من جهة منافذ المدخلات ثم وصلها مع البطارية

محرك متصل بـ OUT 2 من وحدة البرمجة ويجب وضعه بالجانب الأيسر من السيارة. والمحرك الثاني متصل بـ OUT 3 من وحدة البرمجة ويجب وضعه بالجانب الأيمن من السيارة.

سيارة ذكية

وصل حساس الاقتراب مع وحدة البرمجة من جهة منافذ المدخلات

سيارة ذكية

الكود البرمجي

إذا لم يكن متوفر لديك برنامج littlebits code kit قم بتنزيله بالخطوات الموجودة بدرس  (الطباعة على مصفوفة الإضاءة باستخدام ليتل بتس (LittleBits))

افتح مشروع جديد بالنقر على open a blank canvas في واجة البرنامج لبدء برمجة السيارة الذكية

الكود البرمجي

وصل ناقل التعليمات البرمجية مع جهاز الحاسوب

 اضغط على المفتاح الموجود في وحدة الكود:

littlebits-hello-world

قم بتوصيل وحدة البرمجة من اللتيل بتس، بالنقر على connect to your littlebits

اضغط على (Upload) حتى تقوم برفع المقطع البرمجي

شرح المقطع البرمجي

المقطع البرمجي لتحريك اليارة

نتحكم بالمحرك الأول عن طريق ارسال إشارة 100٪، فإنه يتحرك للأمام بأقصى سرعته. عندما نرسلها إشارة 53٪، يتوقف عن الحركة، وعندما نرسلها إشارة 0٪، يتحرك للخلف.

أما المحرك الثاني عن طريق ارسال إشارة 0٪، فإنه يتحرك للأمام بأقصى سرعته. عندما نرسلها إشارة 53٪، يتوقف عن الحركة، وعندما نرسلها إشارة 100٪، يتحرك للخلف. 

 هذه الدالة تتحرك السيارة للأمام لذلك نرسل اشارة 100% للمحرك الأول واشارة 0% للمحرك الثاني

الكود البرمجي

دالة التحرك للخلف و التي تجعل السيارة تتحرك للخلف ، ترسل اشارة 0% للمحرك الأول و اشارة 100% للمحرك الثاني

السيارة الذكية مقطع برمجي

دالة لتوقف السيارة ترسل اشارة 53% للمحرك الأول و اشارة 53% للمحرك الثاني

المقطع البرمجي

 

دالة لدوران السيارة إلى اليمين ترسل اشارة 100% للمحرك الأول و اشارة 53% للمحرك الثاني

الكود البرمجي

دالة لدروان السيارة إلى اليسار ترسل اشارة 53% للمحرك الأول و اشارة 0% للمحرك الثاني

الكود البرمجي




تمثيل المسافة باستخدام الاردوينو وواجهة المستخدم الرسومية

مقدمة

تستخدم واجهة المستخدم الرسومية (GUI) في مجالات كثيرة منها الطب لتمثيل تخطيط قلب المريض أو في الرياضيات لتمثيل الإحصائياتت والبيانات وغيرها من المجالات في هذا الدرس ستتعلم كيفية تمثيل المسافة باستخدام الاردوينو وواجهة المستخدم الرسومية.

تمثيل المسافة

المواد والأدوات

تمثيل المسافة

1× اردوينو اونو

تمثيل المسافة

1× سلك الاردوينو

arduino-python-gui-representing-distance

حزمة أسلاك توصيل (ذكر – أنثى)

arduino-python-gui-representing-distance

حساس المسافة (HC-SR04)

توصيل الدائرة

للمزيد حول حساس الموجات فوق الصوتية يمكنك الرجوع للدرس التالي حساب المسافة بإستخدام حساس الموجات فوق صوتية

arduino-python-gui-representing-distance

الكود البرمجي للتحقق من قراءة المدخلات

في البداية سنقوم برفع كود برمجي لمحاكاة مشروع تمثيل المسافة باستخدام الاردوينو وواجهة المستخدم الرسومية والتحقق من أن الحساس يعطي قراءات صحيحة، ويتم طباعة الأوامر على شاشة الاتصال التسلسلي.

ارفع الكود التالي إلى لوحة الاردوينو عن طريق (Arduino DE) وافتح شاشة الاتصال التسلسلي.

#define Trigger 2
#define Echo 3
int timetaken, dist;
int sendv;

void setup() {
 Serial.begin (9600);
  pinMode(Trigger, OUTPUT);
  pinMode(Echo, INPUT);
}
void loop() {
  timetaken=dist=0; //initialize the variable to zero before calculation

 //request the US to send a wave
  digitalWrite(Trigger, HIGH);
  digitalWrite(Trigger, LOW);

  timetaken = pulseIn(Echo, HIGH); //calculate the time taken for the wave to return
  dist = (timetaken/2) / 2.91; //formulae to calculate the distance using time taken
  if (dist <= 200 && dist > 0)//send the value to python only if it ranhes from 0-20 cm
  sendv = dist;

 Serial.println(sendv);
 delay(200);

}

شرح الكود البرمجي

هذه الأسطر توضح منافذ الاردوينو التي ستستخدمها لربط منافذ حساس الموجات فوق الصوتية Trigger مع المنفذ الرقمي 2 و Echo مع المنفذ الرقمي 3.

#define Trigger 2
#define Echo 3

هنا عرّفنا المتغير timetaken ويقوم بحساب الوقت اللازم لرجوع الموجه لحساس الموجات فوق البنفسجية والمتغير dist يقوم بحساب المسافة وآخر متغير هو sendv يقوم بإرسال القيمة للبايثون.

int timetaken, dist;
int sendv;

في الدالة ()setup ستتم قراءة البيانات بواسطة حساس الموجات فوق الصوتية منفذ Trigger للمدخلات ومنفذ Echo للمخرجات وستنطبع القراءة على شاشة الاتصال التسلسلي.

void setup() 
{
 Serial.begin (9600);
  pinMode(Trigger, OUTPUT);
  pinMode(Echo, INPUT);
}

في الدالة ()loop ستكون القيمة الافتراضية صفر لمتغير المسافة ومتغير الوقت اللازم. (ما لم يقوم المستخدم بتنفيذ إجراء على حساس الموجات فوق الصوتية)

void loop() {
  timetaken=dist=0; //initialize the variable to zero before calculation

بعد ذلك سيتم تحديث البيانات المقروءة من حساس الموجات فوق الصوتية عن طريق المتغير Trigger.

digitalWrite(Trigger, HIGH);
  digitalWrite(Trigger, LOW);

المتغير timetaken سيقوم بحساب الوقت اللازم لرجوع الموجه المأخوذة من الحساس عن طريق المتغير Echo.

timetaken = pulseIn(Echo, HIGH); //calculate the time taken for the wave to return

المتغير dist سيقوم بتحديث المسافة المقروءة من حساس الموجات فوق الصوتية بالاعتماد على متغير timetaken.

  dist = (timetaken/2) / 2.91; //formulae to calculate the distance using time taken

إذا كانت المسافة المقروءة أصغر من أو تساوي 200 وأكبر من 0 سيتم إرسال القيمة للبايثون. (أي بين 0-20 سم)

  if (dist <= 200 && dist > 0)//send the value to python only if it ranhes from 0-20 cm

أخيرًا ستتم طباعة المسافة على شاشة الاتصال التسلسلي.

 Serial.println(sendv);

تنصيب (python) و (Vpython)

1- تنصيب (Python IDLE)

في البداية عليك تنصيب برنامج البايثون بنسخته القديمة عليك تحميل الإصدار القديم؛ لأن برنامج  Vpython لا يدعم الإصدارات الجديدة من البايثون.

 انقر على الرابط التالي Python 2.7.0 وثبت البرنامج على جهاز الحاسوب.

حمّل نسخة 32 بت دائمًا مهما كان نظام التشغيل.

arduino-python-gui-representing-distance

افتح ملف exe الذي تم تنزيله واتبع التعليمات لا تقم بتغيير المسار الذي يتم فيه تثبيت Python.

سيكون المسار C:\Python27 بشكل افتراضي اتركه كما هو عليه.

arduino-python-gui-representing-distance

2- ضبط إعدادات لوحة الأوامر

بعد تنصيب البايثون على  جهازك، علينا اجراء التعديلات ليتم السماح بتنفيذ أوامره في شاشة الأوامر Command Prompt.

علينا اضافة مترجم اوامر البايثون إلى امتدادات الأوامر – PATH environment variable.
عليك الذهاب للوحة التحكم بويندوز واتباع المسار التالي:
Control Panel\System and Security\System
اختر من القائمة Advanced system setting:

arduino-python-gui-representing-distance

انقر على Environment variable:

arduino-python-gui-representing-distance

انقر على Path من قائمة System Variables.

arduino-python-gui-representing-distance

انقر على New وأضف المسار التالي (أو المسار الذي قمت بتحميل البرنامج عليه):

C:\Python27

تمثيل المسافة

بعد اتمامك للخطوات سيكتمل تنصيب البرنامج، يمكنك التحقق من وجوده وذلك بالبحث عنه مع قائمة البرامج Python IDLE.

3- تنصيب (Pyserial)

بعد ذلك علينا تنصيب Pyserial بنسخته القديمة انقر على الرابط التالي وحمله على حاسوبك Pyserial 2.7

تمثيل المسافة

بعد تحميله اضغط على أيقونة البرنامج؛ لاستكمال اجراءات التثبيت.

اختر المسار الذي قمت بتحميل برنامج البايثون عليه بعد ذلك اضغط على next.

تمثيل المسافة

4- تنصيب (Vpython)

بعد ذلك حمّل VPython إصدار 32 بت بنفس مسار برنامج البايثون.

arduino-python-gui-representing-distance

تأكد من تحميل الحزمة الكاملة Full installation.

تمثيل المسافة

بعد اكتمال التحميل يمكنك أن تجد نسخة من البرنامج على سطح المكتب أو ابحث عنه في مربع البحث.

افتح VIDLE for VPython.

اتبع المسار التالي حتى تتمكن من اختبار صحة تحميلك للبرنامج:

File ->Open ->Bounce

ثم

Run -> Run Module

اذا ظهر لك التمثيل الثلاثي الأبعاد التالي فتنصيبك للبرنامج صحيح يمكنك الذهاب لخطوة الكود البرمجي.

تمثيل المسافة

الكود البرمجي

افتح برنامج VIDLE for VPython والصق الكود البرمجي التالي وارفعه على لوحة الاردوينو عن طريق النقر على:

Run -> Run Module

from visual import *
import serial #Serial imported for Serial communication
import time #Required to use delay functions

ArduinoSerial = serial.Serial('com18',9600) #Create Serial port object called arduinoSerialData
time.sleep(2) #wait for 2 secounds for the communication to get established

obj = box(pos=(-5,0,0), size=(0.1,4,4), color=color.white)
wallL = box(pos=(-1,0,0), size=(0.2,12,12), color=color.cyan)
text(text='US sensor', axis=(0,1,0) , pos=(-2,-6,0), depth=-0.3, color=color.cyan)
t = 0
while 1:
rate(100)
t = int (ArduinoSerial.readline()) #read the serial data and print it as line
t= t* 0.05
obj.pos.x = t
print(t)

شرح الكود البرمجي

افتح صفحة جديدة في VIDLE for VPython وقم باستدعاء المكتبات المطلوبة visual تساعدك في انشاء نماذج ثلاثية الأبعاد, serial python لقرءة القيم من لوحة الاردوينو عن طريق المنفذ التسلسلي و time تساعدك في استخدام دوال معينة مثل delay.

from visual import *
import serial #Serial imported for Serial communication
import time #Required to use delay functions

حدد المنفذ COM المستخدم في الاتصال مع الاردوينو.
(هذا سطر قابل للتغيير بناء على نوع المنفذ الذي ستستخدمه في المشروع يمكنك تعيينه عن طريق برنامج اردوينو IDE من قائمة Port).

ArduinoSerial = serial.Serial('com18',9600) #Create Serial port object called arduinoSerialData

بعد ذلك ستتم قراءة المسافة من حساس الموجات فوق البنفسجية وسيتم تمثيل المسافة على الواجهة الرسومية بنماذج ثلاثية الأبعاد على شكل مستطيلين بالألوان والأبعاد المذكورة بالكود البرمجي.

obj = box(pos=(-5,0,0), size=(0.1,4,4), color=color.white)
wallL = box(pos=(-1,0,0), size=(0.2,12,12), color=color.cyan)
text(text='US sensor', axis=(0,1,0) , pos=(-2,-6,0), depth=-0.3, color=color.cyan)
t = 0
while 1:
rate(100)
t = int (ArduinoSerial.readline()) #read the serial data and print it as line
t= t* 0.05
obj.pos.x = t
print(t)

بعد رفع الكود البرمجي سيظهر تمثيل المسافة على شكل مستطيل ثلاثي الأبعاد سماوي ثابت ومستطيل ثلاثي الأبعاد متحرك رمادي.

سيتحرك المستطيل الرمادي بناء على المسافة التي يقرأها من حساس الموجات فوق البنفسجية.

arduino-python-gui-representing-distance




اصنع سلة ذكية متعددة الأغراض باستخدام الاردوينو

مقدمة

أصبحت التقنيات الذكية لا تخلو من أي منزل فوظائفها المتعددة تساعدنا على انجاز مهام مختلفة في وقت واحد، في هذا الدرس ستتعلم صنع سلة ذكية باستخدام الاردوينو وحساس المسافة ومحرك السيرفو تنفتح بمجرد الاقتراب منها وبدون لمسها ويمكن استخدامها في العديد من الأماكن في المنزل.

سلة ذكية

المواد والأدوات

arduino-smart-basket

1× اردوينو اونو

سلة ذكية

لوحة تجارب حجم صغير

arduino-smart-basket

1× سلك الاردوينو

سلة ذكية

حزمة أسلاك توصيل (ذكر – أنثى)

arduino-smoke-gas-sensor

 حزمة أسلاك توصيل (ذكر- ذكر)

سلة ذكية

حساس المسافة (HC-SR04)

سلة ذكية

2× محرك سيرفو (TowerPro SG90 micro servo)

arduino-smart-basket

1× شريط لاصق ذو وجهين

سلة ذكية

1× قالب كرتوني أو فليني لإعداد هيكل السلة

(اختياري)

توصيل الدائرة

 للمزيد حول محرك السيرفو يمكنك الرجوع للدرس التالي محرك السيرفو ، لمعرفة كيفية تنزيل المكتبات يمكنك الرجوع إلى درس التالي.

وللمزيد حول حساس الموجات الفوق صوتية يمكنك الرجوع للدرس التالي حساس الموجات فوق الصوتية.

arduino-smart-basket

يمكنك اختيار هيكل وحجم السلة المناسب لك.

بعد ذلك ثبت الدائرة على هيكل السلة باستخدام اللاصق ذو وجهين.

الكود البرمجي

عليك تنصيب مكتبة <NewPing.h> من الرابط التالي مكتبة NewPing.

بعد ذلك ارفع الكود البرمجي على لوحة الاردوينو باستخدام برنامج اردوينو IDE لتستطيع التحكم في السلة الذكية.

#include <Wire.h>
#include <NewPing.h>
#include <Servo.h>

Servo myservo1;
Servo myservo2;

#define TRIGGER_PIN_1 7
#define ECHO_PIN_1 6
#define MAX_DISTANCE 400

NewPing sonar1(TRIGGER_PIN_1,ECHO_PIN_1,MAX_DISTANCE);

float distance1;
float duration1;

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
myservo1.attach(11); // Servo pin
myservo2.attach(10); // Servo pin
}
void loop() {
// put your main code here, to run repeatedly:
duration1=sonar1.ping();
distance1=(duration1 / 2)*0.0343; Serial.println(distance1);
if(distance1 < 35){ // set the minimum distance here
myservo1.write(10);
myservo2.write(100);
delay(600);}
else{ myservo1.write(100); myservo2.write(10); } }

شرح الكود البرمجي

هذه الأسطر توضح المكتبات المستخدمة مكتبة <Wire.h> للتواصل بين الاردوينو وحساس الموجات فوق الصوتية ومكتبة <Servo.h> الخاصة بمحرك السيرفو وأخيرًا مكتبة <NewPing.h> الخاصة بحساس الموجات فوق الصوتية.

#include <Wire.h>
#include <NewPing.h>
#include <Servo.h>

هنا يتم تعريف المغيرات الخاصة بكلا محركي السيرفو الأول myservo1 والسيرفو الثاني myservo2.

Servo myservo1;
Servo myservo2;

هذه الأسطر توضح منافذ الاردوينو المستخدمة لربط حساس الموجات فوق الصوتية.

منفذ TRIGGER مع المنفذ الرقمي 7.

ECHO مع المنفذ الرقمي 6.

#define TRIGGER_PIN_1 7
#define ECHO_PIN_1 6

المتغير MAX_DISTANCE يحمل أقصى مسافة سيكتشفها حساس المسافة (يمكنك تحرير المسافة على النحو الذي تريده).

#define MAX_DISTANCE 400

هنا يتم ربط منافذ الإدخال والإخراج لحساس الموجات الصوتية مع المسافة التي تم تعيينها مسبقًا؛ حتى يتفاعل الاردوينو مع تلك المسافة.

NewPing sonar1(TRIGGER_PIN_1,ECHO_PIN_1,MAX_DISTANCE);

في الدالة ()setup يتم تعريف منافذ الاردوينو المستخدمة لربط كلا محركي السيرفو.

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
myservo1.attach(11); // Servo pin
myservo2.attach(10); // Servo pin
}

في الدالة ()loop يتم قراءة المسافة بيننا وبين حساس الموجات فوق الصوتية إذا كانت أقل من 35 سيعمل كلا محركي السيرفو وتنفتح السلة الذكية وتنغلق من تلقاء نفسها بدون لمسها.

void loop() {
// put your main code here, to run repeatedly:
duration1=sonar1.ping();
distance1=(duration1 / 2)*0.0343;
Serial.println(distance1);
if(distance1 < 35){ // set the minimum distance here
myservo1.write(10);
myservo2.write(100);
delay(600);}
else{
myservo1.write(100);
myservo2.write(10);
}
}

 




ذراع روبوت باستخدام ليتل بيتس (LittleBits)

مقدمة

لدى الروبوتات قدرة هائلة على العمل لساعات طويلة وبصورة مستمرة على خلاف العمال الذين قد يحتاجون لساعات راحة أو اجازات اضطرارية، ذراع الروبوت تعتبر قوة يستند عليها؛ لإنجاز أعماله ومهامه، ستتعلم في هذا الدرس كيفية تجميع ذراع الروبوت باستخدام ليتل بيتس (LittleBits).

ذراع الروبوت ليتل بيتس

المواد والأدوات من ليتل بيتس

حتى تتمكن من تجميع ذراع الروبوت تحتاج من مجموعة مستكشف الفضاء ليتل بيتس (little bits Space Rover Inventor Kit):

ذراع الروبوت

 1×  قالب كرتوني رقم (4)

littlebits-robot-arm

 1×  قالب كرتوني رقم (1)

littlebits-robot-arm

 1×  قالب كرتوني رقم (2)

littlebits-robot-arm

 1×  قالب كرتون رقم (5) – لوحة الطاقة الشمسية

ذراع الروبوت ليتل بيتس

 1× قالب كرتون رقم (3)

littlebits-robot-arm

 1×  مركز التحكم

littlebits-robot-arm

 1×  محور

littlebits-robot-arm

 1× وصلة محور

littlebits-robot-arm

 1×  ذراع تحكم

littlebits-robot-arm ذراع الربوت

 1×  محرك السيرڤو

littlebits-robot-arm ذراع الربوت

 2×  محرك تيار مستمر

littlebits-robot-arm

 1×  عجلة كروية

littlebits-robot-arm

 2×  عجلات

littlebits-robot-arm

 1×  حامل البطارية

littlebits-robot-arm

 1×  سلك البطارية

littlebits-robot-arm

 1×  بطارية

littlebits-robot-arm

 1× منفذ الطاقة

ذراع الروبوت ليتل بيتس

1× ربطات قابلة للإلتواء

(اختياري)

توصيل الدائرة

تحتوي مجموعة ليتل بيتس على بطارية ومنفذ الطاقة اللذان يعتبران مسؤولان عن تزويد دائرتك بالطاقة اللازمة لتشغيلها.

ادخل البطارية في حامل البطارية، ثم صل سلك البطارية مع البطارية.

littlebits-robot-arm ذراع الروبوت

اربط سلك البطارية مع منفذ الطاقة.

littlebits-robot-arm ذراع الربوت

وصل السلك مع منفذ الطاقة، وفي الطرف الآخر اضف مركز التحكم.

يعمل مركز التحكم كالعقل بالنسبة لمجموعة مستكشف الفضاء (Little bits Space Rover Inventor Kit) يمكن أن يتصل بأجهزتنا المحمولة من خلال تطبيق Space Rover Inventor Kit  بعد إقرانه يتيح لنا  التحكم في دائرتنا من خلال الجهاز الذكي.

يمكن أيضًا أن يعمل كمكبر صوت لتشغيل المؤثرات الصوتية.

littlebits-robot-arm

محرك التيار المستمر يقوم بتدوير المحور حسب القيمة التي يتلقاها، كلما زادت القيمة زادت سرعة دوران المحرك.

littlebits-robot-arm

تجنب تدوير المحرك بيدك؛ فذلك قد يؤدي إلى تلفه.

littlebits-robot-arm ذراع الربوت

وصل محرك التيار المستمر الأول مع المخرج الأول، ومحرك التيار المستمر الثاني مع المخرج الثالث في مركز التحكم.

littlebits-robot-arm

محرك

يمكن من خلال وحدة التحكم بالمحرك تحديد اتجاه الدوران للمحرك:

ccw عكس عقارب الساعة

Cw مع عقارب الساعة

Var متغير يمكن أن تكون مع أو عكس عقارب الساعة

حرك المفتاح في كلا محركين التيار المستمر لوضع var في المنتصف.

المركبة الفضائية ليتل بيتس

اضف محرك السيرڤو في المخرج الثاني لمركز التحكم.

محرك السيرڤو يدور حسب الزوايا التي يتم إدخالها له.

littlebits-robot-arm ذراع الربوت

شغل المفتاح الموجود على محرك السيرڤو.

littlebits-robot-arm

تجميع مكونات ذراع الروبوت

 اطو الخطوط المتصلة في القالب الكرتوني (4) ثم فك الطي، كرر ذلك مع جميع الخطوط المتصلة؛ حتى تصبح مرنة أثناء عملية التجميع.

littlebits-space-hammer

طبق الأوجه التي لها نفس الرقم (1) مع (1) كرر ذلك مع كل الأوجه في القالب الكرتوني، واغلقها بإحكام.

littlebits-space-hammer

littlebits-space-hammer

littlebits-space-hammer

اطو الخطوط المتقطعة في القالب الكرتوني (1) ثم فك الطي، كرر ذلك مع جميع الخطوط المتقطعة؛ حتى تصبح مرنة أثناء عملية التجميع.

littlebits-space-hammer

اطو الخطوط المتصلة في القالب الكرتوني (1) ثم فك الطي، كرر ذلك مع جميع الخطوط المتصلة؛ حتى تصبح مرنة أثناء عملية التجميع.

littlebits-space-hammer مطرقة الفضاء ليتل بيتس

طبق الأوجه التي لها نفس الرقم (1) مع (1)، كرر ذلك مع كل الأوجه في القالب الكرتوني، واغلقها بإحكام.

littlebits-space-hammer

littlebits-space-hammer

littlebits-space-hammer

littlebits-space-hammer

littlebits-space-hammer

littlebits-space-hammer

اطو الخطوط المتقطعة في القالب الكرتوني (5) ثم فك الطي، كرر ذلك مع جميع الخطوط المتقطعة؛ حتى تصبح مرنة أثناء عملية التجميع.

littlebits-space-hammer

اطو الخطوط المتصلة في القالب الكرتوني (5) ثم فك الطي، كرر ذلك  مع جميع الخطوط المتصلة؛ حتى تصبح مرنة أثناء عملية التجميع.

littlebits-space-hammer

اطو الخطوط المتصلة في القالب الكرتوني (3) ثم فك الطي، كرر ذلك مع جميع الخطوط المتصلة؛ حتى تصبح مرنة أثناء عملية التجميع.

ذراع الروبوت ليتل بيتس

طبق الوجه رقم (1) مع (1)، وادخل وصلة التثبيت (2) في المنفذ المقابل (2).

ذراع الروبوت ليتل بيتس

ادخل ذراع التحكم في القالب الكرتوني (3) الذي يسمى بذراع الروبوت.

ذراع الروبوت ليتل بيتس

اطو الخطوط المتصلة في القالب الكرتوني (2) ثم فك الطي، كرر ذلك مع جميع الخطوط المتصلة؛ حتى تصبح مرنة أثناء عملية التجميع.

littlebits-space-hammer

طبق الأوجه التي لها نفس الرقم (1) مع (1) وهكذا حتى تصل للرقم (7)، ادخل وصلة التثبيت رقم (8) مع المنفذ المقابل (8) حينها ستصل للشكل النهائي الموجود على اليسار.

littlebits-space-hammer littlebits-space-hammer مطرقة الفضاء ليتل بيتس

ادخل وصلة المحور بالمحور.

littlebits-space-hammer

ادخل أحد أطراف المحور أسفل القالب الكرتوني (2) الذي يسمى رأس العجلة.

littlebits-space-hammer مطرقة الفضاء ليتل بيتس

تثبيث مكونات ذراع الروبوت:

ثبت اللوحة في هيكل العربة.

littlebits-space-hammer

ثبت العجلة الكروية في الفتحة السفلية لهيكل العربة، كما هو ظاهر.

littlebits-space-hammer

ثبت محركا التيار المستمر في الفتحات السفلية لهيكل عربة الفضاء، كما هو ظاهر.

littlebits-rover-body

ثبت مركز التحكم، منفذ الطاقة والمتحكم لكلا محركا التيار المستمر على اللوحة،  كما هو ظاهر.

littlebits-cargo-carrier

ثبت العجلتين على محركا التيار المستمر.

littlebits-rover-body مطرقة الفضاء ليتل بيتس

ثبت وصلة المحور على الهيكل.

خطوة اختيارية: استخدم ربطات قابلة للإلتواء؛ لتجعلها أكثر ثباتًا.

ذراع الروبوت ليتل بيتس

ثبت محرك السيرفو في الفتحة (D)، موجودة على احدى جوانب القالب الكرتوني (2).

ذراع الروبوت ليتل بيتس

خطوة اختيارية: استخدم ربطات قابلة للإلتواء؛ لتثبيت محرك السيرڤو في مكانه.

ذراع الروبوت ليتل بيتس

ثبت ذراع الروبوت على محرك السيرڤو.

ذراع الروبوت ليتل بيتس

ثبت وصلات التثبيت الموجودة على لوحة الطاقة الشمسية في المنافذ الموجودة بالقالب الكرتوني (4).

littlebits-rover-body

ثبت لوحة الطاقة الشمسية على اللوحة.

littlebits-space-hammer مطرقة الفضاء ليتل بيتس

بعد تجميع كل مكونات ليتل بيتس افحص مجددًا تركيب ذراع الروبوت لترى انها متوافقة مع الصور.

تأكد من تشغيل وحدة مزود الطاقة.

وتأكد أن العربة تسير بالشكل الصحيح وذراع الروبوت تتحرك وتتفاعل مع البيئة من حولها.

littlebits-space-hammer مطرقة الفضاء ليتل بيتس

تذكر فصل وحدة مزود الطاقة عند الانتهاء من استخدام النظام.




اصنع فأرة الحاسوب بنفسك باستخدام الاردوينو وعصا التحكم

مقدمة

الفأرة هي وحدة إدخال في جهاز الحاسوب التي يتم استعمالها يدويًا للتأشير والنقر في الواجهة الرسومية وتحتوي الفأرة على زرين وعجلة في المنتصف تعمل كزر وسطي، في هذا الدرس ستتعلم صناعة فأرة الحاسوب بنفسك باستخدام الاردوينو وعصا التحكم.

arduino-joystick-controlled-mouse

المواد والأدوات

فأرة الحاسوب

1× اردوينو اونو

فأرة الحاسوب

1× سلك الاردوينو

فأرة الحاسوب

حزمة أسلاك توصيل (ذكر – أنثى)

فأرة الحاسوب

1×  عصا التحكم

توصيل الدائرة

للمزيد حول عصا التحكم يمكنك الرجوع للدرس التالي استخدام عصا التحكم joystick مع الاردوينو

فأرة الحاسوب

الكود البرمجي

في البداية عليك تنصب برنامج Python 3 يمكنك الرجوع للدرس التالي لمعرفة كيفية تنصيبه تنصيب Python 3.

انقر بالسهم اليمين على Command Prompt واختر من القائمة Run as administrator.

arduino-joystick-controlled-mouse

ادخل على مسار برنامج البايثون.

(هذا السطر قابل للتغيير بناء على موقع برنامج البايثون في جهازك)

cd C:\Program Files (x86)\Python39-32

حدّث Pip من خلال كتابة الأمر التالي.

python -m pip install --upgrade pip

حمّل مكتبة فأرة الحاسوب.

python –m pip install mouse

الكود البرمجي للتحقق من قراءة المدخلات

في البداية سنرفع كود برمجي لمحاكاة المشروع والتحقق من أن عصا التحكم تعطي قراءات صحيحة، ويتم طباعة الأوامر على شاشة الاتصال التسلسلي.

ارفع الكود التالي إلى لوحة الاردوينو عن طريق (IDE) وافتح شاشة الاتصال التسلسلي.

void setup()
{
Serial.begin(9600);
pinMode(9,INPUT); // SW pin
digitalWrite(9,HIGH);
}
int prev_state=0; // previous state of switch
void loop() {
int z=0,xpos=0,ypos=0;
int x=analogRead(A0);
int y=analogRead(A1);
int sensitivity=10; // you can adjust the sensitivity based on your comfort
if(x>=550) // when moved up
xpos=map(x,550,1023,0,sensitivity);
if(x<=450) // when moved down
xpos=map(x,450,0,0,-sensitivity);
if(y>=550) // when moved right
ypos=map(y,550,1023,0,sensitivity);
if(y<=450) // when moved left
ypos=map(y,450,0,0,-sensitivity);
int curr_state=digitalRead(9);
if(curr_state==1 && prev_state==0) // when SW is pressed
z=1;
else
z=0;
if(xpos!=0 or ypos!=0 or z==1) // prints only when the joystick is moved
{
Serial.print(xpos); // print the data and separating by ":"
Serial.print(":");
Serial.print(ypos);
Serial.print(":");
Serial.println(z);
}
prev_state=curr_state; delay(10); // for normal operation
}

شرح الكود البرمجي

في الدالة ()setup تتم قراءة المدخلات من عصا التحكم عن طريق المنفذ الرقمي 9 ثم تتم طباعتها على شاشة الاتصال التسلسلي.

void setup()
{
Serial.begin(9600);
pinMode(9,INPUT); // SW pin
digitalWrite(9,HIGH);
}

في دالة ()void loop يتم تعريف المتغيرات x, y و z.

تكون قيمة المحور z تساوي صفر.

وقيمة المحور x تتم قراءتها من المنفذ التناظري A0.

وقيمة المحور z تتم قراءتها من المنفذ التناظري A1.

 متغير xpos يشير إلى موقع الفأرة على محور x في شاشة الكمبيوتر وقيمته الابتدائية = 0.  

متغير ypos يشير إلى موقع الفأرة على محور y في شاشة الكمبيوتر وقيمته الابتدائية = 0.  

المتغير sensitivity=10 يمثل حساسية فأرة الحاسوب يمكنك تغيير القيمة.

void loop() {
int z=0,xpos=0,ypos=0;
int x=analogRead(A0);
int y=analogRead(A1);
int sensitivity=10; // you can adjust the sensitivity based on your comfort

تمثل قراءة المدخل التناظري  X حركة الفارة على المحور x الحركة بشكل عامودي، إذا كانت قيمة المدخل x أكبر من 550 نقوم بتعيين نطاق قيم المدخل x من 0 إلى 1024 إلى نطاق من 0 إلى القيمة الموجبة ل sensitivity التي تم تحديدها.

وإذا كانت قيمة المدخل x أقل أو تساوي 450 نقوم بتعيين نطاق قيم المدخل x من 0 إلى 1024 إلى نطاق من 0 إلى القيمة السالبة ل sensitivity التي تم تحديدها.

if(x>=550) // when moved up
xpos=map(x,550,1023,0,sensitivity);
if(x<=450) // when moved down
xpos=map(x,450,0,0,-sensitivity);

تمثل قراءة المدخل التناظري y حركة الفارة على المحور y الحركة بشكل أفقي، إذا كانت قيمة المدخل y أكبر من 550 نقوم بتعيين نطاق قيم المدخل y من 0 إلى 1024 إلى نطاق من 0 إلى القيمة الموجبة ل sensitivity التي تم تحديدها.

وإذا كانت قيمة المدخل y أقل أو تساوي 450 نقوم بتعيين نطاق قيم المدخل y من 0 إلى 1024 إلى نطاق من 0 إلى القيمة السالبة ل sensitivity التي تم تحديدها.

if(y>=550) // when moved right
ypos=map(y,550,1023,0,sensitivity);
if(y<=450) // when moved left
ypos=map(y,450,0,0,-sensitivity);

متغير curr_state يمثل قراءة قيمة المدخلات الرقمية من المنفذ رقم 9 إذا كان الزر مضغوط فالقيمة الراجعة 1.

وإذا لم يتم الضغط عليه تكون القيمة صفر أي بحالة سكون.

int curr_state=digitalRead(9);
if(curr_state==1 && prev_state==0) // when SW is pressed
z=1;
else
z=0;

ستتم طباعة القيم على الشاشة الاتصال التسلسلي إذا كان هناك أي تغيّر في قراءات قيم عصا التحكم.

إذا لم يتم تحريك عصا التحكم فلن يتم طباعة أي قيم.

if(xpos!=0 or ypos!=0 or z==1) // prints only when the joystick is moved
{
Serial.print(xpos); // print the data and separating by ":"
Serial.print(":");
Serial.print(ypos);
Serial.print(":");
Serial.println(z);
}

الكود البرمجي (بايثون)

افتح برنامج IDLE (Python 3.9 32-bit) من قائمة File اختر New File والصق الكود البرمجي التالي.

التحكم بالحاسوب بحركات اليد

ارفع الكود البرمجي للوحة الاردوينو من قائمة Run انقر على Run module.

import mouse, sys
import time 
import serial

mouse.FAILSAFE=False
ArduinoSerial=serial.Serial('com3',9600)  #Specify the correct COM port
time.sleep(1)                             #delay of 1 second

while 1:
   data=str(ArduinoSerial.readline().decode('ascii'))   #read the data
   (x,y,z)=data.split(":")           # assigns to x,y and z
   (X,Y)=mouse.get_position()        #read the cursor's current position
   (x,y)=(int(x),int(y))                           #convert to int
   mouse.move(X+x,Y-y)           #move cursor to desired position
   if '1' in z:                        # read the Status of SW
      mouse.click(button="left")    # clicks left button

شرح الكود البرمجي

افتح صفحة جديدة في IDLE Python وقم باستدعاء المكتبات المطلوبة mouse, sys serial python و time.

import mouse, sys
import time 
import serial

حدد المنفذ COM المستخدم في الاتصال مع الاردوينو، لديك وقم بتعديل الأمر في السطر التالي حسب رقم المنفذ.

(يمكنك تعيينه عن طريق برنامج اردوينو IDE من قائمة Port). 

ArduinoSerial=serial.Serial('com3',9600)  #Specify the correct COM port

هنا تتم قراءة القيم من المنافذ التناظرية A0 و A1 وسيتم تحريك فأرة الحاسوب في أماكن مختلفة على الشاشة بناء على هذه القيم.

while 1:
   data=str(ArduinoSerial.readline().decode('ascii'))   #read the data
   (x,y,z)=data.split(":")           # assigns to x,y and z
   (X,Y)=mouse.get_position()        #read the cursor's current position
   (x,y)=(int(x),int(y))                           #convert to int
mouse.move(X+x,Y-y)           #move cursor to desired position

هنا تتم قراءة القيم من المنفذ الرقمي 9 إذا كان الزر مضغوط ستكون القيمة الراجعة 1.

 if '1' in z:                        # read the Status of SW
      mouse.click(button="left")    # clicks left button




لعبة تسديد الكرة بالمرمى باستخدام اللتل بتس littlebits

يمكنك أن تصنع لعبة بسيطة و هي لعبة تسديد الكرة بالمرمى باستخدام ليتل بتس، حيث يقوم اللاعب بتسديد الكرة على الهدف و يتم حساب نقاط للعاب في كل مرة يستطيع التسديد بالشكل الصحيح

تسديد الكرة بالمرمى

الأدوات والمواد المطلوبة

حتى تتمكن من تنفيذ الدرس تحتاج من مجموعة البرمجة سفيرو ليتل بتس (Code kit by sphero little bits):

littlebits-hello-world

1× سلك (USB)

لتيل بتس

1× وحدة برمجة

لتيل بتس

1× ناقل الطاقة

ناقل طاقة

1X وصلة

لتيل بتس

1× ناقل التعليمات البرمجية

لتيل بتس

1× بطارية

مصفوفة اضاءة لتيل بتس

1× مصفوفة الإضاءة

مفتاح

1× مفتاح

لوحة التوصيل

1Xلوحة التثبيت

وحدة البرمجة

littlebits-hello-worldتقوم وحدة البرمجة بنفس عمل الدماغ البشري، يوجد في وحدة البرمجة 3 منافذ مدخلات لتوصيل الحساسات مثل الصوت أو غيره من المدخلات على اليسار وثلاث منافذ مخرجات لتوصيل القطع مثل الضوء أو المحرك على اليمين، تقوم الوحدة بتحليل المدخلات بناء على المقطع البرمجي وتظهر النتائج على المخرجات.

 

littlebits-hello-world

توصيل الدائرة

 

وصل وحدة الطاقة من لتيل بتس مع وحدة البرمجة

توصيل الدائرة

وصل المفتاح مع الوصلة من طرف ومن الطرف الثاني مع وحدة البرمجة باستخدام سلك توصيل

توصيل الدائرة

عدل الوضع في مصفوفة الإضاءة إلى

توصيل الدائرة وصل مصفوفة الإضاءة من لتيل بتس مع وحدة البرمجة

توصيل الدائرة

قم تثبيت الدائرة على لوح التثبيت

توصيل الدائرة ليتل بتس

 

المقطع البرمجي

اذا لم يكن متوفر لديك برنامج littlebits code kit الطباعة على مصفوفة الإضاءة باستخدام ليتل بتس (LittleBits) قم بتنزيله بالخطوات الموجودة بدرس 

افتح مشروع جديد بالنقر على open a blank canvas في واجة البرنامج لتبدء برمجة لعبة تسديد الكرة بالمرمى

من قسم المتغيرات أنشىء متغير جديد باسم “score” الذي يتم تخزين النقاط عند تسديد الكرة بالمرمى فيه

من قسم المتغيرات (variables) اسحب الأمر “set score to ” ووضعه أسفل الأمر السابق “start”و الذي يعني سجل قيمة بدائية للمتغير

لتسجيل القيمة الابتدائية من قسم (Math) اسحب الرقم “0 ” ضعه في الفراغ بعد كلمة “to”

المقطع البرمجي

من قسم (loop) اسحب الأمر “do forever” وضعه أسفل الأمر السابق و الذي يعني كرر المقطع البرمجي باستمرار

كرة المرمى

من قسم ال (logic) اسحب العبارة الشرطية “if “ضعها داخل الأمر “do forever”

مقطع برمجي كرة المرمى

من قسم المدخلات و المخرجات (inputs/ outputs) اسحب”signal from n1 id on ” و ضعها في الفراغ مقابل “if” و التي تعني اذا كان المدخل رقم n1 يعطي اشارة on

المقطع البرمجي

لجعل البرنامج يزيد قيمة المتغير نقاط (score) بقيمة 1 في كل مرة يتم استلام اشارة on من المدخلات، من قسم (math) نسحب “add 1 to score”

المقطع البرمجي لتيل بتس

لطباعة القيمة على المصفوفة الضوئية اسحب من قسم المدخلات و المخرجات (input/output) “send scrolling text to out 1” ثم ضعه أسفل الأمر السابق

من قسم المتغيرات (variables ) نسحب المتغير نقاط “score” ونضعه في بعد كلمة text

المقطع البرمجي لتيل بتس

من قسم (timing) اسحب “wait for in2 to be off” وضعها أسفل الأمر السابق

 

المقطع البرمجي لتيل بتس

وصل ناقل التعليمات البرمجية مع جهاز الحاسوب

 اضغط على المفتاح الموجود في وحدة الكود:

littlebits-hello-world

قم بتوصيل وحدة البرمجة من اللتيل بتس، بالنقر على connect to your littlebits

اضغط على (Upload) حتى تقوم برفع المقطع البرمجي الخاص بمشروع تسديد الكرة بالمرمى.




التحكم بالاضاءة عن طريق الراسبيري باي والتيليجرام

مقدمة

مع تطور الهواتف الذكية والتطبيقات وعالم الإتصال أصبح الآن بإمكانك التحكم في أجهزة المنزل أو العمل من خلال هاتفك، في هذا الدرس ستتعلم كيفية التحكم بالاضاءة عن طريق الراسبيري باي والتيليجرام.

controlling-raspberry-pi-using-telegram

المواد والأدوات

controlling-raspberry-pi-using-telegram

 1× راسبيري باي

controlling-raspberry-pi-using-telegram

 1× سلك (HDMI)

controlling-raspberry-pi-using-telegram

1× محول تيار (5V-2A)

controlling-raspberry-pi-using-telegram

 1× كرت ذاكرة

controlling-raspberry-pi-using-telegram

1× سلك ايثرنت

التحكم بالمصابيح

لوحة تجارب – حجم كبير

التحكم بالمصابيح

حزمة أسلاك توصيل (ذكر – أنثى)

التحكم بالمصابيح

 1× ثنائي مشع للضوء أحمر (LED)

التحكم بالمصابيح

ثنائي مشع للضوء أبيض (LED)

التحكم بالمصابيح

ثنائي مشع للضوء أزرق (LED)

التحكم بالمصابيحثنائي مشع للضوء أخضر (LED)

arduino-smoke-gas-sensor

3× مقاومة 220 Ω

توصيل الدائرة

controlling-raspberry-pi-using-telegram

إنشاء بوت على التيليجرام

عليك بالبداية تنصيب برنامج التيليجرام على هاتفك أو أي جهاز لوحي تفضله Telegram.

بعد تنصيبه سجل اسمك وبياناتك ورقم هاتفك كما هو معتاد.

أنشئ بوت باسم (Geeksvalley) يتم إرسال أوامر التشغيل والاطفاء عليه بالخطوات التالية:

بالبداية تحتاج بوت BotFather الرسمي الخاص بالتيليجرام اكتب في صفحة البحث BotFather.

التحكم بالمصابيح

بعد ذلك اكتب رسالة start/ سيرد عليك برسالة تحتوي على جميع الأوامر التي يستطيع تنفيذها البوت.

التحكم بالمصابيح

لإنشاء بوت جديد أرسل newbot/.

سيرد عليك البوت برسالة تطلب منك تسمية البوت الذي قمت بإنشائه في هذا الدرس تمت تسميته GeeksValley.

سيرد عليك البوت برسالة تطلب منك تحديد اسم المستخدم للبوت وبنهاية اسم المستخدم اكتب bot_.

هنا اسم المستخدم GeeksValley_bot.

سيتم  إرسال رسالة بأنه تم انشاء البوت ويتضمن رابط HTTP API احفظ الرابط ستستخدمه عند كتابة كود المشروع على الراسبيري باي.

التحكم بالمصابيح

تهيئة الراسبيري باي

أولا، سوف تحتاج إلى تثبيت نظام الراسبيان على الراسبيري باي إذا لم تكن قد فعلت ذلك قم بالإطلاع على  الدرس الأول نظام تشغيل الراسبيري باي

وبعد تثبيت النظام، يمكنك تهيئة النظام من خلال الرجوع  للدرس الثاني تهيئة نظام التشغيل

افتح الشاشة السوداء LXterminal للبدء باستخدام الراسبيري باي.

LX نقطة اتصال لاسلكية راسبيري

للبدء، قم بإستخدام الـ Termial  لتحديث الراسبيري باي إلى أحدث إصدار.

sudo apt-get update
sudo apt-get upgrade

ثم أعد تشغيل الراسبيري باي.

reboot

حمّل البايثون على الراسبيري باي.

sudo apt install python3 idle3

حمل أداة Pip.

sudo apt-get install python-pip

بعد ذلك حمّل Telepot حتى تتمكن من تكوين جسر تواصل مع برنامج التيليجرام.

sudo pip install telepot

ستشاهد في قائمة Programming وجود برنامج جديد وهو Python 3 (IDLE) انقر عليه.

التحكم بالمصابيح

 من قائمة File اختر  New File.

انسخ الكود التالي والصقه بالملف الفارغ لكن هناك أمور مهمة عليك العمل بها قبل رفع الكود البرنامجي إلى الراسبيري باي.

import time, datetime
import RPi.GPIO as GPIO
import telepot
from telepot.loop import MessageLoop blue = 26
white = 19
red = 13
green = 6 now = datetime.datetime.now()
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#LED blue
GPIO.setup(blue, GPIO.OUT) GPIO.output(blue, 0) #Off initially
#LED white
GPIO.setup(white, GPIO.OUT)
GPIO.output(white, 0) #Off initially
#LED Red
GPIO.setup(red, GPIO.OUT)
GPIO.output(red, 0) #Off initially
#LED green
GPIO.setup(green, GPIO.OUT) GPIO.output(green, 0) #Off initially def action(msg): chat_id = msg['chat']['id']
command = msg['text'] print ('Received: %s') % command if 'on' in command:
message = "Turned on "
if 'blue' in command:
message = message + "blue " GPIO.output(blue, 1) if 'white' in command:
message = message + "white "
GPIO.output(white, 1)
if 'red' in command:
message = message + "red "
GPIO.output(red, 1)
if 'green' in command:
message = message + "green " GPIO.output(green, 1)
if 'all' in command:
message = message + "all "
GPIO.output(blue, 1)
GPIO.output(white, 1) GPIO.output(red, 1)
GPIO.output(green, 1) message = message + "light(s)"
telegram_bot.sendMessage (chat_id, message) if 'off' in command:
message = "Turned off "
if 'blue' in command:
message = message + "blue"
GPIO.output(blue, 0)
if 'white' in command:
message = message + "white "
GPIO.output(white, 0)
if 'red' in command: message = message + "red "
GPIO.output(red, 0)
if 'green' in command:
message = message + "green "
GPIO.output(green, 0)
if 'all' in command: message = message + "all "
GPIO.output(blue, 0)
GPIO.output(white, 0)
GPIO.output(red, 0)
GPIO.output(green, 0)
message = message + "light(s)"
telegram_bot.sendMessage (chat_id, message) telegram_bot = telepot.Bot('1657513784:AAG2Wl0ji-VGLTqGEKTdKruABD0FbS4Dwbk')
print (telegram_bot.getMe()) MessageLoop(telegram_bot, action).run_as_thread()
print ('Up and Running....')
while 1: time.sleep(10)

شرح الكود البرمجي

هنا نستعدي المكتبات الضرورية للنظام مثل time, datetime و RPi.GPIO  و telepot.

import time, datetime
import RPi.GPIO as GPIO
import telepot
from telepot.loop import MessageLoop

في هذه الأسطر يتم تعريف المدخلات المستخدمة وهي أربعة المصباح الأخضر والأزرق والأبيض والأحمر.

blue = 26
white = 19
red = 13
green = 6

ستكون المصابيح في حالتها الابتدائية بحالة سكون.

now = datetime.datetime.now()
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#LED blue
GPIO.setup(blue, GPIO.OUT)
GPIO.output(blue, 0) #Off initially
#LED white
GPIO.setup(white, GPIO.OUT)
GPIO.output(white, 0) #Off initially
#LED Red
GPIO.setup(red, GPIO.OUT)
GPIO.output(red, 0) #Off initially
#LED green
GPIO.setup(green, GPIO.OUT)
GPIO.output(green, 0) #Off initially

بعد ذلك يستطيع المستخدم التحكم بالاضاءة وذلك بإدخال الأوامر في برنامج التيليجرام.

سيكون أمر تشغيل المصابيح مبتدئيًا بـ Turn on متبوعًا باسم المصباح (blue, red, green or white) .

 إذا كنت ترغب بتشغيل كل المصابيح بنفس الوقت (Turn on all).

والعكس صحيح أيضًا عند إيقاف أحد المصابيح أكتب Turn off متبوعًا باسم المصباح (blue, red, green or white).

 إذا كنت ترغب بإيقاف كل المصابيح بنفس الوقت (Turn off all).

def action(msg):
chat_id = msg['chat']['id']
command = msg['text']
print ('Received: %s') % command
if 'on' in command:
message = "Turned on "
if 'blue' in command:
message = message + "blue "
GPIO.output(blue, 1)
if 'white' in command:
message = message + "white "
GPIO.output(white, 1)
if 'red' in command:
message = message + "red "
GPIO.output(red, 1)
if 'green' in command:
message = message + "green "
GPIO.output(green, 1)
if 'all' in command:
message = message + "all "
GPIO.output(blue, 1)
GPIO.output(white, 1)
GPIO.output(red, 1)
GPIO.output(green, 1)
message = message + "light(s)"
telegram_bot.sendMessage (chat_id, message)
if 'off' in command:
message = "Turned off "
if 'blue' in command:
message = message + "blue"
GPIO.output(blue, 0)
if 'white' in command:
message = message + "white "
GPIO.output(white, 0)
if 'red' in command:
message = message + "red "
GPIO.output(red, 0)
if 'green' in command:
message = message + "green "
GPIO.output(green, 0)
if 'all' in command:
message = message + "all "
GPIO.output(blue, 0)
GPIO.output(yellow, 0)
GPIO.output(red, 0)
GPIO.output(green, 0)
message = message + "light(s)"

هذا السطر مهم وحساس للغاية.

عليك كتابة HTTP API الخاص بالبوت الذي قمت بانشاءه.

telegram_bot = telepot.Bot('HTTP API الصق')

احفظ الملف بالمسار الافتراضي.

controlling-raspberry-pi-using-telegram

بعد ذلك افتح الشاشة السوداء LXterminal.

واكتب الأمر التالي لتنفيذ الكود البرمجي.

python ControllingLED.py

سيكون هناك رسالة مفادها بأن عملية اتصالك صحيحة.

سيبدأ النظام بالعمل مباشرة يمكنك إرسال رسائل من التيليجرام وستلاحظ أنها مطابقة لمخرجات الشاشة السوداء.

التحكم بالمصابيح التحكم بالمصابيح

لا تنسَ فصل مصدر الطاقة بعد الانتهاء من استخدام النظام.




روبوت تتبع الضوء باستخدام ليتل بيتس littlebits

تعتبر الشمس من مصادر الطاقة المتجددة التي نحتاجها في حياتنا لتحويلها إلى طاقة كهربائية، في هذا الدرس سنتعلم كيف يساعدنا الروبوت في البحث عن مصادر الطاقة الضوئية، لعمل روبوت باستخدام اللتل بيتس littlebits  يتتبع مصدر الضوء

 

المواد و الأدوات

حتى تتمكن من تجميع المركبة الفضائية تحتاج من مجموعة مستكشف الفضاء ليتل بيتس (little bits Space Rover Inventor Kit):

قالب كرتونية

1× قالب كرتوني رقم (10)

cartoon-littlebits-rover-body

1× قالب كرتوني رقم (1)

استخدام مركز التحكم لتصنيع العربة الجوالة باستخدام ليتل بيتس

1× مركز التحكم

محرك تيار مستمر لـ العربة الجوالة باستخدام ليتل بيتس

2× محرك تيار مستمر

العجلة الكروية لـ العربة الجوالة باستخدام ليتل بيتس

1× عجلة كروية

المركبة الفضائية

2× عجلات

littlebits-rover-body

1× حامل البطارية

cable-littlebits-rover-body

1× سلك البطارية

استخدام البطارية لتصنيع العربة الجوالة باستخدام ليتل بيتس

1× بطارية

المركبة الفضائية

1× منفذ الطاقة

حساس الضوء

1X حساس الاقتراب

اضاءة

1X إضاءة

توصيل الدائرة

يمكن أن توصل قطع ليتل بيتس  بسهولة و بدون لحام لبناء الدائرة بالخطوات التالية

وصل منفذ الطاقة مع أسلاك التوصيل

تخطي العقبات

وصل السلك الأول مع مركز التحكم

توصيل الدائرة

حساس الضوء يعد من المدخلات، حيث يتحسس وجود الضوء و ينقل البيانات لوحدة التحكم

نوصل السلك الثاني مع حساس الضوء

حساس الضوء

نوصل حساس الضوء مع محرك السيرفو باستخدام سلك توصيل

توصيل الدائرة

أخيرا قم بتوصيل محركا التيار المستمر مع وحدة مركز التحكم

توصيل الدائرة

يمكن من خلال وحدة التحكم بالمحرك تحديد اتجاه الدوران للمحرك:

ccw عكس عقارب الساعة

Cw مع عقارب الساعة

Var متغير يمكن أن تكون مع أو عكس عقارب الساعة

محرك

تجميع مكونات روبوت تتبع الضوء

يتكون جسم الروبوت الذي يتتبع الضوء من جزئين الأول تًثبت عليه جميع مكونات المركبة الفضائية

الجزء الثاني تُثبت عليه حساس الضوء

تجميع هيكل الروبوت

ابدأ خطوات تجميع الجزء الأول كالتالي :

 اطو الخطوط المتقطعة في القالب الكرتوني الموفر في حقيبة ليتل بيتس  (1) ثم فك الطي، كرر ذلك مع جميع الخطوط المتقطعة؛ حتى تصبح مرنة أثناء عملية التجميع.

littlebits-rover-body

اطو الخطوط المتصلة في القالب الكرتوني (1) ثم فك الطي، كرر ذلك مع جميع الخطوط المتصلة؛ حتى تصبح مرنة أثناء عملية التجميع.

littlebits-rover-body

طبق الأوجه التي لها نفس الرقم (1) مع (1) وهكذا حتى تصل إلى آخر رقم بالقالب الكرتوني.

match-littlebits-rover-body

littlebits-rover-body-match-face

المركبة الفضائية ليتل بيتس

littlebits-rover-body

littlebits-rover-body

طي القطع لـ العربة الجوالة باستخدام ليتل بيتس

ليتل بيتس

ابدأ خطوات تجميع الجزء الثاني كالتالي :

 اطو الخطوط المتقطعة إلى الخارج، ثم أعدها حتى تصبح مرنة أثناء عملية التجميع.

 اطو الخطوط المتصلة إلى الداخل ، ثم أعدها حتى تصبح مرنة أثناء عملية التجميع.

روبوت تتبع الضوء

وصل اللسان رقم 1 مع المنفذ المقابل و كرر هذا مع اللسان رقم 2 و3 و4 و5

روبوت تتبع الضوء

يكون الشكل النهائي للجزء بهذا الشكل

الشكل النهائي

نثبت ذراع السيرفو

روبوت تتبع الضوء

ثم نثبت جميع قطع الليتل بيتس بالشكل التالي

روبوت تتبع الضوء