Cześć!
Dziś pokażę wam jak zrobić prosty zamek szyfrowy na Arduino.
MATERIAŁY:
Arduino (ja wykorzystałem Mega)
- 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.
Zaczynamy od złożenia wszystkiego w całość na płytce stykowej. Wszystko łączymy jak rysunku:
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ć.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
/* 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(); } |
GOTOWY PROJEKT
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.
Teraz wystarczy przystosować servo do zamykania np. szafy, szuflady, drzwi, jeśli ktoś ma drukarkę 3D to może coś takiego(należy pamiętać, że jeśli serwo ma obciążenie to pobiera więcej prądu i nie może być zasilane z Arduino tylko z zewnętrznego zasilacza). Ten etap zostawiam wam.
Zachęcam do rozbudowy projektu(zablokowanie po kilkukrotnym wpisaniu złego hasła, otwieranie za pomocą telefonu, komputera a może RFID), ogranicza was wyłącznie wyobraźnia, dzięki za przeczytanie i miłego dnia!
Według mnie słabo. Na zdjęciach chaos (“projekt skończony”) w kablach, na płytce stykowej można utrzymać porządek żeby było widać co z czym. Sam pomysł prosty i według mnie mocno przeprojektowany. Jako wskaźnik ilości wpisanych cyfr można było użyć LEDów, tak samo jak za informację czy zamek otwarty – a już HD44780 oszczędzony. Już nie wspominam o serwie, strzelanie z armaty do muchy, elektrozamki są sprawdzone i wyjdą nawet taniej, a zasilane DC nie brzęczą (wiem że wymagają większego prądu). Co do porządku na płytce, rzucę linkiem: http://mikrokontrolery.blogspot.com/2011/04/plytka-stykowa-zasady.html
Kolejna sprawa, do kodu. Napisałeś że starałeś się wszystko komentować i tu bym zwrócił uwagę że to jest właściwie błąd. Np. przy słowie kluczowym “else” napisałeś “w przeciwnym razie” – każdy czytający kod wie do czego służą te bloki, a za naukę programowania ten kod i tak nie posłuży. Z moich porad: rozdzielaj “bloki” logiczne (po parę linijek typu otwieranie serwa i wyświetlanie info) enterami i pisz jeden komentarz w linii przed takim blokiem. Znacznie zwiększa to przejrzystość kodu, bez tego pogubisz się w większych projektach.
Ogólnie negatywnie oceniam ten artykuł bo mam wrażenie że jest to napisane w stylu “patrzcie co zrobiłem z elementów pod reką”, bez pomyślenia nad optymalizacją, dokładnością, a przede wszystkim: zastosowaniem (m.in. wspomniany elektrozamek czy koszty elementów). Nie może to służyć również jako część jakiegoś kursu, bo w/w chaos na płytce zdecydowanie nie jest dobrym wzorcem.
Uf, to tyle, mam nadzieję że Cię specjalnie nie zdemotywałem, ale widząc kolejny projekt na stronie głównej tego typu w końcu stwierdziłem że postaram się w miarę konstruktywnie rozpisać co mi nie pasuje w takich projektach. Powodzenia w dalszych konstrukcjach, oby były coraz lepsze ;)
Nie bardzo rozumiem o co Ci chodzi. “Chaos w kablach” – przecież schemat jest czytelny, może chodziło Ci o to, że do masy użyłem czarnego zamiast niebieskiego. Co do zdjęć to pewnie nie pasuje Ci, że nie przyciąłem nóżek rezystora i diody, i przewody wydają się poplątane – masz rację, mogłem zrobić to lepiej. Nie pasuje Tobie również to, że użyłem LCD i serwo, ale właśnie to było założeniem mojego projektu, czyli prostota z możliwością rozbudowy(o czym napisałem na końcu). Nie wiem też czemu przyczepiłeś się do „else”, przecież jak ktoś wie co to jest to tylko po tym przeleci, a jak ktoś nie wie to może akurat zapamięta. Myślę że twoja krytyka jest mocno przesadzona, ale postaram się wdrożyć w życie twoje niektóre rady. Pozdrawiam
Aso, czepiasz się dla samego czepiania. Ktoś, kto nie ma pojęcia co robi, lepiej niech tego nie robi. Co z różnica czy użył LCD czy diod? Działa? Działa. Dziękuje.
Siemka zainspirował mnie twój zameszk szyfrowy i posłużyłem się tym do zrobienia projektu na zaliczenie w szkole. tu zaczeły się moje problem najpierw 2 noce siedziałem bo dowiedziałem się że jest zły adres wyświetlacza u mnie jest 0x3F teraz znowmu siedze bo mi keypad nie działa. MASAKRA jakaś nie mam już siły
DOMELL, Mam ten sam problem można wiedzieć jak ci się udało to naprawić?
witam wiem że to było dawno ale jak to przerobić że jak się wpisze kod to nie wyłącza się po chwili tylko trzeba kliknąć przycisk np D jak ktoś odpisze to dzięki