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

آموزش اتصال سنسور صوت KY-038 به ESP32

اگر به دنبال اضافه کردن صدا به پروژه خود هستید، با ما همراه باشید. چون در این مطلب قصد داریم یک سنسور صوت را به میکروکنترلر متصل کرده و آن را در پروژه های جالبی به کار بگیریم. سنسور صوت و صدای KY-038، از یک میکروفن کندانسر برای شناسایی امواج صوتی استفاده کرده تا ترکیبی از ثبات و اطمینان را به ما بدهد. در این مطلب، یک سنسورصوت KY-038 را به ESP32 متصل کرده و سپس یک دسیبل متر یا صداسنج میسازیم. بدون اتلاف وقت به سراغ پروژه خود میرویم. با اعمال چند ترفند، میتوان این مدار را به مدار شناسایی آلودگی صوتی، دزدگیر یا مدارهای دیگری تبدیل کرد.

شرح پایه یا پین اوت سنسور صوت

ماژول سنسور صوت KY-038 دارای 4 پایه است. VCC، GND، Analog Out و Digital Out. از پایه AO به عنوان پایه خروجی آنالوگ و از پایه DO به عنوان پایه خروجی دیجیتال استفاده میکنیم. پایه های این سنسور مطابق تصویر پایین هستند.

شرح پایه یا پین اوت سنسور صوت

  • VCC : این پایه، پایه تغذیه سنسور صوت است که میتواند به پایه 3.3V یا 5V منبع متصل شود. اما توجه داشته باشید که خروجی آنالوگ براساس ولتاژ منبع تغذیه تغییر خواهد کرد.
  • GND : این پایه، پایه زمین ماژول سنسور صوت است و باید به پایه زمین آردوینو متصل شود.
  • DOUT : این پایه، پایه خروجی دیجیتال بورد است. خروجی LOW نشان میدهد که هیچ صدایی توسط سنسور شناسایی نشده و HIGH بودن آن نشان از تشخیص صوت توسط سنسور دارد.
  • AOUT : این پایه، پایه خروجی آنالوگ بورد است که با استفاده از آن داده آنالوگ را مستقیما از سنسور صوت میخوانیم.

ماژول سنسور صوت چگونه کار میکند؟

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

قطعه اصلی سنسور صدا، یک میکروفن است. انواع مختلفی از میکروفن ها، از جمله میکروفن های زغالی، میکروفن های فیبر نوری، میکروفن های ریبون و میکروفن های لیزری وجود دارند اما سنسور صوتی که ما از آن استفاده میکنیم، یک میکروفن کندانسر دارد. ماژول سنسور صدا در تصویر پایین نشن داده شده است.

شرح پایه یا پین اوت سنسور صوت

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

درگذشته از سنسور صوت و آردوینو برای ساخت شناساگر سوت، فواره موزیکال و نویزسنج استفاده کرده ایم.

اجزای ماژول سنسور صوت

این سنسور میتواند در ساخت کلیدها و LED های حساس به صدا و پروژه های بسیار دیگری استفاده شود. این سنسور به دلیل قیمت پایین، توان مصرفی کم، بادوام و سخت بودن و محدوده وسیعی که دارد، در میان تازه کاران بسیار محبوب و معروف است. ( میدان دید یا محدوده سنسور میتواند با تنظیم حساسیت کم یا زیاد شود.)

سنسور KY-038 به ESP32

این سنسور 4 پایه دارد. دو پایه، پایه های تغذیه VCC و GND بوده و دو پایه دیگر، پایه های خروجی دیجیتال و آنالوگ هستند که در تصویر بالا به خوبی نشان داده شده اند. این ماژول بر روی خود یک LED  سیگنال و یک LED تغذیه دارد. LED تغذیه هنگامی که تغذیه به مدار متصل میشود روشن شده و LED سیگنال هم هنگامی که مدار تریگر میشود.

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

سوالات متداول درباره ماژول سنسور صدا

1-سنسورهای صدا چه انواعی دارند؟

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

