الخميس، 14 سبتمبر 2017

Arduino Door Alarm Using an Ultrasonic Sensor - انذار جرس الباب اتوماتيك بحساس المسافة

Arduino Door Alarm Using an Ultrasonic Sensor

  In this project, we are going to make a door alarm system using the HC-SR04 ultrasonic sensor. The ultrasonic sensor used in this project is used as a distance sensor, it will tell us the distance at which the object is placed. Using this distance value, we will turn the buzzer on or off.

Required Components

Circuit Diagram

The hardware part of this project is very easy to put together. First of all, make the connections for the ultrasonic sensor with the Arduino. The connections for the ultrasonic sensor with the Arduino are as follows
  • Connect VCC on the ultrasonic sensor to the 5V pin on the Arduino.
  • Connect the Trig pin on the ultrasonic sensor to pin 2 on the Arduino.
  • Connect the Echo pin on the ultrasonic sensor to pin 3 on the Arduino.
  • Connect the GND on the ultrasonic sensor to GND on the Arduino.
After that, make the connections for the buzzer and the Arduino. Connect the positive pin on the buzzer with pin 10 on the Arduino and the buzzer’s negative pin with the GND pin on the Arduino.

How Does it Work?

The ultrasonic sensor emits an ultrasonic wave from the trigger which comes back after hitting the object and it is received by the echo. The echo will then tell us the distance traveled in microseconds. To send an ultrasonic wave from the trigger, we will have to set the trigger high for 10us. This will send an 8 cycle sonic burst at 40 kHz which will hit the object and is then received by the echo.
We have got the time in microseconds but we need to calculate the distance. So, we will use the equation below.
S = v * t
We have the value of t and we know that the speed of a sound wave is 340m/s. We have to convert the speed of sound into cm/us to calculate the distance. The speed of sound in cm/us is 0.034cm/us. The equation now will become
S = (0.034 * t)
We will divide this equation by 2 because we only require the distance it takes to hit the object and not the distance it takes to hit the object and come back. So, the final equation will be
S = (0.035 * t)/2
We will get the distance value using the equation above and after that, we will set a value which will help us make the buzzer high or low.

Code

int trigger_pin = 2;

int echo_pin = 3;

int buzzer_pin = 10; 

int time;

int distance; 




void setup ( ) {

        Serial.begin (9600); 

        pinMode (trigger_pin, OUTPUT); 

        pinMode (echo_pin, INPUT);

        pinMode (buzzer_pin, OUTPUT);




}




void loop ( ) {

    digitalWrite (trigger_pin, HIGH);

    delayMicroseconds (10);

    digitalWrite (trigger_pin, LOW);

    time = pulseIn (echo_pin, HIGH);

    distance = (time * 0.034) / 2;

    

  if (distance <= 10) 

        {

        Serial.println (" Door Open ");

        Serial.print (" Distance= ");              

        Serial.println (distance);        

        digitalWrite (buzzer_pin, HIGH);

        delay (500);

        }

  else {

        Serial.println (" Door closed ");

        Serial.print (" Distance= ");              

        Serial.println (distance);        

        digitalWrite (buzzer_pin, LOW);

        delay (500);        

  } 

  }

Code Explanation

First of all, we initialized the trigger pin and echo for the ultrasonic sensor. We have connected the trigger pin to pin 2 on the Arduino and echo pin to pin 3 on the Arduino. Therefore, we initialized these pins in the code. Then we initialized the buzzer pin and after that, we initialized the variable which will help us in calculating the distance.
int trigger_pin = 2;

int echo_pin = 3;

int buzzer_pin = 10; 

int time;

int distance; 

In the setup function, we declare the trigger pin as the output pin because we will send the ultrasonic wave through that pin. We made the echo pin as input pin because we will receive the ultrasonic wave through the echo.
pinMode (trigger_pin, OUTPUT); 

 pinMode (echo_pin, INPUT);

