Esphome a Senzor s mikrofonom MAX4466

www
Odpovědět
Uživatelský avatar
tiimsvk
Dárce - Donátor
Dárce - Donátor
Příspěvky: 801
Registrován: 06. květen 2021, 07:03
Dal poděkování: 72 poděkování
Dostal poděkování: 65 poděkování

Esphome a Senzor s mikrofonom MAX4466

Příspěvek od tiimsvk »

Ahojte tak mám tu ďalši senzor na stole, ktorý by som chcel aplikovať do meteostanice jasná sa o senzor s mikrofonom MAX4466
Ale samozrejme oficialne pre esphome zatial nie je kód.
Má niekdo skúsenosti s týmto senzorom.
Ako konvertujem výstupný signal ADC volty na dB respektivne akusticku hladinu zvuku?

čo som do teraz skúšal a vyhútal na nete, že modul funguje na princípe špičiek medzi, ktorými vie vypočitať výstupné dB.

https://forums.adafruit.com/viewtopic.p ... 2&p=503661.

ASi mi nezostáva nič iné len zase skúsiť arduino kód do espčka a pozrieť výstup na sieralovom monitore.

EDIT1:
Podarilo sami napísať kód na zachytávanie min. max. hodnoty zo senzora a pomocou vzorca pre prepočet Voltov na Decibely dostávam hodnotu hluku v okoli. či to naozaj funguje ako má a zobrazuje to správne hodnoty to neviem nie som audiofil a ani sa nevyznam až tak v kódovaní ak má niekto lepši kód alebo pripomienky na úpravu tak s em s tým

YAML:

Kód: Vybrat vše

##SOUND DETECT
  - platform: adc
    id: adcsound
    pin: GPIO34
    attenuation: 11dB
    name: "Sound detect"
    update_interval: 50ms
    accuracy_decimals: 4
    internal: true

  - platform: template
    id: "signalmin"
    name: "Signal min"
    filters:
       - min:
           window_size: 5
           send_every: 5
           send_first_at: 5
    lambda: |-
      return (id(adcsound).state);
    update_interval: 250ms
    accuracy_decimals: 4
    unit_of_measurement: 'V'
#    internal: true

  - platform: template
    name: "Signal max"
    id: "signalmax"
    filters:
       - max:
           window_size: 5
           send_every: 5
           send_first_at: 5
    lambda: |-
      return (id(adcsound).state);
    update_interval: 250ms
    accuracy_decimals: 4
    unit_of_measurement: 'V'
#    internal: true

  - platform: template
    name: "Noise Level"
    lambda: |-
      return ((log10(((((id(signalmax).state) - (id(signalmin).state)) * 3.3) * 0.707)/0.00631) *20) + 25);
    unit_of_measurement: 'dB'
    update_interval: 1s

#peakToPeak = signalMax - signalMin;  // max - min = peak-peak amplitude
 #  double volts = ((peakToPeak * 3.3) / 1024) * 0.707;  // convert to RMS voltage
  # double first = log10(volts/0.00631)*20;
   #double second = first + 94 - 44 - 25;
Spodná časť kódu je skopírovaná z arduina podľa čoho som sa držal pri vyhotovení toho pre esphome

Odpovědět

Zpět na „ESPHome“