How to Control an Actuator with a Keypad

Come controllare un Attuatore con un tastierino

Josh Nigh
Josh Nigh
PA Engineer

A volte i nostri progetti richiedono un livello di sicurezza in più. Questo può capitare in varie applicazioni, come meccanismi di chiusura porta, prevenzione dell’uso non sicuro o non autorizzato dei macchinari o, per qualcosa di più di nicchia, oggetti di scena per escape room. In questo articolo ti guideremo in un assemblaggio con tastierino e attuatore e vedremo come proteggere con password il funzionamento del tuo attuatore lineare.

Ecco cosa utilizzeremo:

Cablaggio dell’attuatore

Per prima cosa inizieremo dal cablaggio. Per poter estendere e ritrarre il tuo attuatore, dovremo usare entrambi i canali del nostro modulo relè a 2 canali. In questo modo, quando Relay One è attivo, la corrente scorrerà in una direzione e quando Relay Two è attivo, la corrente scorrerà nella direzione opposta. Se nessuno dei due o entrambi i relè sono attivi, non scorrerà alcuna corrente verso l’attuatore. Per ottenere ciò, serviranno i collegamenti seguenti.

Relè verso attuatore e alimentatore

  • +12V a NC1 (morsetto normalmente chiuso sul relè uno) (filo bianco).
  • -12V a NO1 (morsetto normalmente aperto sul relè uno) (filo nero).
  • NC1 a NC2 (cavetto ponticello blu).
  • NO1 a NO2 (cavetto ponticello verde).
  • COMMON1 all’Attuatore (filo marrone dell’attuatore).
  • COMMON2 all’Attuatore (filo blu dell’attuatore).