In the loop function, we set the trigger pin high for 10 us to send an ultrasonic wave and then we made the echo pin high to receive the ultrasonic wave. After that, we applied the equation to get the distance value.
digitalWrite (trigger_pin, HIGH);

    delayMicroseconds (10);

    digitalWrite (trigger_pin, LOW);

    time = pulseIn (echo_pin, HIGH);

    distance = (time * 0.034) / 2;

Then we made a condition that if the distance value is less than or equal to 10, then the buzzer will start to beep. If the distance value is greater than 10, then the buzzer will remain quiet.
  if (distance <= 10) 

        {

        Serial.println (" Door Open ");

        Serial.print (" Distance= ");              

        Serial.println (distance);        

        digitalWrite (buzzer_pin, HIGH);

        delay (500);

        }

الأربعاء، 13 سبتمبر 2017

How to Control Servo Motors with an Arduino and Joystick - التحكم فى المواتير عن طريق الاردوينو وذراع بلاى ستيشن

How to Control Servo Motors with an Arduino and Joystick

In this project, we are going to control two servo motors by using a joystick module. When the joystick moves in the horizontal direction, the first servo will move towards right or left. When the joystick is moved in the vertical direction, the second servo will move towards the right or left.


Required Components

The components required for this project are as follows

Circuit Diagram
The hardware part of this project is very easy to make. First, connect the joystick module with the Arduino. The connections for the joystick module and the Arduino are as follows:
  • Connect the VCC on the joystick module with the 5V pin on the Arduino
  • Connect the GND pin on the joystick module with the GND on the Arduino
  • Connect the VER pin on the joystick module with the A0 on the Arduino
  • Connect the HOR pin on the joystick module with the A1 on the Arduino
After that, connect the servo motors with the Arduino. The connections for servo motors with Arduino are as follows:
  • Connect the black wire on both the servo motors with the GND on the Arduino
  • Connect the red wire on both the servo motors with the 5V pin on the Arduino
  • Connect the yellow wire on the first motor with pin 8 on the Arduino
  • Connect the yellow wire on the second motor with pin 9 on the Arduino


How Does it Work?

When the joystick module moves in the horizontal or in the vertical direction, it gives us values from 0 to 1023. So we can apply a condition in the code that if the value is less than 300 or greater than 700, then the servos will move.
When the joystick is moved in the horizontal direction, the first servo will move towards right or left and upon moving the joystick in the vertical direction, the second servo will move towards the right or left.

Arduino Code


#include 
Servo servo1;
Servo servo2;
int x_key = A1;                                               
int y_key = A0;                                               
int x_pos;
int y_pos;
int servo1_pin = 8;
int servo2_pin = 9;  
int initial_position = 90;
int initial_position1 = 90;

void setup ( ) {
Serial.begin (9600) ;
servo1.attach (servo1_pin ) ; 
servo2.attach (servo2_pin ) ; 
servo1.write (initial_position);
servo2.write (initial_position1);
pinMode (x_key, INPUT) ;                     
pinMode (y_key, INPUT) ;                      
}

void loop ( ) {
x_pos = analogRead (x_key) ;  
y_pos = analogRead (y_key) ;                      

if (x_pos < 300){
  if (initial_position < 10) { } else{ initial_position = initial_position - 20; servo1.write ( initial_position ) ; delay (100) ; } } if (x_pos > 700){
  if (initial_position > 180)
  {  
  }  
  else{
  initial_position = initial_position + 20;
  servo1.write ( initial_position ) ;
  delay (100) ;
   }
   }

if (y_pos < 300){
  if (initial_position1 < 10) { } else{ initial_position1 = initial_position1 - 20; servo2.write ( initial_position1 ) ; delay (100) ; } } if (y_pos > 700){
  if (initial_position1 > 180)
  {  
  }        
  else{
  initial_position1 = initial_position1 + 20;
  servo2.write ( initial_position1 ) ;
  delay (100) ;
  }
  }
  }

Code Explanation

First of all, we included the library for the servo motor which will help us with making the code easier. Then, we initialized two variables, one for each of the two servo motors which will help us in using the library functions.
#include 
Servo servo1;
Servo servo2;

