آموزش آردوینوپروژه های آردوینو

سنسور التراسونیک ضد آب با آردوینو (زیر دریایی SR04T)

اضافه کردن دوربین و الگوریتم های بینایی به پروژه ها و ربات ها بسیار جالب است اما گاهی اوقات باعث افزایش هزینه میشود. به طور مثال برای تشخیص موانع و … به جای دوربین و یادگیری ماشین میتوانید از سنسور های التراسونیک استفاده کنید. سنسور های التراسونیک نه تنها دقیق هستند بلکه برخی از آنها در زیر دریا و به صورت ضد آب فعالیت میکنند. این سنسور ها در شرایط آب و هوایی سخت به کار گرفته میشوند. این سنسور ها ویژگی های متنوعی را ارائه می دهند و از نظر عملکرد به راحتی از سنسور معمولی HC-SR04 پیشی می گیرند.

مقاله زیر به شما نشان می دهد که چگونه سنسور اولتراسونیک ضد آب SR04T را با Arduino Uno راه اندازی کنید. پیشنهاد میکنم مقاله فاصله سنج آردوینو را مشاهده کنید.

ماژول سنسور اولتراسونیک SR04T

ماژول SR04T/SR04M دارای 6 پین RST، 5V، RX، TX، GND، و SWIM است. از این تعداد، 4 مورد استفاده می شود و SWIM و RST بدون استفاده باقی می مانند. عملکرد پین ها عبارت است از:

ماژول سنسور اولتراسونیک SR04T

  • 5V این پایه ورودی ماژول است. ما ولتاژ تغذیه 5 ولت را به این پایه میدهیم.
  • RX این به عنوان پین Trigger برای ماژول عمل می کند. برای شروع نمونه برداری از داده ها، یک پالس 10 میکروثانیه بر روی این پین ارسال می کنیم.
  • TX این پین خروجی ماژول است. پس از اینکه سیگنال Trigger به ماژول داده می شود، ماژول سیگنال را ارسال میکند و پس از برخورد با جسم و بازگشت آن، این پایه تغییر وضعیت میدهد.
  • GND این پایه زمین ماژول است و برای تکمیل مدار منبع تغذیه ماژول و همچنین ارجاع GND به سیگنال ها استفاده می شود.
  • SWIM بدون استفاده
  • RST استفاده نشده

ماژول اولتراسونیک ضد آب چگونه کار می کند؟

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

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

در ماژول‌های سنسور اولتراسونیک ضد آب SR04T/SR04M، ماژول یک پالس 40 کیلوهرتز را به واحد اولتراسونیک ارسال می‌کند و سپس سیگنال برگشتی پژواک را به مجموعه‌ای از تقویت‌کننده‌های عملیاتی ارسال می‌کند تا سیگنال دریافتی تقویت شود. سپس این سیگنال دریافتی توسط یک پردازنده پردازش می‌شود.

با فهمیدن زمان صرف شده توسط سنسور برای دریافت سیگنال اکو به عنوان “T”، می توانیم فاصله بین سنسور و مانع را با استفاده از فرمول زیر محاسبه کنیم:

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

اتصالات زیر بین Arduino UNO و سنسور ایجاد می شود:

مدار سنسور التراسونیک ضد آب با آردوینو

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

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

همانطور که پیش تر گفته شد، باید پالس های 10uS را روی پایه TRIGGER ارسال کنیم و مدت زمان پالس دریافتی روی پین ECHO را اندازه گیری کنیم. برای دستیابی به این قابلیت، ما به سادگی از کتابخانه “NewPing” استفاده می کنیم که در قسمت Library Manager به صورت زیر قابل نصب است.

کتابخانه "NewPing" آردوینو

نصب کتابخانه مورد نیاز:

  1. منوی Tools را در نوار منو باز کنید و Library Manager را انتخاب کنید.
  2. هنگامی که Library Manager باز شد، در نوار جستجو، کتابخانه “NewPing” را جستجو کنید و بر روی install کلیک کنید تا آخرین نسخه کتابخانه نصب شود.

برای استفاده از کتابخانه NewPing، پین ها را طبق اتصالاتمان مقداردهی اولیه می کنیم و یک شی NewPing را مقداردهی اولیه می کنیم. ما همچنین متغیرها را برای ذخیره مقادیر خوانده شده از سنسور مقداردهی اولیه می کنیم. توجه داشته باشید که ما سه متغیر را مقداردهی اولیه کرده‌ایم.

#include <NewPing.h>
#define TRIGGER_PIN  3
#define ECHO_PIN     2 
#define MAX_DISTANCE 400
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
float tempval1;
float tempval2;
int finalval;

تابع Setup

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

در تابع Void Setup()، ما به سادگی فقظ پورت سریال را با نرخ باود 57600 مقداردهی اولیه می کنیم.

void setup() {
  Serial.begin(57600);
}

تابع Loop

void loop() {
  delay(20);                    
  Serial.print("Ping: ");
  int iterations = 5;
  tempval1=((sonar.ping_median(iterations) / 2) * 0.0343);
  if(tempval1-tempval2>60 || tempval1-tempval2<-60)
  {
    tempval2=(tempval1*0.02 )+ (tempval2*0.98);
    }
  else
  {
  tempval2=(tempval1*0.4 )+ (tempval2*0.6);
  }
  finalval=tempval2;
  Serial.print(finalval);
  Serial.println("cm");
}

این تابع مهمترین بخش کد است. ما از تابع “sonar.ping_median()” برای گرفتن 5 بار مقادیر استفاده می کنیم و سپس میانه آن مقادیر را پیدا می کنیم، این کار مقدار دقیق و قابل اعتمادتری به ما می دهد.

این تابع مقدار زمان را در اختیار ما قرار می دهد، برای به دست آوردن فاصله، به سادگی آن را در 0.0343 ضرب می کنیم (سرعت صدا بر حسب سانتی متر بر میکرو ثانیه) و سپس نصف فاصله بین سنسور و مانع را بدست می آوریم.

این مقدار در یک متغیر موقت “Tempval1” ذخیره می شود و مقدار قابل استفاده در “Tempval2” ذخیره می شود.

در حین به روز رسانی مقادیر، اگر تفاوت بین Tempval1 و Tempval2 زیاد باشد (>60 یا <-60)، وزن کمتری به خواندن سنسور جدید در محاسبه Tempval2 می دهیم.

اگر این تفاوت کم باشد، Tempval2 را با اضافه کردن 40٪ از داده های سنسور جدید (Tempval1) با 60٪ از خواندن قدیمی (Tempval2) محاسبه می کنیم.

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

در پایان، متغیر float به نام Tempval2 را در یک متغیر int به نام “Finalval” ریخته و با استفاده از دستور Serial.print آن را به کاربر در سریال مانیتور نمایش می دهیم.

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

خروجی ماژول اولتراسونیک ضد آب

توجه داشته باشید اگر سیستم خروجی درستی نمی دهد یا خوانش های نامنظم می دهد، ترانسفورماتور موجود در گوشه سمت چپ بالای برد را همانطور که در نمودار نشان داده شده است تنظیم کنید.

تنظیم ترانسفورماتور ماژول التراسونیک

موارد موجود در فایل : فایل سورس کامل

5 (2 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

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

1 دیدگاه

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

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