autor: WitekR » 04 lis 2021, 23:41
Zamek Szyfrowy

- 7-1000x750.jpg (68.62 KiB) Przejrzano 1314 razy
MATERIAŁY:
Arduino
keypad 4×4
wyświetlacz LCD 2×16 + konwerter I2C
dioda + rezystor(100 Ohm dla zielonej)
płytka stykowa
przewody
serwo (np. SG-90)
Wszystkie potrzebne elementy przedstawia zdjęcie.

- 1.jpg (86.85 KiB) Przejrzano 1316 razy
Zaczynamy od złożenia wszystkiego w całość na płytce stykowej. Wszystko łączymy jak rysunku:

- 6-1000x750.jpg (53.01 KiB) Przejrzano 1315 razy

- 3.jpg (84.58 KiB) Przejrzano 1313 razy
Teraz należy ściągnąć wszystkie potrzebne biblioteki(LiquidCrystal_I2C, Password, Keypad) i możemy wgrać program, szkic napisałem samemu jest bardzo prosty w swojej budowie, zachęcam do przeanalizowania, starałem się wszystko skomentować.
Kod: Zaznacz cały
/* Zamek szyfrowy
* sierpień 2017
*/
//dołączanie bibliotek
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Servo.h>
#include <Keypad.h>
#include <Password.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);//hasło konwertera
int ledG = 9; //dioda
Servo myservo;//servomechanizm
Password password = Password( "1234" ); //ustalanie hasła
//klawiatura
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
byte rowPins[ROWS] = {A0,A1,A2,A3};//piny klawiatury
byte colPins[COLS]= {A4,A5,A6,A7};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
lcd.init();
Serial.begin(9600);
myservo.attach(8);//pin serva(PWM)
myservo.write(0);//servo w pozycji startowej
pinMode(ledG,OUTPUT);//ust. pinu jako wyjście
digitalWrite(ledG, LOW);//dioda zgaszona
lcd.backlight();
lcd.home();
lcd.print("HASLO: ");//wyświetlanie
lcd.setCursor(0, 1);
keypad.addEventListener(keypadEvent);
}
void checkPassword(){//sprawdzanie hasła
if (password.evaluate()){//jeśli hasło się zgadza
Serial.println(" OTWARTE");//napisz OTWARTE
lcd.print(" OTWARTE");
digitalWrite(ledG, HIGH);//zaświecenie diody
myservo.write(90);//ruch serva o 90*
delay(5000);//dlugość otwarcia - 5s
cls();// funkcja clear
digitalWrite(ledG, LOW);//zgaszenie diody
myservo.write(0);//zamknięcie serva
password.reset();
}else{//w przeciwnym razie
Serial.println(" ZLE");//napisz ZLE
lcd.print(" ZLE");
delay(1000);//poczekaj 1s
cls();
password.reset();
}
}
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
Serial.print("HASLO: ");
Serial.println(eKey);
lcd.print('*');
switch (eKey){
case '*': checkPassword(); break;//sprawdzanie hasła
case '#': password.reset(); cls(); break;//reset hasła
default: password.append(eKey);
}
}
}
void cls(){//funkcja czyszczenia
lcd.clear();
lcd.print("HASLO: ");
lcd.setCursor(0, 1);
}
void loop(){
keypad.getKey();
}
Teraz wystarczy wpisać hasło(1234) i nacisnąć gwiazdkę na klawiaturze. Na ekranie pojawi się napis “OTWARTE”, dioda się zaświeci, servo się przekręci o 90*(kąt do ustawienia w programie) po 5 sekundach(czas do ustawienia w programie) wszystko wróci do pierwotnego stanu.
Podczas gdy wpiszemy złe lub niepełne hasło wyświetla się napis “ZLE”, który po chwili gaśnie. Jeżeli wpiszemy przypadkiem złe hasło wystarczy nacisnąć przycisk # aby wyczyścić ekran i móc wpisać prawidłowe hasło.
Zamek Szyfrowy
[attachment=1]7-1000x750.jpg[/attachment]
MATERIAŁY:
Arduino
keypad 4×4
wyświetlacz LCD 2×16 + konwerter I2C
dioda + rezystor(100 Ohm dla zielonej)
płytka stykowa
przewody
serwo (np. SG-90)
Wszystkie potrzebne elementy przedstawia zdjęcie.
[attachment=3]1.jpg[/attachment]
Zaczynamy od złożenia wszystkiego w całość na płytce stykowej. Wszystko łączymy jak rysunku:
[attachment=2]6-1000x750.jpg[/attachment]
[attachment=0]3.jpg[/attachment]
Teraz należy ściągnąć wszystkie potrzebne biblioteki(LiquidCrystal_I2C, Password, Keypad) i możemy wgrać program, szkic napisałem samemu jest bardzo prosty w swojej budowie, zachęcam do przeanalizowania, starałem się wszystko skomentować.
[code]
/* Zamek szyfrowy
* sierpień 2017
*/
//dołączanie bibliotek
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Servo.h>
#include <Keypad.h>
#include <Password.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);//hasło konwertera
int ledG = 9; //dioda
Servo myservo;//servomechanizm
Password password = Password( "1234" ); //ustalanie hasła
//klawiatura
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
byte rowPins[ROWS] = {A0,A1,A2,A3};//piny klawiatury
byte colPins[COLS]= {A4,A5,A6,A7};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
lcd.init();
Serial.begin(9600);
myservo.attach(8);//pin serva(PWM)
myservo.write(0);//servo w pozycji startowej
pinMode(ledG,OUTPUT);//ust. pinu jako wyjście
digitalWrite(ledG, LOW);//dioda zgaszona
lcd.backlight();
lcd.home();
lcd.print("HASLO: ");//wyświetlanie
lcd.setCursor(0, 1);
keypad.addEventListener(keypadEvent);
}
void checkPassword(){//sprawdzanie hasła
if (password.evaluate()){//jeśli hasło się zgadza
Serial.println(" OTWARTE");//napisz OTWARTE
lcd.print(" OTWARTE");
digitalWrite(ledG, HIGH);//zaświecenie diody
myservo.write(90);//ruch serva o 90*
delay(5000);//dlugość otwarcia - 5s
cls();// funkcja clear
digitalWrite(ledG, LOW);//zgaszenie diody
myservo.write(0);//zamknięcie serva
password.reset();
}else{//w przeciwnym razie
Serial.println(" ZLE");//napisz ZLE
lcd.print(" ZLE");
delay(1000);//poczekaj 1s
cls();
password.reset();
}
}
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
Serial.print("HASLO: ");
Serial.println(eKey);
lcd.print('*');
switch (eKey){
case '*': checkPassword(); break;//sprawdzanie hasła
case '#': password.reset(); cls(); break;//reset hasła
default: password.append(eKey);
}
}
}
void cls(){//funkcja czyszczenia
lcd.clear();
lcd.print("HASLO: ");
lcd.setCursor(0, 1);
}
void loop(){
keypad.getKey();
}
[/code]
Teraz wystarczy wpisać hasło(1234) i nacisnąć gwiazdkę na klawiaturze. Na ekranie pojawi się napis “OTWARTE”, dioda się zaświeci, servo się przekręci o 90*(kąt do ustawienia w programie) po 5 sekundach(czas do ustawienia w programie) wszystko wróci do pierwotnego stanu.
Podczas gdy wpiszemy złe lub niepełne hasło wyświetla się napis “ZLE”, który po chwili gaśnie. Jeżeli wpiszemy przypadkiem złe hasło wystarczy nacisnąć przycisk # aby wyczyścić ekran i móc wpisać prawidłowe hasło.