معرفی و راه‌اندازی ماژول فاصله‌سنج التراسونیک با آردوینو

یکشنبه, 13 تیر 1395 19:27
این مورد را ارزیابی کنید
(10 رای‌ها)

این مطلب بخش پنجم از آموزش جامع آردوینو (مبتدی و پیشرفته) است. در این آموزش با سنسور فاصله‌سنج التراسونیک (Ultrasonic) یا فراصوت آشنا شده و خواهید توانست فاصله اجسام خارجی تا سنسور را به کمک آردوینو اندازه‌گیری کنید. با سنسور التراسونیک می‌توانید کارهای جالبی انجام بدهید. مثلا می‌توانید یک ربات مسیریاب ساخته و با سنسور التراسونیک موانع را تشخیص دهید یا اینکه با سنسور التراسونیک ورود اشخاص به منزل‌تان را زمانی که خودتان حضور ندارید متوجه شوید.

 قطعات مورد نیاز:

برد آردوینو و کابل رابط

1 عدد
ماژول فاصله سنج آلتراسونیک HC-SR04 1 عدد
سنسور دما و رطوبت DHT22 1 عدد  
مقاومت 10kΩ 1 عدد
سیم جامپر 1 بسته
برد بورد 1 عدد

 


امواج صوتی

سنسور التراسونیک از امواج فراصوتی برای سنجش استفاده می‌کند. این باعث می‌شود تا تفاوتی در استفاده از آن در محیط روشن یا تاریک وجود نداشته باشد. موج صوتی یک نوع موج مکانیکی است که معمولا به صورت یک جبهه فشاری حرکت می‌کند. البته انواع دیگری از امواج مکانیکی نیز وجود دارد که خارج از بحث ماست. ویژگی امواج مکانیکی نیاز به وجود محیط مادی برای انتقال است. این امواج می‌توانند در گازها، مایعات یا جامدات منقل شوند. تفاوت مهم محیط‌های مختلف در انتشار امواج صوتی، سرعت صوت در آنهاست. هرچه چگالی محیط بیشتر باشد، سرعت انتشار موج صوتی در آن نیز بیشتر خواهد شد. برای مثال، در شرایط یکسان سرعت انتشار موج صوتی در محیط جامد بیشتر از مایع و در محیط مایع بیشتر از گاز است. در ادامه خواهید دید که این موضوع در نحوه استفاده از سنسور التراسونیک اهمیت دارد. موج صوتی می‌تواند فرکانس‌های مختلفی داشته باشد و می‌توان بر این اساس آنها را دسته‌بندی کرد. امواج التراسونیک یا فراصوت دسته‌ای از امواج صوتی است که فرکانس آن بالاتر از محدوده شنوایی انسان (kHz ٢٠) است.


نحوه عملکرد سنسور التراسونیک

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

امواج التراسونیک خفاش

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

سنسور التراسونیک

اگر به پشت سنسور التراسونیک توجه کنید، سه تراشه وجود دارد. یکی سیگنال التراسونیک را تولید کرده، دیگری سیگنال التراسونیک را دریافت کرده و تراشه سوم داده‌های آنالوگ را به دیجیتال تبدیل کرده و به میکروکنترلر می‌فرستد.

تراشه های سنسور التراسونیک

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

1رابطه التراسونیک

از آنجایی که زمان اندازه‌گیری شده از سنسور التراسونیک، زمان رفت و برگشت موج است، برای محاسبه فاصله باید نصف این زمان در نظر گرفته شود:

2رابطه التراسونیک

فاصله سنجی التراسونیک

 


انواع سنسور التراسونیک

اگر نگاهی به محصولات التراسونیک در بازار بیاندازید، چندین نوع سنسور پیدا می‌کنید. نمونه‌هایی مانند HC-SR04 ، HC-SR05 ، SRF06 ، US-100 و JSN-SRF04T . نحوه کارکرد این سنسورها تقریبا یکسان است و تفاوت آنها عمدتا به میزان دقت، محدوده کاری، ضد آب بودن و غیره مربوط می‌شود. پرکاربردترین سنسور التراسونیک ماژول HC-SR04 است که یک سنسور ارزان قیمت و با دقت مناسب است. محدوده کاری این سنسور cm ٢ تا m ٤ و دقت آن cm ٠.٥ است.


