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.
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!
20 risposte
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
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)
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
Ciao, ho guardato Aliexpress e ci sono diversi modelli di CD4066: CD4066BM, CD4066BE, CD4066BCM. Quale dovrei scegliere?
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).
Ma.. la seconda parte?
Ma… la seconda parte?
Grazie mille per la guida, sono riuscito a ricavarmi 2 ore di tempo e seguendo passo passo la guida è stato semplicissimo.
Attendo la seconda parte!
Guida fantastica, complimenti. Mi chiedevo se ci fosse una variante per utilizzare ZigBee invece del WiFi.
Si potrebbe realizzare è da pochi mesi che è uscito un fw per poter utilizzare i pin del CC2530 non è ancora molto diffuso ma ha buone prospettive.
Sarebbe grandioso avere una guida per cc2530.
Ciao grazie ancora per la guida, sarebbe possibile aprire e chiudere un interruttore dove tra i contatti passa corrente 12v AC ?
C’è anche una procedura per installare e configurare esphome sul Wemos D1 Mini?
Aspettiamo anche la seconda parte con impazienza ?
Grazie
Trovi la guida di Esphome a questo link troverai alcuni esempi che puoi adattare
https://hassiohelp.eu/2019/06/09/esphome/
Buongiorno Enrico riprendo questo tu vecchio progetto perchè vorrei cimentarmi sull’utilizzo del CD4066 per domotizzare un paio di apparecchi tra cui una macchina da caffè. Sul tuo articolo preannunciavi l’imminente uscita di un altro articolo dove sarebbe stata illustrata la possibilità di di avere anche un feed indietro.. Esiste una documentazione o qualche sito dove poter studiare questa possibilità?
Grazie e complimenti per il tuo lavoro!
Ciao grazie ancora per la guida, sarebbe possibile aprire e chiudere un interruttore dove tra i contatti passa corrente 12v AC ?
ps scusate avevo postato come risposta ad un altro commento.
CON QUESTO CD4066
PUOI COLLEGARSI A UN LED E CONOSCERE IL TUO STATO? SE È ATTIVO O DISATTIVATO?
COME FARE ?
la seconda parte è stata messa online?
pradicamente un buffer un separatore di inpedenza.giusto?
graz<ie
Hello,
Will there be a second part of the article referring what’s missing to get the status of both light/diffuser?