Μερικές φορές τα έργα μας χρειάζονται λίγη επιπλέον ασφάλεια. Αυτό μπορεί να ισχύει σε διάφορες εφαρμογές όπως μηχανισμοί κλειδώματος θυρών, πρόληψη μη ασφαλούς ή μη εξουσιοδοτημένης χρήσης μηχανημάτων ή, ακόμη πιο εξειδικευμένα, σε αντικείμενα για escape rooms. Σε αυτό το άρθρο θα σας καθοδηγήσουμε σε μια συναρμολόγηση ενεργοποιητή με πληκτρολόγιο και θα δούμε πώς μπορείτε να προστατεύσετε με κωδικό τη λειτουργία του Γραμμικού ενεργοποιητή σας.
Τι θα χρησιμοποιήσουμε:
- Arduino Uno.
- Πληκτρολόγιο μήτρας 4x4.
- Μονάδα ρελέ 2 καναλιών (στις εικόνες φαίνεται ένα 4 καναλιών, αλλά απαιτούνται μόνο 2 κανάλια).
- Ενεργοποιητής PA-03-6-600.
- Τροφοδοτικό PS-20-12.
- Βομβητής (προαιρετικό).
Καλωδίωση του ενεργοποιητή σας
Αρχικά, θα ξεκινήσουμε με την καλωδίωση. Προκειμένου να μπορείτε να εκτείνετε και να ανασύρετε τον ενεργοποιητή σας, θα χρειαστεί να χρησιμοποιήσουμε και τα δύο κανάλια της μονάδας ρελέ 2 καναλιών. Έτσι, όταν το Ρελέ Ένα είναι ενεργό, το Ρεύμα θα ρέει προς μία κατεύθυνση και όταν το Ρελέ Δύο είναι ενεργό, το Ρεύμα θα ρέει προς την αντίθετη κατεύθυνση. Αν κανένα ή και τα δύο ρελέ είναι ενεργά, δεν θα ρέει Ρεύμα προς τον ενεργοποιητή. Για να το επιτύχουμε αυτό, θα πρέπει να κάνουμε τις ακόλουθες συνδέσεις.
Ρελέ προς τον Ενεργοποιητή και το Τροφοδοτικό
- +12V στο NC1 (κανονικά κλειστός ακροδέκτης στο ρελέ ένα) (λευκό καλώδιο).
- -12V στο NO1 (κανονικά ανοικτός ακροδέκτης στο ρελέ ένα) (μαύρο καλώδιο).
- NC1 σε NC2 (μπλε καλώδιο γεφύρωσης).
- NO1 σε NO2 (πράσινο καλώδιο γεφύρωσης).
- COMMON1 προς τον Ενεργοποιητή (καφέ καλώδιο ενεργοποιητή).
- COMMON2 προς τον Ενεργοποιητή (μπλε καλώδιο ενεργοποιητή).
Arduino προς το Πληκτρολόγιο και τη Μονάδα Ρελέ
- Συνδέστε τις ακίδες 1-8 στο πληκτρολόγιο με τις ακίδες 2-9 στο Arduino (με αυτήν τη σειρά).
- Arduino ακίδα 10 στο IN1 στη μονάδα ρελέ.
- Arduino ακίδα 11 στο IN2 στη μονάδα ρελέ.
- Arduino 5V στο VCC στη μονάδα ρελέ.
- Arduino GND σε GND στη μονάδα ρελέ.
- Άνοδος βομβητή (μακρύτερο σκέλος) στην ακίδα 12 (προαιρετικό).
- Κάθοδος βομβητή (κοντύτερο σκέλος) στο GND (προαιρετικό).

