Modul Mikrofonu s Analogovým Výstupem

Mikrofon s analogovým výstupem je vstupní modul pro Arduino, který slouží ke snímání hluku v okolí. Tento modul obsahuje velice citlivý elektretový mikrofon společně s integrovaným obvodem, který slouží jako komparátor. Za pomoci vestavěného trimru si tedy můžeme nastavit libovolnou hladinu jako naši hranici a pokud bude překročena, na modulu se aktivuje digitální výstup. Zároveň je ale možné pracovat přímo s analogovým výstupem z mikrofonu. Napájecí napětí tohoto modulu je 5 Voltů. Mezi další vlastnosti patří indikační LED diody, kdy jedna označuje připojené napájení a druhá překročení nastavené hranice společně s aktivací zmíněného digitálního výstupu. Na modulu se také nachází montážní otvor pro šroub o velikosti 3 mm.

Pro úspěšné propojení modulu s mikrofonem a Arduino desky propojíme celkem 4 vodiče. Připojíme A0 na pin A0, G na zem Arduina, + na 5V Arduina a D0 na pin D2. Pro digitální vstup je nutné vybrat pin, který slouží jako přerušovací. Seznam těchto pinů pro jednotlivé desky si můžete prohlédnout zde.

Ukázkový kód obsahuje na svém začátku nastavení čísel propojovacích pinů a vytvoření proměnných pro ukládání dat. V podprogramu setup nastavíme komunikaci po sériové lince a poté načteme první hodnotu maxima z analogového pinu. Následně nastavíme LED diodu jako výstupní a vypneme ji. A v poslední kroku si nastavíme přerušení pro pin D2, přičemž detekce je nastavena na náběžnou hranu a při aktivaci bude zavolán podprogram prerus. Nekonečná smyčka loop obsahuje na svém začátku načtení stavu digitálního a analogového pinu do příslušných proměnných. Následně kontrolujeme velikost maximální hodnoty na analogovém pinu, kdy při nalezení nového maxima vytiskneme informační zprávu po sériové lince a uložíme si nové maximum. V další podmínce si nastavíme dle svých potřeb detekci překročení určité zvukové hranice. Já jsem zjistil, že pro mé potřeby detekce tlesknutí je vhodné detekovat zvuky o hodnotě větší než 700. Při detekci zvuku tlesknutí si vypíšeme informaci po sériové lince a následně zkontrolujeme, kolik času uběhlo od poslední detekce. Pokud je mezi dvěma tlesknutími 1 až 3 sekundy, vytiskneme informaci o dvou tlesknutích po sobě a rozsvítíme na dvě sekundy LED diodu na Arduino desce. V opačném případě si uložíme čas pro nové porovnávání časů. Na konci smyčky se nachází už jen krátká pauza pro ustálení měření. V podprogramu prerus je v této ukázce pouze vytištěna zpráva o detekci hluku modulem, protože jsem chtěl celou detekci demonstrovat pomocí práce s analogovým výstupem mikrofonu.

// Modul mikrofonu s analogovým výstupem

// nastavení propojovacích pinů
#define pinA A0
#define pinD 2
#define LED 13
// vytvoření proměnných pro ukládání dat
int data, maximum;
bool digit;
long casPreruseni;

void setup() {
  // inicializace komunikace po sériové lince
  // rychlostí 9600 baud
  Serial.begin(9600);
  // načtení první hodnoty jako maxima
  maximum = analogRead(pinA);
  // nastavení LED diody jako výstupní a její vypnutí
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);
  // nastavení přerušení na pin 2 (int0)
  // při nástupné hraně (log0->log1) se vykoná program prerus
  attachInterrupt(0, prerus, RISING);
}
void loop() {
  // načtení stavu digitálního a analogového pinu
  // do proměnných
  digit = digitalRead(pinD);
  data = analogRead(pinA);
  // pokud je načtená analogová hodnota větší
  // než poslední maximum, přepíšeme ho
  // a vytiskneme nový výsledek po sériové lince
  if ( data > maximum ) {
    Serial.print("->Nalezeno nove maximum: ");
    Serial.println(data);
    maximum = data;
  }
  // pokud je hluk větší než nastavená hranice,
  // vytiskneme informaci po sériové lince
  if ( data > 700 ) {
    Serial.println("-> Tlesknuti detekovano Arduinem!");
    delay(300);
    // pokud je rozdíl od posledního tlesknutí
    // mezi 1000 až 3000 ms, ohlaš aktivaci dvojtlesku
    // vytištěním zprávy po sériové lince a rozsvícením LED diody
    if ( (millis() - casPreruseni > 1000) & (millis() - casPreruseni < 3000) ) {
      Serial.println("-> Detekce dvou tlesknuti!");
      digitalWrite(LED, HIGH);
      delay(2000);
      digitalWrite(LED, LOW);
    }
    // v opačném případě ulož čas posledního přerušení
    else {
      casPreruseni = millis();
    }
  }
  // krátká pauza pro ustálení měření
  delay(1);
}
void prerus() {
  // vypiš varovnou hlášku, pokud je aktivován digitální vstup
  Serial.println("Detekovan hluk modulem!");
}

Po nahrání ukázkového kódu do Arduino desky s připojeným mikrofonem dostaneme například tento výsledek:

Detekovan hluk modulem!
Detekovan hluk modulem!
Detekovan hluk modulem!
-> Tlesknuti detekovano Arduinem!
Detekovan hluk modulem!
Detekovan hluk modulem!
Detekovan hluk modulem!
Detekovan hluk modulem!
-> Tlesknuti detekovano Arduinem!
-> Detekce dvou tlesknuti!

Mikrofon s analogovým výstupem je zajímavý modul pro Arduino, který lze využít různými způsoby. Například ho lze využít pro účely zabezpečení pomocí detekce překročení určité hranice hluku, pro detekci různých zvuků jako je tlesknutí či třeba pro vytvoření barevné hudby. Díky malé velikosti modulu a přítomnosti montážního otvoru je pak velice jednoduché umístit mikrofon v montážní krabičce.

 

Seznam použitých komponent:

https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html

https://dratek.cz/arduino/1358-modul-mikrofonu-s-analogovym-vystupem-pro-arduino-vysoka-citlivost-1467272055.html

Další podobné články