آردوینو آردوینو Arduino Uno آموزش آردوینو نمایشگر OLED پروژه های آردوینو

آموزش کار با ماژول OLED گرافیکی بخش دوم تشخیص فاصله با SRF05

Distance-meter-srf04--OLED-128X32-with-arduino-tutorial-digispark
نوشته شده توسط پریسا پوربلورچیان

نمایشگرهای 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 استفاده خواهیم کرد.

پروژه تشخیص فاصله با آلتراسونیک SRF04 و برد آردوینو با نمایشگر OLED - دیجی اسپارک

فراخوانی کتابخانه

برای راه اندازی OLED به چهار کتابخانه نیاز داریم. لینک دانلود کتابخانه ها در صفحه محصول کالا دانشجوکیت در قسمت دانلود قرار گرفته شده است. چنانچه نحوه‌ی نصب کتابخانه را نمیدانید، به آموزش نصب کتابخانه در نرم افزار آردوینو Arduino مراجعه کنید. اگر هم شیوه نصب و راه اندازی نرم افزار آردوینو را نمی‌دانید. به آموزش کار با برد آردوینو و نصب نرم افزار آردوینو Arduino IDE مراجعه کنید.

  1. کتابخانه Adafruit_GFX
  2. کتابخانه Adafruit_SSD1306
  3. کتابخانه Wire
  4. کتابخانه 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();      // پاک کردن صفحه نمایش

 

آموزش ساخت پروژه تشخیص فاصله ماژول SRF04 و Arduino با نمایشگر OLED - دیجی اسپارک

استفاده از سنسور آلتراسونیک 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 اتصال دهید.

 

ماژول OLED در پروژه تشخیص فاصله آردوینو Arduino - دیجی اسپارک

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

نرم افزار آردوینو Arduino!

آردوینو Arduino UNO R3

ماژول تشخیص فاصله آلتراسونیک SRF05

ماژول نمایشگر OLED گرافیکی ۱۲۸*۳۲

 

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

 

پروژه

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

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

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

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

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

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

۳۵ دیدگاه

  • سلام خانم مهندس
    روش توضیح کدها بسیار دقیق است.
    من از طریق دانشجوکیت متوجه شدم که کارگاه آموزشی هم دارید. چطور میتوانم در جریان قرار بگیرم. آیا راه ارتباطی دیگری برای اطلاع رسانی مثل تلگرام وجود دارد؟
    لطفا پاسخ را به ایمیل من ارسال کنید.

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

  • سلام.میخواستم بپرسم که ای سیم هایی که وصل کردین به برد اسم خاصی دارن؟ و اینکه با سیم معمولی هم میشه وصل کرد؟اگه میشه هر چه سریع تر جواب منو بدید.

  • با عرض سلام و خسته نباشید خدمت شما.
    ببخشید من این پروژه رو اجرا کردم و فیلم ازش گرفتم و توی آپارات گذاشتم.لینکش هست https://www.aparat.com/v/90uG1
    میخواستم بپرسم که آیا بن ارسال رایگان میدید؟
    باتشکر

    • سلام
      بسیار عالی، از توجه شما ممنونم.
      بن تخفیف از طریق تیکت فروشگاه برای شما ارسال گردید.

    • سلام
      در این خصوص به خط های ۴۹، ۵۴ , ۵۷ مراجعه کنیدو عبارت مورد نظر را خود را وارد کنید.

  • سلام من تمامی مراحل را قدم به قدم انجام دادم و کتابخانه ها رو هم نصب کردم و همه کد ها رو هم کپی کردم ولی وقتی که میخوام کامپایلر کنم خطا میده میشه لطفا راهنمایی کنید ممنون از شما

  • با سلام و ممنون از سایت خوبتون
    میشه بگید دقیقا این کد چکار میکنه و چطور کار میکنه:
    #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 راه بندازم.
    لطفا راهنماییم کنید.
    با تشکر.

  • این ایرور برای چیه

    /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

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

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