وبلاگ

راه اندازی ماژول آلتراسونیک با آردوینو

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

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

آیا می‌دانستید با استفاده از سنسور آلتراسونیک SR04 می‌توانید به پروژه‌های آردوینو خود قدرتی همانند قدرت خفاش دهید؟

قدرتی که ما در مورد آن صحبت می‌کنیم، امکان تشخیص اشیاء در فاصله 13 فوتی (حدود 4 متر) است. همان‌طور که خفاش می‌تواند به‌راحتی این کار را انجام دهد، این سنسور نیز از چنین قابلیتی برخوردار است. اگر شما هم از خوردن رباتتان به دیوار می‌ترسید، حتما به یکی از این سنسور ها نیاز خواهید داشت!

از جمله مزایای این سنسور کم‌مصرف بودن (مناسب برای دستگاه‌های باتری دار)، قیمت ارزان و قابلیت ارتباط آسان با آن است. به علاوه، این سنسور بین کسانی که عاشق سرگرمی هستند، نیز بسیار شناخته شده است. البته نکته جالب در مورد این سنسور، شباهت عجیب آن به چشمان ربات‌های وال ای (Wall-E) است.  

در ادامه در مورد این سنسور و نحوه راه‌اندازی آن با آردوینو صحبت خواهیم کرد.

آلتراسونيك چيست؟

آلتراسونيك يك موج صوتي بوده كه فركانس آن بيشتر از محدوده شنوايي انسان است (موج فراصوت).

نمودار محدوده طیف فرکانسی امواج صوتی آلتراسونیک که از نوع فراصوت هستند.

گوش انسان قادر به شنيدن امواج صوتي با نوسانات 20 تكرار در ثانيه (سر و صداي عميق) تا 20000 تكرار در ثانيه (سوت بلند) است. آلتراسونيك داراي فركانسي بيش از 20 كيلوهرتز بوده و بنابراين اين موج صوتي توسط گوش انسان قابل شنيدن نيست.

مرور سخت‌افزاری ماژول سنسور آلتراسونیک SR04

هسته مركزي اين سنسور از دو ترنسديوسر آلتراسونيك تشكيل شده است. يكي از آن‌ها به‌عنوان فرستنده سيگنال الكتريكي را به پالس‌هاي صوتي آلتراسونيك 40KHz تبديل مي‌كند. گيرنده منتظر دريافت پالس‌هاي ارسالي مي‌شود. چنانچه چيزي دريافت كند، يك پالس در خروجي خود توليد مي‌كند. عرض اين پالس جهت تعيين فاصله‌اي كه موج طي كرده است، استفاده مي‌شود.

سنسور آلتراسونیک SR04 اندازه كوچكی دارد و در پروژه‌هاي رباتيك براي فاصله سنجي در رنج 2cm تا 400cm  (يك اينچ تا 13 فوت) با دقت 3mm قابل استفاده است. ولتاژ كاري اين سنسور 5 ولت بوده و مي‌توان آن را مستقیماً به آردوينو يا هر ميكروكنترلر 5 ولتي ديگري وصل نمود. مشخصات فني اين سنسور به‌صورت زير است:

DC 5Vولتاژ كاري
15mAجريان كاري
40KHzفركانس كاري
4mماكزيمم رنج فاصله سنجي
2cmمينيمم رنج فاصله سنجي
3mmدقت فاصله سنجي
15degreeزاويه اندازه گيري
10µS TTL pulseسيگنال ورودي تريگر
45x20x15mmابعاد
جدول مشخصات فنی سنسور SR04

پایه های سنسور آلتراسونيک  HC-SR04

در اين بخش نگاهي به پين‌هاي ماژول داريم

