Неплохим «органом чувств робота» может стать слух! Посмотрим — как можно подключить микрофон к Arduino…
Микрофон (от греч. μικρός — маленький, φωνη — голос) — электроакустический прибор, преобразующий акустические колебания в электрический сигнал.
Среди многообразия различных модулей, производимых для энтузиастов робототехники есть модуль микрофона.
Один из вариантов представлен на фото. Более распространены универсальные модули, где есть как аналоговый, так и цифровой выходы.
Как правило, на аналоговом выходе уровень напряжения пропорционален уровню громкости. На цифровом выходе появляется логическая единица при превышении уровня громкости заданного порога (порог задается подстроечным резистором — потенциометром).
Управление светодиодом по хлопку
В данной задачке надо сделать так, чтоб вспыхивал светодиод при превышении уровня звука заданного порога. Схема подключения аналогового выхода микрофона очевидная:
выход усилителя микрофона подключен к аналоговому входу А4 Arduino. В скетче нам надо измерить уровень напряжения на входе А4, сравнить его с заданным порогом и, в случае его превышения, не на долго включить светодиод на плате (помним, что он подключен к pin 13).
int mic = A4; // задаём пин подключения микрофона void setup() { Serial.begin(9600); pinMode(13,OUTPUT); //светодиод } void loop() { float x = analogRead(mic) * 5*1000 / 1024; //значение с микрофона переводим в милливольты Serial.println(x, DEC); if (x > 60) { //превышение порога - включим LED digitalWrite(13, HIGH) ; delay(300); } else { //ниже порога - выключим digitalWrite(13, LOW) ; } }
В приводимом скетче порог определен в 60 милливольт (условие в if). Длительность вспышки — фиксирована (300 мс). Для контроля — на монитор выводится уровень с выхода микрофона по последовательному интерфейсу.
Более интересен вариант, когда длительность вспышки пропорциональна уровню громкости. Для той же схемы несколько изменим скетч.
int mic = A4; // задаём пин подключения микрофона void setup() { Serial.begin(9600); pinMode(13,OUTPUT); //светодиод } void loop() { int x = analogRead(mic); //значение с микрофона Serial.println(x); digitalWrite(13, HIGH); //включим LED delay(x); //пауза пропорциональна громкости digitalWrite(13, LOW); //выключим LED }
Тут, практически, все тоже самое: измеряем уровень сигнала, выводим его в последовательный порт. Отличие — в интерпретации значения уровня: используем его в качестве аргумента функции задержки. Сигнал может иметь значения от 0 до 1023 — так что длительность вспышки в теории может доходить до секунды при громком хлопке!
Если использовать цифровой выход микрофона, то уровень порога срабатывания можно задать только потенциометром на плате микрофона. Скетч, в таком случае упрощается. В нем светодиод также вспыхивает при превышении порога как и в первом примере.
int mic = 18; // задаём пин подключения микрофона void setup() { pinMode(mic,INPUT); //цифровой выход микрофона pinMode(13,OUTPUT); //светодиод } void loop() { int x = digitalRead(mic); //значение с микрофона digitalWrite(13, x); //включим или выключим LED }
Здесь надо вспомнить, что «аналоговые» входы можно использовать как «цифровые», нумерация, в этом случае продолжается. А4 становится цифровым пином 18! В данном случае это использовано просто чтоб не перерисовывать схему подключения микрофона: к А4 подключается цифровой выход модуля микрофона.
По материалам курса робототехники