آموزش راه اندازی التراسونیک با آردوینو UNO
در این آموزش آردینو یاد میگیریم که چگونگی راه اندازی التراسونیک با آردوینو را یاد میگیریم.
سنسور التراسونیک HC-SR04 چگونه کار میکند
امواج فراصوت را در فرکانس ۴۰۰۰۰ هرتز منتشر میکند که در هوا حرکت میکند و اگر یک شی یا مانع در مسیر آن وجود داشته باشد به ماژول بازخواهد گشت. با در نظر گرفتن زمان حرکت و سرعت صوت میتوانید فاصله را محاسبه کنید.
ماژول التراسونیک HC-SR04 دارای ۴ پین، Ground،VCC، Trig و Echo است. پینهای Ground و VCC ماژول باید به ترتیب به پین های Ground و ۵ ولت بر روی برد آردینو متصل شوند و پینهای trig و echo به هر پین I / O دیجیتال بر روی برد آردینو متصل شوند.
به منظور ایجاد فراصوت، شما باید پین Trig را بر روی یک حالت بالا برای 10μs تنظیم کنید. که ۸ سیکل پیوسته التراسونیک را ارسال خواهد کرد که با سرعت صوت حرکت خواهد کرد و در پین Echo دریافت خواهد شد. پین Echo زمان حرکت موج صوتی را بر حسب میکروثانیه نشان میدهد. ما در بخش های بعد در قسمت آموزش رباتیک از مطالب این مقاله استفاده خواهیم کرد.
به عنوان مثال، اگر شی ۱۰ سانتیمتر از سنسور دور باشد، و سرعت صدا ۳۴۰ m / s یا ۰.۰۳۴ cm / μs باشد، موج صدا باید در حدود ۲۹۴ u ثانیه حرکت کند. اما چیزی که از پین Echo میگیرید دو برابر این عدد خواهد بود چون موج صدا باید به سمت جلو حرکت کند و به عقب برگردد. بنابراین برای رسیدن به فاصله در سانتی متر باید مقدار زمان حرکت دریافتی از پین echo را در ۰.۰۳۴ ضرب کرده و آن را بر ۲ تقسیم کنیم.
کد آردوینو و سنسور التراسونیک HC-SR04
ابتدا باید پینهای Trig و Echo را تعریف کنید. در این مورد آنها پینهای شماره ۹ و ۱۰ در برد آردینو هستند و به آنها trigPin و echoPin گفته میشود. سپس شما به یک متغیر طولانی به نام”duration” برای زمان حرکت نیاز دارید که از سنسور و یک متغیر صحیح برای فاصله به دست خواهید آورد.
// defines pins numbers const int trigPin = 9; const int echoPin = 10; // defines variables long duration; int distance;
در این راهاندازی شما باید trigPin را به عنوان یک خروجی و echoPin را به عنوان یک ورودی تعریف کنید و همچنین ارتباط سریال را برای نشان دادن نتایج روی نمایشگر سریال آغاز کنید.
void setup() { pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input Serial.begin(9600); // Starts the serial communication }
در این حلقه ابتدا باید مطمئن شوید که trigPin واضح است بنابراین باید آن پین را بر روی یک حالت LOW تنها برای 2μs تنظیم کنید. در حال حاضر برای تولید موج فراصوت، ما باید trigPin را بر روی حالت HIGH برای 10μs قرار دهیم. با استفاده از تابع ()pulseIn شما باید زمان حرکت را بخوانید و آن مقدار را در متغیر “duration” قرار دهید، این تابع دارای ۲ پارامتر است، نام اولی پین echo و برای دومی میتوانید HIGH یا LOW بنویسید.
// Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
در این حالت، HIGH به این معنی است که تابع ()pulsIn منتظر خواهد ماند تا پین به HIGH ناشی از موج صدای بازتاب شده برود و زمانبندی را آغاز خواهد کرد، سپس منتظر خواهد ماند تا پین به LOW زمانی که موج صدا به پایان میرسد و زمانبندی را متوقف خواهد کرد، برود. در پایان این تابع طول پالس را در میکروثانیه باز میگرداند.
برای به دست آوردن فاصله ما duration را در ۰.۰۳۴ ضرب میکنیم و آن را بر ۲ تقسیم میکنیم همانطور که قبلاً این معادله را توضیح دادیم.
// Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculating the distance distance= duration*0.034/2; // Prints the distance on the Serial Monitor Serial.print("Distance: "); Serial.println(distance);
در پایان مقدار فاصله را روی نمایشگر سریال چاپ خواهیم کرد.
این هم کد کامل:
/* * Ultrasonic Sensor HC-SR04 and Arduino Tutorial * * by Dejan Nedelkovski, * www.HowToMechatronics.com * */ // defines pins numbers const int trigPin = 9; const int echoPin = 10; // defines variables long duration; int distance; void setup() { pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input Serial.begin(9600); // Starts the serial communication } void loop() { // Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculating the distance distance= duration*0.034/2; // Prints the distance on the Serial Monitor Serial.print("Distance: "); Serial.println(distance); }
مثال سنسور التراسونیک آردینو و نمایشگر LCD
این یک مثال دیگر از نحوه استفاده از سنسور التراسونیک با آردینو و نمایش نتایج بر روی یک LCD است.
شما میتوانید سنسور التراسونیک و LCD را به صورت زیر متصل کنید:
کدهایی که فاصله را اندازهگیری میکنند تقریباً شبیه به مثال اصلی هستند. در اینجا، به جای چاپ نتایج بر روی نمایشگر سریال، آنها را بر روی LCD چاپ میکنیم.
همچنین برای درک بهتر این مطالب میتوانید ویدیوی زیر را مشاهده کنید:
کدهای مورد نیاز برای راه اندازی التراسونیک با ال سی دی و آردوینو UNO
#include <LiquidCrystal_I2C.h> // includes the LiquidCrystal Library LiquidCrystal_I2C lcd(0x27 ,16,2); // Creates an LCD object.(0x27) const int trigPin = 9; //پین شماره ی 9 را trigpin نامگذاری کن const int echoPin = 10; //پین شماره ی 10 را echo pin نام گذاری کن long duration; //duration را از نوع لانگ تعریف میکنیم int distanceCm, distanceInch; //برای فاصله به سانتی متر و متر نیز پارامترهایی تعریف میکنیم void setup() { Serial.begin(9600); lcd.init(); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display //ال سی دی را راه اندازی کن lcd.backlight(); pinMode(trigPin, OUTPUT); //نوع پین شماره ی 9 را خروجی تعریف میکنیم pinMode(echoPin, INPUT); //نوع پین شماره 10 را ورودی تعریف میکنیم } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); //چند دستور بالا به این منظور به کار میرود که پین شماره ی 10 با قرار گرفتن در حالت بالا یا high //فرکانسی را ارسال کند و مدت زمانی که echopin در حالت high قرار میگیرد در واقه زمانی است که موج به مبدا باز میگردد distanceCm = duration * 0.034 / 2; //در اینجا برای به دست اوردن فاصله به سانتی متر سرعت صوت را در زمان ضرب میکنیم و به این دلیل که مدت زمان ما //در حقیقت زمانی است که صوت از مبدا تا جسم میرود و از جسم تا مبدا باز میگردد آن را بر دو تقسیم میکنیم تا زمان مبدا تا جسم مشخص شده باشد distanceInch = duration * 0.0133 / 2; //همان محاسبات بالا راانجام میدهیم با این تفاوت که سرعت صوت را بر حسب اینچ حساب میکنیم lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed //محل قلم را سطر صفر و ستون صفر قرار بده lcd.print("Distance: "); // Prints string "Distance" on the LCD //کلمه ی فاصله را تایپ کن lcd.print(distanceCm); // Prints the distance value from the sensor //مقدار فاصله ای ک بر حسب سانتی متر به دست آورده ایم را تایپ کن lcd.print(" cm"); //cm را در ال سی دی تایپ کن delay(10); //ده میلی ثانیه صبر کن lcd.setCursor(0, 1); //محلقلم را سطر 1 و ستون صفر قرار بده lcd.print("Distance: "); //کلمه ی فاصله را تایپ کن lcd.print(distanceInch); //مقدار فاصله ای ک بر حسب اینچ بدست آورده ایم را تایپ کن lcd.print(" inch"); //کلمه ی اینچ را تایپ کن delay(10); //10 میلی ثانیه صبر کن }
امیدوارم از این آموزش آردوینو لذت برده و چیز جدیدی یاد گرفته باشید. لطفاً در زیر بخش نظرات هر سؤالی دارید بپرسید.