پایه های سنسور آلتراسونيك SR04
  • VCC : پين تغذيه ماژول بوده كه به پين 5 ولت آردوينو متصل مي‌شود.
  • Trig : اين پين براي تريگر كردن پالس صوتي آلتراسونیك استفاده مي‌شود.
  • Echo : وقتی‌که سيگنال بازگشتي دريافت مي‌شود، اين پين يك پالس توليد مي‌كند. طول پالس متناسب با مدت زماني است كه طول كشيده تا سيگنال ارسالي دريافت شود.
  • GND : پين زمين سنسور است كه به زمين آردوينو متصل مي‌شود.

سنسور فاصله‌سنج آلتراسونيک HC-SR04 چگونه كار می‌كند؟

هنگامی‌که يك پالس تريگر 10 ميكروثانيه‌اي به پين Trig اعمال شود، سنسور شروع به كار مي‌كند و 8 پالس صوتي 40KHz ارسال مي‌كند. الگوي اين رشته پالس 8 تايي به‌نوعی امضاي يكتاي سنسور ارسال‌کننده امواج است و به گيرنده سنسور اجازه تشخيص سيگنال ارسالي همان سنسور را در بين ساير سيگنال‌هاي آلتراسونيكي كه احتمالاً در محيط وجود دارند، خواهد داد (نويز آلتراسونيكي محيط).

پالس‌هاي هشت‌تایی آلتراسونيك توسط فرستنده در هوا منتشر مي‌شوند. در همين حين، مقدار منطقي پين Echo به‌صورت High خواهد شد تا فرايند دريافت سيگنال برگشتي را آغاز كند. چنانچه هيچ سيگنال برگشتي دريافت نشود، مقدار پين Echo پس از مهلت زماني 38 میلی‌ثانیه مجدداً Low  خواهد شد. بنابراين مي‌توان گفت كه پالس 38 میلی‌ثانیه به اين مفهوم است كه هيچ مانعي تا حد رنج نهايي فاصله‌سنجي سنسور آشكار نشده است.

نحوه عملکرد سنسور آلتراسونیک sr04 - زمانیکه هیچ مانعی در مسیر امواج نباشد، پالس 38 میلی ثانیه در پین Echo تولید می شود.

اگر پالس‌هاي ارسالي برگشت داده شوند، به‌محض دريافت توسط گيرنده سنسور مقدار پين Echo به‌صورت Low خواهد شد. بنابراين بسته به مدت‌زمانی كه دريافت سيگنال برگشتي طول كشيده، يك پالس با عرض 150 ميكروثانيه تا 25 ميلي‌ثانيه توليد خواهد شد.

نحوه عملکرد سنسور آلتراسونیک sr04 - زمانیکه مانعی در مسیر امواج باشد، پالس دریافتی برگشت می شود و پالس 500 میکروثانیه در پین Echo تولید می شود.

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

مثلت فرمول و رابطه فاصله، سرعت و زمان

اجازه بدهيد براي روشن شدن موضوع از يك مثال استفاده كنيم. فرض كنيد مانعي در مقابل سنسور قرار دارد و عرض پالس پين Echo برابر 500 ميكروثانيه باشد. اكنون محاسبه مي‌كنيم كه مانع در چه فاصله‌اي از سنسور قرار داشته است. از معادله زير استفاده مي‌كنيم:

Distance = Speed x Time

مقدار زمان را برابر 500µs  داريم. سرعت صوت در هوا نيز برابر 340m/s است. براي محاسبه فاصله لازم است سرعت را برحسب  cm/µs درنظر بگيريم. با كمك جستجوي Google به‌سادگی مي‌توانيد متوجه شويد كه سرعت صوت برحسب واحد مورد نظر  0.034cm/µs  است. بنابراين فاصله به‌صورت زير محاسبه مي‌شود:

Distance = 0.034 cm/µs x 500 µs

اما كار تمام نشده است! به ياد آوريد كه عرض پالس مشخص‌کننده زماني است كه سيگنال ارسال و پس از برخورد با مانع برگشت شده است. بنابراين لازم است نتيجه را بر 2 تقسيم كنيد.

Distance = (0.034 cm/µs x 500 µs) / 2

Distance = 8.5 cm

