ماژول فاصله سنج SRF کاربردهای مختلفی در رباتیک و گجتهای مختلف دارد. این ماژول قابلیت سنجش مانع به صورت سونار را دارد. در این آموزش با استفاده از راه اندازی ماژول فاصله سنج SRF اقدام به محاسبه فاصله و نمایش آن در سریال مانیتور نرمافزار Arduino IDE خواهیم کرد. در ادامه مقادیر بدست آمده را با استفاده از ماژول نمایشگر ۰٫۹۶ Oled نمایش میدهیم. روش خواندن و نمایش اطلاعات در نمایشگر OLED حائز اهمیت است. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
برد ESP8266
ماژول های ESP32 و ESP8266 ساخت شرکت Espressif Systems از در دسترس ترین تراشه های اینترنت اشیا هستند. و همچنین قیمت پایین تری نسبت به دیگر تراشه های اینترنت اشیا دارند و برای توسعه کد های آن میتوانیم از نرم افزار Arduino استفاده کنیم که دسترسی آسان تری را برای کاربر فراهم میکند.
برخی از ویژگی های ESP8266
- ماژول شبکه و میکروکنترولر ESP8266 یکی از معروفترین و ارزان ترین و دردسترس ترین تراشه های اینترنت اشیا میباشد.
- این ماژول با دارا بودن میکروکنترولر قدرتمند بهمراه ارتباط شبکه WIFI داخلی،
- پشتیبانی کامل فول استک TCP/IP
- و همچنین با ارائه رابط های سخت افزاری کافی گزینه مناسبی برای کاربرد های کوچک و کم مصرف اینترنت اشیا میباشد.
- این میکروکنترولر در سال ۲۰۱۴ به بازار عرضه گردید.
ماژول نمایشگر Oled 1306
نمایشگر OLED به واسطه تولید رنگهای اورگانیک و یا همان طبیعی و مصرف انرژی بسیار ناچیز، مورد توجه هستند. معمولا در پروژه های اینترنت اشیا و دیگر پروژه های امبدد از برای نمایش متن و مقادیر مختلف از نمایشگرهای Oled استفاده میشود. این ماژول ها در انواع مختلف بسته به نوع درایور راندازه یافت میشوند که یکی از پرطرفدارترین آن ها نمایشگر OLED با SSD1306 است. این نوع از Oled ها معمولا در اندازه های ۰٫۹۶ و ۱٫۳ اینچ ساخته می شوند همچنین پروتکل ارتباطی Oled ها I2C می باشد. به عبارتی فقط با اشغال کردن ۴ پایه از برد آردوینو ارتباط برقرار میکنند.
ماژول فاصله سنج SRF
این نوع از ماژولهای فاصله سنج در انواع مختلفی تولید می شوند، که از محبوب ترین آن ها میتوان SRF-04 و SRF-05 را نام برد. نحوه کارکرد این ماژول ها با استفاده از دو نوع قطعه آلتراسونیک است که بر روی ماژول قرار دارد. یکی فرستنده امواج فراصوت و دیگری گیرنده امواج است. امواج التراسونیک بر اساس زمان ارسال بازخورد امواج، قادر به محاسبه فاصله تا جسم خواهد بود. همان طور که ذکر شد در این ماژول دو نوع قطعه التراسونیک وجود دارد که یکی از آن ها از نوع T یا فرستنده و دیگری از نوع R یا دریافت کننده است. پس ماژول به این صورت کار می کند که با ارسال و دریافت امواج التراسونیک فاصله با اجسام را در نهایت قابل محاسبه می کند.
وسایل مورد نیاز
نصب کتابخانه مورد نیاز
ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مورد نیاز خواهیمکرد. مراحل زیر را دنبال کنید:
- این مسیر را دنبال کنید Sketch > Include Library > Manage Libraries
- کلمه Adafruit SSD1306 را جستجو کنید.
- کتابخانه را نصب کنید.
- سپس کلمه “GFX” را جستجو کنید و آن را نصب کنید.
تست و راه اندازی
در این قسمت تنها با استفاده از برد ESP8266 که البته در این آموزش از Nodemcu استفاده شده و ماژول فاصلهسنج مقادیر بدست آمده را در سریال مانیتور نمایش خواهیم داد. اتصالات را مطابق جدول زیر برقرار کنید همچنین کد را با تنظیمات پیشفرض در برد ESP8266 خود کامپایل کنید. ماژول فاصله سنج SRF دارای ۴ پایه است که مطابق جدول زیر به برد Nodemcu متصل میکنیم. در ادامه شماتیک اتصالات هم نمایش داده شده است.
کد های این بخش از پروژه به شرح زیر است، ابتدا بخش های مهم آن را مورد بررسی قرار می دهیم. در دو خط اول پایه های ۴ و ۵ یا همان D1 ,D2 را نام گذاری میکنیم.
#define TRIGGER_PIN 5 #define ECHO_PIN 4
در بخش void setup، حالت پین های Trig و Echo را مشخص خواهیم کرد به این معنا که ورودی یا خروجی بودن آنها را مشخص میکنیم، همچنین حالت LED داخلی در برد را خروجی قرار میدهیم.
pinMode(TRIGGER_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(BUILTIN_LED, OUTPUT);
در این قسمت از کد یعنی void loop محاصبات مورد نیاز انجام خواهد شد به این صورت که ابتدا به پایه Trig یک پالس به طول حداقل ۱۰ میکرو ثانیه اعمال میکنیم، در ادامه ماژول به شکلی طراحی شده که ۸ پالس با فرکانس ۴۰ کیلو هرتز ارسال میکند از طریق سنسور srf نوع T، پس از ارسال پالس، پایه Echo در حالت ۱ قرار میگیرد و تا زمانی که پالس برگشتی توسط ماژول دریافت نشود، Echo همچان در حالت ۱ باقی میماند، پس با محاصبه زمانی که این پایه در حالت یک بوده زمان رفت و برگشت پالس را بدست آوردهایم که باید این مقدار تقسیم بر ۲ شود تا فاصله واقعی را بدست آوریم.
digitalWrite(TRIGGER_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIGGER_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIGGER_PIN, LOW); duration = pulseIn(ECHO_PIN, HIGH); distance = (duration/2) / 29.1;
کد کامل پروژه راه اندازی ماژول فاصله سنج SRF
#define TRIGGER_PIN 5 #define ECHO_PIN 4 void setup() { Serial.begin (9600); pinMode(TRIGGER_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(BUILTIN_LED, OUTPUT); } void loop() { long duration, distance; digitalWrite(TRIGGER_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIGGER_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIGGER_PIN, LOW); duration = pulseIn(ECHO_PIN, HIGH); distance = (duration/2) / 29.1; Serial.print(distance); Serial.println(" cm"); delay(1000); }
نمایش مقادیر در نمایشگر Oled
در این مرحله اقدام به راهاندازی نمایشگر Oled برای نمایش مقادیر بدست آمده خواهیم کرد. ایتدا اتصالات را مطابق جدول زیر برقرار کنید.
کد این پروژه تفاوت چندانی با کد قبل ندارد بجز مواردی که مربوط به راهاندازی نمایشگر Oled است، پس باهم این موارد را بررسی خواهیم کرد. ابتدا کتابخانه های مورد نیاز را معرفی میکنیم.
#include <SPI.h> #include <Wire.h> #include <Adafruit_SSD1306.h>
در این قسمت طول و عرض نمایشگر Oled را وارد میکنیم.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
در ادامه پایه های مربوط را نامگذاری میکنیم در ضمن پایه های SCL, SDA در نمایشگر Oled، بطور پیشفرض کتابخانه مورد استفاده، به پایه های I2C برد ESP8266 متصل میگردند.
const int trigPin = D6; const int echoPin = D5;
در بخش void loop توابع مربوط به راه اندازی نمایشگر Oled را فراخوانی میکنیم، برای مثال اندازه فونت و رنگ متون را مشخص خواهیمکرد.
display.display(); display.clearDisplay(); display.setCursor(10,20); display.setTextSize(3); display.setTextColor(WHITE); display.println(distance()); display.setCursor(90,20); display.setTextSize(3); display.println("cm");
کد کامل پروژه راه اندازی ماژول فاصله سنج SRF و نمایشگر Oled
#include <SPI.h> #include <Wire.h> #include <Adafruit_SSD1306.h> #define CommonSenseMetricSystem #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 const int trigPin = D6; const int echoPin = D5; // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET -1 // Reset pin Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); int distance(){ digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); #ifdef CommonSenseMetricSystem float distance = duration*0.034/2; #endif #ifdef ImperialNonsenseSystem float distance = (duration/2) / 73.914; #endif return distance; } void setup() { Serial.begin(9600); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); display.clearDisplay(); } void loop(){ display.display(); display.clearDisplay(); display.setCursor(10,20); display.setTextSize(3); display.setTextColor(WHITE); display.println(distance()); display.setCursor(90,20); display.setTextSize(3); display.println("cm"); delay(5); }
جمع بندی
در این آموزش با استفاده از ماژول فاصله سنج SRF04، یک نمایشگر Oled و همچنین برد ESP8266 یک دستگاه فاصلهسنج ساخته ایم که بر اساس استاندارد متریک و دقت یک سانتیمتر کار میکند. از این پروژه می توانید استفاده های زیادی داشته باشید بدلیل جامع بودن کاربرد آموزش و همچنین قابل ذکر است، بدلیل پایه بودن کد می توان در پروژه های دیگر نیز از این کد استفاده داشت.
- تنظیمات منوی tools در نرم افزار آردوینو نیز مانند تصویر زیر است.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
با سلام، ضمن تشکر بابت این آموزش خوب، در بخشی از متن درج شده این OLED ها با اشغال ۴ پایه از آردینو راه اندازی می شوند، در حالی که پایه های GND و VCC جز مسیرهای دیتا و پایه های اشغال شده حساب نمی شود. لذا این نمایشگرها با اشغال ۲ پایه راه اندازی می شود.
با سلام، با تشکر از توجه شما.
بله اگر پایه های تغذیه ماژول را حساب نکنیم درست است، البته در oled هایی با پروتکل SPI تعداد پایه ها با این تفصیر به ۵ خواهد رسید.
سلام
خسته نباشید
من میخوام با استفاده از ماژول pir و۳ تا led یک دزد گیر درست کم به این صورت که با هر بار حرکت از جلوی یک سنسور یک led روشن شه
و برتی حرکت دوم ledدوم و…
میتونید راهنماییم کنید نوع کد هاشو؟؟؟؟؟؟
سلام، برای درخواست پروژه از بخش تیکت های سایت دانشجو کیت اقدام کنید. با تشکر.