Soms hebben onze projecten extra beveiliging nodig. Dit kan het geval zijn in allerlei toepassingen, zoals deurslotmechanismen, het voorkomen van onveilige of ongeautoriseerde bediening van machines of, nog specifieker, rekwisieten voor escape rooms. In dit artikel nemen we je mee door een actuator-assemblage met toetsenpaneel en laten we zien hoe je de bediening van je lineaire actuator met een wachtwoord kunt beveiligen.
Dit gaan we gebruiken:
- Arduino Uno.
- 4x4-matrix-toetsenpaneel.
- 2-kanaals relaismodule (op de foto’s staat een 4-kanaals, maar er zijn slechts 2 kanalen nodig).
- PA-03-6-600 Actuator.
- PS-20-12-voeding.
- Zoemer (optioneel).
De bedrading van je actuator
We beginnen met de bekabeling. Om je actuator te kunnen uitschuiven en inschuiven, moeten we beide kanalen van onze 2-kanaals relaismodule gebruiken. Zo zal, wanneer relais één actief is, de stroom in één richting lopen en wanneer relais twee actief is, de stroom in de tegenovergestelde richting lopen. Als geen van beide of beide relais actief zijn, loopt er geen stroom naar de actuator. Om dit te realiseren, maken we de volgende verbindingen.
Relais naar de actuator en de voeding
- +12V naar NC1 (normaal gesloten klem op relais één) (witte draad).
- -12V naar NO1 (normaal open klem op relais één) (zwarte draad).
- NC1 naar NC2 (blauwe jumperdraad).
- NO1 naar NO2 (groene jumperdraad).
- COMMON1 naar Actuator (bruine actuator-draad).
- COMMON2 naar Actuator (blauwe actuator-draad).
Arduino naar het toetsenpaneel en de relaismodule
- Verbind pinnen 1-8 op het toetsenpaneel met pinnen 2-9 op de Arduino (in die volgorde).
- Arduino‑pin 10 naar IN1 op de relaismodule.
- Arduino‑pin 11 naar IN2 op de relaismodule.
- Arduino 5V naar VCC op de relaismodule.
- Arduino GND naar GND op de relaismodule.
- Anode van de zoemer (langere aansluiting) naar pin 12 (optioneel).
- Kathode van de zoemer (kortere aansluiting) naar GND (optioneel).

Je project programmeren
Nu we alle verbindingen hebben gemaakt, zijn we klaar voor de code. De bedoeling van deze code is om invoer van een toetsenpaneel te lezen, te controleren op de juiste 5-cijferige invoer en vervolgens onze relais dienovereenkomstig te bedienen. Er is ook code voor een optionele zoemer om terugkoppeling te geven. Als je de zoemer niet wilt gebruiken, hoef je hem simpelweg niet aan te sluiten en kun je de code laten zoals hij is. Als je de zoemerpin voor iets anders nodig hebt, verwijder of zet dan alle code voor de zoemer- of “beep”-functies in commentaar.
In de onderstaande code vind je vrijwel op elke regel opmerkingen (lichtgrijze tekst na “//”). Deze opmerkingen beschrijven wat er in de sketch gebeurt en welke aanpassingen je kunt maken. We lichten hieronder ook een paar belangrijke onderdelen nader toe.
Setup‑code
In onze setup‑code definiëren we onze zoemer en relaispinnen als uitgangen. De zoemer start op LOW en de relais op HIGH. Daardoor zijn ze allemaal inactief wanneer we onze Arduino voor het eerst inschakelen. We voeren ook één keer de functie “retract ()” uit, zodat de Arduino de juiste toestand van de actuator kent.
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
}
Keypad‑code
Voor deze sketch gebruiken we de bibliotheek Keypad.h. Deze bibliotheek bevat de functies die we gebruiken om invoer van ons toetsenpaneel te ontvangen. Om deze bibliotheek te gebruiken, moeten we een tweedimensionale array maken om de tekens van ons toetsenpaneel in kaart te brengen. Dit doe je door eerst het aantal rijen en het aantal kolommen op het toetsenpaneel te definiëren. Vervolgens maken we onze array met elk teken op het toetsenpaneel. Ons toetsenpaneel heeft vier rijen, vier kolommen en acht uitgangen. Er is één pin voor elke rij en één pin voor elke kolom. In onze code laten we dit zien met een “rowPins”-array met de digitale ingangen die met de rijpinnen zijn verbonden en een “colPins”-array met de digitale ingangen die met de kolompinnen zijn verbonden. Wanneer we een toets indrukken, verbinden we een van de rijpinnen met een van de kolompinnen. Als we bijvoorbeeld op toets 2 drukken, maken we een gesloten circuit tussen rijpin één en kolompin twee.
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
Code voor toegangscode
In dit voorbeeld voor veilige bediening van een lineaire actuator is onze toegangscode 5 cijfers lang, dus definiëren we “Passcode_Length” als “6”. Dit komt omdat we één extra positie nodig hebben voor een null‑teken. Als je de lengte van de toegangscode wilt wijzigen, verander je de 6 in een getal dat één hoger is dan de gewenste codelengte. Pas daarna de waarde van “Passcode” aan naar de gewenste tekens (standaard “12345”).
Het teken dat bij elke ingedrukte toets hoort, wordt opgeslagen in de “Input”-array. Zodra die array 5 tekens bevat, vergelijkt hij de waarde van “Input” en “Passcode” om te controleren of we de juiste toegangscode hebben. Als de waarden gelijk zijn, geeft onze code de Arduino opdracht om de actuator uit te schuiven of in te schuiven (afhankelijk van de huidige toestand van de actuator). Als de toegangscode onjuist is, gaat de zoemerpin drie keer snel hoog en vervolgens laag. In beide gevallen wordt daarna de functie “clearInput()” aangeroepen om de Input‑array te wissen en ruimte te maken voor een nieuwe invoer.
Code voor uitschuiven en inschuiven
In deze code hebben we twee erg vergelijkbare functies: “void extend()” en “void retract()”. Wanneer aangeroepen, zet void extend() relais één laag, waardoor het actief wordt. Dit sluit een circuit en legt een positieve spanning aan op de actuator. Het relais blijft actief gedurende de tijd die is toegewezen aan “const int extendTime” (standaard 25.000 milliseconden). De functie void retract() doet precies hetzelfde, behalve dat deze relais twee gebruikt om de spanning om te keren in plaats van relais één.
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();
}
Laatste details
Nadat we alle verbindingen hebben gemaakt en onze code hebben geüpload, zouden we een functioneel, met een wachtwoord beveiligd actuatoraansturingssysteem moeten hebben. Als je bij de eerste installatie problemen ondervindt, probeer dan de seriële monitor in de Arduino‑IDE te gebruiken. Dit kan enorm helpen om te bepalen of je problemen worden veroorzaakt door code, bekabeling of defecte componenten.
Deze code kan ook verder worden aangepast dan alleen het wijzigen van de toegangscode. Je kunt overwegen om je relaisbord te vervangen door een MegaMoto‑shield voor snelheidsregeling of een actuator met Hall‑effect‑terugkoppeling te gebruiken voor positiebesturing.
We hopen dat dit artikel nuttig was! Als je vragen hebt over dit onderwerp, over een andere op afstand bediende lineaire actuator, of als je je project met ons wilt delen, neem dan gerust telefonisch of per e‑mail contact met ons op.