Apriporta a tastiera con Arduino

In questo articolo vorrei presentarvi un dispositivo in grado di azionare un relè se viene digitata una corretta sequenza numerica su una tastiera.

L’utilizzo è stato pensato come apriporta, ma non si vogliono porre limiti alla fantasia.

Il codice, per un massimo di 20 cifre, può essere cambiato in qualsiasi momento tramite procedura direttamente dalla stessa tastiera e viene memorizzato nella memoria non volatile di un Arduino utilizzante un processore atmel 328 (arduino 1, nano, mini ….)  funzionante a 5V.

Se non si ricorda più la combinazione, un pulsante, che non deve essere accessibile esternamente, resetterà il dispositivo ad un valore prestabilito.

 E’ possibile inserire, come opzione, un display a 7 segmenti per visualizzare il tasto premuto.

Un led, che segnala anche se il dispositivo è attivo, è previsto come aiuto nella digitazione.

Il numero dei componenti è minimo. Nel caso di un apriporta con serratura elettrica a 12 V alternati, si può prelevare questa tensione direttamente dal trasformatore o dal citofono per alimentare il circuito.

Il consumo è ridotto alle decine di milliampere come massimo. La tastiera può essere autocostruita. Nel prototipo e sul definitivo ho preferito usare una tastiera a matrice ultrapiatta con adesivo.  E’ fatta per l’uso in ambiente esterno e si trova nel WEB a basso costo.

In aggiunta al relè, in parallelo e all’occorrenza, si può abbinare un buzzer piezoelettrico autooscillante per evidenziare l’attivazione.

FUNZIONAMENTO:

Il led si accende con un lampeggio ogni 6 secondi circa. Dopo circa 10 sec di inattività si resettano tutte le operazioni intraprese se non portate a termine.

Digitare il codice giusto e attendere 2 sec per apertura (sicurezza di codice corretto e conosciuto) – il LED lampeggia 3 volte e sul display appare il simbolo H. La durata della attivazione del relè puo essere definita cambiando il valore temporele in millisecondi

CAMBIO PASSWORD: premere il tasto # per 3 sec. Il LED si accende fisso per 2 sec. Appena spento, digitare il codice CORRENTE.  Se è giusto si attiva la chiave (come aver digitato codice per apertura) e il LED inizia a lampeggiare velocemente. Attendere la fine del lampeggio ed inserire il nuovo codice. Confermare tenendo premuto per 3 sec (fino a che la luce non diventa fissa) il tasto #

il codice resta memorizzato.

RESET codice: tenendo premuto il trasto reset per almeno 3 secondi inizierà sul display un conto alla rovescia che azzera il codice e lo riporta al valore iniziale 25122000 (Natale 2000)

SKETCH:

 

tastieramatrice

 

 

 

 

 

 

 

 

 

SCHEMA ELETTRICO:

 

schema_tastiera

Resto a disposizione per chiarimenti.

  • Carra Alessio

    ciao, ti ho scritto una mail in privato, comunque il tutto funziona benissimo, ma vorrei sapere se è possibile implementare il codice facendo in modo di poter eccitare un rele all’inserimento della password e farlo diseccitare all’inserimento ancora della stessa password,
    Grazie della cortese risposta e veramente complimenti per il progetto!!
    Alessio

    • Roberto

      Ciao Alessio, grazie per i complimenti e mi fa piacere che qesto progetto ti sia piaciuto.
      Volendo puntualizzare la richiesta che mi fai dovrei chiederti se lo stato di accensione o spegnimento vorresti mantenerlo anche nel caso di mancanza di alimentazione.
      In altre parole, se manca l’alimentazione, quando questa ritorna come si dovrà posizionare il relè?
      Se il relè deve mantenere lo stato precedente prima della mancanza di alimentazione, il programma deve andare modificato memorizzando l’informazione nella eeprom.
      Nel caso questo non sia necessario, ovvero al ritorno di un eventuale calo di alimentazione il relè può trovarsi diseccitato, allora la modifica è decisamente più semplice.
      Prendendo per buona questa ultima ipotesi, ti invito ad analizzare le righe 170, 171 e 172 dello sketch.

      digitalWrite(relay,HIGH);
      delay(temporele);
      digitalWrite(relay,LOW);

      Queste tre righe attivano il relè per il tempo impostato nella variabile “temporele” che puoi definire in testa al programma.
      Ok, per quello che desideri cancella queste tre righe e sostituiscile con questa:

      digitalWrite(relay,!digitalRead(relay));

      In pratica imponi alla porta del relè di attivarsi con lo stato contrario a quanto di fatto è in quel momento.
      Attenzione al punto esclamativo che vuol dire NOT e i segni di interpunzione.
      Un saluto
      Roberto

      • Roberto

        Ancora ciao Alessio.
        La cosa mi ha incuriosito.
        Ti invio le modifiche per l’attivazione relè anche con il salvataggio in eeprom informazione stato relè.
        Allora, le righe 170, 171, 172 le sostituisci con queste:

        digitalWrite(relay,!digitalRead(relay));
        if (digitalRead(relay)) EEPROM.write(100,0);
        else EEPROM.write(100,1);

        La riga 100 :
        digitalWrite(relay,LOW);

        deve essere cancellata e sostituita con queste tre righe:

        pch=EEPROM.read(100); // leggi cella 100
        if (pch>0) digitalWrite(relay,LOW);
        else digitalWrite(relay,HIGH);

        Quando torna l’alimentazione si ripristina lo stato precedente del relè
        Ciao Roberto

        • Carra Alessio

          Ciao Roberto
          ho applicato le tue ultime modifiche che riguardano anche la mancanza di alimentazione e devo dire chi il tutto funziona alla grandissima, ho un pò analizzato le tue modifiche, devo cercare di capire il tutto, ma sai sono un pò alle prime armi, non per la parte elettronica in se ma per la parte di programmazione, comunque ti faccio ancora i complimenti questo è proprio quello che volevo, in pratica ora mi ritrovo con una tastiera a codice per poter abilitare magari anche un allarme!!
          ciao e grazie mille ancora, Alessio

          • Stefano

            Salve, articolo molto interessante, complimenti.
            Volevo sapere se era possibile non mettere le resistenze sul tastierino e cosa succede.
            Grazie

  • Matteo

    Non sono molto bravo… ma dove va collegata “la serratura”?
    Poi non ho mai usato rele… quali uso? rele 12V? e dove collego i piedini? non riesco a capire non avendo mai lavorato con i relay…
    Grazie

    • Roberto

      Poche righe, ma molte domande. Mi pare di capire che alla base non c’è una conoscenza elettrica approfondita. Poco male, tutti iniziano da qualche parte. Il problema è come ti posso venire incontro. Non posso farti un corso di elettronica in questa sede e quindi devo limitare la risposta. Sono disponibile a confrontarmi su problematiche relative al progetto presentato e verso difficoltà particolari, ma oltre ci perderemmo in domande e risposte poco costruttive.
      Veniamo a noi. Inizialmente la serratura è stata pensata per sostituire il pulsante di apertura di un portone di ingresso di una casa. Se posso darti un’immagine più banale ti direi se hai presente quando qualcuno suona alla porta e chi risponde preme il pulsante per aprire. La serratura simula quel pulsante. In effetti un relè è un pulsante i cui contatti sono stabiliti da una elettrocalamita che fa il lavoro di “premere il pulsante” e quindi chiudere un circuito elettrico. Il circuito del citofono e apriporta normalmente funziona a 12 V alternati che possono essere utilizzati per alimentare l’elettronica.
      In questo sito viene spiegato quasi tutto sul rele.
      http://it.wikipedia.org/wiki/Rel%C3%A8
      Chi comanda il relè è un transistor che permette il passaggio di corrente a quell’elettrocalamita. Il transistor è in grado di pilotare oltre 300 mA. Il relè da scegliere deve avere una tensione di bobina di 12V continua ed un assorbimento che non superi i 300 mA. Per i contatti quando portano 5A a 30V è più che sufficiente. In un qualsiasi negozio di elettronica puoi chiedere un rele bobina 12V e almeno un contatto in chiusura da 5A. Sono sicuro che chi ti da il componente sia in grado di identificare i due piedini della bobina (dove collegare i 12 V) e i piedini dei contatti.
      Se hai difficoltà più specifiche resto a disposizione.
      Roberto

      • Matteo

        Si, pero potresti dirmi dove va collegato l’apriporta? (per esempio se volessi collegarci un semplice led… dove devo collegarlo?)
        Invece riguardo il rele… non riesco a capire ancora… il rele ha le polarita?
        Se si… collego il positivo del rele e il negativo dove sta scritto “12VAC”? e l’altra estremita (positivo e negativo) al buzzer che poi va al transistor etc…?
        Grazie per avermi risposto 🙂

        • Matteo

          Scusa se ricommento… non riesco a modificare il commento di prima…
          ok.. riguardo il relè ho capito che non ha polarita… funziona in alternata… xD
          Quindi… collego 2 pedini dove sta scritto 12VAC e gli altri 2 opposti al buzzer?
          E scusa se mi ripeto… dove collego la “serratura” (facciamo finta volessi mettergli un led al posto della serratura… dove lo metto?)

          • matteo

            Mannaccia non mi fa modificare… ho ri-ri-ri-ri-ri-ri-ri-ri-riletto il tuo commento… e ho capito riguardo il rele… quindi rimane solo il dubbio di dove collegare la serratura…
            scusa per aver commentato 1000000000 volte

          • Roberto

            Sono stato indisponibile qualche giorno.
            Ok vediamo se posso venirti incontro.
            Il relè non funziona in alternata, o meglio ci sono anche quelli che funzionano in alternata non è il nostro caso. La bobina del relè attraversata da corrente diventa una elettrocalamita ed attira quella che viene definita ancora (un pezzetto di materiale ferroso) che chiude il contatto meccanicamente. Quindi la bobina del relè non ha polarità: se la corrente scorre in un verso la parte che attrae diventa NORD del magnete ed attira a se il meccanismo, se scorre dall’altra parte che attrae sarà SUD ed attirerà ugualmente il meccanismo. (prova con una calamita: da una parte attira un pezzo di ferro, ma dall’altra anche)
            Dove collegare la serratura: immagino che intenda dove collegherò il contatto del relè (quello che si chiude, ovvero i due contatti che con il tester segnano resistenza zero a relè eccitato).
            Suppongo si tratti di una serratura di un portone o simile.
            Essenzialmente in parallelo al pulsante di apertura dell’elettrocalamita della porta.
            Da qualche parte esiste un trasformatore. Se segui i fili, uno arriverà al pulsante di apertura (magari più pulsanti in parallelo). Il filo che esce arriverà alla serratura e l’uscita arriverà all’altro capo del trasformatore.
            Un filo del pulsante quasi senz’altro è presente sulla serratura. L’altro non sempre. Magari lo devi portare in aggiunta.
            In altre parole devi metterti nella situazione in cui se unisci 2 fili la serratura si eccita. Quei due fili li colleghi al relè.
            Diventa difficile spiegarlo a parole. Se mi è consentito vedi se ti riesce di trovare qualcuno che ha già fatto qualche impianto perché quello che mi pare di capire ti manca è relativamente poco, ma questo poco deve essere visto in pratica.
            Magari prova a postare un problema specifico e vediamo come possiamo risolverlo.
            Nota bene che anche la serratura deve essere alimentata magari tramite quel trasformatore (in genere 12V AC) che alimenta anche il meccanismo di apertura.
            Roberto

  • roberto

    Aggiungo lo schema elettrico di collegamento del dispositivo ad un comune impianto di apertura portone con sblocco elettrico della serratura.
    Roberto

  • goddamn_electric

    Roberto La ringrazio infinitamente per l’aiuto di questa sera con i 3 transistor per il mio cubo led, è stato davvero molto gentile; inoltre complimenti per il suo progetto dell’apriporta! Giuliano

  • Orzowilde

    Salve sarei molto interessato al progetto, però c’è un problema, non riesco a visualizzare le immagini e soprattutto lo schema elettrico… come mai?
    Grazie!

    • Nicola

      Buongiorno Orzowilde,
      abbiamo provveduto a sistemare le immagini.

      Buona giornata

      • Orzowilde

        Gentilissimo… Comunque davvero un bel progetto, adesso provo a realizzarlo….
        Grazie!!!

  • Orzowilde

    Salve, ho realizzato il progetto seguendo lo schema e lo sketch alla lettera e funziona quasi tutto alla perfezione…
    Ho due problemi, il primo è che il display a 7 segmenti non si accende per niente e il secondo, molto più importante, è che il tastierino numerico funziona perfettamente (infatti con la password di default il relay si eccita) tranne i tasti * e #…

    Cosa potrebbe essere secondo voi?
    Grazie anticipatamente per la risposta…

    Ps. sto usando un tastierino 4×4 invece del 4×3 usato nel vostro schema elettrico, ma l’ho collegato penso bene visto che i numeri funzionano perfettamente e non ho collegato solo il contatto che comanda la quarta colonna dove trovo i tasti A B C D

    • Roberto

      Una buona giornata.
      Problema display. I display possono essere ad anodo o a catodo comune. Sarebbe opportuno verificarne il tipo.
      Una prima prova per capire il problema è sostituire il segmento con un led per verificare se si illumina tenendo presente che a riposo (dopo alcuni secondi ) il display si spegne.
      La matrice 4 x 4 va benissimo. I tasti * e # hanno funzioni particolari, ma se funzionano gli altri è probabile che anche questi siano attivi.
      Uno serve a resettare alla password base e uno a cambiarla. Leggere la descrizione dell’articolo per verificare le funzioni.
      Eventualmente fatemi sapere con qualche notizia in più sul tipo di malfunzionamento riscontrato.
      Roberto

      • Orzowilde

        Salve, sono di nuovo qui…
        Per quanto riguarda il problema della tastiera è tutto a posto… in poche parole quando premevo qualsiasi numero della tastiera si accendeva il led, ma premendo il tasto # non si illuminava ed ero convinto che non funzionasse, ma poi ho visto che era proprio così e faceva il suo dovere, mi fa cambiare la password…

        Per quanto riguarda il display a 7 segmenti invece, mi sono informato su quello in mio possesso ed è ad Anodo comune, quindi dagli schemi trovati in rete ho visto che il pin del display raffigurato nel vostro schema e collegato a ground deve essere invece collegato ai 5v…
        Adesso le mie domande sono:
        1. ma tutto il resto resta così com’è? (cioè gli altri collegamenti del display)
        2. ci sono da fare modifiche all’interno dello sketch?

        Grazie ancora per le risposte.

        • roberto

          Ok per la tastiera. Per il display hai 2 strade. La prima è cambiarlo. Il secondo modo invece è di modificare lo shetch. In pratica i led all’interno del display sono “invertiti”. Ovviamente il piedino comune dovrà essere staccato da massa e collegato al positivo +5V e per l’accensione si dovrà riferire il singolo segmento verso massa (0 logico) e per lo spegnimento la stessa tensione dell’anodo ovvero il riferimento verso +5V (1 logico). Le resistenze rimangono così come sono.
          Nel programma, per velocizzare il funzionamento, ma anche per parametrizzare i simboli, ho inteso dichiarare per ogni numero l’accensione di ogni segmento invece che costruire una funzione matematica o ricorrere ad una array.
          Meglio così perchè alla riga 271 c’è la funzione che descrive l’accensione del numero costruendolo dai segmenti.
          Riscriverla è semplice e lascio la gratificazione di veder funzionare la modifica all’interessato.
          Si tratta di cambiare le costanti HIGH e LOW invertendole per tutte le cifre nella definizione “case” dalla riga 271 alla riga 392. In altre parole prendiamo ad esempio “case 1:” ovvero la cifra “1”. Con l’anodo comune il segmento B e C andranno LOW gli altri HIGH (il contrario di quanto c’è adesso).
          Quindi per ogni cifra sarà LOW ciò che è HIGH e HIGH quello che è stato dichiarato LOW.
          Spero di essere stato chiaro. Ricordo nuovamente il collegamento comune non più verso massa ma verso il +5.
          Roberto

          • Orzowilde

            Immaginavo fossero queste le modifiche da fare… Volevo solo la conferma… Comunque domani faccio le modifiche e vi faccio sapere com’è andata…
            Grazie sempre!!!

          • Orzowilde

            Salve, ho finito di apportare le modifiche al progetto da voi pubblicato e FUNZIONA TUTTO ALLA PERFEZIONE!!!
            Nel pomeriggio installo il tutto al mio cancelletto…
            Rinnovo i miei complimenti a Roberto per il progetto…

            Grazie ancora e gentilissimo!!!

  • simoncino pazzo

    Bellissimo progetto vorrei realizzarlo anche io ma non capisco molto bene lo schema non è possibile averlo con Fritzing? grazie mille

  • Silvio Ferrabino

    Grande progetto.
    L’ho montato su una breadboard ed ha funzionato alla grande al primo colpo, nessun errore sulla compilazione come di solito avviene su sketch presi dalla rete, e nessun altro problema.
    Veramente buono.
    Naturalmente il codice di default puo essere cambiato a piacere dalla relativa riga.
    Ciao e grazie

  • alberto

    Complimenti per l’idea, nei prossimi giorni mi accingerò a costruirla.
    Vorrei porti qualche domanda sui diodi, non riesco a leggere bene il codice del diodo da utilizzare, ne per il buzzer ne per la linea in ingresso a 12Vac, se ho capito bene quello per il buzzer è un 1N4004 ma mi sembra grandino.. forse non ne capisco a sufficienza, invece per quello sulla linea in ingresso non trovo il codice del diodo da usare. Quest’ultimo serve per raddrizzare parzialmente la tensione, giusto? Non sarebbe più opportuno utilizzare un ponte a diodi?
    Grazie e complimenti ancora.

  • Nicolò Ayroldi

    Ciao Roberto, congratulazioni per il tuo progetto e soprattutto per averlo condiviso in rete. Il progetto mi sembra tutto molto chiaro però non capisco per quale motivo quando accendo il tutto, il display comincia un count down ciclico da 9 a 0 con pausa di qualche secondo. Inoltre la tastiera (4×3) non mi permette di selezionare alcun tasto. Potresti aiutarmi? Grazie

    • Roberto

      Ciao spero di poterti aiutare anche a distanza di tempo. Vedo passato un mese. Mandami eventualmente una mail. Per il problema che stai accusando la spiegazione logica è che il.pulsante del reset sia in corto
      Controlla. Roberto

    • Roberto

      Eventualmente misura con un tester che ci sia la tensione sul piedino reset che fa capo al pulsante reset di 5 v a pulsante aperto ovvero non premuto.
      Roberto

  • Leonardo

    Ciao Roberto, ho visto il tuo progetto e molto interessante, potresti modificarlo per mettere un display lcd 16×2′

  • Nicolò

    Ciao Roberto, come fare per contattarti in privato? Avrei bisogno di apportare alcune correzioni ad uno sketch. Possibile? Grazie