آموزش Espآموزش ESP32آموزش اینترنت اشیاپروژه های Esp

آموزش اتصال سنسور التراسونیک به ESP32 (فاصله سنج)

اگر یک مهندس الکترونیک یا حتی فردی تازه کار هستید و میخواهید یک ربات دوری کننده از مانع بسازید، ابتدا باید با نحوه کار سیستم دوری از مانع را بیاموزید. به همین دلیل است که این پروژه از اهمیت بالایی برخوردار است چون در آن، ماژول تشخیص فاصله التراسونیک HC-SR04 را به ESP32 متصل کرده و تمام جزئیات درباره این ماژول را می آموزیم. ماژول التراسونیک قطعه کلیدی در هر سیستم تشخیص یا دوری از مانع است.

پس در این پروژه، تمام جزئیات درباره ماژول سنسور تشخیص فاصله التراسونیک HC-SR04 و اتصال آن به ESP32 را پوشش خواهیم داد. سنسور التراسونیک HC-SR04 دارای محدوده تشخیص 13 فوتی یا 400 سانتی متری و 15 درجه است که این مشخصات برای تشخیص مانع، عالی است. در کنار این ویژگی ها، این سنسور جریان کاری بسیار کمی دارد و برای پروژه هایی که با باتری تغذیه میشوند، بسیار مناسب است.

سنسور التراسونیک HC-SR04

ماژول سنسور التراسونیک HC-SR04 دارای 4 پایه است. این پایه ها VCC، Trig، Echo و GND هستند. از آنجایی که ورودی و خروجی این سنسور دیجیتالی هستند، باید آن ها را به پایه های دیجیتال میکروکنترلر متصل کنیم. پایه های HC-SR04 در تصویر پایین نمایش داده شده اند.

معرفی سنسور اولتراسونیک HC-SR04

  • VCC : این پایه، پایه تغذیه ماژول HC-SR04 است و باید به پایه 5V میکروکنترلر متصل شود.
  • Trig : این پایه، پایه تریگر و تحریک ماژول HC-SR04 است. با HIGH کردن این پایه به مدت 10 میکروثانیه، سنسور یک موج التراسونیک را ارسال خواهد کرد.
  • Echo : این پایه، پایه اکو یا پژواک ماژول سنسور HC-SR04 است و تا زمانی که سنسور پژواکی دریافت نکرده یا تایم اوت رخ نداده، در وضعیت HIGH باقی میماند.
  • GND : این پایه، پایه زمین ماژول است و باید به زمین ESP32 متصل شود.

بررسی اجمالی سنسور التراسونیک HC-SR04

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

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

نحوه کار سنسور اولتراسونیک

سنسور التراسونیک دارای دو مبدل التراسونیک است. یکی از این مبدل ها، مانند یک فرستنده با فرکانس 40 کیلوهرتز و دیگری مانند یک گیرنده عمل کرده و پالس های بازگشتی و منعکس شده از جسم را دریافت میکند. این سنسور یک پالس خروجی که با فاصله آن از جسم روبه رو متناسب است، تولید میکند. میکروکنترلر عرض پالس را خوانده و فاصله تا سنسور بر اساس این داده، مشخص میشود. این سنسور دارای ولتاژ کاری 5 ولت است و میتواند بدون این که با جسم تماسی داشته باشد، آن را در محدوده 2 تا 400 سانتی متری خود تشخیص دهد.

سنسور التراسونیک میتواند به هر میکروکنترلری متصل شود. میتوانید اتصال این سنسور به دیگر میکروکنترلرها را در سایت جست و جو کنید.

سنسور التراسونیک HC-SR04 چگونه کار میکند؟

برای آغاز پروسه اندازه گیری فاصله باید به مدت 10 میکروثانیه پایه تریگر را در حالت HIGH نگاه داریم. در پاسخ، سنسور یک انفجار التراسونیک متشکل از 8 پالس را در فرکانس 40 کیلوهرتز ارسال میکند. پالس هشتم به گونه ای طراحی شده که گیرنده بتواند این پالس را از موج های فراصوت محیطی تشخیص دهد. هنگامی که ارسال این 8 پالس به پایان رسید، پایه اکو به وضعیت HIGH رفته تا بازگشت پالس ها را نشان دهد. اگر سیگنال های ارسال شده بعد از 38 میلی ثانیه بازنگردند، یعنی هیچ مانعی در سر راه سنسور وجود ندارد.

اما اگر پالس ها بازگردند، به محض اینکه سنسور آن ها را دریافت کرد، پایه اکو به حالت LOW رفته و این اتفاق، روی پایه اکو پالسی با عرض 150 میکروثانیه تا 25 میلی ثانیه تولید میکند. عرض این پالس به مدت زمانی که طول کشیده تا سیگنال دریافت شود بستگی دارد.

محاسبه فاصله با اندازه گیری عرض پالس

از عرض پالس دریافتی برای مشخص کردن فاصله تا مانع استفاده میکنیم. ما این کار را با استفاده از معادله فاصله-سرعت-زمان انجام میدهیم. فرض کنید یک فاصله نامشخص به نام X داریم که به ازای آن یک پالس با عرض 700 میکروثانیه روی پایه اکو دریافت کرده ایم. برای محاسبه فاصله از فرمول زیر استفاده میکنیم.

Distance = Speed x Time

میدانیم که سرعت صوت 343.2 متر بر ثانیه است. برای محاسبه فاصله، باید سرعت صوت را به سانتی متر بر میکروثانیه تبدیل کنیم که برابر با 0.03432 سانتی بر میکروثانیه میشود.

همچنین مقدار متغیر زمان که از سنسور التراسونیک دریافت کرده ایم هم معلوم است. زمان، همان عرض پالس یا 700 میکروثانیه است.

Distance = (0.03432 cm/us x 700uS) / 2 = 12.012 cm

حال میدانیم که فاصله جسم تا سنسور 12.012 سانتی متر است.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

سوالات متداول

1-حداکثر محدوده تشخیص سنسور HC-SR04 چقدر است؟

حداکثر محدوده تشخیص HC-SR04 13 فوت یا 400 سانتی متر است.

2-آیا HC-SR04 میتواند آب را نیز تشخیص دهد؟

بله، این سنسور میتواند ارتفاع سطح آب که خودش میتواند نشانگر آغاز یک سیل باشد را تشخیص دهد. پروژه های بسیاری در اینترنت وجود دارند که در سیستم های تشخیص سطح از سنسورهای التراسونیک و ماژول ESP8266-12E استفاده کرده اند.

3- آیا سنسور التراسونیک HC-SR04 ضدآب است؟

سنسور HC-SR04 بسیار ضعیف بوده و به آسانی به دلیل گرد و خاک یا کثیفی یا حتی بادهای تند آسیب میبیند. علاوه بر همه اینها، ضدآب هم نیست. اما ماژول های به خصوصی در بازار یافت میشوند که تا حدی در برابر آب از خود مقاومت نشان داده و میتوانند در محیط های بسیار مرطوب استفاده شوند.

4-آیا HC-SR04 با ولتاژ 3.3 ولت کار میکند؟

براساس دیتاشیت، این سنسور نمیتواند با ولتاژ 3.3 ولت تغذیه شود. شما تنها میتوانید با این ولتاژ سنسور را تریگر کرده و در پایه اکو، از یک تقسیم کننده ولتاژ مناسب برای کاهش ولتاژ به 3.3 ولت استفاده کنید.

مدار اتصال سنسور التراسونیک HC-SR04 به ESP32

حال که به طور کامل با عملکرد ماژول سنسور التراسونیک HC-SR04 آشنا شدیم، میتوانیم تمام سیم کشی های لازم به ESP32 را انجام داده و یک کد ساده برای تست ماژول و عملکرد آن بنویسیم. شماتیک کامل اتصال سنسور HC-SR04 به ESP32 در تصویر پایین نشان داده شده است.

مدار اتصال سنسور التراسونیک HC-SR04 به ESP32

همانگونه که در تصویر بالا مشاهده میکنید، ماژول HC-SR04 و یک ماژول OLED را به ESP32 وصل کرده ایم. از آنجایی که ماژول التراسونیک با ولتاژ 5 ولت کار کرده و از یک تقسیم کننده ولتاژ در پایه اکو برای کاهش ولتاژ خروجی 5 ولت به 3.3 ولت  استفاده میکند، پروسه سیم کشی و اتصال آن بسیار ساده است.

برای اتصال ماژول HC-SR04، هرکدام از پایه های دیجیتال ESP32 میتوانند به عنوان ورودی یا خروجی استفاده شوند اما برای اتصال OLED، باید از پایه های I2C که پایه های IO21 و IO22 ماژول ESP32 هستند، استفاده کنید. تمام پروسه اتصالات همین بود. تصویر زیر مدار سخت افزاری این پروژه را نشان میدهد که میتواند به شما دید بهتری از اتصالات و مدار کامل بدهد.

مدار اتصال سنسور التراسونیک HC-SR04 به ESP32

کد آردوینو برای اتصال سنسور HC-SR04 به ESP32

در این قسمت از مطلب، کدی را که برای اندازه گیری فاصله با سنسور HC-SR04 نوشته ایم، توضیح میدهیم. فاصله محاسبه شده را بر روی نمایشگر 64*128 نیز نمایش خواهیم داد. اما پیش از شروع به کدنویسی، باید کتابخانه های Adafruit_GFX، Adafruit_SSD1306.h و NewPing.h را از library manager آردوینو نصب کرده تا بتوانیم داده سنسور و نمایشگر را پردازش کنیم. کدمان را با فراخوانی کتابخانه های لازم که Adafruit_GFX و NewPing.h هستند، شروع میکنیم.

