Czasami nasze projekty wymagają dodatkowego zabezpieczenia. Może to dotyczyć wielu różnych zastosowań, takich jak mechanizmy zamków drzwi, zapobieganie niebezpiecznemu lub nieautoryzowanemu użyciu maszyn czy – bardziej niszowo – rekwizyty do escape roomów. W tym artykule przeprowadzimy Cię przez montaż siłownika z klawiaturą i omówimy, jak zabezpieczyć hasłem obsługę Twojego siłownika liniowego.
Oto czego użyjemy:
- Arduino Uno.
- Klawiatura matrycowa 4x4.
- Moduł przekaźników 2-kanałowy (na zdjęciach pokazano 4-kanałowy, ale wymagane są tylko 2 kanały).
- Siłownik PA-03-6-600.
- Zasilacz PS-20-12.
- Brzęczyk (opcjonalnie).
Okablowanie siłownika
Najpierw zajmiemy się okablowaniem. Aby móc wysuwać i chować Twój siłownik, musimy użyć obu kanałów naszego 2-kanałowego modułu przekaźników. Dzięki temu, gdy Relay One jest aktywny, prąd popłynie w jednym kierunku, a gdy Relay Two jest aktywny — w przeciwnym. Jeśli żaden albo oba przekaźniki są aktywne, do siłownika nie popłynie żaden prąd. Aby to zrealizować, wykonaj poniższe połączenia.
Przekaźniki do siłownika i zasilacza
- +12 V do NC1 (styk normalnie zamknięty na przekaźniku 1) (biały przewód).
- -12 V do NO1 (styk normalnie otwarty na przekaźniku 1) (czarny przewód).
- NC1 do NC2 (niebieski przewód zworkowy).
- NO1 do NO2 (zielony przewód zworkowy).
- COMMON1 do siłownika (brązowy przewód siłownika).
- COMMON2 do siłownika (niebieski przewód siłownika).
Arduino do klawiatury i modułu przekaźników
- Połącz piny 1–8 na klawiaturze z pinami 2–9 w Arduino (w tej kolejności).
- Pin 10 Arduino do IN1 na module przekaźników.
- Pin 11 Arduino do IN2 na module przekaźników.
- 5 V Arduino do VCC na module przekaźników.
- GND Arduino do GND na module przekaźników.
- Anoda brzęczyka (dłuższa nóżka) do pinu 12 (opcjonalnie).
- Katoda brzęczyka (krótsza nóżka) do GND (opcjonalnie).