راه‌اندازی اولیه سنسور التراسونیک

ساده‌ترین روش کار با ماژول التراسونیک ثابت در نظر گرفتن سرعت صوت است. در این حالت معمولا سرعت صوت را چیزی در حدود m/s ٣٣٤ در نظر می‌گیرند. ابتدا به روش ساده فاصله‌سنجی و سپس اندازه‌گیری فاصله با دقت بالاتر را انجام می‌دهیم.
ماژول التراسونیک دارای ٤ پایه است. نام هر پایه در کنار آن نوشته شده است. دو پایه VCC و GND ماژول را به 5V و GND آردوینو و پایه‌های Trig و Echo را به دو پایه دیجیتال (پایه ٢ و ٣ دیجیتال) آردوینو وصل کنید. پایه Trig ورودی ماژول است و فرمان ارسال موج التراسونیک به آن وارد می‌شود. پایه Echo خروجی ماژول است و به موج دریافتی از محیط حساس است.

 

مدار سنسور dht11

 

در نرم‌افزار آردوینو پایه‌ Trig را به عنوان خروجی و Echo را به عنوان ورودی تعریف کنید. دستور مهمی که باید در این بخش معرفی کنیم، دستور pulseIn است. با استفاده از این دستور در آردوینو می‌توانید طول زمانی یک پالس که به پین آردوینو وارد می‌شود را اندازه بگیرید. مدت زمان محاسبه شده توسط pulseIn بر حسب میکروثانیه است. در صورتی که سیگنالی که می‌خواهید اندازه بگیرید، یک پالس با سطح ولتاژ High است (یعنی قبل از به وجود آمدن پالس، سیگنال Low است) در دستور pulseIn عبارت LOW و در صورتی که سیگنالی که می‌خواهید اندازه بگیرید، یک پالس با سطح ولتاژ Low است (یعنی حالت قبل از به وجود آمدن پالس، سیگنال High است) در دستور pulseIn عبارت HIGH را وارد کنید. برای مثال:

time=pulseIn(pin,HIGH)

یا

time=pulseIn(pin,LOW)


برای ارسال یک موج التراسونیک جهت اندازه‌گیری فاصله باید به مدت µs ١٠ پایه Trig را فعال کنید. علت این مقدار این است که برای دستور pulseIn پالس مورد نظر باید حداقل μs ١٠ عرض داشته باشد. با این کار ٨ پالس التراسونیک با فرکانس kHz ٤٠ به محیط ارسال می‌شود. این طول زمانی به اندازه‌ای کوتاه است که تاثیر چندانی در دقت اندازه‌گیری ندارد. جهت اطمینان از صحت ارسال موج، قبل از فرمان انتشار موج، برای یک مدت کوتاه پایه Trig را Low کنید. پس از ارسال پالس، یلافاصله دستور pulseIn را بر روی پین Trig اجرا کنید تا اندازه‌گیری زمان شروع شود. از آنجایی که می‌دانیم که محدوده کاری این سنسور بین ٢ تا ٤٠٠ سانتی‌متر است، مقادیر خارج از این محدوده دقیق نبوده و آنها را حذف کنید. قبل از اینکه کد ما را ببینید، سعی کنید خودتان برنامه راه‌اندازی سنسور التراسونیک را در آردوینو بنویسید. بعد از آن برنامه ما را با کد خودتان مقایسه کنید.

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com

*/

#define trigger 2
#define echo 3

void setup()
{
  Serial.begin(9600);
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
}

void loop()
{
  digitalWrite(trigger, LOW);
  delayMicroseconds(2);
  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);
  float time = pulseIn(echo, HIGH);
  float velocity = 334;
  float distance = ((time / 2) * velocity) * 0.0001; // conversion to cm
  if (distance >= 2 && distance <= 400)
  {
    Serial.print("Distance= ");
    Serial.println(distance);
  }
  else
  {
    Serial.println("Out of range");
  }
  delay(1000);
}

راه اندازی سنسور التراسونیک با دقت بالا

