Микрофон

Неплохим «органом чувств робота» может стать слух! Посмотрим — как можно подключить микрофон к 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 подключается цифровой выход модуля микрофона.

По материалам курса робототехники

Добавить комментарий

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".