فاصله سنج با ماژول التراسونيک و رزبری پای

فاصله سنج با ماژول التراسونيک و رزبری پای ، معمولا در کاربرد هاي صنعتي و غير صنعتي از يک فرستنده التراسونيک و يک گيرنده يا حسگر التراسونيک استفاده مي شود. نحوه عملکرد به اين صورت مي باشد که ابتدا فرستنده موج التراسونيک که موجي در رنج فرکانس التراسونيک است را ارسال مي کند و اين موج پس از برخورد به مانع بازگشت مي کند و گيرنده اين موج بازگشتي را دريافت مي کند. حال با توجه به زمان و طيف فرکانس بازگشتي مي توان به اطلاعاتي از قبيل عمق،نوع، سرعت و … مانع دست يافت.در اين قسمت هدف تشخيص فاصله با سنسور اولتراسنويک است که در ادامه با نحوه ي راه اندازي اين سنسور را با رزبري پاي آشنا خواهيم شد. براي اين کاربرد از رايج ترين ماژول هاي التراسونيک موجود در بازار ماژول SRF04 و SRF05 مي باشد.در ادامه با میکرو دیزاینر الکترونیک باشید.

فاصله سنج با ماژول التراسونيک و رزبری پای

ماژول

اکثر ماژول هاي التراسونيک(سنجش مسافت) (Ultrasonic Ranging Module) از دو قسمت فرستنده و گيرنده تشکيل شده اند.قسمت فرستنده در کسري از ثانيه امواج التراسونيک را ارسال مي کند اين امواج پس از برخورد به جسم بازتاب داده مي شوند. وظيفه قسمت گيرنده دريافت امواج بازتابي از جسم است.

گيرنده و فرستنده ماژول هاي HC-SR04 و HC-SR05 در کنار يکديگر  قرار دارند و مي توانند جسم هاي در فاصله 2 تا 300 ساتي متر را با دقت قابل قبولي تشخيص دهند. البته ماژول هايي نيز وجود دارند که قسمت گيرنده و فرستنده به صورت جدا از يکديگر طراحي شده اند و مي توان گيرنده و فرستنده را رويروي يکديگر قرار داد و اکثرا براي مقاصدي همچو تشخيص مانع استفاده مي شوند.

ماژول SRF05 نسخه تکامل يافته SRF04 مي باشد. اين نسخه جديد دو مد کاري را پشتيباني مي کند و 5 پايه جهت کار با با ماژول را در اختيار قرار مي دهد. اما ماژول SRF04 داراي 4 پايه مي باشد و تنها يک مد کاري را پشتيباني مي کند.هردوي اين ماژول ها داراي يک مد کاري مشترک هستند اين مد کاري بانام مد1 شناخته ميشود.در اين قسمت تنها از مد کاري 1 استفاده شده .

مطلب پیشنهادی:  آموزش راه اندازی سروو موتور با رزبری پای

راه اندازي ماژول

همان طور که در دياگرام مشخص شده است براي تريگ ماژول ابتدا بايد يک پالس با عرض حداقل 10 ميکرو ثانيه به پايه Trigger اعمال کنيم. ماژول به صورت اتوماتيک 8 عدد پالس با فرکانس 40 کيلو هرتز ارسال ميکند. وقتي که پالس ها ارسال شد پايه ECHO يک ميشه و تا زماني که برگشت پالس ها از جسم را دريافت نکند اين پايه يک باقي ميماند. پس با اندازه گيري مدت زماني که اين پايه در سطح منطقي 1 بوده است ميتوان زمان رفت و برگشت صوت را بدست آورد. براي اندازه گيري پالس روي پايه ECHO بايد از تايمر استفاده کرد. بعد از اطلاع از زمان رفت و برگشت سيگنال اولتراسونيک با استفاده از رابطه زير فاصله سنسور تا مانع به راحتي محاسبه مي شود.

D=(T/2)(340*100)

سرعت صوت: سرعت امواج التراسونيک برابر با سرعت صوت و عدد ثابتي برابربا  340متر بر ثانيه است.