همان طور که پیشتر نیز گفته شد مشخصات محیط مخصوصا چگالی آن، در سرعت انتشار امواج صوتی اثرگذار است. سرعت انتشار صوت تحت شرایط خاصی معمولا برابر با m/s ٣٣٤ در نظر گرفته می‌شود. این مقدار معمولا چندان تغییر نمی‌کند اما اگر بخواهید یک اندازه‌گیری دقیق داشته باشید، بهتر است که اثر عوامل مختلف بر سرعت صوت را در نظر بگیرید. مهمترین این عوامل، دما و رطوبت نسبی موجود در هوا هستند که به نوبه خود بر چگالی هوا اثر می‌گذارند. نحوه تاثیر این عوامل بر سرعت صوت با استفاده از آزمایش بررسی شده و نهایتا رابطه‌ای بین سرعت صوت با دما و رطوبت هوا به دست آمده است که دقت نسبتا خوبی دارد. با داشتن این رابطه می‌توانید سرعت صوت در هوا را به دست آورید:

3رابطه التراسونیک

که در آن v سرعت صوت در هوا، T دمای هوا بر حسب درجه سلسیوس و RH رطوبت نسبی هوا است.
نحوه اتصال ماژول التراسونیک مانند حالت قبل است. برای محاسبه سرعت صوت لازم است تا دما و رطوبت هوا را اندازه بگیریم. به این منظور از سنسور اقتصادی و نسبتا دقیق DHT22 استفاده کرده‌ایم. این سنسور ٤ پایه دارد که اگر قسمت شبکه‌ای آنرا روبروی خود بگیرید، پایه‌های آن از سمت چپ به ترتیب VCC، Data، آزاد و GND است. دقت کنید که پایه سوم به جایی وصل نمی‌شود. پایه‌های VCC و GND را به 5V و GND آردوینو و Data را به یک پایه دیجیتال (پایه ٧ دیجیتال) وصل کنید. همچنین این پایه را با یک مقاومت kΩ ١٠ به سر مثبت مدار وصل کنید. اگر می‌خواهید در مورد این سنسور بیشتر بدانید، پیشنهاد می‌کنم معرفی و راه‌اندازی سنسورهای دما و رطوبت را مطالعه کنید.

سنسور dht22

برنامه آردوینو نسبت به حالت قبل چند تفاوت جزئی دارد. اول اینکه باید کتابخانه dht را فراخوانی کرده و میزان دما و رطوبت را اندازه بگیرید. دوم اینکه رابطه سرعت صوت را بر حسب دما و رطوبت بنویسید. رابطه سرعت صوت را در این برنامه به صورت یک عبارت با استفاده از دستور define تعریف کرده‌ایم هرچند که می‌توانستید این رابطه را در حلقه loop نیز تعریف کنید.

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com

*/

#define trigger 2
#define echo 3
#define velocity 331.4 + temperature * 0.606 + humidity * 0.0124
#include <dht.h>
dht DHT;
#define DHT22_PIN 7

void setup()
{
  Serial.begin(9600);
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
}

void loop()
{
  DHT.read(DHT22_PIN);
  float temperature = DHT.temperature;
  float humidity = DHT.humidity;
  digitalWrite(trigger, LOW);
  delayMicroseconds(2);
  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);
  float time = pulseIn(echo, HIGH);
  float distance = ((time / 2) * velocity) * 0.0001; //conversion to cm
  if (distance >= 2 && distance <= 400)
  {
    Serial.print("Distance= ");
    Serial.println(distance);
  }
  else
  {
    Serial.println("Out of range");
  }
  delay(1000);
}

نتیجه‌گیری

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

خواندن 27008 دفعه
داوود درستکار

داوود درستکار دانش‌آموخته کارشناسی مهندسی مکانیک از دانشگاه صنعتی اصفهان و کارشناسی ارشد از دانشگاه تهران است. وی همچنین عضو تیم تحقیقاتی مرکز سیستمها و فناوریهای پیشرفته دانشگاه تهران (CAST) است. داود مسلط به طراحی و تحلیل سیستم‌های دینامیکی، طراحی و ساخت ربات، کنترل سیستم‌های غیرخطی و پیاده‌سازی سیستم‌های هوشمند با استفاده از آردوینو است. مهمترین علاقه او در حوزه رباتیک، پرنده‌های بدون سرنشین، رباتهای توانبخشی و ساخت تجهیزات هوشمندسازی و کنترل می‌باشد.