2-مزایای سنسور صدا چیست؟

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

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

3-میدان دید یا محدوده سنسور صدا چقدر است؟

این سنسور میتواند به صورت تقریبی نویزهایی در حد 100 دسیبل یا محدوده فرکانسی 3 تا 6 کیلوهرتز را تشخیص دهد.

4-آیا آردوینو میتواند صدا را تشخیص دهد؟

شما به زودی راه اندازی و  طرز استفاده از سنسور صدا KY-038 با آردودینو را خواهید آموخت و تغییرات در شدت صدای محیط را به کمک مبدل آنالوگ به دیجیتال آردوینو اندازه گیری خواهید کرد.

مدار ماژول سنسور صدا

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

مدار داخلی ماژول صوت KY-038

در این شماتیک، آپ امپ LM393 را داریم که ارزان، با توان مصرفی و ولتاژ آفست پایین بوده و میتواند با دو ولتاژ 3.3V و 5V  تغذیه شود. اما توجه داشته باشید که ولتاژ خروجی آنالوگ، به ولتاژ تغذیه بستگی دارد و متناسب با آن تغییر میکند. وظیفه اصلی آپ امپ، تبدیل سیگنال آنالوگ خروجی سنسور به یک سیگنال دیجیتال است. یک پتانسومتر 10 کیلویی هم برای تنظیم ولتاژ رفرنس به کار گرفته میشود. از این پتانسیومتر برای تامین ولتاژ رفرنس خروجی آنالوگ ماژول هم استفاده میشود.

اگر ولتاژ ورودی سنسور از ولتاژ آستانه ( که با پتانسیومتر تنظیم میشود) کمتر شود، خروجی آپ امپ LOW میشود.

درکنار همه این قطعات، دو LED هم داریم که اولی LED تغذیه و دومی LED تریگر است. LED تغذیه هنگامی که منبع به بورد متصل میشود، روشن شده و LED تریگر وقتی به حد مشخصی از آستانه میرسیم. پس مدار به این شکل کار میکند.

مدار دسیبل متر با سنسور صدا KY-038 و ESP32

حال که با نحوه عملکرد سنسور صدا KY-038 آشنا شدیم، میتوانیم تمام سیم کشی های لازم به آردوینو را مطابق شماتیک زیر انجام دهیم.

مدار دسیبل متر با سنسور صدا KY-038 و ESP32

قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

اتصال سنسور صدا به میکروکنترلر کار ساده ایست. کافی است که ماژول را با ولتاژ 3.3V تغذیه کرده و پایه خروجی آنالوگ آن را به ESP32 متصل کنیم. حال میتوانیم، سیگنال را با مبدل آنالوگ به دیجیتال ESP32 پردازش کنیم. همچنین از سه LED برای نمایش شدت دستگاه و از یک نمایشگر OLED برای نمایش دسیبل ثبت شده استفاده میکینم.

LED  ها به پایه های GPIO میکروکنترلر و ماژول OLED به پایه های I2C آن متصل شده اند. میتوانید درباره نحوه اتصال OLED به ESP32 بیشتر مطالعه کنید.

دسیبل متر با سنسور صدا KY-038 و ESP32

کد آردوینو برای دسیبل متر

کد دسیبل متر یا صدا سنج با آردوینو بسیار ساده و قابل فهم است. ما تنها نویز صوتی خروجی میکروفن را اندازه گیری و آن را با به سیگنال دیجیتال تبدیل کرده و دسیبل نویز را پیدا میکنیم.

کدمان را با فراخوانی کتابخانه های Wire.h، Adafruit_GFX.h و Adafruit_SSD13060.h شروع میکنیم. طول و عرض صفحه نمایش را تعیین میکنیم.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define  SCREEN_WIDTH 128 // OLED display width, in pixels
#define  SCREEN_HEIGHT 64 // OLED display height, in pixels
#define  OLED_RESET   -1 // Reset pin # (or -1 if sharing Arduino reset pin)