زمان: مدت زماني سيگنال روي پايه ي ECHO در وضعيت يک منطقي قرار دارد.اين پارامتر بر حسب میکرو ثانيه است.

فاصله: فاصله ی ماژول تا مانع بر حسب Cm.

فاصله سنج با ماژول التراسونيک و رزبری پای

محدوديتها

اولين وشايد بزرگترين محدوديتي که در راه اندازي  اين سنسور در رزبري پاي وجود دارد مثئله ي سنجش زمان با تايمر است.چون در رزبري تايمري به صورت سخت افزاري وجود ندارد. بايد اين مشکل را به صورت نرم افزاري حل کرد. برای سنجش زمان در زبان سی کتابخانه ای با نام time.h  sys/وجود دارد که دارای مجموعه ای از توابع میباشد که زمان سیستم را باز میگردانند.تابعی که در این پروژه برای سنجش زمان استفاده شده تابع gettimeofday میباشد.

مطلب پیشنهادی:  آموزش کنترل موتور DC با رزبری پای

توضیحات برنامه

در برنامه ی فوق بعد از تریگر کردن ماژول با پایه ی Trig در داخل یک حلقه ی while منتظر high  شدن پایه ی  echo ماژول میمانیم.سپس با تابع gettimeofday زمان فعلی سیستم را دریافت میکنیم  و در ساختمانی با نام tv1 قرار میدهیم و دوباره در یک حلقه ی while دیگر منتظر low شدن پایه ی echo میمانیم و یک بار دیگر زمان فعلی سیستم را با تابع gettimeofday دریافت میکنیم  و در ساختمانی با نام tv2 قرار میدهیم .به این ترتیب با تفریق زمان ارسال امواج با زمان دریافت امواج میتوان به فاصله ی جسمی که روبه روی این ماژول قرار دارد با رابطه ای که گفته شد  بدست آورید.

نکته ي مهمي در سيم بندي رزبري با سنسور بايد مورد توجه قرار دهيد استفاده از تقسيم کننده ي ولتاژ مقاومتي به منظور کاهش سطح ولتاژ اعمالي به رزبري توسط سنسور است.مقدار مقتومتها 330Ω  و 470Ω   ميباشد.

/*******************************
* Ultra Sonic Raning module Pin VCC should
* be connected to 5V power.
******************************/
#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>
#define Trig 4
#define Echo 17
void ultraInit(void)
{
pinMode(Echo, INPUT);
pinMode(Trig, OUTPUT);
}
float disMeasure(void)
{
struct timeval tv1;
struct timeval tv2;
long time1, time2;
float dis;
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(10); //send out ultrasonic pulses

while(!(digitalRead(Echo) == 1));
gettimeofday(&tv1, NULL); //get current time
while(!(digitalRead(Echo) == 0));
gettimeofday(&tv2, NULL); //get current time
time1 = tv1.tv_sec * 1000000 + tv1.tv_usec; //microsecond time
time2 = tv2.tv_sec * 1000000 + tv2.tv_usec;
dis = (float)(time2 - time1) / 1000000 * 34000 / 2; //calculate the distance
return dis;
}
int main(void)
{
float dis;
if(wiringPiSetupGpio() == -1){ //when initialize wiring failed,print messageto screen
printf("setup wiringPi failed !");
return 1; 
}
ultraInit();
while(1){
dis = disMeasure();
printf("%0.2f cm\n\n",dis);
delay(300);
}
return 0;
}

نویسنده : این مقاله توسط دوست عزیم آقا میثم سعیدی برامون ارسال شده.

مطلب پیشنهادی:  اتصال سنسور رطوبت DHT22 به رزبری‌پای

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

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

3 دیدگاه

  1. محمدکریم آفرین

    سلام و تشکر از مطالب جدید و آموزنده شما.

  2. سلام
    بزرگوار نیاز دارم عرض یه نوارپلاستیکی که از دستگاه بیرون میاد ودائم کنترل کنم ودر صورت کم یا زیاد شدن بلافاصله مطلع بشم.مثلا با وب کم یا هرسنسور دیگه عرض نوار کنترل بشه پیشنهاد شما چیه؟
    از چه برنامه ای استفاده کنم