مقدمه
آنچه در این آموزش یاد میگیرید
- ماژول آلتراسونیک چیست و چگونه کار میکند
- راه اندازی ماژول توسط آردوینو
- کنترل صفحه نمایشگر با آردوینو و ماژول آلتراسونیک
آشنایی با ماژول فاصله سنج فراصوت التراسونیک
سنسور آلتراسونیک یا سنسور فاصله سنج فراصوت ، یک سنسور مجاورتی است. این سنسور با ارسال یک پالس صوتی کوتاه در فرکانس بالاتر از محدوده شنوایی انسان و دریافت آن پس از انعکاس از سطح جسم مورد نظر ، زمان رفت و برگشت امواج فراصوت در هوا را محاسبه میکند. با استفاده از این زمان فاصله را با وضوح بسیار بالا اندازه گیری می نماید. سنسور التراسونيک به دليل دقت و سرعت بالا ، عدم نیاز به تماس با جسم، نداشتن خورندگی و سایش و قیمت مناسب، يکی از بهترين راهکارهای اندازه گيری فاصله و آشکار سازی اجسام میباشد.
اکثر ماژول هاي التراسونيک از دو قسمت فرستنده و گيرنده تشکيل شدهاند. گيرنده و فرستنده ماژولهاي SRF04 و SRF05 در کنار يکديگر قرار دارند و مي توانند جسم هاي در فاصله 2 تا 300 سانتي متر را با دقت قابل قبولي تشخيص دهند. ماژول SRF05 نسخه تکامل يافته SRF04 مي باشد. اين نسخه دو مد کاري را پشتيباني مي کند و 5 پايه جهت کار با ماژول را در اختيار قرار مي دهد. اما ماژول SRF04 داراي 4 پايه مي باشد و تنها يک مد کاري را پشتيباني مي کند. هردوي اين ماژول ها داراي يک مد کاري مشترک هستند که اين مد کاري با نام مد 1 شناخته ميشود.
در مد 1 ابتدا باید یک پالس به طول حداقل ۱۰ میکرو ثانیه به پایه TRIG اعمال کنیم. ماژول به صورت اتوماتیک 8 عدد پالس با فرکانس ۴۰ کیلو هرتز ارسال میکند. وقتی که پالس ها ارسال شد پایه ECHO یک میشود و تا زمانی که پالس های برگشتی از جسم را دریافت نکند این پایه یک باقی میماند. در این مد پایه Out SRF05 را بدون اتصال رها میکنیم. با اندازه گیری مدت زمانی که پایه Echo در سطح منطقی ۱ بوده است میتوانم زمان رفت و برگشت صوت را بدست آوریم و فاصله را محاسبه کنیم.
در مد 2 که فقط در SRF05 فعال است، از یک پایه برای تریگر و اکو استفاده می شود. برای استفاده از این مد پایهی OUT را به زمین وصل میکنیم و از پایهی Echo برای ارسال و دریافت پالس اکو استفاده میکنیم. مانند حالت قبل فاصله از اولین جسم را، با محاسبهی زمان رفت و برگشت صوت خواهیم داشت.
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
نرم افزار های مورد نیاز
ارتباط ماژول التراسونیک و آردوینو
ارتباط ماژول آلتراسونیک و آردوینو بسیار ساده است. کافیست مانند مدار زیر پایه های Trig و Echo را به دو تا از پین های آردینو متصل کنیم و این دو پین را به آردینو معرفی کنیم. آردینو به کمک این پین ها طبق روشی که توضیح داده شد، فاصله از اولین جسمی که در مقابل ماژول قرار دارد محاسبه میکند.
نکته
سیم بندی
کد
/*
* 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;
}
بیایید نگاه دقیق تری به کد بیاندازیم:
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
ارسال پالس 10 میکرو ثانیهای روی پین Trigger.
duration = pulseIn(echoPin, HIGH);
تابع pulsln() مدت زمانی که پایه Echo در سطح منطقی 1 میماند را اندازه میگیرد. که در واقع برابر با مدت زمان رفت و برگشت صوت از ماژول به مانع روبرو میباشد.
distance= duration*0.034/2;
کنترل صفحه نمایشگر کامپیوتر به کمک آردوینو و ماژول آلتروسونیک
فرض کنید یک ویدیو بر روی صفحه نمایشگر شما در حال پخش است. میخواهیم فقط با استفاده از حرکات دست پخش و توقف ویدیو، سرعت پخش ویدیو و صدای آن را کنترل کنیم.
برای اینکار کافیست دو ماژول SRF04 یا SRF05 را به یک برد آردوینو لئوناردو متصل کرده و در سمت چپ و راست بالای مانیتور خود قرار دهید.
کد زیر را روی برد خود آپلود کنید. حالا شما میتوانید با گرفتن هر دو دست خود در فاصله 20 تا 30 سانتی متری مقابل ماژولهای چپ و راست، ویدیو را پخش یا متوقف کنید!
اگر دست راست خود را در فاصله 9 تا 15 سانتی متری مقابل ماژول سمت راست بگیرید و کمی از آن دور کنید، ویدیو 5ثانیه به عقب برمیگردد و اگر دست خود را کمی به ماژول نزدیک کنید، ویدیو 5ثانیه به جلو میرود.
نگران صدا هم نباشید! با قرار دادن دست چپ خود در فاصله 9 تا 15 سانتی متری ماژول و نزدیک کردن به آن صدای ویدیو افزایش و با دور کردن آن از ماژول صدا کاهش میابد.
سیم بندی
کد
در این قسمت شما نیاز به کتابخانه Keyboard.h آردوینو دارید. میتوانید این کتابخانه را از لینک زیر دریافت کنید:
/*
* 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;
}
یک گام جلوتر
- با اضافه کردن یک سروو موتور به ماژول سعی کنید فاصله از همه اجسام اطراف ماژول التراسونیک را محاسبه کنید.
- سعی کنید موارد دیگری مثل زیاد و کم کردن سرعت پخش ویدئو به پروژه بالا اضافه کنید.
Comments (25)
با سلام خسته نباشید . ببخشید کدوم کتابخانرو بگیرم چون ورژن های مختلفه وبعد باید با برنامه بالا یکی بکنمش؟
با سلام.
زیاد تفاوتی نمی کنه درکل
سلام یعنی نمی تونم برنامرو از اینجا کپی کنم باید کتابخانرو بریزم و این برنامه هم کپی کنم ؟ یا این برنامه کتابخانه رو هم داره اخه هم الان من این برنامرو زدم روی اردواینو و بقیه کار هارو نیز انجام دادم نمیدونم چرا برنامه کار نمی کنه ممنون میشم راهنمایی کنید
بردتون سالمه؟
سلام . با این سیستم میتونم سرعت یک موتور رو برحسب فاصله جسم تنظیم کنم ؟
سلام
بله میتونید ، با پیاده سازی الگوریتم مناسب و دقیق امکان پذیره
سلام
تابع distance=calculateDistance(trigger1,echo1); برای من خطا میده
میگه was declared in this scope
distance رو تعریف کردید؟
was not declared in this scope
سلام وقت بخیر چراcalculatedistanceرو برا منerror میزنه و قبولش نمیکنه
شما مشکلتون حل شد؟برا منم همینerrorرو میده
سلام.
من دوباره کدهارو بررسی و کامپایل کردم و مشکلی نداشتن. شما تو کدوم کد این ارور رو میگیرید؟
یک مساله دیگه هم که باید در نظر بگیرید انتخاب بردتون هست. این کد همونطور که توی آموزش میبینید، برای برد Leonardo نوشته شده و امکانش هست که خطایی که بهش برخورد کردید به خاطر این باشه که برد درست رو موقع کامپایل انتخاب نکردید.
یک کار دیگه هم که میتونید انجام بدید این هست. موقعی که کد رو از توی وبسایت کپی میکنید و تو آردوینو پیست میکنید، از کلیدهای ترکیبی crtl+A+T هم استفاده کنید تا شکل کد هم مرتب بشه، چون ممکنه ارور از نامرتب بودن کد هم باشه.
سلام
ببخشید میخواستم بدونم با برد arduino uno هم میشه این پروژه رو اجرا کرد؟
سلام
نه، آردوینو لئوناردو از کتابخونه کیبوردپشتیبانی میکنه
سلام بنده در بخش کد اردوینو قسمت کتابخانه ارور دارم میشه راهنمایی کنید لطفا
سلام
لطفا دقیقا بفرمایید چه error باهاش برخورد کردید؟
سلام.میشه برنامه رو از اینجا کپی کنیم توی نرم افزار آردوینو بعد کامپایل کنیم روی برد آردوینوآنو؟؟؟؟
سلام بله
باسلام
خیر روی آردوینو uno اجرا نمیشه، میتونید از برد لئوناردو استفاده کنید
سلام خسته نباشید
اگر بخوایم اجسامی که از جلوی این سنسور حرکت میکنن رو بشماریم، چطوری اجسام ثابت رو تشخیص بدیم؟؟
سلام
برای این کار یک حد فاصله معین رو در نظر بگیرید مثلا 10 سانتیمتر. تو حالت عادی که جسمی از جلوی سنسور حرکت نکنه فاصله اندازهگیری شده توسط سنسور در حالت بیشینه است و موقعی که جسمی رد بشه فاصله اندازهگیری شده از حد فاصله تعیین شده شما مثلا 10 سانتیمتر کمتر میشه. با این روش شما میتونید یک کانتر داشته باشید و با بررسی فاصله اندازهگیری شده توسط سنسور، هر بار که فاصله اندازه گیری شده کمتر از حد فاصله تعیین شده بود به معنای رد شدن جسم از جلوی سنسور تلقی میشه و کانتر یک واحد اضافه میشه.
سلام ببخشید بعد از اینکه این کارهارو انجام دادم چطور به کامپیوتر وصلش کنم ؟
سلام.
بعد از قرار دادن دو ماژول التراسونیکتون روی مانیتور کامپیوتر و آپلود کد روی برد آردوینوتون، مدار کار میکنه. اتصال آردوینو به کامپیوتر هم از طریق همون رابطی هست که باهاش برد رو برنامهریزی میکنید. همون به کامپیوتر متصل باشه کافی هست.
سلام ببخشید با برد آردیو اونو میتونم این کار رو بکنم
سلام.
بخش “ارتباط ماژول التراسونیک و آردوینو” رو میتونید با آردوینو Uno هم انجام بدید، اما بخش “کنترل صفحه نمایشگر کامپیوتر به کمک آردوینو و ماژول آلتروسونیک” فقط با برد آردوینو لئوناردو امکانپذیر هست.