- ابزارآلات و آهنربا
-
ابزارآلات
- ابزار اندازه گیری (مولتیمتر، کولیس و . . .)
- ابزار سوراخکاری (مته، سه نظام، چهار نظام، پنج نظام و . . .)
- ابزار و تجهیزات کار (پیچ گوشتی، انبردست، سیمچین، پنس و . . .)
- برد بورد، فیبر خام و سوراخدار (فیبر مدار چاپی و PCB)
- پیچ و اسپیسر (پیچ و مهره رباتیک و اسپیسر پلاستیکی و فلزی)
- سیم و کابل (سیم افشان، فلت، باندی، کابل شارژ، پرینتر، و . . .)
- لحیمکاری (هویه، نوک هویه، پایه هویه، سیم لحیم، روغن لحیم و . . . )
- منبع تغذیه، باتری و جاباتری (باتری قلمی، نیم قلمی، کتابی و . . . )
-
ابزارآلات
- برد هوشمند
- پرینتر سه بعدی
- رباتیک و پروازی
- ماژول
- قطعات الکترونیک
- کیت الکترونیکی و انواع جعبه
- موتور
- اصناف مختلف
راه اندازی ماژول اولتراسونیک SRF05 با آردوینو
در این مطلب از بلاگ بهنام رباتیک، نحوه راه اندازی ماژول اولتراسونیک SRF05 با آردوینو را خواهید آموخت و متوجه خواهید شد که این ماژول چگونه کار میکند. در واقع با فراگیری این پروژه نحوه کنترل نمایشگر با حرکات دست را میآموزید.
فهرست مطالب
لوازم مورد نیاز برای پروژه راه اندازی ماژول اولتراسونیک SRF05 با آردوینو
درباره ماژولهای اولتراسونیک از جمله SRF05
سنسور اولتراسونیک یک سنسور مجاورت است. این سنسورها با ارسال پالس صوتی با فرکانس بیشتر از قدرت شنوایی انسان و دریافت بازخورد آن با سطوح، مدت زمان و مسیر امواج اولتراسونیک یا فرا صوت را در هوا شناسایی میکند. این شیوه یکی از بهترین شیوههای تشخیص فاصله و اشیاء میباشد زیرا هم از نظر دقت و سرعت قابلاعتماد است و هم اینکه نیاز خواهد بود تماس خاصی با شیء مدنظر صورت بگیرد.
اکثر سنسورها اولتراسونیک یک فرستنده و یک گیرنده دارند که در ماژول SRF05 قادرند تا فاصله 2 تا 300 سانتیمتری را پوشش دهند. ماژول نامبرده از اتصال دوطرفه پشتیبانی کرده و برای فعالیت 5 پین دارد. یکی از مهمترین حالات فعالیت این ماژول، Mode1 نام دارد.
در حالت Mode1، ابتدا باید یا مدت 10 میکروثانیه به پین فعالساز، پالس وارد آورید. این ماژول همچنین، به صورت اتوماتیک 8 پالس با فرکانس 40 کیلوهرتز تولید و پین Echo را روی حالت 1 تنظیم میکند. سپس پین Echo روی حالت High باقی میماند تا پالسهای بازتابش شده از یک شیء را دریافت نماید. با این روش میتوانیم تایم ارسال و دریافت سیگنالها را به وسیله مدت زمان باقی ماندن پین Echo روی حالت High محاسبه کنیم. در این حالت، پین Out ماژول SRF05 اتصال خاصی ندارد.
دیگر حالت ماژول اولتراسونیک SRF05 که با نام Mode2 شناخته میشود، از یک پین برای سیگنالهای فعالساز و اکو بهره میبرد. برای استفاده از این حالت، پین Out ماژول را به پین اتصال به زمین (GND) وصل و از پین فعالساز استفاده کنید تا دادهها را ارسال و دریافت نماید. با این شیوه میتوانیم فاصله از اولین شیء را با محاسبه مدت زمان سیگنال محاسبه کنیم.
سیمکشی مدار پروژه راه اندازی ماژول اولتراسونیک SRF05 با آردوینو
سیمکشی مدار این پروژه آردوینو بسیار ساده است زیرا فقط باید پینهای Trig (فعالساز) و Echo (اکو) را به دو عدد از پینهای آردوینو وصل و آنها را به وسیله نرمافزار Arduino IDE تعریف کنید. با این پینها، آردوینو فاصله از اولین شیء جلوی ماژول را محاسبه خواهد کرد.
ضمناً، به خاطر داشته باشید که پینهای VCC و GND ماژول را به پینهای 5 ولت و GND آردوینو بزنید.
کدهای پروژه راه اندازی ماژول اولتراسونیک 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 با آردوینو
فرض کنید که یک ویدیو در لپتاپ شما در حال پخش است و شما میخواهید با حرکات دست، آن را پخش یا متوقف، میزان صدا را کنترل و یا چند قبلتر یا چند ثانیه جلوتر آن را اجرا کنید.
برای انجام این کار، دو ماژول اولتراسونیک به بورد آردوینو لئوناردو وصل کنید و آنها را در سمت چپ و راست بالای نمایشگر لپتاپ بگذارید.
سپس کتابخانه Keyboard.h را دانلود و کد زیر را در نرمافزار Arduino IDE آپلود کنید. اینک میتوانید با بردن دستان خود در فاصله 20 تا 30 سانتیمتری از ماژولها، ویدیو در حال پخش را متوقف یا اجرا نمایید.
/*
* Control Your PC with Ultrasonic Sensor HC-SR04 and Arduino
* by Hanie Kiani
* https://electropeak.com/learn
*/
#include
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;
}