کاربرانی که در این گفتگو شرکت کرده اند

نظرات (57)

  1. کاظم

با سلام
من می‌خوام با استفاده از سنسور التراسونیک و برد ادرینو یک مخزن شیشه شور را روشن کنم که وقتی دست زیرش قرار میگیره روشن و بعد از ده ثانیه خاموش بشه کسی می تونه کمک کنه

 
  1. پشتیبانی    کاظم

سلام دوست عزیز

شما می تونی به آموزش های زیر از سایت صنعت بازار مراجعه کنید و مطابق با اون کدهای مدنظر رو برای پروژه خودتون تغییر بدید:

معرفی و راه‌اندازی پتانسیومتر، انکودر و سروو موتور با آردوینو: https://bit.ly/37s47iy
معرفی و راه‌اندازی...

سلام دوست عزیز

شما می تونی به آموزش های زیر از سایت صنعت بازار مراجعه کنید و مطابق با اون کدهای مدنظر رو برای پروژه خودتون تغییر بدید:

معرفی و راه‌اندازی پتانسیومتر، انکودر و سروو موتور با آردوینو: https://bit.ly/37s47iy
معرفی و راه‌اندازی ماژول فاصله‌سنج التراسونیک با آردوینو: https://bit.ly/2T3XquW
معرفی و راه‌اندازی موتور DC با آردوینو: https://bit.ly/34b1nEt
معرفی و راه‌اندازی انواع رله با آردوینو: https://bit.ly/3keFUjr

به عنوان مثال در این کد در قسمتی که گفتیم اگر فاصله بین 2 و 400 بود می تونی اضافه کنین که یک پایه رو یک کنه و اون رو به یک ماژول رله بدی که به موتور پمپ شما متصل هست.

موارد زیر هم می تونه به راحتی شمارو کمک کنه:

https://bit.ly/3j5EFBS
https://bit.ly/3m4GlgX
https://bit.ly/2T9IEmd

موفق باشید

ادامه مطلب
 
  1. سجاد

سلام بااین ماژول میشه زیرآب یک ریموت کنترل ساخت که با فعال شدن التراسونیک زیر آب صوت را تو سطح گیرنده دریافت کرد وله یک دستگاه فرمان داد اگر امکانش هست شماره تماس بهم بدین بهتون زنگ بزنم ممنون

 
  1. پشتیبانی    سجاد

سلام سجاد عزیز
این سنسور ضد اب نبوده و باید خودتون این قابلیت رو ایجاد کنید ولی قطعا زیر اب رینج فاصله سنجی اون کمتر میشه. معمولا برای این کار از ماژول هایی مثل "Waterproof JSN-SR04T" استفاده میشه که می تونید به لینک زیر برای این منظور مراجعه...

سلام سجاد عزیز
این سنسور ضد اب نبوده و باید خودتون این قابلیت رو ایجاد کنید ولی قطعا زیر اب رینج فاصله سنجی اون کمتر میشه. معمولا برای این کار از ماژول هایی مثل "Waterproof JSN-SR04T" استفاده میشه که می تونید به لینک زیر برای این منظور مراجعه کنید:
https://bit.ly/3hAYVu8
موفق باشید

ادامه مطلب
 
  1. er

سلام
خروجی کار رو کجا می تونیم ببینیم
یعنی فاصله رو کجا می نوسه؟

 
  1. پشتیبانی    er

سلام دوست عزیز
در سریال مانیتور Arduino IDE نمایش داده میشه.
موفق باشید

 
  1. قاسمی

سلام و خدا قوت
از سایت بسیار خوب و مفید و کاملتون نهایت تشکر را دارم و براتون آرزوی موفقیتهای بیشتر می کنم.

 
  1. پشتیبانی    قاسمی

سلام جناب قاسمی

خیلی ممنون از نظرات پر مهر شما. هدف تیم ما جلب رضایت شما دوستان عزیز است.
موفق باشید

 
  1. Y