اكنون مشخص شد كه مانع پيش رو در فاصله 8.5 سانتيمتري سنسور بوده است.

برای راه اندازی سنسور آلتراسونیک SR04 با آردوینو به یکسری قطعات نیاز داریم که در ادامه به توضیح آنها می پردازیم.

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

  • ماژول میکروکنترلر آردوینو UNO
  • نمایشگر سبز 2*16 ال سی دی
  • ماژول فاصله سنج SR04 چینی
  • پین هدر 40*1 صاف نری
  • سیم برد بوردی 65 تایی
  • مینی برد بورد 400 سوراخ
  • مقاومت 220 اهم 1/4 وات
  • پتانسیومتر 5 کیلو اهم خوابیده
  • کابل نری USB نوع A به نری USB نوع B

 سیم‌کشی- را‌ه اندازی سنسور آلتراسونیک SR04 با آردوینو

اکنون‌که اطلاعات كافي در خصوص سنسور فاصله‌سنج آلتراسونيك HC-SR04 را در اختيار داريم نوبت به بررسي نحوه اتصال آن به آردوينو فرا رسيده است.

راه اندازی سنسور آلتراسونیک SR04 با آردوینو بسيار ساده است. سنسور را بر روي برد قرار دهيد و پين VCC و GND آن را به ترتيب به پين 5 ولت و زمين آردوينو متصل كنيد. نتيجه كار باید شبيه به شكل زير شود:

شماتیک راه اندازی سنسور آلتراسونیک SR04 با آردوینو UNO در حالت نرمال

 

اكنون به كد آردوينو براي تست و آزمون سنسور مي‌پردازيم.

كد آردوينو- استفاده از كتابخانه NewPing

بجاي تريگر كردن سنسور آلتراسونيك و اندازه‌گيري دستي عرض پالس سيگنال دريافتي در اين بخش از يك كتابخانه خاص استفاده مي‌كنيم. چندين كتابخانه براي اين كار وجود دارد كه متداول‌ترین آن‌ها كتابخانه “NewPing” نام دارد. ابتدا اين كتابخانه را از Bitbucket repo دانلود كنيد یا به‌سادگی بر روي لينك زير براي دريافت فايل zip. آن كليك كنيد.

NewPing_v1.9.0.zip  


 

براي  نصب اين كتابخانه نرم‌افزار Arduino IDE را باز كنيد و به Sketch > Include Library > Add .ZIP Library برويد و فايل دانلود شده‌ي NewPing.ZIP  را انتخاب كنيد. اگر براي نصب كتابخانه به اطلاعات بيشتري نياز داريد آموزش Installing an Arduino Library را مشاهده كنيد.

كتابخانه NewPing کاملاً تخصصي بوده و به شكل قابل توجهي كارايي برنامه را بهبود مي‌دهد. اين كتابخانه مي‌تواند تا 15 سنسور را هم‌زمان پشتيباني كند و خروجي را مستقیماً برحسب واحد‌هاي سانتي‌متر، اينچ و فاصله زماني ارائه كند.

كد برنامه به‌صورت زير است:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

// This uses Serial Monitor to display Range Finder distance readings

 

// Include NewPing Library

#include "NewPing.h"

 

// Hook up HC-SR04 with Trig to Arduino Pin 9, Echo to Arduino pin 10

#define TRIGGER_PIN 9

#define ECHO_PIN 10

 

// Maximum distance we want to ping for (in centimeters).

#define MAX_DISTANCE 400   

 

// NewPing setup of pins and maximum distance.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

float duration, distance;

 

void setup()

{

    Serial.begin(9600);

}

 

void loop()

{

    // Send ping, get distance in cm

    distance = sonar.ping_cm();

     

    // Send results to Serial Monitor

    Serial.print("Distance = ");

     

    if (distance >= 400 || distance <= 2)

    {

        Serial.println("Out of range");

    }

    else

    {

        Serial.print(distance);

        Serial.println(" cm");

    }

    delay(500);

}

