W mojej serii filmów i artykułów o arduino staram się inaczej niż wszyscy tłumaczyć krok po kroku wszystkie etapy budowy konkretnych rozwiązań, tak aby nawet początkujący mógł sobie coś zbudować, udostępniam także gotowce. Kolejny projekt oparty o arduino jaki sobie zbudujemy to zamek bądź aktywator, który uruchomimy wpisując prawidłowy kod na klawiaturze membranowej.
Co potrzebujemy?
Jeśli mamy już zestaw, który omawialiśmy w poprzedniej części, czyli:
arduino Mega 2560 oraz wyświetlacz LCD shield:
To możemy przejść dalej, do tego projektu musimy zaopatrzyć się w 2 kolejne moduły:
https://botland.com.pl/pl/klawiatury/1680-klawiatura-numeryczna-membranowa-samoprzylepna-16-klawiszy.html
1 kanałowy przekaźnik 5V 10A AVR ARM ARDUINO:
https://diolut.pl/modul-1-kanalowy-przekaznik-5v-10a-avr-arm-arduino-p-8746.html?
Łączymy w całość:
Gotowy program do wgrania:
/* Program zamka od drzwi, sejfu lub aktywatora zasilania 230 volt
Autor: www.elektrodynka.tk
marzec 2019
*/
#include <LiquidCrystal.h> // biblioteka do wyświetlacza LCD
#include <Keypad.h> //biblioteka do klawiatury 4x4
int przekaznik = 24; //pin przekaźnika
char* password ="1234AD"; //hasło do wprowadzenia
int pozisyon = 0;
int przycisk = 0;
const byte rows = 4;
const byte cols = 4;
char keyMap [rows] [cols] = { //mapowanie klawiatury
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins [rows] = {52, 50, 48, 46}; //piny, poziome linie klawiatury
byte colPins [cols] = {53, 51, 49, 47}; //piny, pionowe linie klawiatury
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, rows, cols);
LiquidCrystal lcd (8, 9, 4, 5, 6, 7); // piny odpowiedzialne za wyświetlacz
void setup(){
int przekaznik = 24; //pin odpowiedzialny za sterowanie przekaźnikiem
pinMode(przekaznik,OUTPUT);//ust. pinu jako wyjście
digitalWrite(przekaznik, HIGH);//przekaźnik nieaktywny
lcd.begin(16, 2);//ilość znaków i linijek wyświetlacza
setLocked (true);
przycisk = 0;
}
void loop(){
char whichKey = myKeypad.getKey();//ekran startowy
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BLOKADA ZAMKA");
lcd.setCursor(0, 1);
lcd.print("WPISZ KOD");
if(whichKey == '#'){//zamykanie zamka klawiszem #
setLocked (true);
przycisk=0;
pozisyon=0;
digitalWrite(przekaznik, HIGH);//przekaźnik aktywny
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ZAMYKAM");
lcd.setCursor(0, 1);
lcd.print("ZAMEK");
delay(3000);
lcd.clear();
lcd.print("BLOKADA");
lcd.setCursor(0, 1);
lcd.print("WPISZ KOD");
}
if(whichKey == '*'){//klawisz podpowiedzi
przycisk=0;
pozisyon=0;
setLocked (true);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PODPOWIEDZ:");
lcd.setCursor(0, 1);
lcd.print("DATA URODZENIA");
delay(2000);
lcd.clear();
}
if(whichKey == '0' || whichKey == '1' || whichKey == '2' || whichKey == '3' || //jakie klawisze chcesz używać
whichKey == '4' || whichKey == '5' || whichKey == '6' || whichKey == '7' || whichKey == '8' || whichKey == '9' || whichKey == 'A' || whichKey == 'B' || whichKey == 'C' || whichKey == 'D'){
przycisk++;
}
if(przycisk == 7){
przycisk = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.write(" ZA DUZO");
lcd.setCursor(0,1);
lcd.write(" ZNAKOW");
delay(1000);
lcd.clear();
}
if(przycisk == 1){
lcd.clear();
lcd.setCursor(0,1);
lcd.write(" *");
}
if(przycisk == 2){
lcd.clear();
lcd.setCursor(0,1);
lcd.write(" **");
}
if(przycisk == 3){
lcd.clear();
lcd.setCursor(0,1);
lcd.write(" ***");
}
if(przycisk == 4){
lcd.clear();
lcd.setCursor(0,1);
lcd.write(" ****");
}
if(przycisk == 5){
lcd.clear();
lcd.setCursor(0,1);
lcd.write(" *****");
}
if(przycisk == 6){
lcd.clear();
lcd.setCursor(0,1);
lcd.write(" ******");
}
if(przycisk == 6 && pozisyon < 4){
lcd.clear();
lcd.setCursor(0,0);
lcd.write(" ZLE");
lcd.setCursor(0,1);
lcd.write(" HASLO");
delay(1000);
przycisk = 0;
lcd.clear();
}
if(whichKey == password [pozisyon]){
pozisyon ++;
}
if(pozisyon == 6){//otwieranie zamka na poprawny 6 cyfrowy kod
przycisk = 0;
pozisyon = 0;
setLocked (false);
digitalWrite(przekaznik, LOW);//przekaźnik aktywny
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("*** OTWARTE ***");
lcd.setCursor(0, 1);
lcd.print("!!!!!!!!!!!!!!!");
delay(2000);//czas wyświetlania napisu otwarte
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ABY ZAMKNAC");
lcd.setCursor(0, 1);
lcd.print("NACISNIJ #");
delay(3000);//czas wyświetlania napisu aby zamknąć
}
delay(100);
}
//powrót do ekranu powitalnego
void setLocked(int locked){
if(locked){
}
else{
przycisk = 0;
}
}
Gotowiec do pobrania (wersja z ręcznym wyłącznikiem klawiszem #):
https://drive.google.com/open?id=1cItIu86Rh8o4rEpWsV0MxS_RZYjY_1Dl
https://drive.google.com/open?id=1cItIu86Rh8o4rEpWsV0MxS_RZYjY_1Dl
Jeśli interesuje was automatyczne zamykanie/wyłączanie po określonym czasie, to musicie wgrać tego gotowca:
https://drive.google.com/open?id=11oYj5kezspUJdjND8_h5pF3nPUcG4Gy-