نمایشگرهای OLED به واسطه سبک بودن و ابعاد کوچکشان، بسیار مورد توجه هستند. برای نمایش انواع تصاویر و نوشتهها انتخاب مناسبی است. به واسطه کیفیت و DPI بالای این نوع نمایشگر، تصاویر و کاراکترها بسیار زیبا نمایش داده میشوند. موارد استفاده از نمایشگر OLED در رباتها و دستگاههای اینترنت اشیاء IoT بسیار مورد توجه میباشد. در ادامه مجموعه آموزشهای ماژول OLED با مرجع تخصصی آردوینو به زبان فارسی ، دیجی اسپارک همراه باشید. در آموزش بخش اول، نحوه ی نمایش یک متن ساده با محتوا Digispark را آموزش دادیم. در این بخش توسط ماژول آلتراسونیک فاصله سنج SRF، فاصله شی تا سنسور را اندازه گیری کرده و سپس مقدار اندازه گیری شده را بر روی نمایشگر OLED نمایش میدهیم. در ادامه این آموزش بامرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
ماژول آلتراسونیک فاصله سنج SRF05
ماژول فاصله سنج SRF، اجسام قرار گرفته شده در مسیر سنسور را تشخیص داده و سپس فاصله شی تا سنسور را اندازه گیری میکند. ولتاژ کاری ماژول فاصله سنج SRF بین ۴٫۵ تا ۵٫۵ ولت DC است. فرکانس کاری ماژول SRF در حدود ۴۰ کیلوهرتز است. این ماژول از ۵ پایه Trigger, Echo, Out, Vcc, Gnd تشکیل شده است. پایه Trigger و Echo در خروجی پالس دیجیتال ۱۰uS ایجاد میکند. خروجی پایه Echo بین ۰ تا Vcc متغیر است. دراین حالت پالس ۱۰uS به پایه تریگر Trigger ارسال شده و سپس سنسور به صورت اتوماتیک در خروجی فرکانس ۴۰ کیلوهرتز را ارسال خواهد کرد. توسط پایه Echo مانیتورنیگ خروجی انجام میشود. هنگامی که خروجی Echo افزایش یابد، تابمر فعال میشود. سپس با کاهش یافتن خروجی Echo، مدت زمان سپری شده در تایمر ذخیره شده و در نهایت فاصله توسط فرمولی که برای محاسبه فاصله شی تا سنسور تعریف شده است، اندازه گیری خواهد شد.
Distance (in cm) = (elapsed time * sound velocity (340 m/s)) / 100 / 2
پیش نیاز
در آموزش بخش اول، به بررسی کامل OLED پرداختیم. جهت مطالعه آموزش و آشنایی با آن به آموزش بخش اول کار با نمایشگر oled گرافیکی مراجعه کنید.
آموزش کار با نمایشگر OLED گرافیکی
استفاده از ماژول نمایشگر OLED
ماژول نمایشگر OLED مورد استفاده در این پروژه ۱۲۸*۳۲ میباشد. ابعاد این OLED در حدود ۰٫۹ اینچ است. از ویژگی منحصر به فرد این OLED میتوان به قابلیت راه اندازی بدون Backlight اشاره کرد. این نمایشگر از تراشه SSD1306 بهره میبرد. به همین دیلی از کتابخانه Adafruit_SSD1306 برای فعال سازی OLED استفاده میکنیم. زاویه نمایش نمایشگر OLED کمتر از ۱۶۰ درجه است. ولتاژ مناسب جهت راه اندازی OLED بین ۳٫۳ تا ۵ ولت DC است. همچنین این OLED از رابط I2C پشتیبانی میکند. در آموزش بخش اول جهت راه اندازی OLED، از کتابخانه U8G2 استفاده کردیم. در این بخش از دو کتابخانه Adafruit استفاده خواهیم کرد.
فراخوانی کتابخانه
برای راه اندازی OLED به چهار کتابخانه نیاز داریم. لینک دانلود کتابخانه ها در صفحه محصول کالا دانشجوکیت در قسمت دانلود قرار گرفته شده است. چنانچه نحوهی نصب کتابخانه را نمیدانید، به آموزش نصب کتابخانه در نرم افزار آردوینو Arduino مراجعه کنید. اگر هم شیوه نصب و راه اندازی نرم افزار آردوینو را نمیدانید. به آموزش کار با برد آردوینو و نصب نرم افزار آردوینو Arduino IDE مراجعه کنید.
- کتابخانه Adafruit_GFX
- کتابخانه Adafruit_SSD1306
- کتابخانه Wire
- کتابخانه SPI
نکته مهم
ابعاد متفاوتی برای نمایشگرهای OLED ارائه شده است. در این پروژه از نمایشگر OLED 128*32 استفاده میکنیم. برای فراخوانی OLED 128*32 از تابع ۰X3C استفاده میکنیم:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
در صورتیکه از نمایشگر OLED 128*64 استفاده میکنید، طبق اطلاعات گفته شده در کتابخانه Adafruit از تابع ۰X3D استفاده میکنیم:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
با توجه به نکات گفته شده، قبل از شروع کار کتابخانه و توابع OLED را فراخوانی میکنیم:
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 // جهت ریست کردن OLED Adafruit_SSD1306 display(OLED_RESET);
فراخوانی تابع OLED 128*32
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64) display.clearDisplay(); // clear the display before start
تعیین مکان نمای OLED و نمایش متن
display.setCursor(0,1); // مختصات X , Y display.setTextSize(3); // سایز متن display.setTextColor(WHITE); //رنگ نمایش متن display.println(distance); // نمایش متغیر display.setCursor(50,0); //تنظیم مکان نما display.setTextSize(3); // سایز #ifdef CommonSenseMetricSystem display.println("cm"); // نمایش CM در OLED #endif #ifdef ImperialNonsenseSystem display.println("in"); // نمایش IN #endif display.display(); // نمایش تمامی محتواها delay(500); // تعریف تاخیر display.clearDisplay(); // پاک کردن صفحه نمایش
استفاده از سنسور آلتراسونیک SRF
در این مرحله پالس به پایه تریگر Trigger ارسال شده و سپس سنسور به صورت اتوماتیک در خروجی فرکانس ۴۰ کیلوهرتز ارسال خواهد کرد.
long duration, distance; // تعریف متغیرها digitalWrite(trigPin, LOW); // پالس Trigger delayMicroseconds(2); // تاخیر digitalWrite(trigPin, HIGH); // تولید پالس delayMicroseconds(10); // تاخیر digitalWrite(trigPin, LOW); // پالس
در این مرحله توسط پایه Echo مانیتورینگ خروجی انجام خواهد شد. اطلاعات در تایمر ذخیره شده و سپس طبق فرمول فاصله شی تا سنسور اندازه گیری خواهد شد.
duration = pulseIn(echoPin, HIGH); #ifdef CommonSenseMetricSystem distance = (duration/2) / 29.1; #endif #ifdef ImperialNonsenseSystem distance = (duration/2) / 73.914; #endif
قدم آخر، کد آردوینو Arduino
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define CommonSenseMetricSystem #define Trigger 13 #define Echo 12 #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); void setup() { Serial.begin (9600); pinMode(Trigger, OUTPUT); pinMode(Echo, INPUT); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); } void loop() { long duration, distance; digitalWrite(Trigger, LOW); delayMicroseconds(2); digitalWrite(Trigger, HIGH); delayMicroseconds(10); digitalWrite(Trigger, LOW); duration = pulseIn(Echo, HIGH); #ifdef CommonSenseMetricSystem distance = (duration/2) / 29.1; #endif #ifdef ImperialNonsenseSystem distance = (duration/2) / 73.914; #endif display.setCursor(0,1); display.setTextSize(3); display.setTextColor(WHITE); display.println(distance); display.setCursor(50,0); display.setTextSize(3); #ifdef CommonSenseMetricSystem display.println("cm"); #endif #ifdef ImperialNonsenseSystem display.println("in"); #endif display.display(); delay(500); display.clearDisplay(); Serial.println(distance); }
کد را از طریق کلیدهای میانبری که برای انتقال کدها در نظر گرفته شده است، به نرم افزار آردوینو انتقال دهید. سپس اتصالات را انجام دهید.
اتصالات آردوینو Arduino
- پایه تریگر Trigger ماژول تشخیص فاصله SRF را به پایه ۱۳ دیجیتال آردوینو Arduino اتصال دهید.
- پایه اکو Echo ماژول تشخیص فاصله SRF را به پایه ۱۲ دیجیتال آردوینو Arduino اتصال دهید.
- پایه SDA ماژول نمایشگر OLED را به پایه A4 آنالوگ آردوینو Arduino اتصال دهید.
- پایه SCL ماژول نمایشگر OLED را به پایه A5 آنالوگ آردوینو Arduino اتصال دهید.
وسایل مورد نیاز
ماژول تشخیص فاصله آلتراسونیک SRF05
ماژول نمایشگر OLED گرافیکی ۱۲۸*۳۲
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
پروژه
طی چند قسمت قبلی که طرح پروژه را پیاده سازی کردیم، با استقبال شما کاربران مواجه شدیم. در این سری برای اینکه گستره بیشتری از افراد بتوانند فرصت استفاده از بن خرید را داشته باشند؛ روال دیگری را در پیش گرفتیم. در این روش تصمیم گرفتهایم به ۱۰ نفر از کاربران بن خرید ارایه شود. برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و بسته به خلاقیت، مدار جدیدی ایجاد کنید. سپس از اجرای کار فیلم گرفته و در شبکههای اجتماعی از جمله آپارات و اینستگرام، با هشتگهای دیجی_اسپارک و دانشجوکیت و digispark و daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۰۳۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام خانم مهندس
روش توضیح کدها بسیار دقیق است.
من از طریق دانشجوکیت متوجه شدم که کارگاه آموزشی هم دارید. چطور میتوانم در جریان قرار بگیرم. آیا راه ارتباطی دیگری برای اطلاع رسانی مثل تلگرام وجود دارد؟
لطفا پاسخ را به ایمیل من ارسال کنید.
سلام
از توجه شما ممنونم.
کارگاه های آموزشی از طریق سایت دانشجوکیت و کانال رسمی دانشجوکیت در تلگرام اطلاع رسانی میشود و میتوانید دنبال کنید.
پس از پاسخگویی به کامنت ها، از طریق ایمیل اطلاع رسانی خواهد شد.
سلام.میخواستم بپرسم که ای سیم هایی که وصل کردین به برد اسم خاصی دارن؟ و اینکه با سیم معمولی هم میشه وصل کرد؟اگه میشه هر چه سریع تر جواب منو بدید.
سلام
از کابل فلت ۴۰ رشته نری به نری Male to Male استفاده شده است، که میتوانید از لینک زیر تهیه نمایید.
کابل فلت ۴۰ رشته نری به نری Male to Male
خیلی خیلی ممنون.لطف کردید
خواهش میکنم.
موفق باشید.
با عرض سلام و خسته نباشید خدمت شما.
ببخشید من این پروژه رو اجرا کردم و فیلم ازش گرفتم و توی آپارات گذاشتم.لینکش هست https://www.aparat.com/v/90uG1
میخواستم بپرسم که آیا بن ارسال رایگان میدید؟
باتشکر
سلام
بسیار عالی، از توجه شما ممنونم.
بن تخفیف از طریق تیکت فروشگاه برای شما ارسال گردید.
سلام
چطور امکان تغییر نوشته مثلا همین نوشته cm وجود دارد؟
سلام
در این خصوص به خط های ۴۹، ۵۴ , ۵۷ مراجعه کنیدو عبارت مورد نظر را خود را وارد کنید.
سلام می خواستم ببینم میشه این پروژه رو با ماژول srf04 راه اندازی کرد
سلام
بله میتوانید از ماژول SRF04 استفاده کنید.
سلام من تمامی مراحل را قدم به قدم انجام دادم و کتابخانه ها رو هم نصب کردم و همه کد ها رو هم کپی کردم ولی وقتی که میخوام کامپایلر کنم خطا میده میشه لطفا راهنمایی کنید ممنون از شما
با سلام
ارور دریافتی را ارسال کنید تا بررسی گردد.
ممنونم مشکل رفع شد تشکر از شما و سایت خوبتون
سلام مجدد
بسیار عالی
موفق باشید.
سلام
اگه دقت میکرو خواسته باشیم باید چیکار کنیم
با سلام
در چه خصوصی مد نظر شما است؟
سلام نهایتا برد این مدار چند متر هست
با سلام
به دیتاشیت سنسور بایستی مراجعه کنید.
با سلام و ممنون از سایت خوبتون
میشه بگید دقیقا این کد چکار میکنه و چطور کار میکنه:
#ifdef CommonSenseMetricSystem
display.println(“cm”);
#endif
#ifdef ImperialNonsenseSystem
display.println(“in”);
#endif
با سلام
دستور ifdef مربوط به دستورات ماکرو (دستورات مربوط به پیش پردازنده ) است، در صورتیکه اگر یک ماکرو تعریف شود، خط بعدی اجرا گردد و اگر یک ماکرو تعریف نشده باشد، دستور بعدی اجرا گردد. به عنوان مثال در این برنامه اگر فاصله توسط سنسور سنس گردید، عبارت CM چاپ شود و در صورتیکه تشخیصی صورت نگیرید in را چاپ خواهد کرد.
سلام وقت به خیر من برای کترل میران آب در مخزن بتنی دفنی یه کیت خریدم که میزان اب رو با درصد بهم نشون میده و محل نصب تا روی سطح اب به صورت افست در نظر میگیره که در محاسبات لحاظ نشه
به علت جو مرطوب مازول خراب شده حالا میخوام از Srf04 استفاده کنم چون یه نمونه واتر پروف از Srf04 پیدا کردم .
میخوام بدونم برای جایگزینی ۰۴ به جای ۰۵ در مدار تغییری باید داد ؟ با توجه به پایه اضافه Out روی ۰۵
اگه کمک کنید ممنون میشم
چطورعکس بورد ها رو میتونم ارسال کنم ؟
با سلام
در آلتراسونیک SRF05 پایه OUT بدون استفاده است و با همان پایه تریگر و اکو میتوانید اتصالات را انجام دهید و یا با SRF04 جایگزین نمایید.
عکس ها را از همین طریق میتوانید به صورت لینک کوتاه ضمیمه کنید تا بررسی شود.
سلام
خسته نباشید من کدی که شما گفته بودید رو وارد کردم اما این ارور رو میده:(Arduino: 1.8.12 (Windows 10), Board: “Arduino Uno”
sketch_jun24a:3:10: fatal error: Adafruit_GFX.h: No such file or directory
#include
^~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
Adafruit_GFX.h: No such file or directory
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
ممنون میشم راهنماییم کنید .
با سلام
این ارور مربوط به کتابخانه Adafruit_GFX.h است، کتابخانه را نصب و مجدد کامپایل کنید.
سلام چطور میشه کتاب خانه های مورد نیاز را نصب کرد؟؟؟
با سلام
لست کتابخانه های مورد نیاز در صفحه محصول هر کالا که در متن آموزش لینک شده است، قرار گرفته شده است. در بخش دانلود صفحه محصول کالا میتوانید دانلود کنید.
سلام خانم مهندس. از آموزش کاربردی تون تشکر می کنم. اگه بخایم سنسورهای اولتراسونیک رو از برد برد جدا کنیم و با سیم های چند متری به برد وصل کنیم ، مشکلی نداره ؟ اگه نه بگید از چه سیمی استفاده کنم. ممنون از توجهتون
با سلام
این مورد توسط بنده تست نشده است و پیشنهاد نمیشود.
با سلام ببخشید من میخوام که این پروژه را با نمایشoled با رابط i2c راه بندازم.
لطفا راهنماییم کنید.
با تشکر.
با سلام
در این آموزش هم از oled i2c استفاده شده است.
همچنین آموزش کامل در لینک زیر قرار گرفته شده است.
راه اندازی oled
این ایرور برای چیه
/sdk/hardware/tools/avr/bin/avr-g++ -no-canonical-prefixes -std=gnu++11 -c -g -Os -w -mmcu=atmega328p -DF_CPU=16000000L -DUSB_VID=null -DUSB_PID=null -DARDUINO=10812 -DIDE=”ArduinoDroid” -DARDUINO_ARCH_AVR -DARDUINO_AVR_UNO /Adafruit_SSD1306/Adafruit_SSD1306.cpp -o /librariesBuild/Adafruit_SSD1306/Adafruit_SSD1306.cpp.o /sdk/hardware/tools/avr/bin/avr-g++ -no-canonical-prefixes -std=gnu++11 -c -g -Os -w -mmcu=atmega328p -DF_CPU=16000000L -DUSB_VID=null -DUSB_PID=null -DARDUINO=10812 -DIDE=”ArduinoDroid” -DARDUINO_ARCH_AVR -DARDUINO_AVR_UNO /sdk/lib/Wire/src/Wire.cpp -o /librariesBuild/Wire/Wire.cpp.o /sdk/hardware/tools/avr/bin/avr-gcc -no-canonical-prefixes -c -g -Os -w -mmcu=atmega328p -DF_CPU=16000000L -DUSB_VID=null -DUSB_PID=null -DARDUINO=10812 -DIDE=”ArduinoDroid” -DARDUINO_ARCH_AVR -DARDUINO_AVR_UNO /sdk/lib/Wire/src/utility/twi.c -o /librariesBuild/Wire/utility_twi.c.o /sdk/hardware/tools/avr/bin/avr-g++ -no-canonical-prefixes -std=gnu++11 -c -g -Os -w -mmcu=atmega328p -DF_CPU=16000000L -DUSB_VID=null -DUSB_PID=null -DARDUINO=10812 -DIDE=”ArduinoDroid” -DARDUINO_ARCH_AVR -DARDUINO_AVR_UNO /sdk/lib/SPI/src/SPI.cpp -o /librariesBuild/SPI/SPI.cpp.o /sdk/hardware/tools/avr/bin/avr-gcc -no-canonical-prefixes -c -g -Os -w -mmcu=atmega328p -DF_CPU=16000000L -DUSB_VID=null -DUSB_PID=null -DARDUINO=10812 -DIDE=”ArduinoDroid” -DARDUINO_ARCH_AVR -DARDUINO_AVR_UNO /Adafruit_GFX_Library/glcdfont.c -o /librariesBuild/Adafruit_GFX_Library/glcdfont.c.o /sdk/hardware/tools/avr/bin/avr-g++ -no-canonical-prefixes -std=gnu++11 -c -g -Os -w -mmcu=atmega328p -DF_CPU=16000000L -DUSB_VID=null -DUSB_PID=null -DARDUINO=10812 -DIDE=”ArduinoDroid” -DARDUINO_ARCH_AVR -DARDUINO_AVR_UNO /Adafruit_GFX_Library/Adafruit_GrayOLED.cpp -o /librariesBuild/Adafruit_GFX_Library/Adafruit_GrayOLED.cpp.o In file included from /Adafruit_GFX_Library/Adafruit_GrayOLED.cpp:20:0:
/Adafruit_GFX_Library/Adafruit_GrayOLED.h:30:32: fatal error: Adafruit_I2CDevice.h: No such file or directory
#include
^
compilation terminated.
Return code is not 0
با سلام
کتابخانه های متعددی نصب کرده اید که همخوانی ندارد.
با سلام و وقت بخیر من کد را چک کردم پین هم چک کردم ولی کار نمی کنه و صفحه نمایش روشن نمیشه
با سلام
در ابتدا بایستی نمایشگر روشن شود و سپس براساس پروتکل ارتباطی آدرس دهی آن را بررسی کنید. اما اگر نمایشگر روشن نمیشود احتمالا مشکل از جای دیگری است.