سلام از کجا باید بفهمیم که پینی که به یک ماژول مثل فاصله یا یه ماژول دیگه متصل است رو روی out put تعریف کنیم یا روی input ؟
میشه یه سایت رو بهم معرفی کنید که اگه سوالی در مورد اردیونو و کدهاش داشتم از اونجا بپرسم و سریع پاسخ بدن

 
  1. پشتیبانی    Y

سلام دوست عزیز
برای اطلاع از نوع پین های ماژول به اطلاعات نوشته شده روی برد اون و یا راه بهتر مراجعه به دیتاشیت محصول است.
برای آردوینو هم آموزش های سایت ما به صورا کاربردی قرار داده شده که می تونین دنبال کنید و سوالی بود در قسمت نظرات همان آموزش...

سلام دوست عزیز
برای اطلاع از نوع پین های ماژول به اطلاعات نوشته شده روی برد اون و یا راه بهتر مراجعه به دیتاشیت محصول است.
برای آردوینو هم آموزش های سایت ما به صورا کاربردی قرار داده شده که می تونین دنبال کنید و سوالی بود در قسمت نظرات همان آموزش و یا در بخش پرسش و پاسخ (انجمن) سایت صنعت بازار مطرح کنید. همچنین, با سرچ در فروم های مختلف می تونین به پاسختون برسید.
موفق باشید

ادامه مطلب
 
  1. امید

سلام و ممنون از اموزش خوبتون
وقتی سیم های پایه echo و triger به اردونیو بلند تر از 20 سانت میشه ماژول اولتراسونیک کار نمیکنه و صفر برمیگردونه ایا راهی هست برای حل این مشکل؟
ممنونم

 
  1. پشتیبان    امید

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

سلام امید عزیز
ممنون از نظرتون
بله این مورد ممکنه به دلیل افت ولتاژ در طول سیم رخ بده. اگه فاصله خیلی بیشتر از 20 سانت نیست شاید بتونید از یک سیم با مقاومت کمتر استفاده کنید تا این مورد پیش نیاد. اگر خیلی بیشتره، میشه به روشهایی حل کرد این مشکل رو که البته خیلی ساده یا ارزان نیستند. مثلا یه راه این هست که منبع تغذیه 5 ولت مجزا در نظر بگیرید و با یک مدار ترانزیستوری ولتاژ مسیر رو تقویت کنید. راه دیگه اینه که (اگه مسافت زیاده- مثلا چند متر یا بیشتر) میتونید از یک ماژول بلوتوث یا وایرلس برای انتقال اطلاعات با آردوینو استفاده کنید.

ادامه مطلب
 
  1. محمد حسین

ایا میشود ب سنسور فرکانس دهیم تا شیِ مورد نظر را پیدا کند

 
  1. پشتیبان    محمد حسین

سلام محمدحسین عزیز
میشه روشی که مد نظرتون هست رو توضیح بدین؟
ضمنا این ماژول فرکانس ثابت داره و قابل تغییر نیست. (مگر با دستگاری مدارش)

 
  1. شبنم

سلام
آیا میشه از این روش برای بدست آوردن تراز سطح آب اطراف یک مانع درکانالهای آزمایشگاهی هم استفاده کرد؟ راه پیشنهادی شما چیه؟ممنون

 
  1. پشتیبان    شبنم

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

 
  1. alireza

سلام. لطفا در مورد سنسور سطح اب با سرعت بالا بیشتر توضیح بدید یا نوعش رو ذکر کنید .. تشکر از مطالب خوبتون.

 
  1. Reza

سلام من این برنامه اولی رو نوشتم ولی اخطار میده که serial was not declared in this scope
نمیدونم چرا من درست نوشتم
این آیا به این گزینه ی بالای صفحه ربط نداره (سریال مانیتور)
ممنون میشم راهنمایی کنید سپاس

 
  1. پشتیبان    Reza

سلام رضا عزیز
اول Serial رو با حرف بزرگ بنویسید.

 
هیچ نظری در اینجا وجود ندارد
بارگذاری بیشتر ...

نظر خود را اضافه کنید.

ارسال نظر بعنوان یک مهمان
پیوست ها (0 / 3)
مکان خود را به اشتراک بگذارید
عبارت تصویر زیر را بازنویسی کنید. واضح نیست؟

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

ما را دنبال کنید:

Copyright © 2017-2018 | Sanatbazar.com