How to Control an Actuator with a Keypad

Kuinka ohjata toimilaitetta näppäimistöllä

Josh Nigh
Josh Nigh
PA Engineer

Joskus projektimme kaipaavat lisäturvaa. Näin voi olla monissa eri sovelluksissa, kuten ovenlukitusmekanismeissa, koneiden vaarallisen tai luvattoman käytön ehkäisyssä tai vieläkin niche-kohteissa, kuten pakohuoneiden rekvisiitoissa. Tässä artikkelissa käymme läpi näppäimistöllä ohjattavan toimilaitteen kokoonpanon ja sen, miten voit suojata lineaarisen toimilaitteesi käytön salasanalla.

Näitä käytämme:

Toimilaitteen kytkennät

Aloitamme kytkennöistä. Jotta toimilaitetta voidaan ajaa sisään ja ulos, tarvitsemme 2-kanavaisen relemoduulin molemmat kanavat. Tällöin, kun rele yksi on aktiivinen, virta kulkee yhteen suuntaan, ja kun rele kaksi on aktiivinen, virta kulkee vastakkaiseen suuntaan. Jos kumpikaan tai molemmat releet ovat aktiivisia, toimilaitteelle ei kulje virtaa. Tämän saavuttamiseksi teemme seuraavat kytkennät.

Releet toimilaitteelle ja virtalähteelle

  • +12 V NC1-nastaan (rele ykkösen normaalisti kiinni -liitin) (valkoinen johto).
  • -12 V NO1-nastaan (rele ykkösen normaalisti auki -liitin) (musta johto).
  • NC1 → NC2 (sininen hyppyjohto).
  • NO1 → NO2 (vihreä hyppyjohto).
  • COMMON1 toimilaitteelle (toimilaitteen ruskea johto).
  • COMMON2 toimilaitteelle (toimilaitteen sininen johto).

