L'hardware che si occupa dell'apertura e chiusura della porta è costituito da una scheda Arduino Uno,
collegata alla rete tramite Ethernet-Shield.
Il motore che esegue l'apertura della porta tramite una barra filettata è un semplice motore a 12v che monta un mandrino.
Per interfacciarsi con il motore è stato utilizzato un diver lmd18200, ma potevano essere utilizzati anche 4 semplici relais. L'utilizzo di questo diver permette di comandare oltre alla direzione e all'attività del motore, anche il voltaggio in uscita per regolare la velocità di salita e discesa.
Due semplici bottoni (PCB Switch) costituiscono il fine corsa per lo sportello in apertura e chiusura.
Altri due bottoni dello stesso tipo costituiscono una tastiera aggiuntiva per forzare la chiusura e l'apertura senza dover utilizzare l'interfaccia web service.
L'interfaccia grafica e la gestione dell'automatizzazione della chiusura e apertura sono costituite da un flusso Node-Red.
In particolare la libreria node-red-dashboard fornisce i nodi necessari alla creazione dell'interfaccia grafica.
L'interfaccia generata è responsive e si adatta bene anche all'utilizzo da smartphone.
La libreria: node-red-contrib-sun-position fornisce le funzionaità di schedulazioni con l'evento di alba e tramonto, relativo alla zona impostata.
- Arduino esegue il loop, nel quale controlla se sono presenti invocazioni sul servizio web esposto o pressione dei tasti.
- Il servizio web, restituisce un json che riporta lo stato dei sensori di apertura e chiura e l'attività del motore.
- Inoltre vengono recuperati i comandi inviati come url parameters, questi possono essere il comando di Chiusura, Apertura e di Stop. Ogni parametro non previsto verrà ignorato.
- Il comando di Stop non viene però utilizzato all'interno della user interface esposta.
- Viene anche data possibilità di tarare l'energia utilizzata dal mototore in caso di necessità. L'attivazione del motore viene eseguita al 100% del voltaggio disponibile, e viene ridotta al 50% dopo un secondo.
- L'intera operazione di Apertura/Chiusura dura all'incirca 4 secondi.
- La riduzione di potenza è importate, non solo per ridurre la velocità e la possibilà di incidenti, ma per ridurre l'inerzia sul fine corsa, e la possibilità di bloccare il meccanismo e non avare uno spunto sufficiente a avviare l'operazione successiva.
- Alcuni ritardi condizionati nel ciclo sono stati introdotti per non sovracaricare Arduino.
- Il Flow creato in Node-Red si occupa di generare l'interfaccia grafica, e attivare le schedulazioni.
- La user interface mostra lo stato della porta, Chiusa, Aperta o in Stato Intermedio e lo stato di attività del motore.
- Viene data lo possibilità di attivare o disattivare l'esecuzione automatica.
- Due bottoni invece rendono possibile forzare Chiusura e Apertura.
- Quando lo switch è impostato su Automatico, la schedulazione condizionata dalla posizione del sole nello stato di "Alba" e "Fine Tramonto" scatenano le operazioni di apertura e chiusura.
- L'interfaccia può essere esposta su internet, nel mio caso utilizzo un servizio gratuito di DDNS e NginX per gestire reverse proxy e autenticazione.