Trasformare tutto in Smart? Si con il CD4066

HassioHelp

Trasformare tutto in Smart? Si con il CD4066

Per questo articolo ringraziamo Giovanni C ormai presente da lungo tempo nel nostro gruppo Telegram

Credo che chiunque si sia avvicinato alla domotica avrà pensato almeno una volta di poter modificare, o meglio “domotizzare”, un apparecchio che non nasce per esser controllato remotamente. Si trovano tanti tutorial in rete ma sono sempre specifici per un determinato apparecchio e/o modello.

L’idea da cui sono partito io invece è realizzare qualcosa quanto più generica possibile per potermi facilmente interfacciare con tutti (o quasi!) i device possibili, dal diffusore di oli, alla lampada a LED per finire a macchinetta del caffè, de-umidificatori e quanto altro mi venisse in mente.

L’approccio è diviso in due parti:

  • la prima (che affronteremo in questo articolo) tratterà come interfacciarci in parallelo ai comandi del nostro device senza interferire con il suo funzionamento tradizionale, e senza usare componenti troppo invasivi e/o di grandi dimensioni (quindi relè elettromeccanici scartati a priori sia per dimensioni che per le interferenze elettromagnetiche che generano le loro bobine) per poter simularne l’attivazione tramite Home Assistant
  • la seconda parte (in un prossimo articolo) espanderà le possibilità di questo sistema dando la possibilità di monitorare determinati punti di controllo del device su cui stiamo lavorando ed in presenza o meno di tensione darci un feedback in Home Assistant e poter sapere remotamente lo stato delle varie funzioni del device

Introduzione

La prima cosa da tenere presente è che per completare questo progetto ci vuole un minimo di manualità con saldatore e componenti elettronici, non serve una grossa conoscenza della teoria, ma saper saldare e fare collegamenti con cavetti è l’unica skill richiesta.

Hardware

Andiamo ad analizzare cosa ci serve; nella quasi totalità delle situazioni che ho affrontato, mi è sempre servito solo la possibilità di collegarmi in parallelo ad un pulsante già esistente per poter simulare la sua pressione tramite comandi remoti inviati via WiFi, il tutto senza perdere la funzionalità del pulsante originale. Dopo un po’ di ricerche ho trovato il componente che fa al mio caso, un integrato la cui sigla è CD4066 del quale qui sotto trovate il pin-out.

Questo componente è definito come “Quad Analog Switch” ed in pratica consente di gestire 4 coppie di terminali/switch tramite altrettanti segnali TTL provenienti da un microcontroller; in parole povere controllare l’apertura e chiusura di un circuito tramite un GPIO del micro, ESP8266 nel mio caso in quanto comodissimo da usare, economico, facile da programmare persino con ESPHome (ed infatti userò quest’ultimo per il firmware di esempio); questa funzionalità avviene senza mettere in contatto il segnale di input con i due “PIN” di output dell’integrato, quello che viene definito “contatto pulito”.

A questo punto lo schema di collegamento è veramente banale e lo trovate qui sotto:

Come vedete è abbastanza semplice:

  • il chip CD4066 va alimentato usando 3.3V (piedino 14) e GND (piedino 7) presi direttamente dal WEMOS
  • i 4 pin di input (piedini 13, 5, 6 e 12) vanno collegati rispettivamente a D5, D6, D7 e D8 (nel mio caso)
  • ogni coppia di pin output (1/2, 3/4, 8/9 e 10/11) andrà poi collegata in parallelo al pulsante da controllare

Ovviamente se non vi servono tutti e 4 i controlli ma meno collegate solo quelli necessari!

A questo punto la parte hardware è completa, manca solo l’alimentazione del nostro Wemos; se abbiamo la certezza che il device che stiamo modificando lavori a 5VDC allora possiamo prendere l’alimentazione direttamente da suo ingresso, se (come succederà più spesso) il device funziona ad un tensione diversa sarà necessario utilizzare un circuito cosiddetto “step-down” per abbassare la tensione qualora superiore a 5VDC, oppure “step-up” nel raro caso essa sia inferiore a 5VDC richiesti.

Io uso spesso questi piccoli moduli che accettano in ingresso fino a 24VDC e possono esser regolati per avere un’uscita 5VDC stabile da regolare tramite il piccolo trimmer sulla PCB:

Software

Per la parte software ho sviluppato per comodità tutto su ESPHome, trovate un esempio più in basso della modifica di un diffusore di aromi con luce della Aukey.

Applicazione Pratica

Qui in basso vedrete alcune foto con delle brevi spiegazioni di come ho modificato, seguendo le spiegazioni di cui sopra, un piccolo diffusore di aromi della Aukey della foto qui sopra; ho voluto usare questo esempio per farvi vedere che anche senza avere chissà che spazio disponibile all’interno del diffusore mi è stato possibile completare la modifica per averne il controllo da Home Assistant.

Qui potete vedere come ho inserito i componenti negli angusti spazi liberi; a destra lo step-down collegato all’ingresso dell’alimentazione, che in questo caso è 24VDC, l’ho collegato solo in ingresso, regolato con il trimmer l’uscita per avere 5VDC quanto più accurati possibili ed infine collegato la sua uscita ai pin GND (-) e 5VDC (+) del Wemos

Al centro ho posizionato il Wemos D1 Mini, non gli ho saldato la pin strip perché avrebbe occupato troppo spazio, invece ho saldato i cavetti direttamente sui fori previsti per i pin, come detto su alimentazione su 5V e GND.

Per comodità ho saldato l’integrato CD4066 su un pezzetto di millefori, e quindi ho provveduto a collegarlo al Wemos con degli spezzoni di cavetto da 0.25mm come da schema precedente:
3V3 del Wemos al pin 14
GND del Wemos al pin 7
D5 del Wemos al pin 13
D6 del Wemos al pin 5

Infine ho collegato le uscite del CD4066 in parallelo ai pulsanti del diffusore, che erano soltanto 2, uno per accendere la luce ed uno per accendere il piezo per attivare la vaporizzazione della sostanza liquida utilizzata (di solito acqua + oli essenziali)

Codice EspHome Caricato sul Wemos D1 Mini

Il codice qui in basso è funzionante e crea varie entità, ma quelle da utilizzare per il controllo sono due switch che non prevedono una posizione ON/OFF ma danno un impulso di 300ms per ovviamente simulare la pressione del tasto relativo del diffusore. Come già spiegato per avere un feedback di ritorno su Home Assistant e conoscere lo stato sia della luce che del piezo del diffusore vi rimando alla seconda parte di questo articolo che uscirà nei prossimi giorni.

esphome:
name: diffusore_mini
platform: ESP8266
board: d1_mini

substitutions:
hostname: 'Diffusore Mini:'

wifi:
ssid: "*******"
password: "*******"

api:

web_server:
port: 80

logger:

ota:

#==========================================================
# from here all sensors and devices mapped for this Module
#==========================================================

binary_sensor:
- platform: status
name: $hostname Status

switch:
- platform: gpio
pin: D5
id: output1
- platform: gpio
pin: D6
id: output2
- platform: template
name: $hostname Light
icon: "mdi:lightbulb"
turn_on_action:
- switch.turn_on: output2
- delay: 300ms
- switch.turn_off: output2
- platform: template
name: $hostname Mist
icon: "mdi:weather-fog"
turn_on_action:
- switch.turn_on: output1
- delay: 300ms
- switch.turn_off: output1
- platform: restart
name: $hostname Restart

sensor:
- platform: wifi_signal
# name: $hostname WiFi Signal
id: rssi_value
update_interval: 60s
- platform: uptime
name: $hostname Uptime
id: uptime_s
update_interval: 15s
- platform: template
name: $hostname WiFi
lambda: |-
return id(rssi_value).state * 2 + 200.0;
icon: mdi:wifi
unit_of_measurement: '%'
update_interval: 60s

text_sensor:
- platform: version
name: $hostname ESPHome Version
- platform: wifi_info
ssid:
name: $hostname WiFi SSID
- platform: template
name: $hostname Uptime (formatted)
lambda: |-
uint32_t dur = id(uptime_s).state;
int dys = 0;
int hrs = 0;
int mnts = 0;
if (dur > 86399) {
dys = trunc(dur / 86400);
dur = dur - (dys * 86400);
}
if (dur > 3599) {
hrs = trunc(dur / 3600);
dur = dur - (hrs * 3600);
}
if (dur > 59) {
mnts = trunc(dur / 60);
dur = dur - (mnts * 60);
}
char buffer[17];
sprintf(buffer, "%ud %02uh %02um %02us", dys, hrs, mnts, dur);
return {buffer};
icon: mdi:clock-start
update_interval: 15s

Conclusioni

Abbiamo completato la prima parte, che per molte applicazioni potrebbe già essere sufficiente, che ci consente adesso di poter praticamente inviare comandi a “quasi” tutti i device che vogliamo, a patto, come ho già ribadito, che funzionino a basso voltaggio (non oltre 24V) ed a corrente continua, il tutto senza inibire il controllo manuale tramite i suoi pulsanti.

Appena completerò la seconda parte del circuito sarete in grado anche di avere un feedback dal device, ossia di sapere se una determinata funzione è attiva o meno, il tutto sempre in maniera sicura senza influenzare il corretto funzionamento del device stesso!

Buona modifica!!!

PS: condividete pure gli utilizzi di questa guida in modo da dare agli altri utenti idee e spunti per le sue applicazioni!

 

5 risposte

  1. Avatar Felice ha detto:

    Ciao, ottima guida, grazie! Sto provvedendo a comprare un paio di questi affari per test 🙂 Ho diversi progettini in mente, però avrei bisogno di un chiarimento riguardo il codice: spiegheresti un po’ che fa la parte test_sensor e quel template?
    Grazie

    • Avatar Giovanni C ha detto:

      intendi i “text_sensor”? non sono fondamentali per il progetto; io in tutti i miei firmware ESPHome includo alcuni sensori comuni: uno switch per fareil reboot remoto, uno che mi dice a che SSID sono collegato, l’intensità del collegamento WiFI e l’uptime del modulo sia in secondi che in un formato più leggibile; se intendi quest’ultimo il template appunto converte l’uptime che di default è in secondi in un testo più leggibile nel formato “0d 03h 37m 13s” (quindi 0 giorni, 3 ore, 37 minuti e 13 secondi)

      • Avatar Felice ha detto:

        Ti ringrazio della spiegazione, tutto chiaro. Ne approfitto per farti un’altra domanda sullo step-down: la tensione in arrivo all’oggetto che vorrei controllare è di 16,2 V, ma se questo viene “acceso”, la tensione si abbassa a 15,8 V. All’uscita dello step-down regolato a 5 V che succede? Scende o rimane stabile a 5 V? Se cambia, cosa ne pensi di un 7805 o un L4940v5 ? Grazie

  2. Avatar Antonio Ortega ha detto:

    Ciao, ho guardato Aliexpress e ci sono diversi modelli di CD4066: CD4066BM, CD4066BE, CD4066BCM. Quale dovrei scegliere?

  3. Avatar Sergio ha detto:

    Bella e interessante guida.
    Resto in attesa della seconda parte, con la speranza che venga descritto come poter integrare il tutto in Hassio con MQTT, e magari un esempio di come poter gestire eventuali input da campo (feedback).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *