آردوینو, پروژه آردوینو

راه اندازی ماژول اولتراسونیک SRF05 با آردوینو

راه اندازی ماژول اولتراسونیک SRF05 با آردوینو

در این مطلب از بلاگ بهنام رباتیک، نحوه راه اندازی ماژول اولتراسونیک SRF05 با آردوینو را خواهید آموخت و متوجه خواهید شد که این ماژول چگونه کار می‌کند. در واقع با فراگیری این پروژه نحوه کنترل نمایشگر با حرکات دست را می‌آموزید.

فهرست مطالب

لوازم مورد نیاز برای پروژه راه اندازی ماژول اولتراسونیک SRF05 با آردوینو

درباره ماژول‌های اولتراسونیک از جمله SRF05

سنسور اولتراسونیک یک سنسور مجاورت است. این سنسورها با ارسال پالس صوتی با فرکانس بیشتر از قدرت شنوایی انسان و دریافت بازخورد آن با سطوح، مدت زمان و مسیر امواج اولتراسونیک یا فرا صوت را در هوا شناسایی می‌کند. این شیوه یکی از بهترین شیوه‌های تشخیص فاصله و اشیاء می‌باشد زیرا هم از نظر دقت و سرعت قابل‌اعتماد است و هم اینکه نیاز خواهد بود تماس خاصی با شیء مدنظر صورت بگیرد.

اکثر سنسورها اولتراسونیک یک فرستنده و یک گیرنده دارند که در ماژول SRF05 قادرند تا فاصله 2 تا 300 سانتی‌متری را پوشش دهند. ماژول نامبرده از اتصال دوطرفه پشتیبانی کرده و برای فعالیت 5 پین دارد. یکی از مهمترین حالات فعالیت این ماژول، Mode1 نام دارد.

ماژول اولتراسونیک SRF05
ماژول اولتراسونیک SRF05

در حالت Mode1، ابتدا باید یا مدت 10 میکروثانیه به پین فعالساز، پالس وارد آورید. این ماژول همچنین، به صورت اتوماتیک 8 پالس با فرکانس 40 کیلوهرتز تولید و پین Echo را روی حالت 1 تنظیم می‌کند. سپس پین Echo روی حالت High باقی می‌ماند تا پالس‌های بازتابش شده از یک شیء را دریافت نماید. با این روش می‌توانیم تایم ارسال و دریافت سیگنال‌ها را به وسیله مدت زمان باقی ماندن پین Echo روی حالت High محاسبه کنیم. در این حالت، پین Out ماژول SRF05 اتصال خاصی ندارد.

پین‌های ماژول اولتراسونیک SRF05
پین‌های ماژول اولتراسونیک SRF05
دیاگرام زبان‌بندی SRF05 حالت اول
دیاگرام زبان‌بندی SRF05 حالت اول

دیگر حالت ماژول اولتراسونیک SRF05 که با نام Mode2 شناخته می‌شود، از یک پین برای سیگنال‌های فعالساز و اکو بهره می‌برد. برای استفاده از این حالت، پین Out ماژول را به پین اتصال به زمین (GND) وصل و از پین فعالساز استفاده کنید تا داده‌ها را ارسال و دریافت نماید. با این شیوه می‌توانیم فاصله از اولین شیء را با محاسبه مدت زمان سیگنال محاسبه کنیم.

دیاگرام زبان‌بندی SRF05 حالت دوم
دیاگرام زبان‌بندی SRF05 حالت دوم

سیم‌کشی مدار پروژه راه اندازی ماژول اولتراسونیک SRF05 با آردوینو

سیم‌کشی مدار این پروژه آردوینو بسیار ساده است زیرا فقط باید پین‌های Trig (فعالساز) و Echo (اکو) را به دو عدد از پین‌های آردوینو وصل و آنها را به وسیله نرم‌افزار Arduino IDE تعریف کنید. با این پین‌ها، آردوینو فاصله از اولین شیء جلوی ماژول را محاسبه خواهد کرد.

ضمناً، به خاطر داشته باشید که پین‌های VCC و GND ماژول را به پین‌های 5 ولت و GND آردوینو بزنید.

سیم‌کشی مدار پروژه راه‌اندازی ماژول اولتراسونیک SRF05 با آردوینو
سیم‌کشی مدار پروژه راه‌اندازی ماژول اولتراسونیک SRF05 با آردوینو

کدهای پروژه راه اندازی ماژول اولتراسونیک SRF05 با آردوینو

				
					/*    
   * Ultrasonic Sensor HC-SR05/4 and Arduino
    * by Hanie Kiani
*  https://electropeak.com/learn
    */
long duration;
    int distance;
    
    const int trig = 9;
    const int echo = 10;
   
    
    void setup() {
    pinMode(trig, OUTPUT); // Sets the trigPin as an Output
    pinMode(echo, INPUT); // Sets the echoPin as an Input
    Serial.begin(9600); // Starts the serial communication
    }
    void loop() {
       distance = calculateDistance();
Serial.println(distance); 

    }
    int calculateDistance(){ 
  
  digitalWrite(trig, LOW); 
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  duration = pulseIn(echo, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
  distance= duration*0.034/2;
  return distance;
}
				
			

توضیحات کد پروژه راه اندازی ماژول اولتراسونیک SRF05 با آردوینو

کد زیر یک پالس 10 میکروثانیه‌ای به پین فعالساز می‌فرستد.

				
					digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);	
  digitalWrite(trigPin, LOW);
				
			