Programowanie projektu
Teraz, gdy wykonaliśmy wszystkie połączenia, możemy przejść do kodu. Celem tego programu jest odczytywanie sygnałów z klawiatury, wyszukanie poprawnego 5-cyfrowego hasła i odpowiednie sterowanie przekaźnikami. Istnieje też kod dla opcjonalnego brzęczyka, który zapewnia informację zwrotną. Jeśli nie chcesz używać brzęczyka, po prostu go nie podłączaj i pozostaw kod bez zmian. Jeśli potrzebujesz użyć pinu brzęczyka do czegoś innego, usuń lub zakomentuj cały kod używany przez funkcje brzęczyka lub „beep”.
W poniższym kodzie znajdziesz komentarze niemal przy każdej linii (jasnoszary tekst, który pojawia się po „//”). Komentarze opisują, co dzieje się w szkicu, a także jakie modyfikacje możesz wprowadzić. Poniżej rozbijemy też kilka ważnych sekcji, aby dokładniej je wyjaśnić.
Kod konfiguracji (setup)
W kodzie konfiguracji zdefiniujemy piny brzęczyka i przekaźników jako wyjścia. Brzęczyk uruchomi się w stanie LOW, a przekaźniki w stanie HIGH. Dzięki temu po pierwszym włączeniu Arduino wszystkie będą nieaktywne. Uruchomimy też raz funkcję „retract ()”, aby Arduino znało poprawny stan siłownika.
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
}
Kod obsługi klawiatury
W tym szkicu używamy biblioteki Keypad.h. Zawiera ona funkcje, z których korzystamy do odbierania sygnałów z klawiatury. Aby użyć tej biblioteki, musimy utworzyć tablicę dwuwymiarową, aby odwzorować znaki klawiatury. Osiągamy to, najpierw definiując liczbę wierszy i kolumn klawiatury. Następnie tworzymy tablicę z każdym znakiem na klawiaturze. Nasza klawiatura ma cztery wiersze, cztery kolumny i osiem pinów wyjściowych. Jest jeden pin dla każdego wiersza i jeden dla każdej kolumny. Pokazujemy to w kodzie, tworząc tablicę „rowPins” zawierającą wejścia cyfrowe podłączone do pinów wierszy oraz tablicę „colPins” zawierającą wejścia cyfrowe podłączone do pinów kolumn. Gdy naciskamy klawisz, łączymy jeden z pinów wiersza z jednym z pinów kolumny. Na przykład, jeśli naciśniemy przycisk 2, tworzymy zamknięty obwód między pinem wiersza pierwszym a pinem kolumny drugim.
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
Kod obsługi hasła
W tym przykładzie bezpiecznego sterowania siłownikiem liniowym nasze hasło ma 5 cyfr, dlatego „Passcode_Length” ustawiamy na „6”. Wynika to z potrzeby jednego dodatkowego miejsca na znak null. Jeśli chcesz zmienić długość hasła, po prostu zmień 6 na liczbę o jeden większą niż docelowa długość kodu. Następnie zmień wartość „Passcode” na wybrane znaki (domyślnie „12345”).
Znak powiązany z każdym naciśniętym klawiszem zostanie zapisany w tablicy „Input”. Gdy tablica zawiera 5 znaków, porówna wartości „Input” i „Passcode”, aby sprawdzić poprawność hasła. Jeśli wartości są równe, nasz kod nakaże Arduino wysunąć lub schować siłownik (w zależności od bieżącego stanu siłownika). Jeśli hasło jest niepoprawne, pin brzęczyka trzykrotnie szybko przejdzie w stan wysoki, a następnie w niski. W obu przypadkach po tym wywołana zostanie funkcja „clearInput()”, aby wyczyścić tablicę Input i zrobić miejsce na nowy wpis.
Kod wysuwania i chowania siłownika
Mamy dwie bardzo podobne funkcje w tym kodzie: „void extend()” i „void retract()”. Po wywołaniu void extend() ustawia przekaźnik 1 w stan niski, aktywując go. Zamknie to obwód i poda dodatnie napięcie na siłownik. Przekaźnik pozostanie aktywny przez czas przypisany do „const int extendTime” (domyślnie 25 000 milisekund). Funkcja void retract() zrobi dokładnie to samo, z tym że użyje przekaźnika 2, aby odwrócić napięcie zamiast przekaźnika 1.
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();
}
Ostatnie szlify
Po wykonaniu wszystkich połączeń i wgraniu kodu powinniśmy mieć działający system sterowania siłownikiem zabezpieczony hasłem. Jeśli masz problemy podczas pierwszej konfiguracji, spróbuj użyć narzędzia monitora portu szeregowego w Arduino IDE. Może być niezwykle pomocne w ustaleniu, czy problemy powoduje kod, okablowanie czy wadliwe komponenty.
Ten kod można też modyfikować szerzej niż tylko przez zmianę hasła. Warto rozważyć wymianę płytki przekaźnikowej na shield MegaMoto, aby uzyskać kontrolę prędkości, albo użycie siłownika ze sprzężeniem zwrotnym opartym na efekcie Halla do kontroli położenia.
Mamy nadzieję, że ten artykuł był pomocny! Jeśli masz pytania na ten temat, dotyczące innego zdalnie sterowanego siłownika liniowego lub chcesz podzielić się z nami swoim projektem, prosimy zadzwoń lub napisz do nas.