Guten Nachmittag
habe am Wochenende einen Soundsensor nach dieser Anleitung gebastelt:
Nutzen: Wir haben einen Bewegungsmelder im Bad , der jedoch beim Duschen das Licht wieder ausschaltet
Meine angedachte Lösung: Soundsensor merkt eine erhöhte Lautstärke durch das laufende Wasser und das Licht bleibt aktiv bis diese wieder “normal” ist, bzw es leiser ist.
Nun so gut soweit.
Ich habe das Gerät angeschlossen es scheint auch zu funktionieren. Jedoch nur bei sehr extrener Lautstärke fängt es an den Wert zu ändern. Somit isr das Duschen aktuell zu leise um erkannt zu werden.
Habe ich irgendwo ein Fehler gemacht?
Komponenten ESP 8266 und AZDelivery 3 x Hochempfindliches Mikrofon Mikrophon KY-037
Yaml:
> esphome:
name: soundsensor
friendly_name: Soundsensor
esp8266:
board: esp01_1m
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "EquAQqFo8xoApXM3TNY7qfufxwNhrVbBmRGIb+uJe10="
ota:
password: "3f170f2f5a5fcf9d85d6ff12792a0b59"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Soundsensor Fallback Hotspot"
password: "5zj0A58rQS6M"
captive_portal:
globals:
- id: esphome_sensitivity
type: float
initial_value: '36.5'
restore_value: yes
- id: esphome_volume
type: int
sensor:
- platform: adc
pin: A0
id: esphome_db
device_class: signal_strength
name: "Db SoundEsp"
icon: "mdi:volume-vibrate"
unit_of_measurement: "db"
update_interval: 5s
raw: true
filters:
- lambda: |-
unsigned int sample;
unsigned long startMillis= millis();
float peakToPeak = 0;
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
while (millis() - startMillis < 500) {
sample = analogRead(A0);
if (sample < 1024){
if (sample > signalMax){
signalMax = sample;
}
else if (sample < signalMin){
signalMin = sample;
}
}
}
peakToPeak = map((signalMax - signalMin),1,1024,1.5,1024);
id(esphome_volume) = peakToPeak;
float state = id(esphome_sensitivity)*log10(peakToPeak)+15;
return(state);
- platform: template
name: "Volume SoundEsp"
icon: "mdi:volume-high"
unit_of_measurement: "%"
update_interval: 5s
lambda: return(map((id(esphome_db).state),15,150,0,100));
- platform: template
name: "RAW SoundEsp"
icon: "mdi:volume-source"
unit_of_measurement: "%"
update_interval: 5s
lambda: return(map(id(esphome_volume),1,1024,0,100));
number:
- platform: template
id: sensitivity_slider
name: "Sensitivity SoundEsp"
icon: "mdi:knob"
update_interval: 5s
initial_value: "36.5"
step: 0.1
min_value: 20
max_value: 40
mode: slider
set_action:
then:
- lambda: id(esphome_sensitivity) = x;