خروجي برنامه بر روي سريال مانيتور به‌صورت زير خواهد بود.

خروجی مقادیر اندازه گیری شده فاصله هنگام اتصال نرمال سنسور sr04 به آردوینو بر روی سریال مانیتور

توضيح كد

برنامه بالا بسيار ساده بوده و به‌خوبی كار مي‌كند. اما اين برنامه فقط داراي رزولوشن اندازه‌گيري يك سانتی‌متر است. اگر بخواهيد فاصله را با دقت اعشار اندازه‌گيري كنيد مي‌توانيد بجاي اينكه از NewPing در مد distance استفاده كنيد، آن را در مد duration بكار بگيريد. کافی است اين خط برنامه‌ را

1

2

// Send ping, get distance in cm

distance = sonar.ping_cm();

با خط زير جايگزين كنيد.

1

2

duration = sonar.ping();

distance = (duration / 2) * 0.0343;

براي بهبود دقت اندازه‌گيري سنسور آلتراسونیک SR04 مي‌توان از تابع ديگري به نام “iterations” از كتابخانه NewPing استفاده نمود. عنوان اين دستور به معني تكرار كردن بوده و بدين مفهوم است كه به سمت چيزي بيش از یک‌بار برويم و اين دقیقاً همان كاري است كه مد iteration mode  انجام مي‌دهد. بجاي یک‌بار، چندين بار اندازه‌گيري انجام مي‌شود و قرائت‌هاي نامعتبر كنار گذاشته مي‌شود و متوسط بقيه اندازه‌گيري‌ها در نظر گرفته مي‌شود. به‌صورت پیش‌فرض، 5 بار اندازه‌گیری انجام خواهد شد. اما شما مي‌توانید به‌گونه‌ای تنظیم كنيد که هر تعداد تمايل داريد، اندازه‌گيري شود.

1

2

int iterations = 5;

duration = sonar.ping_median(iterations);

فاصله‌ياب از راه دور (Contactless Distance Finder)

در اين بخش پروژه‌اي از نحوه به‌کارگیری سنسور آلتراسونيك براي طراحي يك فاصله‌سنج از راه دور ارائه مي‌شود. در اين پروژه از يك ال سي دي 2×16 كاراكتري براي ايجاد يك ميله افقي جهت نمايش گرافيكي فاصله تا مانع و درج عدد فاصله در زير آن استفاده مي‌كنيم. چنانچه با اين ال سي دي آشنايي نداريد، از جزوه آموزشي زير استفاده كنيد.

اكنون نوبت به اتصال LCD به شكل زير است:

شماتیک نحوه اتصال آردوینو UNO به سنسور آلتراسونیک و ال سی دی 2×16

قبل از آپلود كردن كد لازم است كتابخانه LCDBarGraph را نصب كنيم. اين كتابخانه به رسم بارگراف افقي بر روي LCD بطوريكه طول ميله (bar) متناسب با ارزش آن تغيير كند، كمك خواهد كرد. اين كتابخانه را مي‌توانيد از Arduino Playground دانلود كنيد يا براي دانلود فايل آن، بر روی لينك زير كليك كنيد.

LcdBarGraph-1.5.zip  


 

پس از نصب كتابخانه، از كد زير استفاده كنيد.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

// includes the LiquidCrystal Library

#include <LiquidCrystal.h>

 

// includes the LcdBarGraph Library

#include <LcdBarGraph.h>

 

// Maximum distance we want to ping for (in centimeters).

#define max_distance 200

 

// Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

 

LcdBarGraph lbg(&lcd, 16, 0, 1); // Creates an LCD Bargraph object.

 

const int trigPin = 9;

const int echoPin = 10;

long duration;

int distance;

 

void setup()

{

    lcd.begin(16,2); // Initializes the interface to the LCD screen

     

    pinMode(trigPin, OUTPUT);

    pinMode(echoPin, INPUT);

}

 

void loop()

