Przyszedł taki moment, że pojawił się w domu nowy członek rodziny, a wraz z nim zaczęło przybywać różnych zabawek. Najpierw była ładna różowiutka nakręcana karuzela, która oczywiście od razu przypadła do gustu młodej artystce.
Po jakimś czasie dostaliśmy w prezencie karuzelę już bardziej na wypasie, z melodyjkami, która sama się kręci, no bajera na całego, ale... no właśnie, człowiek to leniwe zwierzę i nie zawsze chciało się wstawać, żeby ją włączyć.
Postanowiłem trochę ją zmodyfikować, dodać funkcjonalności i wyeliminować okresową wymianę baterii. Rozkręciłem karuzelę, żeby ocenić w jaki sposób można by tu symulować wciskanie przycisków.
Na początek można spojrzeć na efekt działania (zrób trochę głośniej)
Poniżej trochę opisu jak to wsystko powstało.
EspHome świetnie nadaje się do prostych rzeczy, prototypowanie jest bardzo szybkie i daje od razu integrację z Home Assistant. Tak wygląda sterowanie bezpośrednio na telefonie właśnie w Home Assistant
input_select.carousel_song
Integracja z Google asystentem jest zrobiona z wykorzystaniem IFTTT i komponentu webhook.
Po jakimś czasie dostaliśmy w prezencie karuzelę już bardziej na wypasie, z melodyjkami, która sama się kręci, no bajera na całego, ale... no właśnie, człowiek to leniwe zwierzę i nie zawsze chciało się wstawać, żeby ją włączyć.
Postanowiłem trochę ją zmodyfikować, dodać funkcjonalności i wyeliminować okresową wymianę baterii. Rozkręciłem karuzelę, żeby ocenić w jaki sposób można by tu symulować wciskanie przycisków.
Na początek można spojrzeć na efekt działania (zrób trochę głośniej)
Posprawdzałem przejścia, pomierzyłem napięcia i wyszło, że wystarczy podać na przycisk napięcie zasilania.
Jako główny moduł wybrałem ESP8266 w wersji ESP-12. Posiada on za mało I/O, żeby wysterować wszystkie przyciski, dlatego postanowiłem wspomóc się ekspanderem PCF8574. Między każde wyjście ekspandera a fizyczny przycisk dodałem diodę 1N4148, aby nic ze sobą nie kolidowało.
Innym rozwiązaniem mogłoby być zastosowanie układu CD4051, jest to 8-kanałowy analogowy multiplekser, co właściwie nawet by uprościło podłączenie.
Schemat połączeń opisałem sobie na kartce.
Dodatkowo dołożyłem możliwość wyłączenia samego silniczka z maskotkami, przydatna opcja, ponieważ maskotki zawieszone są na mimośrodzie i w pewnych pozycjach następuje gwałtowna zmiana pozycji a co za tym idzie większy hałas.
W szufladowych gratach znalazłem jakiś mały projektorek zasilany na USB więc aż szkoda go nie wykorzystać, dołożyłem do karuzeli gniazdo USB właśnie pod ten projektor. Był to świetny pomysł, córka jest bardzo zainteresowana efektem na suficie, a dodatkowo w nocy pełni rolę lampki o delikatnym świetle.
Oprogramowanie zostało napisane z wykorzystaniem EspHome
substitutions:
device_name: "carousel"
press_time: 500ms
esphome:
name: ${device_name}
platform: ESP8266
board: nodemcuv2
wifi:
ssid: "wifiSSID"
password: "wifiPASSWD"
fast_connect: true
logger:
api:
ota:
web_server:
port: 80
i2c:
sda: GPIO5
scl: GPIO4
scan: True
id: bus_a
# PCF8574AT A0,A1,A2 -> VCC
pcf8574:
- id: 'pcf8574_hub'
address: 0x3F
switch:
# Switch on Carousel
- platform: gpio
id: power
pin: GPIO16
name: "${device_name}_power"
icon: "mdi:power"
on_turn_off:
- switch.turn_off: motor
- switch.turn_off: projector
# Motor
- platform: gpio
id: motor
pin: GPIO13
name: "${device_name}_motor"
icon: "mdi:rotate-orbit"
# Projector
- platform: gpio
id: projector
pin: GPIO14
name: "${device_name}_projector"
icon: "mdi:weather-night"
# Random
- platform: gpio
id: random_song
pin: GPIO12
name: "${device_name}_random"
icon: "mdi:rotate-3d-variant"
on_turn_on:
- delay: $press_time
- switch.turn_off: random_song
# PCF8574 - songs and volume
- platform: gpio
name: "${device_name}_jazz"
id: pcf0
icon: "mdi:music"
pin:
pcf8574: pcf8574_hub
number: 0
mode: OUTPUT
on_turn_on:
- delay: $press_time
- switch.turn_off: pcf0
- platform: gpio
name: "${device_name}_world"
id: pcf1
icon: "mdi:music"
pin:
pcf8574: pcf8574_hub
number: 1
mode: OUTPUT
on_turn_on:
- delay: $press_time
- switch.turn_off: pcf1
- platform: gpio
name: "${device_name}_nature"
id: pcf2
icon: "mdi:music"
pin:
pcf8574: pcf8574_hub
number: 2
mode: OUTPUT
on_turn_on:
- delay: $press_time
- switch.turn_off: pcf2
- platform: gpio
name: "${device_name}_classic"
icon: "mdi:music"
id: pcf3
pin:
pcf8574: pcf8574_hub
number: 3
mode: OUTPUT
on_turn_on:
- delay: $press_time
- switch.turn_off: pcf3
- platform: gpio
name: "${device_name}_lullaby"
icon: "mdi:music"
id: pcf4
pin:
pcf8574: pcf8574_hub
number: 4
mode: OUTPUT
on_turn_on:
- delay: $press_time
- switch.turn_off: pcf4
- platform: gpio
name: "${device_name}_white_sound"
id: pcf5
icon: "mdi:music"
pin:
pcf8574: pcf8574_hub
number: 5
mode: OUTPUT
on_turn_on:
- delay: $press_time
- switch.turn_off: pcf5
- platform: gpio
name: "${device_name}_volume_up"
id: pcf6
icon: "mdi:volume-plus"
pin:
pcf8574: pcf8574_hub
number: 6
mode: OUTPUT
on_turn_on:
- delay: $press_time
- switch.turn_off: pcf6
- platform: gpio
name: "${device_name}_volume_down"
id: pcf7
icon: "mdi:volume-minus"
pin:
pcf8574: pcf8574_hub
number: 7
mode: OUTPUT
on_turn_on:
- delay: $press_time
- switch.turn_off: pcf7
sensor:
- platform: uptime
name: "${device_name}_Uptime"
unit_of_measurement: days
update_interval: 300s
filters:
- multiply: 0.000011574
- platform: wifi_signal
name: "${device_name}_wifi_signal"
update_interval: 300s
EspHome świetnie nadaje się do prostych rzeczy, prototypowanie jest bardzo szybkie i daje od razu integrację z Home Assistant. Tak wygląda sterowanie bezpośrednio na telefonie właśnie w Home Assistant
lovlace-ui.yaml
- type: custom:vertical-stack-in-card
title: Karuzela
cards:
- type: glance
entities:
- entity: switch.carousel_power
tap_action:
action: toggle
- entity: switch.carousel_motor
tap_action:
action: toggle
- entity: switch.carousel_projector
tap_action:
action: toggle
- entity: switch.carousel_volume_down
tap_action:
action: toggle
- entity: switch.carousel_volume_up
tap_action:
action: toggle
- entity: switch.carousel_random
tap_action:
action: toggle
columns: 6
show_name: false
show_state: false
- type: entities
entities:
- entity: input_select.carousel_song
input_select.carousel_song
carousel_song:
name: Karuzela melodia
options:
- Wybierz melodie
- Jazz
- World
- Nature
- Classic
- Lullaby
- White sound
- Losuj
icon: "mdi:music"
Integracja z Google asystentem jest zrobiona z wykorzystaniem IFTTT i komponentu webhook.
Jak działa to po stronie asystenta google? Chciałbym dodać u siebie selektory ale nie potrafię ich zaimplementować. A u Ciebie "zmień melodię" działa :D
OdpowiedzUsuń