Προγραμματισμός του έργου σας
Τώρα που έχουμε κάνει όλες τις συνδέσεις, είμαστε έτοιμοι για τον κώδικα. Ο σκοπός αυτού του κώδικα είναι να διαβάζει τις εισόδους από ένα πληκτρολόγιο, να αναζητά τη σωστή 5-ψήφια εισαγωγή και να λειτουργεί τα ρελέ ανάλογα. Υπάρχει επίσης κώδικας για έναν προαιρετικό βομβητή για παροχή ανάδρασης. Αν δεν θέλετε να χρησιμοποιήσετε τον βομβητή, μπορείτε απλά να μην τον συνδέσετε και να αφήσετε τον κώδικα ως έχει. Αν χρειάζεται να χρησιμοποιήσετε την ακίδα του βομβητή για κάτι άλλο, διαγράψτε ή σχολιάστε όλον τον κώδικα που χρησιμοποιείται για τις λειτουργίες του βομβητή ή «beep».
Στον παρακάτω κώδικα, θα βρείτε σχόλια σχεδόν σε κάθε γραμμή (ανοιχτό γκρι κείμενο που ακολουθεί το «//»). Αυτά τα σχόλια περιγράφουν τι συμβαίνει στο sketch, καθώς και τροποποιήσεις που μπορείτε να κάνετε. Θα αναλύσουμε επίσης μερικές σημαντικές ενότητες εδώ για πιο λεπτομερή εξήγηση.
Setup Code
Στον κώδικα αρχικοποίησης (setup), θα ορίσουμε τον βομβητή και τις ακίδες των ρελέ ως εξόδους. Ο βομβητής θα ξεκινήσει σε LOW και τα ρελέ θα ξεκινήσουν σε HIGH. Αυτό θα τα κάνει όλα ανενεργά όταν τροφοδοτήσουμε για πρώτη φορά το Arduino. Θα εκτελέσουμε επίσης μία φορά τη συνάρτηση “retract()” ώστε το Arduino να γνωρίζει τη σωστή κατάσταση του ενεργοποιητή.
void setup() //runs once on startup
{
digitalWrite(buzzer, LOW);//απενεργοποιεί τον βομβητή
digitalWrite(relay1,HIGH);//απενεργοποιεί το relay1
digitalWrite(relay2,HIGH);//απενεργοποιεί το relay2
for(int i=10;i<14;i++)
{
pinMode(i,OUTPUT);//ορίζει τις ακίδες 10 - 13 ως εξόδους
}
Serial.begin(9600);//Εκκινεί τον σειριακό monitor στα 9600 baud (μόνο για αποσφαλμάτωση)
retract();//ανασύρει τον ενεργοποιητή στην εκκίνηση αν δεν είναι ήδη. σχολιάστε το αν δεν θέλετε να ανασυρθεί στην εκκίνηση
Serial.println("READY");//μας ενημερώνει ότι ο σειριακός monitor εκτελείται
}
Κώδικας πληκτρολογίου
Για αυτό το sketch χρησιμοποιούμε τη βιβλιοθήκη Keypad.h. Αυτή η βιβλιοθήκη περιέχει τις συναρτήσεις που χρησιμοποιούμε για να λαμβάνουμε εισόδους από το πληκτρολόγιό μας. Για να χρησιμοποιήσουμε αυτή τη βιβλιοθήκη, πρέπει να δημιουργήσουμε έναν δισδιάστατο πίνακα για να αντιστοιχίσουμε τους χαρακτήρες του πληκτρολογίου μας. Αυτό μπορεί να επιτευχθεί, πρώτα, ορίζοντας τον αριθμό των γραμμών και τον αριθμό των στηλών που υπάρχουν στο πληκτρολόγιο. Έπειτα, δημιουργούμε τον πίνακά μας με κάθε χαρακτήρα του πληκτρολογίου. Το πληκτρολόγιό μας έχει τέσσερις γραμμές, τέσσερις στήλες και οκτώ ακίδες εξόδου. Υπάρχει μία ακίδα για κάθε γραμμή και μία ακίδα για κάθε στήλη. Το δείχνουμε αυτό στον κώδικά μας δημιουργώντας έναν πίνακα “rowPins” που περιέχει τις ψηφιακές εισόδους που συνδέονται με τις ακίδες γραμμών και έναν πίνακα “colPins” που περιέχει τις ψηφιακές εισόδους που συνδέονται με τις ακίδες στηλών. Όταν πατάμε ένα πλήκτρο, συνδέουμε μία από τις ακίδες γραμμής με μία από τις ακίδες στήλης. Για παράδειγμα, αν πατήσουμε το πλήκτρο 2, δημιουργούμε ένα κλειστό κύκλωμα μεταξύ της ακίδας γραμμής ένα και της ακίδας στήλης δύο.
char customKey; //χαρακτήρες που εισάγονται πατώντας το πληκτρολόγιο
const byte ROWS = 4; //τέσσερις γραμμές
const byte COLS = 4; //τέσσερις στήλες
char keys[ROWS][COLS] = { //ορίστε εδώ τη "keymap" σας
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; //σύνδεση στις ακίδες γραμμών του πληκτρολογίου
byte colPins[COLS] = {6, 7, 8, 9}; //σύνδεση στις ακίδες στηλών του πληκτρολογίου
Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //αρχικοποιεί ένα instance της κλάσης NewKeypad
Κώδικας κωδικού πρόσβασης
Σε αυτό το παράδειγμα για ασφαλή έλεγχο Γραμμικού ενεργοποιητή, ο κωδικός πρόσβασής μας έχει μήκος 5 ψηφία, οπότε ορίζουμε το “Passcode_Length” ως “6”. Αυτό συμβαίνει επειδή χρειαζόμαστε έναν επιπλέον χώρο για τον μηδενικό χαρακτήρα. Αν θέλετε να αλλάξετε το μήκος του κωδικού, απλώς αλλάξτε το 6 σε έναν αριθμό που είναι κατά ένα μεγαλύτερος από το επιθυμητό μήκος. Έπειτα, αλλάξτε την τιμή του “Passcode” στους χαρακτήρες που επιθυμείτε (ορισμένο προεπιλεγμένα σε “12345”).
Ο χαρακτήρας που αντιστοιχεί σε κάθε πατημένο πλήκτρο θα αποθηκευτεί στον πίνακα “Input”. Μόλις αυτός ο πίνακας περιέχει 5 χαρακτήρες, θα συγκρίνει την τιμή των “Input” και “Passcode” για να δει αν έχουμε τον σωστό κωδικό. Αν οι τιμές είναι ίσες, ο κώδικάς μας θα πει στο Arduino να εκτείνει ή να ανασύρει τον ενεργοποιητή (ανάλογα με την τρέχουσα κατάσταση του ενεργοποιητή). Αν ο κωδικός είναι λανθασμένος, η ακίδα του βομβητή θα πάει σε high τρεις φορές γρήγορα και μετά σε low. Σε κάθε περίπτωση, θα κληθεί στη συνέχεια η συνάρτηση “clearInput()” για να καθαρίσει τον πίνακα Input και να δημιουργήσει χώρο για νέα εισαγωγή.
Κώδικας επέκτασης και ανάσυρσης
Έχουμε δύο πολύ παρόμοιες συναρτήσεις σε αυτόν τον κώδικα, “void extend()” και “void retract()”. Όταν κληθεί, η void extend() θα γράψει το Ρελέ Ένα σε low, καθιστώντας το ενεργό. Αυτό θα κλείσει το κύκλωμα και θα εφαρμόσει θετική τάση στον ενεργοποιητή. Το ρελέ θα παραμείνει ενεργό για τον χρόνο που έχει ανατεθεί στο “const int extendTime” (προεπιλεγμένα 25.000 millisecond). Η συνάρτηση void retract() θα κάνει ακριβώς το ίδιο, εκτός του ότι θα χρησιμοποιήσει το ρελέ δύο για να αντιστρέψει την τάση αντί για το ρελέ ένα.
void extend()//επέκταση του ενεργοποιητή
{
longBeep();
Serial.println("EXTENDING...");
digitalWrite(relay2,HIGH);//βεβαιώνεται ότι το relay2 δεν είναι ενεργό
digitalWrite(relay1,LOW);//ενεργοποιεί το relay1
delay(extendTime);
digitalWrite(relay1,HIGH);//απενεργοποιεί το relay1
Serial.println("DONE EXTENDING");
extended = true; //ενημερώνει το arduino ότι ο ενεργοποιητής είναι εκτεταμένος
longBeep();
}
void retract()//ανάσυρση του ενεργοποιητή
{
longBeep();
Serial.println("RETRACTING...");
digitalWrite(relay1,HIGH);//βεβαιώνεται ότι το relay1 δεν είναι ενεργό
digitalWrite(relay2,LOW);//ενεργοποιεί το relay2
delay(retractTime);
digitalWrite(relay2,HIGH);//απενεργοποιεί το relay2
Serial.println("RETRACTING DONE");
extended = false; //ενημερώνει το arduino ότι ο ενεργοποιητής είναι ανασυρμένος
longBeep();
}
Τελευταίες πινελιές
Αφού έχουμε κάνει όλες τις συνδέσεις και ανεβάσει τον κώδικά μας, θα πρέπει να έχουμε ένα λειτουργικό σύστημα ελέγχου ενεργοποιητή, προστατευμένο με κωδικό. Αν αντιμετωπίζετε δυσκολίες κατά την αρχική ρύθμιση, δοκιμάστε να χρησιμοποιήσετε το εργαλείο σειριακού monitor στο Arduino IDE. Αυτό μπορεί να είναι εξαιρετικά χρήσιμο για να διαπιστώσετε αν τα προβλήματά σας οφείλονται σε κώδικα, καλωδίωση ή ελαττωματικά εξαρτήματα.
Αυτός ο κώδικας μπορεί επίσης να τροποποιηθεί πέρα από την αλλαγή του κωδικού. Ίσως θελήσετε να εξετάσετε την αντικατάσταση του board ρελέ με μια MegaMoto shield για να έχετε έλεγχο Ταχύτητας ή τη χρήση ενός ενεργοποιητή με ανάδραση Hall για έλεγχο θέσης.
Ελπίζουμε αυτό το άρθρο να σας φάνηκε χρήσιμο! Αν έχετε οποιεσδήποτε ερωτήσεις σχετικά με αυτό, με οποιονδήποτε άλλο τηλεχειριζόμενο Γραμμικό ενεργοποιητή ή θέλετε να μοιραστείτε το έργο σας μαζί μας, μη διστάσετε να μας καλέσετε ή να μας στείλετε email.