سنسور MB1240 XL-MaxSonar-EZ4، یک سنسور فاصلهسنج التراسونیک با عملکرد بالا و برد قابل اندازهگیری 20 تا 765 سانتیمتر است. درصورتیکه به فیلتر نویز بهتر و قابلیت اطمینان بیشتری نیاز دارید، این یک جایگزین عالی برای HC-SR04 است. اگرچه این آموزش برای MB1240 نوشته شدهاست، اما میتوان از آن برای سایر سنسورهای MaxBotix نیز استفاده کرد. در این آموزش، نحوه عملکرد و راه اندازی سنسور فاصله سنج التراسونیک MaxBotix با آردوینو را خواهید آموخت.
سه مثال به همراه نحوهی سیمکشی آنها قرار داده شدهاست که عملکرد اصلی سنسور را نشان میدهند. همچنین به معرفی خروجیهای مختلف سنسور و نحوهی فعالسازی آن با یک کلید میپردازیم.
پس از هر مثال، به تحلیل عملکرد کد مربوطه خواهیم پرداخت، بنابراین میتوانید متناسب با نیاز خود آن را تغییر دهید.
موارد مورد نیاز
قطعات سخت افزاری
- ماژول MB1240 XL-MaxSonar-EZ4
- آردوینو UNO
- برد بورد
- سیم جامپر
- پین هدر
- کلید فشاری
- کابل USB نوع A یا B
نرمافزار
برای راه اندازی سنسور فاصله سنج التراسونیک با آردوینو به نرمافزار Arduino IDE نیاز خواهید داشت.
یک سنسور التراسونیک چگونه کار میکند؟
یک سنسور فاصلهسنج التراسونیک با ارسال امواج فراصوت، فاصلهی اشیاء را تشخیص میدهد. این امواج توسط شیء منعکس شده و سنسور التراسونیک آنها را تشخیص میدهد. با اندازهگیری مدت زمان بین ارسال و دریافت امواج صوتی، میتوان فاصله سنسور و شیء را طبق رابطهی زیر محاسبه کرد. به طوریکه در این رابطه، منظور از سرعت، سرعت امواج صوتی بر حسب سانتیمتر بر میکروثانیه و منظور از زمان، مدت زمان بین ارسال و دریافت امواج صوتی بر حسب میکروثانیه است. توجه داشتهباشید که باید حاصلضرب را بر دو تقسیم کنید. این به این دلیل است که امواج صوتی از سنسور به شیء و از شیء به سنسور برمیگردند. بنابراین فاصله بین سنسور و شیء تنها نیمی از فاصلهای است که امواج صوتی طی میکنند.
2/( زمان (میکروثانیه) × سرعت (سانتی متر بر میکروثانیه)) = فاصله (سانتی متر)
سنسور MB1240 XL-MaxSonar-EZ4، یک سنسور فاصلهسنج التراسونیک ساخته شده توسط شرکت MaxBotix Inc است. MaxBotix تولیدکنندهای در ایالات متحده است که در ساخت سنسورهای التراسونیک تخصص دارد. آنها سنسورهایی برای کاربردهای مختلف، چه برای استفاده در فضای بسته و چه در فضای باز، میسازند. MB1240 یکی از محبوبترین سنسورهای آنهاست و برای استفاده در حوزهی رباتیک ایدهآل است.
خانوادهی XL-MaxSonar-EZ تحمل بالایی در برابر نویزهای الکتریکی یا صوتی دارند. این بدان معناست که شما میتوانید از آن برای کاربردهای رباتیک همراه با چندین موتور و سروو استفاده کنید.
حداکثر برد سنسور MB1240 که در این آموزش استفاده شده، 765 سانتیمتر است و رزولوشن 1 سانتیمتر را ارائه میدهد. همچنین سنسورهایی با رزولوشن 1 میلیمتر (HRLV-MaxSonar-EZ) و نرخ تازهسازی (Refresh Rate) بالاتر (LV-MaxSonar-EZ) نیز به فروش میرسند. علاوهبراین، سنسورهای سری HR دارای جبرانساز دمای داخلی هستند.
مشخصات سنسور TM1240 XL-MaxSonar-EZ4
ولتاژ تغذیه | 5.5 – 3.3 ولت |
جریان مصرفی | 3.4 میلیآمپر (حداکثر 100 میلیآمپر) |
فاصلهی قابل اندازهگیری | 765 – 20*(0) سانتیمتر |
رزولوشن | 1 سانتیمتر |
فرکانس | 42 کیلوهرتز |
نرخ خواندن | 10 هرتز |
خروجی سنسور | ولتاژ آنالوگ، پهانای پالس، RS232 |
ابعاد | 25.11×19.9×22.1 میلیمتر |
دمای کاری | 65 – 0 درجهی سانتیگراد |
ویژگیها | کوچک، سبک، پرتو باریک، کالیبراسیون خودکار (ولتاژ، رطوبت، نویز محیط)، استفادهی آسان |
کشور سازنده | USA |
* سنسور اجسام نزدیکتر از 20 سانتیمتر را در محدوده 20 سانتیمتر شناسایی میکند.
خروجیهای سنسور MaxBotix
همانطورکه در جدول مشخصات مشاهده کردید، سنسورهای MaxBotix خانوادهی MaxSonar خروجیهای متفاوتی دارند: ولتاژ آنالوگ، پهنای پالس و سریال RS232 (سنسورهای مبتنی بر پروتکل I2C نیز موجود هستند). در این آموزش هر دو خروجی ولتاژ آنالوگ و پهنای پالس را بررسی خواهیم کرد.
ولتاژ آنالوگ
سادهترین راه برای خواندن فاصله اندازهگیری شده از سنسور، به دست آوردن ولتاژ خروجی آنالوگ سنسور است. این ولتاژ، یک ولتاژ خطی است که مقدار آن با دور شدن هدف از سنسور افزایش مییابد.
میتوانیم این خروجی را با میکروکنترلری مانند آردوینو خوانده و با ضرب کردن آن در یک ضریب مقیاس ثابت، فاصله را محاسبه کنیم ( این ضریب به نوع سنسور بستگی دارد که میتوانید مقدار آن را در دیتاشیت سنسور مشاهده کنید).
پهنای پالس سنسور فاصله سنج MaxBotix
گزینه دیگر، استفاده از خروجی پهنای پالس است. این پایه، پهنای پالسی که بیانگر فاصله است را به عنوان خروجی نشان میدهد. میتوانید از تابع ()pulseIn در کد آردوینو، برای خواندن طول این پالس خروجی برحسب میکروثانیه استفاده کنید. برای به دست آوردن فاصله، باید این مقدار را در یک ضریب مقیاس ثابت ضرب کنید. ضریب ثابت MB1240(XL-MaxSonar) با توجه به دیتاشیت آن 58 میکروثانیه بر سانتیمتر میباشد. بنابراین میتوانید به سادگی TOF، را بر 58 تقسیم کنید تا فاصله را بر حسب سانتیمتر بهدست آورید.
مقایسه MaxBotix MB1240 با HC-SR04
هنگام خرید یک سنسور فاصلهسنج التراسونیک، احتمالاً با HC-SR04 محبوب نیز برخورد کردهاید! این سنسور ارزان قیمت توسط بسیاری از سازندگان چینی ساخته میشود. HC-SR04 و MB1240 هر دو بر اساس یک اصل مشابه عمل میکنند، اما برخی تفاوتهای کلیدی (در کیفیت و قیمت) باهم دارند.
اولین چیزی که توجه شما را به خود جلب میکند، تفاوت ابعاد آنهاست. MaxBotix MB1240 تنها از یک مبدل التراسونیک برای ارسال و دریافت امواج صوتی استفاده میکند، درحالیکه HC-SR04 از دو مبدل التراسونیک استفاده میکند، بنابراین MB1240 ابعاد بسیار کوچکتری دارد. همچنین نصب سنسور HC-SR04 میتواند دشوار باشد و اغلب به پیچهای کوچکی نیاز دارد، درحالی که MB1240 دارای دو سوراخ برای پیچهای M3 است.
از جمله مزایای اصلی سنسورهای MaxBotix میتوان به کالیبراسیون خودکار، زاویه پرتو کوچک، تحمل نویز بالا، و فیلترینگ داخلی آن اشاره کرد.
سنسور MB1240 دارای یک پرتو بسیار باریک در سراسر محدوده اندازهگیری خود (برای اشیاء بزرگ) است که آن را برای موقعیتیابی دقیق یک اتاق (رباتهای تشخیص مانع) ایدهآل میکند، به این معنا که از اجسام نزدیک به سنسور، بازتاب اولیه دریافت نخواهید کرد. HC-SR04 دارای پرتویی به شکل مخروط 3 بعدی 15درجه است که شما نمیتوانید اشیایی را که از حسگر دور هستند به دقت اندازهگیری کنید. پرتو بسیار گسترده است و تنها اجسامی را که به سنسور نزدیکتر هستند، تشخیص میدهد. علاوهبراین، عملکرد مداوم سنسورها و خروجی آنالوگ آنها جالب است. خروجی آنالوگ پروگرام کردن سنسورها را بسیار آسان میکند. این ویژگیها همگی بسیار خوب هستند، اما توجه داشته باشید که قیمت این سنسورها نیز کمی بالاتر از سنسورهای چینی است. در مجموع، اگر به دنبال یک سنسور قابل اطمینان با کیفیت بالا هستید، سنسورهای MaxBotix میتوانند گزینه خوبی باشند. جدول زیر مقایسهی بین این دو سنسور را نشان میدهد.
جدول مقایسه MB1240 با HC-SR04
مشخصات | MB1240 | HC-SR04 |
ولتاژ کاری | 5.5-3.3V | 5v |
جریان کاری | 3.4mA average (100mA peak) | 15mA |
محدوده اندازه گیری | 765-20cm | 2-400cm |
رزولوشن(وضوح) | 1cm | 3mm < |
الگوی پرتو | به شکل 1 مراجعه شود | 15°cone |
فرکانس | 42kHz | 40kHz |
خروجی سنسور | ولتاژ آنالوگ، پهنای پالس، پروتکل 232 | پهنای پالس |
ابعاد | 22.1x 19.9 x 25.11mm | 45x 20 x 15 mm |
جبران کننده درجه حرارت | خیر | خیر |
فیلترینگ | بله | خیر |
کالیبراسیون خودکار برخط | بله | خیر |
مقاوم در برابر نویز | بالا | پایین |
سازنده | USA | China |
هیچیک از سنسورهای HC-SR04 و MB1240 از جبرانساز تغییر دما در حین اندازهگیری پشتیبانی نمیکنند. سنسورهای XL-MaxSonar و LV-MaxSonar دمای هوا را 22.5 درجه سانتیگراد فرض میکنند. سنسورهای سری HR دارای مکانیزم کالیبراسیون دمای داخلی هستند، بنابراین نیازی به اضافه کردن هیچ سنسوری نخواهید داشت.
اتصال سنسور فاصله سنج التراسونیک MaxBotix MB1240 به یک آردینو UNO
همانطورکه در مقدمه ذکر شد، سنسورهای MaxBotix میتوانند در مدهای مختلفی کار کنند. تصاویر زیر به شما نشان میدهند که چگونه سنسور MB1240 را برای بهدست آوردن ولتاژ آنالوگ یا پهنای پالس به آردوینو متصل کنید. شما میتوانید مستقیماً سیمها را به سنسور لحیم کنید، یا از پین هدر یا یک کانکتور استفاده کنید.
اتصالات سنسور MB1240– ولتاژ خروجی آنالوگ
MaxBotix MB1240 Sensor | Arduino |
GND | GND |
+V | 5V |
Pin 3 | A0 |
اتصالات سنسور MB1240– پهنای پالس
MaxBotix MB1240 Sensor | Arduino |
GND | GND |
+V | 5V |
Pin 2 | Pin 2 |
نمونه کد آردوینو برای راه اندازی سنسور فاصله سنج MaxBotix MB1240 – ولتاژ خروجی آنالوگ
با مثال زیر میتوانید فاصلهی اندازهگیری شده را خوانده و آن را در مانیتور سریال نمایش دهید. این کد بسیار ساده است و در ادامه توضیحاتی در مورد راه اندازی سنسور فاصله سنج التراسونیک با استفاده از ولتاژ خروجی آنالوگ و عملکرد آن آورده شدهاست.
ابتدا کد زیر را با استفاده از Arduino IDE آپلود کنید.
/* Arduino example code for MaxBotix MB1240 XL-MaxSonar-EZ4 ultrasonic distance sensor: analog voltage output. More info: www.www.makerguides.com */
#define sensorPin A0
int distance = 0;
void setup() {
Serial.begin(9600);
}
void read_sensor() {
distance = analogRead(sensorPin) * 1;
}
void print_data() {
Serial.print("distance = ");
Serial.print(distance);
Serial.println(" cm");
}
void loop() {
read_sensor();
print_data();
delay(1000);
}
سپس باید خروجی زیر را در مانیتور سریال مشاهده نمایید:
توضیح کد
اولین گام، تعریف پایههای اتصالات است. عبارت define# به منظور تخصیص یک نام به یک مقدار ثابت مورد استفاده قرار میگیرد. هنگامی که برنامه کامپایل میشود، کامپایلر هر ارجاعی به این مقدار ثابت را با مقدار تعریف شده جایگزین میکند. بنابراین، در هنگام کامپایل شدن برنامه، هر جا که به sensorPin اشاره شده کامپایلر آن را با A0 جایگزین میکند.
#define sensorPin A0
در گام بعدی، باید یک متغیر برای ذخیرهی مقدار فاصلهی اندازهگیری شده تعریف کنید.
int distance = 0;
در تابع setup، ارتباط سریال را با بادریت 9600 مقداردهی میکنیم. سپس فاصلهی اندازهگیری شده را در مانیتور سریال نمایش خواهیم داد. شما میتوانید توسط کلیدهای Ctrl + Shift + M یا از مسیر Tools > Serial Monitor مانیتور سریال را باز کنید، همچنین مطمئن شوید که بادریت بر روی 9600 تنظیم شدهباشد.
void setup() {
Serial.begin(9600);
}
پس از آن، دو تابع read_sensor و print_data را ایجاد خواهیم کرد. در تابع read_sensor ، خروجی ولتاژ آنالوگ سنسور را با کمک تابع analogRead(pin) میخوانیم. بردهای آردوینو دارای یک مبدل آنالوگ به دیجیتال چند کانالهی 10 بیتی هستند. به این معنا که ولتاژ ورودی بین 0 و ولتاژ کاری را به مقادیر صحیح بین 0 و 1023 نگاشت میکنند. در آردوینو Uno، این مقدار برابر 5 ولت به ازای 1024 واحد یا 4.9 میلی ولت به ازای هر واحد خواهد بود.
سنسور MB1240 با ولتاژ تغذیهی 5 ولت، از ضریب (Vcc/1024 ) به ازای یک سانتیمتر یا 4.9 میلیولت به ازای یک سانتیمتر استفاد میکند. این امر مقدار analogRead را به سانتیمتر تبدیل میکند و سپس کافیست نتیجه را در 1 ضرب کنید.
analogRead (sensorPin) = distance in centimeters
void read_sensor() {
digitalWrite(triggerPin, HIGH);
delayMicroseconds(20);
digitalWrite(triggerPin, LOW);
duration = pulseIn(readPin, HIGH);
distance = duration / 58;
delay(100);
}
در تابع print_data فاصلهی اندازهگیری شده را در مانیتور سریال چاپ میکنیم.
void print_data() {
Serial.print("distance = ");
Serial.print(distance);
Serial.println(" cm");
}
در حلقهی loop، ابتدا با فراخوانی تابع read_sensor فاصله را بهدست آورده و سپس با فراخوانی تابع print_data دادهی حاصل را به مانیتور سریال ارسال میکنیم. در اینجا یک تأخیر 1000 میلیثانیه اضافه کردیم، اما میتوانید آن را به 100 میلیثانیه کاهش دهید. فرکانس خواندن از سنسور MB1240 ، برابر با 10 هرتز است، یعنی شما میتوانید در هر ثانیه 10 بار از سنسور داده دریافت کنید.
void loop() {
read_sensor();
print_data();
delay(1000);
}
نمونه کد آردوینو برای راه اندازی سنسور فاصله سنج MaxBotix MB1240 – پهنای پالس
در این مثال، از خروجی دیگر سنسور یعنی خروجی پهنای پالس استفاده خواهیم کرد.
/* Arduino example code for MaxBotix MB1240 XL-MaxSonar-EZ4 ultrasonic distance sensor: pulse width output. More info: www.www.makerguides.com */
#define sensorPin 2
long distance = 0;
long duration = 0;
void setup() {
pinMode(sensorPin, INPUT);
Serial.begin(9600);
}
void read_sensor() {
duration = pulseIn(sensorPin, HIGH);
distance = duration / 58;
}
void print_data() {
Serial.print("distance = ");
Serial.print(distance);
Serial.println(" cm");
}
void loop() {
read_sensor();
print_data();
delay(1000); }
توضیح کد
پس از تعریف پایههای اتصالات، دو متغیر duration و distance را ایجاد میکنیم. متغیر duration طول پالس ارسال شده توسط سنسور را ذخیره میکند. متغیر distance نیز برای ذخیرهی فاصلهی محاسبه شده مورد استفاده قرار میگیرد.
long distance = 0;
long duration = 0;
در تابع setup، علاوه بر مقداردهی ارتباط سریال، باید پایهی سنسور را به عنوان ورودی تنظیم کنیم. برای این کار از تابع pinMode (pin, mode) استفاده شدهاست.
void setup() {
pinMode(sensorPin, INPUT);
Serial.begin(9600);
}
تابع read_sensor متفاوت از مثال قبلی است. اکنون ما خروجی ولتاژ آنالوگ را اندازهگیری نخواهیم کرد، بلکه طول پالس ارسال شده توسط سنسور را اندازه میگیریم. برای این کار از تابع pulseIn(pin, value) استفاده میکنیم. این تابع منتظر میماند تا ابتدا مقدار پایه از LOW به HIGH تغییر کند، سپس زمانبندی را شروع میکند و منتظر میماند تا مقدار پایه دوباره به LOW تغییر و زمانبندی را متوقف سازد. در نهایت طول پالس را بر حسب میکروثانیه برمیگرداند.
پس از آن، میتوانیم فاصله را با تقسیم duration بر 58 محاسبه کنیم. برای سایر سنسورهای MaxBotix، می توانید این ضریب را در دیتاشیت مربوطه پیدا کنید.
void read_sensor() {
duration = pulseIn(sensorPin, HIGH);
distance = duration / 58;
}
ادامهی کدها مشابه مثال قبل است.
عملکرد مد تریگر راه اندازی سنسور فاصله سنج
تمام سنسورهای MaxSonar به طور پیشفرض در مد آزاد کار میکنند. یعنی تا زمانیکه تغذیهی سنسور قطع نشود به کار خود ادامه خواهند داد و هر 99 میلیثانیه 20 موج 42 کیلوهرتزی را ارسال میکنند (نرخ خواندن از سنسور MB1240، برابر با 10 هرتز میباشد، برای سایر سنسورها به دیتاشیت مراجعه کنید).
به طورکلی این سادهترین راه برای کار با سنسور است، زیرا لازم نیست خودتان آن را فعال کنید و تنها کافیست ولتاژ آنالوگ یا پهنای پالس را برای بهدست آوردن فاصله بخوانید.
برای برخی از کاربردها، مانند زمانیکه تغذیهی سنسور با باتری تأمین میشود، بهتر است سنسور را با یک تریگر راه اندازی کنید. به این معنا که شما میتوانید به سنسور بگویید که یک سیکل متغیر را آغاز کند، اما فقط درصورتیکه به آن فرمان داده باشید این امر امکان پذیر است. به این ترتیب، میتوانید بیشترین جریان عبوری از سنسور را، زمانیکه یک پالس سونار (sonar) ارسال میشود، کنترل کنید.
به منظور راه اندازی سنسور فاصله سنج التراسونیک با تریگر، از یک اتصال دیگر میان پایه 4 سنسور و آردوینو استفاده میکنیم. چنانچه مشابه مثالهای قبل این پایه را بدون اتصال باقی بگذارید، سنسور با نرخ تازهسازی ذکر شده در دیتاشیت تغییر میکند.
در صورت نیاز به فعال کردن سنسور، باید پایهی 4 را به پایهی Low منطقی متصل کنید. سپس وقتی میخواهید فاصله را بخوانید، باید پایهی 4 را برای حداقل 20 میکروثانیه به پایهی high منطقی متصل نمایید. بنابراین سنسور یک سیکل متغیر را آغاز میکند.
تصویر زیر اتصالات را برای این مثال به شما نشان میدهد.
در این مثال، از یک کلید فشاری برای راه اندازی سنسور استفاده شدهاست. به طوریکه یکی از پایهها را به زمین و پایه مقابل آن به پایه 4 آردوینو وصل میشود. سایر اتصالات در جدول زیر بیان شدهاست.
اتصالات سنسور فاصله سنج التراسونیک MB1240 – مد تریگر
Pin | Arduino |
GND | GND |
+V | 5V |
Pin 2 | Pin 2 |
Pin 4 | Pin 3 |
Button pin 1 | Pin 4 |
Button pin 2 | GND |
نمونه کد آردوینو برای راه اندازی سنسور فاصله سنج MaxBotix MB1240 – راه اندازی با کلید فشاری
از این کد میتوانید برای کنترل سنسور با یک تریگر استفاده کنید. در این حالت، زمانی که کلید را فشار میدهید، سنسور مقدار فاصله را اندازهگیری کرده و بر روی مانیتور سریال نمایش داده میشود.
/* Arduino example code for MaxBotix MB1240 XL-MaxSonar-EZ4 ultrasonic distance sensor with push button. More info: www.www.makerguides.com */
#define readPin 2
#define triggerPin 3
#define buttonPin 4
long distance = 0;
long duration = 0;
int buttonState = HIGH;
int previous = HIGH;
long time = 0;
long debounce = 200;
void setup() {
pinMode(readPin, INPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(triggerPin, OUTPUT);
digitalWrite(triggerPin, LOW);
Serial.begin(9600);
delay(3000);
Serial.println("Sensor is ready, waiting for button press!");
}
void read_sensor() {
digitalWrite(triggerPin, HIGH);
delayMicroseconds(20);
digitalWrite(triggerPin, LOW);
duration = pulseIn(readPin, HIGH);
distance = duration / 58;
delay(100);
}
void print_data() {
Serial.print("distance = ");
Serial.print(distance);
Serial.println(" cm");
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == LOW && previous == HIGH && millis() - time > debounce) {
read_sensor();
print_data();
time = millis();
}
previous = buttonState;
}
شما باید خروجی زیر را در مانیتور سریال مشاهده نمایید.
توضیح کد
اولین گام تعریف اتصالات است. ما از خروجی پهنای پالس سنسور برای خواندن فاصله استفاده خواهیم کرد.
#define readPin 2
#define triggerPin 3
#define buttonPin 4
علاوه بر متغیرهای duration و distance که در مثال قبل استفاده شد، به منظور ذخیرهی وضعیت کلید به متغیرهای جدید time و debounce نیاز داریم. چنانچه تریگرهای نادرست دریافت میکنید، میتوانید مقدار debounce را افزایش دهید.
long distance = 0;
long duration = 0;
int buttonState = HIGH;
int previous = HIGH;
long time = 0;
long debounce = 200;
در تابع triggerPin ،setup را به عنوان خروجی، read و buttonPin را نیز به عنوان ورودی تنظیم میکنیم. توجه داشته باشید که در تابع pinMode از INPUT_PULLUP استفاده شدهاست. مقاومتهای 20 کیلویی درون تراشهی Atmega تعبیه و پول آپ شدهاند که از طریق نرمافزار قابل دسترس هستند. این تنظیمات پایهی مربوط به کلید را هنگامی که فشرده نشده به وضعیت HIGH و زمانی که کلید فشرده شود به وضعیت LOW تغییر میدهد.
در مرحلهی بعد، پایهی تریگر را بر روی LOW تنظیم میکنیم، بنابراین سنسور شروع به تغییر نخواهد کرد. به منظور چاپ دادههای سنسور، ارتباط سریال را با بادریت 9600 آغاز میکنیم.
void setup() {
pinMode(readPin, INPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(triggerPin, OUTPUT);
digitalWrite(triggerPin, LOW);
Serial.begin(9600);
delay(3000);
Serial.println("Sensor is ready, waiting for button press!");
}
پس از آن، دو تابع read_sensor و print_data را تعریف میکنیم. همانطورکه در تابع read_sensor مشاهده میکنید، triggerPin برای 20 میکروثانیه بر روی High تنظیم شدهاست. به سبب این امر، سنسور یک پالس سونار ارسال میکند. سپس طول پالس خروجی را خوانده و آن را به فاصله تبدیل میکنیم (مشابه مثال قبل). در اینجا یک تأخیر 100 میلیثانیه اضافه شده، زیرا این حداقل زمان بین خواندن دادههاست. تابع print_data نیز مشابه مثالهای قبل عمل میکند.
void read_sensor() {
digitalWrite(triggerPin, HIGH);
delayMicroseconds(20);
digitalWrite(triggerPin, LOW);
duration = pulseIn(readPin, HIGH);
distance = duration / 58;
delay(100);
}
در حلقهی loop، ابتدا وضعیت کلید را خوانده (اینکه فشرده شده یا خیر) و آن را به عنوان buttonState ذخیره میکنیم. خط بعدی بررسی میکند که اولاً، کلید فشرده شده یا خیر (یعنی ورودی از HIGH به LOW تغییر کردهاست یا خیر) و ثانیاً، برای نادیده گرفتن نویز، مدت زمان کافی از آخرین باری که کلید فشرده شدهاست، میگذرد یا خیر. چنانچه صحیح باشند، تابع read_sensor و print_data را فراخوانی و تایمر ریست میشود. در نهایت، متغیر قبلی بر روی buttonState فعلی تنظیم میشود.
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == LOW && previous == HIGH && millis() - time > debounce) {
read_sensor();
print_data();
time = millis();
}
previous = buttonState;
}
در این مقاله نحوهی راه اندازی سنسور فاصله سنج التراسونیک MaxBotix MB1240 XL-MaxSonar-EZ4 با آردوینو به شما آموزش دادهشد. امیدواریم برای شما مفید و آموزنده بودهباشد. ما علاقهمندیم بدانیم چه پروژههایی را با کمک این سنسور انجام دادهاید. چنانچه سوال یا پیشنهادی دارید، آن را با ما در میان بگذارید.