کتابخانه Adafruit_GFX به کتابخانه های SPI و Wire وابسته است. پس باید قبل از فراخوانی Adafruit_GFX این کتابخانه ها را فراخوانی کنیم.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "NewPing.h"

حال پایه های تریگر و اکو سنسور HC-SR04 را تعریف میکنیم. در این مرحله، حداکثر فاصله ای که سنسور میتواند اندازه گیری کند را هم تعریف خواهیم کرد.

#define TRIGGER_PIN 14
#define ECHO_PIN 27
// Maximum distance we want to ping for (in centimeters).
#define MAX_DISTANCE 400

سپس، عرض و طول اسکرین ( صفحه نمایش)  و پارامتر ریست OLED (OLED_RESET) که کتابخانه به آن نیاز دارد را تعریف میکنیم.

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     -1 //

دو نمونه، یکی از کلاس sonar و از کتابخانه NewPing و دیگری از کلاس display و کتابخانه Adafruit_SSD1306 تعریف میکنیم. تمام پارامترهای موجود در این قسمت از کد، قبلا تعریف شده اند.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

تابع ()setup را فراخوانی میکنیم. در این تابع، ارتباط سریال را با نرخ باد 115200 آغاز کرده و از متد display.begin برای راه اندازی نمایشگر OLED استفاده میکند. با بررسی آنچه که متد display.begin برمیگرداند، مطمئن میشویم که ESP میتواند نمایشگر را شناسایی کند یا خیر. این تمام آن چیزی است که در تابع ()setup انجام میدهیم.

void setup() {
  Serial.begin(115200);
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); // Don't proceed, loop forever
  }
}

سپس تابع ()loop را فراخوانی میکنیم. داده فاصله اندازه گیری شده را چاپ کرده تا دقت را تغییر دهیم. ( بر حسب سانتی متر حساب کنیم.) و سپس تابع ()update_display را که در قسمت بعدی درباره آن توضیح میدهیم، فراخوانی میکنیم.

void loop() {
  Serial.print("Distance = ");
  Serial.print(sonar.ping_cm());
  Serial.println(" cm");
  delay(300);
  update_display();
}

در تابع ()update_display، ابتدا صفحه نمایش را پاک کرده، سپس اندازه متن را افزایش داده، رنگ نمایشگر را به سفید تغییر داده و داده را روی صفحه نمایش چاپ میکنیم.

void update_display(){
  display.clearDisplay();
  display.setTextSize(2);
  delay(1);
  display.setTextColor(WHITE);
  delay(1);
  display.println(F("Distance"));
  delay(1);
  display.println(sonar.ping_cm());
  delay(1);
  display.println("cm");
  delay(1);
  display.display();
  delay(500);
}

در اینجا به پایان کد خود میرسیم. حال میتوانیم به مرحله بعدی رفته و کد خود را تست کنیم.

عملکرد سنسور تشخیص فاصله التراسونیک HC-SR04 با ESP32

گیف پایین، عملکرد ماژول سنسور تشخیص فاصله التراسونیک HC-SR04 را نشان میدهد. همانگونه که پیشتر توضیح دادیم، ESP32 را به گونه ای برنامه نویسی کرده ایم که هرگاه داده فاصله جدیدی در اختیار ESP32 قرار گرفت، نمایشگر به روز شده و آن را نشان دهد. برای آزمایش این امر، یک جسم را جلوی سنسور حرکت دادیم و میتوانید ملاحظه کنید که  فاصله نمایش داده شده روی نمایشگر به روز شده و تغییر میکند.

عیب یابی ماژول سنسور التراسونیک HC-SR04

اگر در اتصال این سنسور با ESP32 به مشکل برخورده اید، ابتدا باید ریل تغذیه را بررسی کنید. ماژول سنسور التراسونیک با تغذیه 5 ولت کار میکند و اگر آن را با ولتاژ 3.3 ولت تغذیه کنید، ماژول ناپایدار خواهد بود.

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

پس حتما مطمئن شوید که کتابخانه ای که نصب کرده اید یا باید نصب کنید، مناسب ماژول شماست.

اگر ماژول شما همچنان کار نمیکند، آن را با ماژول دیگری تعویض کنید.

موارد موجود در فایل : سورس کامل

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

3 نظر

  1. سلام و خسته نباشید
    .‌امکانش هست که فاصله را از طریق بلوتوث به گوشی اعلام کنه؟

    1. سلام عزیز
      بله میتونید این کار رو انجام بدید
      برای یادگیری برنامه نویسی دوره اردوینو و esp32 را مشاهده کنید

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *