آردوینو آموزش آردوینو

آموزش ساخت مدار تشخیص مانع چهار وجهی با سنسور آلتراسونیک SRF

arduino-srf-ultrasonic-obstacle-oled-display-digispark
نوشته شده توسط پریسا پوربلورچیان

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

 


 آردوینو Arduino


برد آردوینو یک میکروکنترلر با قابلیت دسترسی به پورت های دیجیتال و آنالوگ و پروتکل های I2C و SPI است. در این آموزش از آردوینو Arduino مدل UNO استفاده شده است.  آردوینو Arduino دارای تراشه Atmega328P است و با در اختیار داشتن پایه های کنترلی آنالوگ و دیجیتال I/O میتوان با سنسورهای مختلف ارتباط برقرار کرد. با در نظر گرفتن پروتکل ارتباطی آن ها را راه اندازی و کدنویسی کرد. محیط برنامه نویسی IDE Arduino است که نباز به دانش برنامه نویسی C++ خواهد داشت. با انتقال کد به محیط برنامه نویسی و کامپایل کد پروژه آماده اجرا خواهد بود.مراحل نصب نرم افزار آردوینو Arduino در آموزش زیر نوشته و منتشر شده است. در صورتیکه تا به حال با برد آردوینو کار نکرده اید، ابتدا آموزش زیر را مطالعه و سپس مراحل بعدی را اجرا کنید.

آموزش کار با برد آردوینو Arduino و نصب نرم افزار Arduino IDE

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

لینک دانلود نرم افزار آردوینو

 


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


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

duration/29/2

float Distance = ultrasonic.Ranging(CM);

سنسور آلتراسونیک در مدل های مختلف در بازار موجود است مانند SRF04 و SRF05 که نسخه SRF05 ورژن آپدیت شده سنسور SRF04 است و یک پایه OUT بر روی برد اضافه شده است. پایه OUT در این برد نقش ورودی داشته و سیگنال برگشتی روی خط اکو  و یا تریگر باشد. تفاوتی در بین دو برد نیست و با توجه به نیاز خود میتوانید از کدام استفاده نمایید.

 


وسایل مورد نیاز


برد آردوینو Arduino UNO

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

نمایشگر OLED

پک ۳ عددی کابل فلت

 


اتصالات تشخیص مانع آلتراسونیک


همانند زیر اتصالات سنسورهای آلتراسونیک تشخیص مانع چهار وجهی را به برد آردوینو انجام دهید. برای این پروژه از چهار سنسور آلتراسونیک استفاده شده است که با توجه به اینکه هر سنسور دارای پایه تریگر و اکو است هر پایه جداگانه در کدنویسی معرفی شده و به برد آردوینو متصل می‌شود:

اتصال سنسور اول:

  • پایه تریگر سنسور آلتراسونیک را به پایه شماره ۳ دیجیتال آردوینو اتصال دهید.
  • پایه اکو سنسور آلتراسونیک را به پایه شماره ۲ دیجیتال آردوینو اتصال دهید.

اتصال سنسور دوم:

  • پایه تریگر سنسور آلتراسونیک را به پایه شماره ۴ دیجیتال آردوینو اتصال دهید.
  • پایه اکو سنسور آلتراسونیک را به پایه شماره ۵ دیجیتال آردوینو اتصال دهید.

اتصال سنسور سوم:

  • پایه تریگر سنسور آلتراسونیک را به پایه شماره ۷ دیجیتال آردوینو اتصال دهید.
  • پایه اکو سنسور آلتراسونیک را به پایه شماره ۸ دیجیتال آردوینو اتصال دهید.

اتصال سنسور چهارم:

  • پایه تریگر سنسور آلتراسونیک را به پایه شماره ۹ دیجیتال آردوینو اتصال دهید.
  • پایه اکو سنسور آلتراسونیک را به پایه شماره ۱۰ دیجیتال آردوینو اتصال دهید.

در این آموزش از نمایشگر OLED جهت نمایش فاصله اندازه گیری شده در چهار جهت استفاده شده است. نمایشگر OLED دارای رابط I2C است و از طریق پایه های I2C به بردهای میکروکنترلر متصل می‌شود. اتصال OLED به برد آردوینو Arduino به صورت زیر است.

  • پایه SDA نمایشگر OLED را به پایه شماره A4 آنالوگ آردوینو اتصال دهید.
  • پایه SCL نمایشگر OLED را به پایه شماره A5 آنالوگ آردوینو اتصال دهید.
  • پایه VCC نمایشگر OLED را به پایه ۵٫۵ ولت DC اتصال دهید.
  • پایه GND نمایشگر OLED را به پایه GND اتصال دهید.

 


کد آردوینو Arduino آلتراسونیک


کدهای زیر مخصوص پروژه تشخیص مانع چهار وجهی است. این کدها را کپی کرده و یک تب جدید در نرم افزار آردوینو ( New ) باز کرده و کد را انتقال دهید. چنانچه روش انتقال کدها و کار با آردوینو را نمی‌دانید، به آموزش کار با برد آردوینو Arduino و نصب نرم افزار Arduino IDE مراجعه کنید.

 

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

 

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

 


تحلیل کد آردوینو تشخیص مانع


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

معرفی کتابخانه های مورد استفاده

در این کد از کتابخانه Ultrasonic برای سنسور فاصله سنج و کتابخانه Adafruit_SSD1306 برای نمایشگر OLED استفاده شده است.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h> // فراخوانی کتابخانه
#include <Adafruit_SSD1306.h> // فراخوانی کتابخانه 
Adafruit_SSD1306 display(-1); // تعریف پایه ریست در صورتیکه با آردوینو مشترک گرفته شده است

 

معرفی پایه ها

#define trigPin1 3         // اتصال پایه تریگر برای سنسور جلو از سمت راست
#define echoPin1 2       // اتصال پایه اکو برای سنسور جلو از سمت راست

#define trigPin2 4          //اتصال پایه تریگر برای سنسور عقب از سمت چپ
#define echoPin2 5         //اتصال سنسور پایه اکو برای سنسور عقب از سمت چپ

#define trigPin3 7          // اتصال پایه تریگر برای سنسور جلو از سمت چپ
#define echoPin3 8         //اتصال پایه اکو برای سنسور جلو از سمت چپ

#define trigPin4 9       //اتصال پایه تریگر برای سنسور عقب از سمت راست
#define echoPin4 10        //اتصال پایه اکو برای سنسور عقب از سمت راست 

long duration, distance, Frontright,Rearright,Frontleft,Rearleft;       // تعریف چهار متغیر برای چهار سنسور

 

معرفی ورودی و خروحی ها

void setup()
{
Serial.begin (9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// معرفی تمامی پایه های تریگر و اکو در برنامه

pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
pinMode(trigPin4, OUTPUT);
pinMode(echoPin4, INPUT);
}

 

در مرحله بعد به تابع حلقه بخش اضلی برنامه میرسیم. در این بخش توسط تابع Ultrasonicsensor برای هر سنسور وضعیت مشخصی را تعریف کرده و به پایه ها نسبت میدهیم. در ابتدا بایستی یک تابع با اسم دلخواه برای آلتراسونیک انتخاب کرده و پایه تریگر و اکو را تعریف نماییم:

void UltrasonicSensor(int trigPin,int echoPin)
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;

}

سپس برای هر سنسور، وضعیت پایه ها را مشخص خواهیم کرد:

UltrasonicSensor(trigPin1, echoPin1);
Frontright = distance;   // معرفی متغیر سنسور جلو از سمت راست

UltrasonicSensor(trigPin2, echoPin2);
Rearleft = distance;   // معرفی سنسور عقب از سمت چپ

UltrasonicSensor(trigPin3, echoPin3);
Frontleft = distance;    //معرفی سنسور جلو از سمت چپ

UltrasonicSensor(trigPin4, echoPin4);
Rearright = distance;       // معرفی سنسور عقب از سمت راست

 


نمایش فاصله در نمایشگر OLED


جهت نمایش متن مورد نظر در OLED از توابع display استفاده می‌شود که میتوانید سایز نوشته، رنگ آن و مکان نمای نوشته را مشخص کنید. با این روش در چهار وجه تشخیص مانع را روی نمایشگر مشخص میکنیم.

display.clearDisplay(); 
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("RL");
display.setCursor(0,20);
display.println(Rearleft);
display.display();

 


آپلود برنامه در برد آردوینو


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

 

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

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید. در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۰ دیدگاه

    • با سلام
      در این خصوص کافیست از کتابخانه liquidcrystal استفاده کنید و در هر خطی که مربوط به نمایش محتوا بر روی oled است، کد دستوری نمایش بر روی lcd را اضافه کنید.
      در این خصوص آموزش کاملی در سایت منتشر شده است. بررسی کنید.
      تحلیل کتابخانه liquidcrystal

  • وقت بخیر.قسمت UltrasonicSensor برای من error میده.مشکلش چیه؟exepected constructor ,destructor,or type conversion befor ‘)’ token.

    • با سلام
      یکی از علایم ; را احتمالا جا انداخته اید. پس از نمایش ارور خطی که ; ندارد برای شما در کدها هایلات شده است. بررسی کنید.

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