تابع pulseIn() مدت زمانی که پین اکو روی حالت High باقی مانده را محاسبه می‌کند. لازم به ذکر است که این تایم با زمانی که در طی آن سیگنال‌ها ارسال و دریافت می‌شوند، برابر است.

				
					duration = pulseIn(echoPin, HIGH);
				
			

با ضرب مدت زمان و سرعت صدا، می‌توانید فاصله طی شده با صداها را محاسبه کنید.

				
					distance= duration*0.034/2;
				
			

کنترل مانیتور در پروژه راه اندازی ماژول اولتراسونیک SRF05 با آردوینو

فرض کنید که یک ویدیو در لپ‌تاپ شما در حال پخش است و شما می‌خواهید با حرکات دست، آن را پخش یا متوقف، میزان صدا را کنترل و یا چند قبل‌تر یا چند ثانیه جلوتر آن را اجرا کنید.

برای انجام این کار، دو ماژول اولتراسونیک به بورد آردوینو لئوناردو وصل کنید و آنها را در سمت چپ و راست بالای نمایشگر لپ‌تاپ بگذارید.

سیم‌کشی مدار کنترل مانیتور در پروژه راه‌اندازی ماژول اولتراسونیک SRF05 با آردوینو
سیم‌کشی مدار کنترل مانیتور در پروژه راه‌اندازی ماژول اولتراسونیک SRF05 با آردوینو

سپس کتابخانه Keyboard.h را دانلود و کد زیر را در نرم‌افزار Arduino IDE آپلود کنید. اینک می‌توانید با بردن دستان خود در فاصله 20 تا 30 سانتی‌متری از ماژول‌ها، ویدیو در حال پخش را متوقف یا اجرا نمایید.

				
					/*
    * Control Your PC with Ultrasonic Sensor HC-SR04 and Arduino
    * by Hanie Kiani
    *  https://electropeak.com/learn
 */
#include <Keyboard.h>
long duration;
int distance,distLeft,distRight;

const int trigger1 = 2; //Trigger pin of 1st Sesnor
const int echo1 = 3; //Echo pin of 1st Sesnor
const int trigger2 = 4; //Trigger pin of 2nd Sesnor
const int echo2 = 5;//Echo pin of 2nd Sesnor


void setup() {
Serial.begin(9600); 
  
pinMode(trigger1, OUTPUT); 
pinMode(echo1, INPUT); 
pinMode(trigger2, OUTPUT); 
pinMode(echo2, INPUT); 
}



void loop() { 
distance=calculateDistance(trigger1,echo1);
distLeft =distance; 

distance=calculateDistance(trigger2,echo2);
distRight =distance;
 
//Pause Modes -Hold
if ((distLeft >20 && distRight>20) && (distLeft <30 && distRight<30)) //Detect both hands
{Serial.println("Play/Pause"); 
                        Keyboard.press(KEY_TAB);
                        delay(100);
                        Keyboard.releaseAll();
  delay (500);}

distance=calculateDistance(trigger1,echo1);
distLeft =distance;

distance=calculateDistance(trigger2,echo2);
distRight =distance;

 

//Control Modes
//Lock Left - Control Mode
if (distLeft>=9 && distLeft<=14)
{
  delay(100); //Hand Hold Time
 distance=calculateDistance(trigger1,echo1);
  distLeft =distance;
  if (distLeft>=0 && distLeft<=15)
  {
    Serial.println("Left Hand detected");
    while(distLeft<=20)
    {
     distance=calculateDistance(trigger1,echo1);
      distLeft =distance;
      if (distLeft<5) //Hand pushed in 
      {Serial.println ("Volume Up");
                         Keyboard.press(KEY_UP_ARROW); //up  key
                         delay(100);
                         Keyboard.releaseAll();
        delay (300);}
      if (distLeft>17) //Hand pulled out
      {Serial.println ("Volume Down");
       Keyboard.press(KEY_DOWN_ARROW); //down  key
                         delay(100);
                         Keyboard.releaseAll();
       delay (300);}
    }
  }
}

//Lock Right - Control Mode
if (distRight>=9 && distRight<=14)
{
  delay(100); //Hand Hold Time
 distance=calculateDistance(trigger2,echo2);
  distRight =distance;
  if (distRight>=0 && distRight<=20)
  {
    Serial.println("Right Hnaad Detected");
    while(distRight<=20)
    {
      distance=calculateDistance(trigger2,echo2);
      distRight =distance;
      if (distRight<5) //Right hand pushed in
      {Serial.println ("Rewind"); 
       Keyboard.press(KEY_LEFT_ARROW); //left key
                         delay(100);
                         Keyboard.releaseAll();
       delay (300);
      }
      if (distRight>17) //Right hand pulled out
      {Serial.println ("Forward"); 
       Keyboard.press(KEY_RIGHT_ARROW); //right  key
                         delay(100);
                         Keyboard.releaseAll();
       delay (300);}
  }
}
}

delay(200);
}
 int calculateDistance(int trig, int echo){ 
  
  digitalWrite(trig, LOW); 
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  duration = pulseIn(echo, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
  distance= duration*0.034/2;
distance = 50;
 return distance;
}
				
			
پروژه ماژول اولتراسونیک و آردوینو در شرایط واقعی
پروژه ماژول اولتراسونیک و آردوینو در شرایط واقعی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *