Apricancello apriserranda con Arduino ver.2

In questo nuovo articolo si parla nuovamente di comandi per accesso ingressi.

Dopo la porta con serratura con combinazione e con il trasponder in questo articolo presento una centralina per l’apertura di un dispositivo motorizzato come un cancello elettrico tramite radiocomando.

Inizialmente mi è stato chiesto un circuito per l’azionamento di una serranda elettrica, ma poi il progetto si è esteso con la predisposizione della barriera a fotocellule quindi con l’aggiunta dei finecorsa, le protezioni come l’anti-schiacciamento e non per ultimo il lampeggiante per il movimento.

I tempi di apertura e chiusura sono programmabili e automaticamente registrati su memoria non volatile.

Il progetto e il programma sono stati sviluppati su un Arduino con un Atmega328. Personalmente preferisco la versione mini pro che si compra a costo inferiore, non contiene l’interfaccia seriale (che viene utilizzata solo in fase di programmazione e per colloquio verso l’esterno) ed ha un consumo limitato.

Nulla vieta di utilizzare versioni differenti come Arduino Uno o Nano o Micro.

Come ricevitore e telecomando, mi sono rivolto al mercato estero con l’acquisto di telecomandi e ricevitori a 4 canali codificati a costo molto contenuto.

IC 2262_2272     cancello_

Per non fare torto a nessuno ho cercato un’immagine non taggata, ma se scrivete in web IC 2262/2272 non troverete che l’imbarazzo della scelta per quanto riguarda i siti che vendono questo oggetto. L’articolo viene fornito con telecomando e ricevitore. Quest’ultimo è già in grado di pilotare, tramite un transistor, un relè, essendo in grado di fornire una tensione logica stabile di 5 Volt per ogni canale più una tensione positiva comune per un qualsiasi tasto premuto. Normalmente viene venduto il telecomando e il ricevitore con una codifica standard. Quindi tutti i ricevitori riconoscono tutti i telecomandi. Potete cambiare codifica agendo sullo stampato e collegando alcuni piedini dell’integrato al + o al – o lasciarli liberi. Questo sia nel ricevitore che nel trasmettitore. Senza antenna ho notato una portata di 30 metri. Con l’antenna si aumenta il campo utile fino ai 100 mt di targa. Funzionamento con 5V per il ricevitore, una pila comunissima da 12 V per il trasmettitore. Consumo del ricevitore 10 mA. Costo intorno ai 3,5$ (2,7€ per intenderci) la coppia telecomando/ricevitore naturalmente con acquisto in Cina. Normalmente sugli stessi siti potete trovare Arduino Mini Pro versione cinese (identica) con interfacce seriali o altre versioni. Costi che non raggiungono 2€ per il la versione Mini Pro.

Detto questo non resta che mettere insieme i componenti e generare uno sketch.

Prima di presentare il funzionamento del programma con le funzionalità vorrei spendere due parole sull’utilizzo e il calcolo dei tempi all’interno dell’ sketch.

Il listato si presenta un po’ più complesso del normale in quanto ho voluto introdurre una parametrizzazione degli ingressi. In parole povere, quando si utilizzano dispositivi rumorosi, quali interruttori, contatti o simili, non si ha mai la certezza dell’evento se non verificando in continuazione la stabilità dell’informazione. Un contatto prima che si chiuda definitivamente passa per quell’attimo transitorio dove esistono i rimbalzi, le resistenze, i disturbi che solo con una verifica nel tempo è possibile stabilire il suo reale stato di connessione.

Dopo le dichiarazioni iniziali se notate la matrice Tasto[ ], tempovalido[ ] e attivoalto[ ] stabiliscono a quale piedino si vuole una lettura, i tempi di intervento per considerare valido l’evento e se l’intervento è valido allo stato logico 0 o 1.

Per fare tutto questo il programma non aspetta che il dispositivo si stabilizzi, ma continua la sua esecuzione facendo altro. Periodicamente rileva la bontà dell’informazione e solo in quel caso verrà presa una decisione logica. Quindi la filosofia è quella di continuare ad eseguire il codice ed ad ogni passaggio aggiornare, verificare, modificare o bloccare uno stato iniziato nel tempo.

Il flusso del programma cambia connotazione e potrebbe risultare più complicato da seguire.

A questo scopo viene utilizzato un processo che fa uso di un contatore indipendente da cui la funzione millis() già vista in questo blog.

Sfortunatamente la funzione millis() rileva lo stato di un registro a 32bit che viene incrementato ogni millisecondo. Il registro arriva a 0xFFFFFFFF ( 4.294.967.296) in 49,71 giorni dopo di che si resetta.

Potrebbe capitare che un conteggio in prossimità dell’evento venga falsato in quanto la procedura comune è quella di memorizzare in una variabile un momento temporale e verificarne a seguire lo stato paragonandola al momento.

Ma se il contatore si resetta e il suo valore è più basso della variabile devo correggere la situazione che si verifica appunto ogni 50 gg. circa.

C’è da dire anche che la comparazione al millisecondo potrebbe essere eccessiva su eventi che richiedono precisioni decisamente inferiori.

Cercando in WEB ho trovato il sito che vi propongo a seguire. L’autore ha proposto una libreria con un conteggio del tempo non in millisecondi, ma in secondi. Questo porta il reset del contatore a poco più di 136 anni e qui non mi farei problemi se non applico una funzione correttiva al reset del contatore.

http://www.leonardomiliani.com/2012/nuova-libreria-timer-per-arduino-e-mcu-atmel/

Personalmente ho ritenuto che 1 secondo potesse esser troppo così ho modificato la libreria che vi propongo per un tempo di valutazione di 0,1 secondo ed un reset del contatore a quasi 14 anni di ininterrotta alimentazione. A Leonardo un personale ringraziamento per la libreria davvero utile.

Per coloro che volessero utilizzare la libreria, dopo averla scaricata è necessario scompattarla nella directory che contiene l’IDE di Arduino -> Libraries

Tornando a noi e riassumendo brevemente le funzioni, il movimento apri/chiudi è comandato da 2 relè.

Azionando il tasto del telecomando si attiva il relè apertura per un tempo programmabile e il led da blu (attesa) diventerà verde.

Lo stesso per la chiusura con l’accensione del led nel colore rosso. Se all’azione di apertura si fa seguire immediatamente l’azione di chiusura o viceversa, l’inversione passa per un secondo di attesa per non danneggiare i motori.

Gli altri tasti del telecomando sospendono l’avanzamento. Durante il movimento o la pausa la lampada si accenderà con intermittenza di un secondo. Allo scopo si ricorda che un relè statico è la soluzione di comando ottimale. Nel caso personale ho utilizzato un MOC3021 seguito da un triac da 4 A per un carico resistivo di oltre 500 VA a 220VAC

Per programmare i tempi di apertura e chiusura azionare lo switch “programmazione”. Attivare il tasto di apertura o chiusura a secondo della programmazione voluta. Il relè si attiva e a tempo desiderato è possibile premere un qualsiasi tasto sempre del telecomando. Il tempo di apertura o chiusura viene memorizzato. Nel periodo in cui il tasto di programmazione è attivo il led lampeggia con tonalità verde blu.

E’ presente l’interruttore o pulsante di emergenza al quale si possono collegare più fotocellule. L’azionamento provoca il blocco degli avanzamenti.

Sono previsti 2 fine corsa che bloccano l’avanzamento. Il finecorsa apertura a cancello o serranda aperta impedisce, se azionato, l’attivazione del relè di movimento. Lo stesso per il contatto di fine corsa. E’ necessaria attenzione per non scambiarli.

Nello schema elettrico è previsto un ritardo per l’alimentazione ai relè. Questo ritardo impedisce in caso di reset o alimentazione al dispositivo, che i relè non siano senza controllo negli istanti in cui il programma si riattivi.

Roberto

NOTA AGGIUNTIVA

Dalla prima versione del giugno 2014 ci sono delle modifiche. Queste comprendono la gestione di apertura tipiche da cancello scorrevole più che da serranda come inizialmente pensato.  Ho voluto aggiungere per questo dei dip-switch (interruttori da stampato) che consentono se tutti ad ON -> 0 logico di far funzionare il dispositivo come serranda (azionamento manuale dal telecomando per apertura e chiusura come nel progetto originale).  Con le altre 7 combinazioni restanti si impostano i tempi di richiusura automatica del cancello una volta  aperto.

Si è voluto separare, dal progetto originale, il pulsante antischiacciamento dal sensore della fotocellula. Per il segnale da fotocellula è prevista la riapertura del cancello in caso di azionamento.

Osservando la linea 69 si sono voluti parametrizzare i trempi in decimi di secondo dei comandi (variabile tempovalido). Attualmente per attivare l’apertura deve essere presente un segnale di almeno 0,4 secondi per essere definito valido, mentre per la fotrocellula è sufficiente 0,1 secondo di persistenza.

Nella linea 72 – variabile “attivoalto” – si definisce la modalità di attivazione ovvero il livello del segnale (tensione a 5 volt per attivare  <true>,     segnale con riferimento a massa a 0 V –  <false>) Cambiando questi parametri si possono inserire a piacimento le attivazioni dei comandi verso il positivo o massa a secondo delle necessità.

Lo schema elettrico e lo sketch sono riferiti al progetto completo.

Roberto

 

 

 

circuito_  prototipo_


SchemaJPG1

Allegati

  • Giorgio

    grazie Roberto per questo articolo che trovo interessante, dici che hai modificato la libreria “sectimer” ma da dove si scarica quella modificata da te?

    • Enrico Testori

      Ci siamo accorti che non avevamo inserito i link alle risorse. Colpa nostra.
      Può trovare tutti i link alla fine dell’articolo sotto le immagini.
      Grazie della segnalazione

      • Giorgio

        Ho scaricato e confrontato la libreria con quella originale e non ho trovato differenze, quella da Voi allegata a mio avviso NON è la sectimer modificata da Roberto come da lui stesso spiegato nell’articolo, potreste per cortesia verificare? grazie.

        • Giorgio

          scusa Enrico, ho verificato confrontando i file e quella allegata all’articolo E’ quella giusta, scusa di nuovo.

  • Flaviano Rodolfo

    Interessantissimo articolo!
    Sarebbe possibile farlo anche per un cancello a due ante?