{

    // Write a pulse to the HC-SR04 Trigger Pin

    digitalWrite(trigPin, LOW);

    delayMicroseconds(2);

    digitalWrite(trigPin, HIGH);

    delayMicroseconds(10);

    digitalWrite(trigPin, LOW);

     

    // Measure the response from the HC-SR04 Echo Pin

    duration = pulseIn(echoPin, HIGH);

     

    // Determine distance from duration

    // Use 343 metres per second as speed of sound

    distance= duration*0.034/2;

     

    // Prints "Distance: <value>" on the first line of the LCD

    lcd.setCursor(0,0);

    lcd.print("Distance: ");

    lcd.print(distance);

    lcd.print(" cm");

 

    // Draws bargraph on the second line of the LCD

    lcd.setCursor(0,1);

    lbg.drawValue(distance, max_distance);

    delay(500);

}

خروجي به شكل زير خواهد بود:

نمایش خروجی بارگراف فاصله هنگام اتصال سنسور آلتراسونیک به آردوینو بر روی ال سی دی 2×16

توضيح كد

ابتدا لازم است كتابخانه LiquidCrystal را فراخواني كنيد و در گام بعد LcdBarGraph را ايجاد كنيد. رفرنس LiquidCrystal بايد به تابع constructor مربوط به LcdBarGraph داده شود. اين constructor سه متغير اضافي‌تر نيز نياز دارد. دومين متغير، تعداد كاراكتر ستوني LCD است (كه در پروژه ما برابر 16 است). دو متغير آخر دلخواه هستند و با استفاده از آن‌ها مي‌توان موقعيت دلخواه نمودار میله‌ای را تنظيم نمود.

1

2

// creating bargraph instance

LcdBarGraph lbg(&lcd, 16, 0, 1);

اكنون فاصله مانع تا سنسور محاسبه مي‌شود و با استفاده از تابع drawValue(value, maxValue) بارگراف بين 0 تا مقدار maxValue نمايش داده مي‌شود.

1

2

//display bargraph

lbg.drawValue(distance, max_distance);

اتصال سنسور HC-SR04 با مد سه سيم (3-Wire Mode)

در مد سه سيم شما بجاي دو اتصال فقط به يك اتصال به پين ديجيتال I/O آردوينو نياز داريد. بسياري از سنسورهاي آلتراسونيك نظير سنسور parallax ping بر مبناي اين مد كار مي‌كنند. در مد سه سيم يك پين I/O تكي هم به‌عنوان ورودي و هم به‌عنوان خروجي عمل مي‌كند. اين نوع عملكرد به اين دليل قابل اجرا است كه هيچ موقع ورودي و خروجي به‌صورت هم‌زمان مورد استفاده قرار نمي‌گيرند. با حذف نياز به يكي از  پين‌هاي آردوينو، در حقيقت مي‌توان از  اين پين براي كاربردهاي ديگر استفاده نمود. بعلاوه، در مواقع استفاده از برخي چيپ‌ها نظير ATtiny85 كه داراي تعداد محدودي پين I/O هستند، استفاده از مد سه سيم مي‌تواند بسيار مفيد واقع شود.

در شكل زير نحوه اتصال سنسور آلتراسونيك HC-SR04 در مد سه سيم به آردوينو نمايش داده شده است.

شماتیک نحوه اتصال سنسور HC-SR04 با مد سه سيم به میکروکنترلر آردوینو

 

همانگونه كه از شكل مشاهده مي‌شود هر دو پين Trig و Echo به پين شماره 9 آردوينو متصل شده است. تنها موردي كه در كد بايد اصلاح شود اين است كه پين شماره 9 براي هر دو پين Trig و Echo سنسور تعريف شود. باقی كد هيچ تفاوتي نخواهد داشت.

1

2

#define TRIGGER_PIN 9 // Trigger and Echo both on pin 9

#define ECHO_PIN 9

برای راه اندازی HC-SR04 چه محدوديت‌هایی وجود دارد؟

با در نظر داشتن دقت و عملكرد كلي مي‌توان گفت كه HC-SR04 بخصوص در مقايسه با ساير سنسورهاي فاصله‌سنج ارزان‌قیمت، كارايي بسيار خوبي دارد. البته به اين مفهوم نيست كه اين سنسور قادر به فاصله سنجي هر چیزی خواهد بود. در ادامه برخي از مواردی كه سنسور قادر به فاصله سنجي در آن موقعيت‌ نیست را ارائه می دهیم.

  • هنگامیکه فاصله بين سنسور و مانع بيشتر از 13 فوت (حدود 4 متر) باشد
هنگامیکه فاصله بین سنسور و مانع بیشتر از 13 فوت باشد، نمی‌تواند فاصله را اندازه گیری کند.
  • سطح مانع پيش رو صيقلي بوده و داراي خاصيت رفلكتي در زاويه كم باشد به‌گونه‌ای كه سيگنال صوتي ارسالي به سمت سنسور بازگشت داده نشود.
هنگامیکه سطح مانع صيقلي و داراي خاصيت رفلكتي در زاويه كم باشد، سنسور sr04 نمی تواند فاصله را اندازه بگیرد.
  • اندازه مانع پيش روي سنسور آنقدر كوچك باشد كه سيگنال برگشتي به سمت سنسور بازگشت داده نشود. همچنين، اگر سنسور آلتراسونیک SR04 در پائين وسيله مورد نظر كار گذاشته شود، ممكن است هيچ سيگنالي از سمت سطح برگشت داده نشود.
هنگامیکه اندازه مانع آنقدر كوچك باشد كه سيگنال بازگشت داده نشود، sr04 نمی تواند فاصله را بسنجد.
  • هنگام آزمايش با سنسور متوجه شديم كه برخي اجسام با سطح نرم و غیرمنظم (مانند حيوانات عروسكي)، بيشتر از آنكه سيگنال را برگشت دهند آن را جذب مي‌كنند و بنابراين تشخيص آن‌ها براي سنسور مشكل خواهد بود.
سنسور آلتراسونیک sr04 نمی تواند اجسام با سطح نرم و غیرمنظم مانند خرس عروسکی را تشخیص دهد.

تأثیر حرارت بر اندازه‌گیری فاصله

سنسور آلتراسونیک SR04 در اغلب پروژه‌ها نظير سيستم تشخيص مهاجم و سيستم آلارم مجاورتي دقت قابل قبولي دارد. اما در مواردي ممكن است شما تمايل به طراحي سيستم فاصله سنجي در فضاي بيرون با شرايط دمايي غیرمعمول داشته باشد (خيلي گرم يا بسيار سرد). در چنين موقعيت‌هايي بايد دقت كنيد كه سرعت صوت در هوا بسته به ميزان دما، فشار و رطوبت تغيير خواهد كرد. با توجه به استفاده از مقدار سرعت صوت در هوا در محاسبه فاصله‌ سنسور تا مانع، اندازه‌گيري سنسور در شرايط محيطي غيرمعمول تحت تأثیر قرار خواهد گرفت. چنانچه مقدار دما (C°) و رطوبت را داشته باشيد، سرعت صوت را می‌توانيد از رابطه زير بدست آورید.

Speed of sound m/s = 331.4 + (0.606 * Temp) + (0.0124 * Humidity)

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

رمز عبورتان را فراموش کرده‌اید؟

ثبت کلمه عبور خود را فراموش کرده‌اید؟ لطفا شماره همراه یا آدرس ایمیل خودتان را وارد کنید. شما به زودی یک ایمیل یا اس ام اس برای ایجاد کلمه عبور جدید، دریافت خواهید کرد.

بازگشت به بخش ورود

کد دریافتی را وارد نمایید.

بازگشت به بخش ورود

تغییر کلمه عبور

تغییر کلمه عبور

حساب کاربری من

سفارشات

مشاهده سفارش

سبد خرید