Arduino verso tastierino e modulo relè

  • Collega i pin 1-8 del tastierino ai pin 2-9 dell’Arduino (in quell’ordine).
  • Pin 10 di Arduino a IN1 sul modulo relè.
  • Pin 11 di Arduino a IN2 sul modulo relè.
  • 5V di Arduino a VCC sul modulo relè.
  • GND di Arduino a GND sul modulo relè.
  • Anodo del buzzer (reoforo più lungo) al pin 12 (opzionale).
  • Catodo del buzzer (reoforo più corto) a GND (opzionale).
    Arduino to the Keypad and the Relay Module

     

    Programmare il progetto

    Ora che abbiamo effettuato tutti i collegamenti, siamo pronti per il codice. Lo scopo di questo codice è leggere gli input da un tastierino, cercare l’input corretto di 5 cifre e azionare di conseguenza i nostri relè. È presente anche il codice per un buzzer opzionale per fornire feedback. Se non desideri usare il buzzer, puoi semplicemente non collegarlo e lasciare il codice così com’è. Se invece ti serve usare il pin del buzzer per qualcos’altro, elimina o commenta tutto il codice usato per le funzioni del buzzer o di “beep”.

    Nel codice qui sotto troverai commenti su quasi ogni riga (testo grigio chiaro che segue “//”). Questi commenti descrivono cosa sta succedendo nello sketch, oltre alle modifiche che puoi apportare. Inoltre analizzeremo qui alcune sezioni importanti per una spiegazione più approfondita.

    Usa i nostri microcontrollori Arduino per opzioni di controllo illimitate del tuo attuatore!

    Codice di setup

    Nel codice di setup, definiremo i pin del buzzer e dei relè come uscite. Il buzzer partirà LOW e i relè partiranno HIGH. Questo li renderà tutti inattivi quando alimentiamo per la prima volta il nostro Arduino. Eseguirermo anche la funzione “retract ()” una volta, così che l’Arduino conosca lo stato corretto dell’attuatore.

     void setup() //runs once on startup
    {
    digitalWrite(buzzer, LOW);//deactivates buzzer
    digitalWrite(relay1,HIGH);//deactivates relay1
    digitalWrite(relay2,HIGH);//deactivates relay2
    for(int i=10;i<14;i++)
    {
      pinMode(i,OUTPUT);//sets pins 10 - 13 as outputs
    }
    
    
    Serial.begin(9600);//Starts the serial monitor at 9600 baud rate (for debugging only)
    retract();//retracts the actuator on startup if it is not already. comment this out if you do not want the actuator to retract on startup
    Serial.println("READY");//lets us know the serial monitor is running
    }
    

    Codice del tastierino

    Per questo sketch stiamo usando la libreria Keypad.h. Questa libreria contiene le funzioni che usiamo per ricevere gli input dal tastierino. Per usare questa libreria, dobbiamo creare un array bidimensionale per mappare i caratteri del nostro tastierino. Si può fare definendo innanzitutto il numero di righe e di colonne presenti sul tastierino. Poi creiamo il nostro array con ogni carattere del tastierino. Il nostro tastierino ha quattro righe, quattro colonne e otto pin di uscita. C’è un pin per ogni riga e uno per ogni colonna. Nel codice lo mostriamo creando un array “rowPins” che contiene gli ingressi digitali collegati ai pin di riga e un array “colPins” che contiene gli ingressi digitali collegati ai pin di colonna. Quando premiamo un tasto, colleghiamo uno dei pin di riga con uno dei pin di colonna. Ad esempio, se premiamo il tasto 2, creiamo un circuito chiuso tra il pin di riga uno e il pin di colonna due.

     char customKey; //characters input by pressing keypad
    const byte ROWS = 4; //four rows
    const byte COLS = 4; //four columns 
    
    char keys[ROWS][COLS] = { //layout your "keymap" here
      {'1', '2', '3', 'A'},
      {'4', '5', '6', 'B'},
      {'7', '8', '9', 'C'},
      {'*', '0', '#', 'D'}
    };
    byte rowPins[ROWS] = {2, 3, 4, 5}; //connect to the row pinouts of the keypad
    byte colPins[COLS] = {6, 7, 8, 9}; //connect to the column pinouts of the keypad
    Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad 

    Codice del passcode

    In questo esempio di controllo sicuro dell’attuatore lineare, il nostro passcode è lungo 5 cifre, quindi definiamo “Passcode_Length” come “6”. Questo perché serve uno spazio extra per un carattere nullo. Se vuoi cambiare la lunghezza del passcode, cambia semplicemente il 6 con un numero maggiore di uno rispetto alla lunghezza desiderata. Dopodiché, modifica il valore di “Passcode” con i caratteri che preferisci (impostato su “12345” per impostazione predefinita).

    Il carattere associato a ogni tasto premuto verrà memorizzato nell’array “Input”. Una volta che quell’array contiene 5 caratteri, confronterà il valore di “Input” e “Passcode” per verificare se il passcode è corretto. Se i valori sono uguali, il nostro codice dirà all’Arduino di estendere o ritrarre l’attuatore (a seconda dello stato attuale dell’attuatore). Se il passcode è errato, il pin del buzzer andrà HIGH tre volte rapidamente e poi tornerà LOW. In entrambi i casi verrà chiamata la funzione “clearInput()” per cancellare l’array Input e fare spazio a un nuovo inserimento.

    Codice di estensione e retrazione

    Abbiamo due funzioni molto simili in questo codice: “void extend()” e “void retract()”. Quando chiamata, void extend() porterà Relay One a LOW, rendendolo attivo. Questo chiuderà un circuito e applicherà una tensione positiva all’attuatore. Il relè rimarrà attivo per il tempo assegnato a “const int extendTime” (impostato a 25.000 millisecondi per impostazione predefinita). La funzione void retract() farà esattamente la stessa cosa, tranne che userà il relè due per invertire la tensione invece del relè uno.

    void extend()//extend the actuator
    {
      longBeep();
      Serial.println("EXTENDING...");
      digitalWrite(relay2,HIGH);//makes sure relay2 is not active
      digitalWrite(relay1,LOW);//activates relay1
      delay(extendTime);
      digitalWrite(relay1,HIGH);//deactivates relay1
      Serial.println("DONE EXTENDING");
      extended = true; //tells the arduino that the actuator is extended 
      longBeep();
    }
    
    void retract()//extend the actuator
    {
      longBeep();
      Serial.println("RETRACTING...");
      digitalWrite(relay1,HIGH);//makes sure relay1 is not active
      digitalWrite(relay2,LOW);//activates relay2
      delay(retractTime);
      digitalWrite(relay2,HIGH);//deactivates relay2
      Serial.println("RETRACTING DONE");
      extended = false; //tells the arduino that the actuator is retracted
      longBeep();
    }

    Ritocchi finali

    Dopo aver effettuato tutti i collegamenti e caricato il codice, dovremmo avere un sistema di controllo dell’attuatore protetto da password perfettamente funzionante. Se riscontri problemi al primo avvio, prova a utilizzare lo strumento monitor seriale nell’IDE di Arduino. Può essere estremamente utile per capire se i problemi sono dovuti al codice, al cablaggio o a componenti difettosi.

    Questo codice può anche essere modificato oltre al semplice cambio del passcode. Potresti prendere in considerazione la sostituzione della tua scheda relè con uno shield MegaMoto per avere il controllo della velocità o l’uso di un attuatore con feedback ad effetto Hall per il controllo di posizione.

    Speriamo che questo articolo ti sia stato utile! Se hai domande su questo, su qualsiasi altro attuatore lineare telecomandato o vuoi condividere il tuo progetto con noi, sentiti libero di chiamarci o scriverci via e-mail.