Then, we initialized the pins where we have connected the vertical and horizontal pins on the joystick module and also the signal pins on the servos.
int x_key = A1;                                               
int y_key = A0;                                               
int x_pos;
int y_pos;
int servo1_pin = 8;
int servo2_pin = 9;  
int initial_position = 90;
int initial_position1 = 90;

Then we tell the Arduino where we have connected the servo pins and also moved the servo motors at the initial position, which is 90 degrees. After that, we declared both the vertical and horizontal pins on joystick module as the input pins.
servo1.attach (servo1_pin ) ; 
servo2.attach (servo2_pin ) ; 
servo1.write (initial_position);
servo2.write (initial_position1);
pinMode (x_key, INPUT) ;                     
pinMode (y_key, INPUT) ;

In the loop function, we read the values for the horizontal and the vertical position from the joystick module and saved these in the variables. Then we applied a condition that if the value for the horizontal position is less than 300, then the first servo will move towards the right.
x_pos = analogRead (x_key) ;  
y_pos = analogRead (y_key) ;                      
if (x_pos < 300){
  if (initial_position < 10)
  {  
  }   
  else{
        initial_position = initial_position - 20;
        servo1.write ( initial_position ) ;
        delay (100) ;
  }
  }

If the value for the horizontal position is greater than 700, then the servo will move towards the left. Similarly for the vertical position of the joystick module, if the value is less than 300, then the second servo will move towards the left, and if the value is greater than 700, then the second servo will move towards the right.
if (x_pos > 700){
  if (initial_position > 180)
  {  
  }  
  else{
  initial_position = initial_position + 20;
  servo1.write ( initial_position ) ;
  delay (100) ;
   }
   }

الثلاثاء، 12 سبتمبر 2017

Arduino Solar Tracker - خليه شمسية متحركة باستخدام الاردوينو


Arduino Solar Tracker - خليه شمسية متحركة باستخدام الاردوينو









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


In modern solar tracking systems, the solar panels are fixed on a structure that moves according to the position of the sun.










Let us design a solar tracker using two servo motors, a light sensor consisting of four LDRs and Arduino UNO board.


يلا بينا نبدا العمل على تجهيز نوع جديد باستخدام مواتير سيرفو وخليه ضوئية واردوينو اونو






Circuit Diagram






The circuit design of solar tracker is simple but setting up the system must be done carefully.




Four LDRs and Four 100KΩ resistors are connected in a voltage divider fashion and the output is given to 4 Analog input pins of Arduino.




The PWM inputs of two servos are given from digital pins 9 and 10 of Arduino.




لنبدا بالعمل على دائرة بسيطة لنصمم نظام الخلايا الشمسية

نحضر عدد 4 خلية ضوئية 100 اوم وتوضع على الاطراف Anloge الاطراف التناظرية على الاردوينو

ونستخدم النقطتيين 9 و 10 للعمل على المواتير باستخدام نظام تغيير عرض النبضة



Working


LDRs are used as the main light sensors. Two servo motors are fixed to the structure that holds the solar panel. The program for Arduino is uploaded to the microcontroller. The working of the project is as follows.


LDRs sense the amount of sunlight falling on them. Four LDRs are divided into top, bottom, left and right.


For east – west tracking, the analog values from two top LDRs and two bottom LDRs are compared and if the top set of LDRs receive more light, the vertical servo will move in that direction.


If the bottom LDRs receive more light, the servo moves in that direction.


For angular deflection of the solar panel, the analog values from two left LDRs and two right LDRs are compared. If the left set of LDRs receive more light than the right set, the horizontal servo will move in that direction.


If the right set of LDRs receive more light, the servo moves in that direction.


العمل


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


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


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






إذا لدرس أسفل تلقي المزيد من الضوء، يتحرك المؤازرة في هذا الاتجاه.


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


إذا تلقت مجموعة الحق من لدرس المزيد من الضوء، يتحرك المؤازرة في هذا الاتجاه.


خطوات العمل
Step-1
Take cardboard. Make a hole in the middle and four holes on four sides so that LDR fit into that.
Stick the solar panel to the cardboard and bring two wires of the panel out as shown.





الخطوة 1






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


عصا الألواح الشمسية على الورق المقوى وجلب اثنين من الأسلاك خارج لوحة كما هو مبين.























Step 2
Now cut one of the two leads of the LDR so that one lead is shorter and other is longer.
Insert these four LDRs into four holes as shown.
Bend the straight Perforated metal strip as shown below.
Place the bent metal strip on the back side of the cardboard
Apply glue to the LDR to fix them firmly.









الخطوة 2






الآن قطع واحد من اثنين من يؤدي من لدر بحيث الرصاص واحد هو أقصر وغيرها هو أطول.


إدراج هذه لدرس أربعة إلى أربعة ثقوب كما هو مبين.


ثني الشريط المعدني مثقب على التوالي كما هو مبين أدناه.


وضع الشريط المعدني عازمة على الجانب الخلفي من الورق المقوى


تطبيق الغراء لدر لإصلاحها بحزم.




















الخطوه 3






لحام اثنين من يؤدي من لدر كما هو مبين


إلى الطرف الآخر من لدر المقاومات اللحام من 10K أوم


الانضمام إلى أربعة يؤدي من 4 لدرس من خلال ربط مع سلك.


Step 3






Solder the two leads of LDR as shown


To the other ends of LDR Solder resistors of 10k ohm


Join the four leads of the 4 LDRs by connecting with a wire.



















Step4
Now take a bus wire.This is used to connect the Outputs of four LDRs to Arduino board.
Insert it into metal strip as shown in the image.
Now Solder the four wires to four LDRs at any point between LDR and resistor.


الخطوة 4


الآن اتخاذ سلك bus.This يستخدم لتوصيل مخرجات أربعة لدرس إلى مجلس اردوينو.


أدخله في شريط معدني كما هو مبين في الصورة.


الآن لحام الأسلاك الأربعة إلى أربعة لدرس في أي نقطة بين لدر والمقاوم.











Step 5
Insert another two wire bus into the perforated metal strip as shown.This is used for supplying Vcc and GND to LDR circuit.
Solder one wire to the leads of LDRs which are connected to resistors and other wire to the other leads.
Short the leads of LDRs connected to resistors using a wire as shown.


الخطوة 5






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


لحام سلك واحد إلى يؤدي لدرس التي ترتبط المقاومات وغيرها من الأسلاك إلى يؤدي الأخرى.


اختصار يؤدي لدرس متصلة المقاومات باستخدام سلك كما هو مبين.















Step 6
Now connect a servo motor to the Perforated metal strip using Screw.
Apply glue to the servo to fix it firmly.


.الخطوة 6






الآن ربط محرك سيرفو إلى قطاع معدنية مثقبة باستخدام المسمار.


تطبيق الغراء إلى أجهزة لإصلاحه بحزم.















Step 7
Take another straight Perforated metal strip and bend it as shown in the figure.


الخطوة 7






خذ شريط معدني مثقب مستقيم آخر وثنيه كما هو مبين في الشكل.



















Step 8
Now place the set up of solar panel and first servo motor to the metal strip of second servo motor as shown.


الخطوة 8






الآن وضع مجموعة من الألواح الشمسية وأول أجهزة السيارات إلى الشريط المعدني من أجهزة السيارات الثانية كما هو مبين.











Project Code


كود المشروع
#include <Servo.h>
//defining Servos
Servo servohori;
int servoh = 0;
int servohLimitHigh = 160;
int servohLimitLow = 20;

Servo servoverti; 
int servov = 0; 
int servovLimitHigh = 160;
int servovLimitLow = 20;
//Assigning LDRs
int ldrtopl = 2; //top left LDR green
int ldrtopr = 1; //top right LDR yellow
int ldrbotl = 3; // bottom left LDR blue
int ldrbotr = 0; // bottom right LDR orange

 void setup () 
 {
  servohori.attach(10);
  servohori.write(0);
  servoverti.attach(9);
  servoverti.write(0);
  delay(500);
 }

void loop()
{
  servoh = servohori.read();
  servov = servoverti.read();
  //capturing analog values of each LDR
  int topl = analogRead(ldrtopl);
  int topr = analogRead(ldrtopr);
  int botl = analogRead(ldrbotl);
  int botr = analogRead(ldrbotr);
  // calculating average
  int avgtop = (topl + topr) / 2; //average of top LDRs
  int avgbot = (botl + botr) / 2; //average of bottom LDRs
  int avgleft = (topl + botl) / 2; //average of left LDRs
  int avgright = (topr + botr) / 2; //average of right LDRs

  if (avgtop < avgbot)
  {
    servoverti.write(servov +1);
    if (servov > servovLimitHigh) 
     { 
      servov = servovLimitHigh;
     }
    delay(10);
  }
  else if (avgbot < avgtop)
  {
    servoverti.write(servov -1);
    if (servov < servovLimitLow)
  {
    servov = servovLimitLow;
  }
    delay(10);
  }
  else 
  {
    servoverti.write(servov);
  }
  
  if (avgleft > avgright)
  {
    servohori.write(servoh +1);
    if (servoh > servohLimitHigh)
    {
    servoh = servohLimitHigh;
    }
    delay(10);
  }
  else if (avgright > avgleft)
  {
    servohori.write(servoh -1);
    if (servoh < servohLimitLow)
     {
     servoh = servohLimitLow;
     }
    delay(10);
  }
  else 
  {
    servohori.write(servoh);
  }
  delay(50);
}

الأحد، 10 سبتمبر 2017

الدرس الاول

مقدمه بسيطة عن الاردوينو 

مقدمة: لماذا دورة اردوينو مهمة ؟

إن دورة اردوينو مهمة نظرا لأهمية هذه اللوحة الإلكترونية خاصة بسبب بساطتها الشديدة و انتشارها السريع في أنحاء العالم و ايضا بسبب انتشار كبير لشروحات و مشاريع بهذه اللوحة على النت. لكن رغم ذلك فإن المحتوى العربي كما تعودنا للأسف لا يزال فقيرا نوعا ما من هذه التقنية, لذلك في هذه الدورة سنتطرق إلى دروس كثيرة إن شاء الله إنطلاقا من التعريف بالاردوينو و تنصيب برنامج اردوينو إلى مشاريع كاملة كالروبوتات والآلات الذكية بإذن الله. و سأحاول في دورة اردوينو أن أشرح ببساطة و بدون تجاوز المراحل هذا مع  بساطة الاردوينو ( بساطة على بساطة 🙂 ). و سيكون الشرح باذن الله مكتوبا و مرئيا بالفديو لأني أعلم أن الكثير منكم يفضلون التعلم بالفيديو على القراءة بالإضافة إلى أن الفيديو يكون ضروريا في بعض الأحيان.المهم أن تكون دورة اردوينو مفهومة للجميع.

ماهو الاردوينو و ما هي اهم خاصياته ؟

ماهو الاردوينو ؟ و من لم يسمع  اليوم بالاردوينو من مهووسي التقنية ؟ هذه اللوحات الإلكترونية مفتوحة المصدر و القابلة للبرمجة و التي انتشرت كالنار في الهشيم في أنحاء العالم, و أهم ما يميز هذه اللوحات فهو سهولة استعمالها و برمجتها لدرجة أن البعض يسميها لعبة أطفال , و هي فعلا وسيلة فعالة لتعليم الأطفال و المبتدئين أساسيات الروبوتيك و التصميم الإلكتروني و الأنظمة المضمنة. ومن مميزات مشروع الاردوينو ومن اسباب نجاحه كذلك نذكر, مجانية البيئة التطويرية او الكومبايلر(برنامج اردوينو) و توفر العديد من دروع اردوينو او اردوينو شيلد و هي عبارة عن لوحات إلكترونية جاهزة تركب بسهولة على لوحة الاردوينو كما هو موضح في الصورة التالية و من اهم هذه الشيلد شيلد و أكثرها شهرة شيلد التحكم في المحركات و شيلد XBEE للتحكم عن بعد… أما مصادر التعلم و الدعم لهذه التقنية فحدث و لا حرج فهي منتشرة بشكل عجيب فأي مشروع تفكر في صنعه قد تجده موجودا على الانترنات بدون مبالغة.