Arduino näppäimistölle ja relemoduulille

  • Kytke näppäimistön pinnit 1–8 Arduinon pinneihin 2–9 (tässä järjestyksessä).
  • Arduinon pinni 10 → IN1 relemoduulissa.
  • Arduinon pinni 11 → IN2 relemoduulissa.
  • Arduino 5 V → VCC relemoduulissa.
  • Arduino GND → GND relemoduulissa.
  • Summerin anodi (pidempi jalka) pinniin 12 (valinnainen).
  • Summerin katodi (lyhyempi jalka) GND:hen (valinnainen).
    Arduino näppäimistölle ja relemoduulille

     

    Projektin koodaus

    Nyt kun kaikki kytkennät on tehty, olemme valmiita koodaamaan. Tämän koodin tarkoitus on lukea näppäimistön syötteet, etsiä oikea 5-numeroisen koodin syöttö ja ohjata releitä sen mukaisesti. Lisäksi on koodi valinnaiselle summerille palautteen antamiseksi. Jos et halua käyttää summeria, voit yksinkertaisesti jättää sen kytkemättä ja pitää koodin ennallaan. Jos tarvitset summerin pinniä muuhun, poista tai kommentoi pois kaikki summerin eli ”beep”-toimintojen koodi.

    Alla olevassa koodissa on kommentteja lähes jokaisella rivillä (vaaleanharmaa teksti, joka seuraa ”//”). Kommentit kuvaavat, mitä sketchissä tapahtuu sekä muutoksia, joita voit tehdä. Avaamme myös muutaman tärkeän osan tarkempaa selitystä varten.

    Käytä Arduino-mikrokontrollereitamme rajattomiin ohjausvaihtoehtoihin toimilaitteellesi!

    Setup-koodi

    Setup-koodissa määritämme summerin ja relepinnit lähtöihin. Summeri aloittaa LOW-tilassa ja releet HIGH-tilassa. Näin kaikki ovat passiivisia, kun Arduino saa virran ensimmäisen kerran. Suoritamme myös kerran ”retract()”-funktion, jotta Arduino tietää toimilaitteen oikean tilan.

     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
    }
    

    Näppäimistökoodi

    Tässä sketchissä käytämme Keypad.h-kirjastoa. Kirjasto sisältää funktiot, joilla vastaanotamme syötteitä näppäimistöltä. Kirjaston käyttö edellyttää kaksidimensionaalista taulukkoa, jossa näppäimistön merkit kuvataan. Tämä tehdään määrittämällä ensin näppäimistön rivien ja sarakkeiden lukumäärä. Sitten luomme taulukon, jossa on jokainen näppäimen merkki. Näppäimistössämme on neljä riviä, neljä saraketta ja kahdeksan lähtöpinniä. On yksi pinni per rivi ja yksi per sarake. Koodissa tämä näkyy ”rowPins”-taulukkona, joka sisältää riveihin kytketyt digitaaliset tulot, ja ”colPins”-taulukkona, joka sisältää sarakkeisiin kytketyt digitaaliset tulot. Kun painamme näppäintä, yhdistämme yhden rivipinneistä yhteen sarakepinneistä. Esimerkiksi painettaessa 2-näppäintä muodostamme suljetun piirin rivipinnin yksi ja sarakepinnin kaksi välille.

     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 

    Salakoodin käsittely

    Tässä esimerkissä lineaarisen toimilaitteen turvalliseen ohjaukseen salakoodi on 5-merkkinen, joten määritämme ”Passcode_Length” arvoksi ”6”. Tarvitsemme yhden merkin lisätilaa tyhjämerkille. Jos haluat muuttaa salakoodin pituutta, vaihda 6 arvoon, joka on yhtä suurempi kuin haluttu pituus. Sen jälkeen muuta ”Passcode”-arvo haluamiksesi merkeiksi (oletuksena ”12345”).

    Jokaisen painetun näppäimen merkki tallennetaan ”Input”-taulukkoon. Kun taulukossa on 5 merkkiä, se vertaa ”Input”- ja ”Passcode”-arvoja tarkistaakseen, onko koodi oikea. Jos arvot täsmäävät, koodi käskee Arduinon ajamaan toimilaitteen ulos tai sisään (riippuen toimilaitteen nykytilasta). Jos salakoodi on väärä, summerin pinni käy nopeasti kolme kertaa korkeana ja sitten matalana. Molemmissa tapauksissa kutsutaan ”clearInput()”-funktiota tyhjentämään Input-taulukko ja tekemään tilaa uudelle syötteelle.

    Ulos- ja sisäänajo

    Koodissa on kaksi hyvin samankaltaista funktiota: ”void extend()” ja ”void retract()”. Kutsuttaessa void extend() kirjoittaa releen yksi LOW-tilaan aktivoiden sen. Tämä sulkee piirin ja antaa toimilaitteelle positiivisen jännitteen. Rele pysyy aktiivisena ajan, joka on määritetty vakioarvoon ”const int extendTime” (oletuksena 25 000 millisekuntia). Void retract() tekee täsmälleen saman, mutta käyttää relettä kaksi jännitteen kääntämiseen releen yksi sijaan.

    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();
    }

    Viimeistely

    Kun kaikki kytkennät on tehty ja koodi ladattu, meillä pitäisi olla toimiva, salasanalla suojattu toimilaitteen ohjausjärjestelmä. Jos kohtaat ongelmia alkuvaiheessa, kokeile Arduinon IDE:n sarjamonitoria. Se auttaa erottamaan, johtuvatko ongelmat koodista, kytkennöistä vai viallisista komponenteista.

    Koodia voi muokata myös muutoin kuin salakoodia vaihtamalla. Voit esimerkiksi harkita relekortin korvaamista MegaMoto-suojasillalla saadaksesi Nopeuden säätöä tai käyttää asennonhallintaan Hall-efektin palautteella varustettua toimilaitetta.

    Toivottavasti artikkelista oli apua! Jos sinulla on kysyttävää tästä, muista etäohjattavista lineaarisista toimilaitteista tai haluat jakaa projektisi kanssamme, ota rohkeasti meihin yhteyttä puhelimitse tai sähköpostilla.