راه اندازی ماژول SRF04 با آردوینو و OLED :
ماژول های اندازه گیری فاصله به طور کلی ماژول هایی هستند که امکان اندازه گیری فاصله تا یک مانع را در سیستم های امبدد فراهم می سازند . تکنولوژی به کار رفته در این ماژول ها تنوع زیادی دارد اما به طور کلی از بازتاب امواج توسط اجسام بهره می گیرند . در یک ماژول اندازه گیری فاصله بر پایه IR ، از تابش IR بر اجسام و محاسبه شدت بازتاب از سمت جسم خارجی ، فاصله به دست می آید . یکی از تکنولوژی های به کار گرفته شده در ماژول های اندازه گیری فاصله ، استفاده از امواج التراسونیک می باشد . در این ماژول ها با ایجاد یک سیگنال فراصوت و محاسبه تاخیر زمانی پژواک صدا توسط جسم خارجی ، قاصله محاسبه می شود . یکی از مزیت ها ماژول های التراسونیک قیمت پایین و دقت آن ها می باشد . به طور کلی به دلیل استفاده از مدولاسیون های خاص در ارسال صوت در این ماژول ها ، تاثیر پذیری آن ها از محیط بسیار پایین تر از ماژول های IR است . یکی از ماژول های کاربردی اندازه گیری فاصله که بر پایه التراسونیک است ، ماژول SRF04 می باشد . راه اندازی و به کار گیری این ماژول بسیار ساده است و نیاز به کتابخانه خاصی ندارد .
در این آموزش قصد داریم به الگوی راه اندازی ماژول srf04 بپردازیم .
ماژول SRF04 دارای 4 پایه به شرح زیر است :
1- VCC ولتاژتغذیه که 5 ولت می باشد . (در نسخه های 2020 از ولتاژ 3.3 ولت پشتیبانی می شود)
2- GND پایه زمین ماژول
3-Trigger از این پایه برای ارسال پالس توسط ماژول استفاده می شود (در ادامه کامل شرح داده می شود )
4-Echo از این پایه برای دریافت سیگنال برگشتی ا زمانع استفاده می شود .
بر اساس دیتا شیت SRF04 الگوی زیر برای عملکرد ماژول نشان داده شده است :
نحوه راه اندازی ماژول SRF04 :
بعد از اتصال تغذیه ماژول ، می بایست پین Trigger را به مدت 10 میکرو ثانیه (در حداقل مقدار خود ) در حالت 1 منطقی قرار داد . پس از این کار ماژول 8 پالس به سمت مانع می فرستد . پس از برخورد سیگنال های التراسونیک به مانع ، پین Echo به مدت 100 میکرو ثانیه الی 18 میلی ثانیه در وضعیت یک منطقی قرار می گیرد . این مدت زمان بر اساس فاصله جسم تا مانع ( عرض پالس قرار گرفته بر روی پین Echo ) می تواند تغییر کند .لذا می توان با انداره گیری عرض پالس پین Echo فاصله تا حسم را محاسبه نمود .
در صورتی که هیچ مانعی در مقابل ماژول نباشد پین Echo بعد از حدود 36 میلی صانیه یک خواهد شد .
کد های پروژه :
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define trigPin 9
#define echoPin 8
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64)
display.clearDisplay();
}
void loop() {
float duration;
float distance_cm;
float distance_in;
digitalWrite(trigPin, LOW); //PULSE ___|---|___
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance_cm = (duration/2) / 29.1;
distance_in = (duration/2) / 73.914;
display.setCursor(30,0); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.println("Range Finder");
display.setCursor(10,20); //oled display
display.setTextSize(2);
display.setTextColor(WHITE);
display.println(distance_cm);
display.setCursor(90,20);
display.setTextSize(2);
display.println("cm");
display.setCursor(10,45); //oled display
display.setTextSize(2);
display.setTextColor(WHITE);
display.println(distance_in);
display.setCursor(90,45);
display.setTextSize(2);
display.println("in");
display.display();
delay(500);
display.clearDisplay();
Serial.println(distance_cm);
Serial.println(distance_in);
}
شماتیک مدار :




مدار بستم جواب نداد oledروشن نشد اکشن مونیتور هم nock nokh نشون میداد