یک نمونه از کتابخانه Adafruit_SSD13060.h تعریف میکنیم.

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

سپس دو متغیر برای ذخیره داده نمونه برداری شده از ADC تعریف میکنیم.

const int sampleWindow = 50;
unsigned int sample;

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

#define SENSOR_PIN 35
#define PIN_QUIET 33
#define PIN_MODERATE 25
#define PIN_LOUD 26

در تابع ()setup، تمام پایه های ورودی و خروجی لازم را پیکربندی میکنیم. همچنین پایه های متصل به LED را در وضعیت LOW قرار داده و ارتباط سریال را آغاز میکنیم. در نهایت در تابع ()setup، نمایشگر را راه اندازی کرده و در وضعیت LOW تنظیم میکنیم.

void setup(){
  pinMode(SENSOR_PIN, INPUT); // Set the signal pin as input
  pinMode(PIN_QUIET, OUTPUT);
  pinMode(PIN_MODERATE, OUTPUT);
  pinMode(PIN_LOUD, OUTPUT);
  digitalWrite(PIN_QUIET, LOW);
  digitalWrite(PIN_MODERATE, LOW);
  digitalWrite(PIN_LOUD, LOW);
  Serial.begin(115200);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); // Don't proceed, loop forever
  }
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.display();
  digitalWrite(PIN_LOUD, LOW);
}

در تابع ()loop، داده را از ADC خوانده و آن را نمونه برداری میکنیم تا بین دو مقدار حداقل (signalMin) و حداکثر (signalMax) ذخیره شود.

unsigned long startMillis = millis();                  // Start of sample window
  float peakToPeak = 0;                                  // peak-to-peak level
  unsigned int signalMax = 0;                            //minimum value
  unsigned int signalMin = 1024;                         //maximum value
  // collect data for 50 mS
  while (millis() - startMillis < sampleWindow) {
    sample = analogRead(SENSOR_PIN);
    if (sample < 1024) {
      if (sample > signalMax) {
        signalMax = sample;                       
      }
      else if (sample < signalMin)  {
        signalMin = sample;                         
      }
    }
  }

برای پیدا کردن مقدار پیک به پیک سیگنال، مقدار حداقل (signalMin) را از مقدار حداکثر (signalMax) کم کرده و نتیجه را به یک سیگنال در محدوده 49 تا 90 دسیبل مپ میکنیم. ( نسبت میدهیم)

 peakToPeak = signalMax - signalMin;                 
  int db = map(peakToPeak, 0, 900, 49, 90);        
  Serial.print("\t");
  Serial.println(db);
  display.setCursor(0, 0);
  display.print("Loudness: ");
  display.print(db);
  display.print("dB");
  digitalWrite(PIN_LOUD, LOW);

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

else if (db > 60 && db < 85) {
    display.clearDisplay();
    display.setCursor(0, 1);
    display.print("Level:Moderate");
    display.display();
    digitalWrite(PIN_QUIET, LOW);
    digitalWrite(PIN_MODERATE, HIGH);
    digitalWrite(PIN_LOUD, LOW);
  }
  else if (db >= 85 && db <= 90) {
    display.clearDisplay();
    display.setCursor(0, 1);
    display.print("Level:High");
    display.display();
    digitalWrite(PIN_QUIET, LOW);
    digitalWrite(PIN_MODERATE, LOW);
    digitalWrite(PIN_LOUD, HIGH);
  }
  else {
    digitalWrite(PIN_QUIET, LOW);
    digitalWrite(PIN_MODERATE, LOW);
    digitalWrite(PIN_LOUD, LOW);
  }
  delay(200);
}

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

1 (1 نفر)

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

محمد رحیمی

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

1 دیدگاه

  1. با سلام و خسته نباشید
    آیا شدنیه با برد esp32 یه اسپیکر بلوتوثی ساخت که صدای گوشی رو ارسال کنه؟
    اگر شدنیه چه کدی باید در برد آپلود کرد؟

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

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