Witam was drodzy Majsterkowicze.
Od długiego czasu byłem biernym czytelnikiem tej oto strony, aż w końcu postanowiłem opisać coś swojego(nie do końca, ale o tym potem).
Więc bez zbędnego gadania zabieramy się do roboty:
Lista części:
- Arduino (lub ATmega8) (w Nettigo nie ma ATmegi8, jest tylko 168)
- płytka stykowa lub uniwersalna (jak ktoś ma ochotę to drukowana)
- 2 guziki
- 3 rezystory 10 KOhm
- 4 diody LED
- Klawiatura numeryczna
- źródło zasilania (np. stabilizator 7805)
- Oraz jakikolwiek mechanizm który zablokuje drzwi – ja użyję serwa 9g
A więc zaczynamy:
Montujemy taki układ:
Schemat (poprawiony):
Ok, oto jest cały układ, może teraz kilka słów wyjaśnienia:
- Pin sygnałowy serwa do pinu 12 Arduino
- Piny klawiaturki ułożone tak(patrząc od frontu klawiaturki) – 3,1,5,2,4,7,6 do płytki, staamtąd równo od pinu 8 do 2
- Piny diód LED do pinów Arduino 0,1,9,10
- Przyciski do wejść analogowych 0 i 5
Klawiaturka posiada piny odpowiedzialne za kolumnę i szereg, przy każdym naciśnięciu klawisza prąd zaczyna być przewodzony pomiędzy pinem rzędu a kolumny.
Taki układ jaki jest na schemacie był u mnie i zakładam, że będzie taki sam u każdego kto zamówi klawiaturkę z nettigo.
Oraz oczywiście kod programu:
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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#include <Password.h> //http://www.arduino.cc/playground/uploads/Code/Password.zip #include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip #include <Servo.h> //dołączamy niezbędne biblioteki Servo servo1; //dodajemy serwo Password password = Password( "3728" ); //ustalamy hasło const byte ROWS = 4; const byte COLS = 3; int lock=0; int proby=0; int dioda=0; char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; //tworzymy klawiaturkę byte rowPins[ROWS] = { 5,4,3,2 }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. byte colPins[COLS] = { 8,7,6, }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins. short but1=0; short but2=0; // Create the Keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void dioda_zapal(){ //ten fragment poniżej odpowiada za zapalanie diód wyświetlających ilość wprowadzonych znaków if(dioda==4){ digitalWrite(0,HIGH); digitalWrite(1,HIGH); digitalWrite(9,HIGH); digitalWrite(10,HIGH); } if(dioda==3){ digitalWrite(0,HIGH); digitalWrite(1,HIGH); digitalWrite(9,HIGH); digitalWrite(10,LOW); } if(dioda==2){ digitalWrite(0,HIGH); digitalWrite(1,HIGH); digitalWrite(9,LOW); digitalWrite(10,LOW); } if(dioda==1){ digitalWrite(0,HIGH); digitalWrite(1,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); } if(dioda==0){ digitalWrite(0,LOW); digitalWrite(1,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); } } void servo_lock(){ //funkcja blokująca drzwi servo1.attach(12); servo1.write(0); delay(500); servo1.detach();} void servo_unlock(){ //funkcja otwierająca drzwi servo1.attach(12); servo1.write(100); delay(500); servo1.detach();} void setup(){ pinMode(0,OUTPUT); pinMode(1,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); keypad.addEventListener(keypadEvent); //rozpoczyna nasluch na klawiaturce } void loop(){ but1=analogRead(0); but2=analogRead(5); if(but1>900){ servo_lock(); but1=0; } if(but2>900){ servo_unlock(); but2=0; // otwieranie i zamykanie drzwi z wewnątrz } keypad.getKey(); } void keypadEvent(KeypadEvent eKey){ switch (keypad.getState()){ //odczyt stanu klawisza case PRESSED: switch (eKey){ case '#': checkPassword(); //po nacisnięciu # sprawdza poprawność hasła dioda_zapal(); break; case '*': //po naciśnięciu * resetuje próbę wpisania hasła password.reset(); servo_lock(); dioda=0; dioda_zapal(); break; default: password.append(eKey); dioda++; dioda_zapal();//jeśli jest to inny klawisz to dopisuje go do hasła które jest właśnie wpisywane } } } void checkPassword(){ if (password.evaluate()){//jeśli hasło się zgadza otwiera drzwi servo_unlock(); password.reset(); dioda=0; dioda_zapal(); } else{//a jesli nie to je zamyka servo_lock; dioda=0; dioda_zapal; password.reset; }} |
Uprzedzam,że kod nie jest w pełni mój, jest to zmieniony przykład z biblioteki Password.
Po wgraniu programu i podłączeniu wszystkiego powinniśmy zobaczyć taki efekt:
https://youtu.be/VwjgwlU9sSk
Po prostu nie mogłem wrzucić filmu na stronę więc został on wrzucony na mój kanał na YT
Następnie już do was należy w jaki sposób wykorzystacie ten projekt, możecie go zmodyfikować, aby odpowiadał Waszym potrzebom.
Gdy tylko ukończę projekt, wrzucę film prezentujący działanie zamka założonego na moje drzwi wejściowe do pokoju, chwilowy brak kasy i części :)
Pozdrawiam i dziękuję za wytrzymanie do końca (choć artykuł jest wyjątkowo krótki).
Bez schematu, ten post jest bezwartościowy. Może i podłączenie nie jest trudne, z samego opisu słownego też można by to połączyć. Ale trzymajmy jakiś sensowny poziom, przynajmniej elektronika-hobbysty, a taki musi znać zasady tworzenia schematów i symbole elektroniczne.
Printscreen z fritzinga, z całym przybornikiem i paskami windowsa (!) nie jest schematem.
W kodzie do własnego użytku, rób co chcesz. W kodzie, który publikujesz, np. jako fragment artykułu, komentarze uważam za wielce wskazane.
Ok,zaraz zacznę poprawiać
EDIT:W czym zrobić dobry schemat, tak żeby się nadawał?
Ja korzystam z Eagla, ale i we fritzingu można ładny i poprawny schemat narysować…
Witam,
Podczas kompilacji otrzymuje taki błąd:
exit status 1
‘keypadEvent’ was not declared in this scope
Dodam że biblioteki mam zainstalowane z linków podanych w programie.
Z góry wielkie dzięki ;)
Wideo prywatne.
Poprawione, dodałem też komentarze w kodzie
A ja dodatkowo poprawiłem kolorowanie składni w kodzie :)
Wielkie dzięki, pół godziny się zastanawiałem jak ten kod wrzucić, żeby wyglądał tak jak teraz :)
Jest jeszcze coś do poprawienia?
Jeszcze wcięcia warto poprawić (a właściwie to dodać), bo teraz to się czyta dramatycznie.
Cóż za schemat :) Bajeczny normalnie ;) Projekt ogólnie bardzo fajny.
Mam pytanie czy jest jakaś taśma/przejściówka do tej klawiatury czy trzeba koniecznie lutować?
Nigdy nie widziałem takiej przejściowki, ani taśmy, ale nie jest to jakieś wybitnie trudne, ja użyłem rozwiniętego kabla sieciowego(RJ45), i włożyłem kable z określoną kolejnością, przylutowałem i tyle, z drugiej strony wlutowałem goldpiny ,dzięki czemu mam tak jakby gniazdo.
Nie uważam ze jest to trudne tylko nie widziałem dokładnie na filmiku jak ta tasma ma wyprowadzenia ale potem zobaczyłem na nettigo ze sa otwory do przewlekania.
ps. jak klika sie w link obok adurino i Atmegi otwiera sie klawiatura.. nie wiem czy tak miało byc dlatego informuje.
Poprawione
A gdzie się zmienia hasło? Nie mogę tego wypatrzeć.
Hasło zmienia się w 7 linijce :)
Ale ja ślepy O.o
A mi brakuje opisu części mechanicznej projektu – bo wychylenie serwa, obsługa pinpada – ok, ale jak to łączysz z drzwiami?
Jakaś zasuwka tak jak u mnie w RFID, czy w jaki w ogóle sposób?
Część mechaniczna będzie jak zamontuję mechanizm na drzwiach, dodam wtedy też dodatkowy filmik pokazujący całość w działaniu.
Tak, na pomysł wpadłem czytając artykuł o szafce na RFID, ale myślałem jak zminimalizować koszta, ale żeby nie trzeba było drugiego urządzenia, jak np. pilota, bo jeszcze bym go w środku zamknął :>
Ok ;) Ale to jaki finalnie masz ten pomysł na mechanizm?
Finalnie to ma być serwo wysuwające zasuwkę, czyli tak jak u ciebie :>
Okej, bo w sumie szukam inspiracji jak właśnie zamykać i otwierać drzwi. Zasuwka wydawała mi się mało pasująca bo łatwo ją wyłamać przy zwykłych drzwiach.
Wstawiłem już poprawiony schemat, oraz poprawiłem wcięcia w kodzie, jeszcze coś do poprawki?
Jak tylko zamontuję mechanizm na drzwi, to wrzucę drugi filmik z działania :>
Tutaj jest podobny projekt http://hackaday.com/2011/11/26/full-featured-security-lock-demonstration/ bardziej rozbudowany :)
Ten projekt też wydaje się być ciekawy http://hackaday.com/2012/09/17/qr-code-opens-doors-to-you/
Jeszcze dodatkowo chciałbym się spytać co i jak w związku z tą zniżką 50% do nettigo, ze względu na to,że post dostał się na główną?
Już Ci piszę na maila co i jak :)
Pomysł fajny ale jak ktoś chce zrobić taki zamek, to nie trzeba angażować arduino wystarczy mały scalaczek UA3730. Czytając ten artykuł przypomniało mi się jak 20 lat temu zrobiłem na tym zamek do pokoju. W 93 roku to było coś. A tu o dziwo jeszcze link na EP do całości http://ep.com.pl/files/7582.pdf
Nawet na CD4017 można zrobić prosty zamek szyfrowy: http://www.elportal.pl/pdf/k07/84_54.pdf :D
Owszem, można to zrobić na prostym układzie, ale arduino daje dodatkową kontrolę nad działaniem, ponieważ PIN może być dowolnej(prawie)długości, może wykonywać różne akcje, nie tylko otwierać drzwi, a poza tym uczy elektroniki oraz programowania :)
Pewnie, że tak. Ja podałem tylko przykład na prosty zamek. W przypadku zamka na arduino możesz jeszcze go rozbudować o RFID a dodając moduł lan zamek może informowaoć o każdej próbie otwarcia i otwierać drzwi zdalnie.
Otóż to, właśnie mam w planach system centralnego sterowania wszystkimi urządzeniami w pokoju, z możliwością logowania na kartę sd z datą i godziną + drukarka drukująca to samo co na karcie, lub nieautoryzowane próby wejścia do pokoju :>
akurat to co podałeś to nie jest prosty zamek prosty to jest ten z arduino twoj jest mocno skomplikowany wymaga lutowania i wielu elementów.
Ciekawy tutorial, koszt wydaje się niewielki i do zabezpieczenia szafki czy pokoju spokojnie sie nada, dzięki! :)
Nie ma za co, poradnik jeszcze będzie dalej uzupełniany, np. film z działania tentego na drzwiach do mojego pokoju :>
Byłoby to wręcz bardzo wskazane, jestem ciekaw jak to finalnie obudowałeś :)
No właśnie jeszcze nie obudowałem, na razie brakuje mi części, żeby to dokończyć, ale teraz to już kwestia 1-2 tygodni, wtedy nakręcę filmik.
Witam
Niestety moje Arduino nie może tego skompilować… dokładnie chodzi o fragment:
}
else{//a jaśli nie to je zamyka
servo_lock();
dioda=0;
dioda_zapal();
password.reset();
}
}
a bardzo dokładnie o ten kod:
(…) “__mceDel” (…)
nie wiem czym jest to spowodowane…
AHA
Jeszcze jedno, jak podłączyć do tego przekaźnik, a nie servo ??
To mceDel dodało mi się samo po którejś poprawce artykułu, zaraz poprawię
A dodanie obsługi przekaźnika to ustawienie stanu wysokiego na pinie sterującym przekaźnikiem, aczkolwiek nie ręczę, bo nie zajmowałem się jeszcze przekaźnikami.
EDIT: poprawione
a teraz problem z password.reset(); w tym samym fragmencie
co jest ??
Odkryłem problem.. dosyć prosty:/
brakuje nawiasów po tym :)
Proszę o poprawienie.
W poście wyżej właśnie dobrze napisałem intuicyjnie ;)
Chodzi mi o ten fragment…
}
else{//a jesli nie to je zamyka
servo_lock;
dioda=0;
dioda_zapal;
password.reset();
}}
Jak wrócę do domu to wszystko sprawdzę i poprawię.
Witam
Jak widać po moich wcześniejszych postach buduję to… spodobało mi się… Niestety moje arduino dziwnie się zachowuje po wpisaniu programu. dioda 1 i 4 nie świeci, 2 płynnie zaświeca się i gaśnie, a 3 świeci się cały czas. Piny podłączyłem dobrze, gdyż sprawdzałem kilkakrotnie… co jest nie tak?
I jeszcze jedno ja nie korzystam z Arduino Uno tylko z tego:
http://www.trobot.pl/Sterowniki-robotow/Sterownik-robota-Romeo-v_2-zgodny-z-Arduino-Leonardo
Dziękuję za pomoc
GregX977
Weź wrzuć na jakiś hosting zdjęcia, chociaż jak jesteś pewien że dobrze podłączyłeś to nie za bardzo wiem w czym rzecz.
Ewentualnie możliwe, że ten sterownik robota co podałeś ma inaczej rozmieszczone piny, ale to tylko moja teoria
A mi z kolei spodobał się bardzo pomysł, trochę go zmodyfikowałem, ponieważ nie mam ani klawiatury ani wolnych mechanizmów.Tak więc mam swoją wersję na pilota od TV i przekaźnikiem, który przy prawidłowej kombinacji włącza się na około 5 sekund. Po za tym dodałem odliczanie na zasadzie kolejno zapalających się led. Nie używałem biblioteki password ani też keypad. Jako, bardzo początkujący programista mój kod pewnie można byłoby skrócić o połowę. Jutro powinny przyjść serwa, wtedy coś pokombinuje.
Mam pytanie odnośnie klawiatury, rozbierał ktoś taką? Jest tam elektronika? Zastanawiam się, czy nie można zrobić jej tak jak pianinko z innego posta, tylko że z dwóch kartek. Albo finalnie, z wyciętego ze starej klawiatury – bloku klawiatury numerycznej.
Jakby ktoś był zaciekawiony moją koncepcją to mogę wrzucić.
Jeśli możesz to podeślij kod do wersji z pilotem, potrzebuję wersji bez gotowej klawiatury, a muszę przyznać, że sam mam problem z przerobieniem tego kodu.
Skontaktuj się ze mną na jarken@wp.pl
witam jak bym się odezwał do ciebie na email to też mi pomożesz z tym projektem ?
z góry dzięki
witam jak bym się odezwał do ciebie na email to też mi pomożesz z tym projektem ?
z góry dzięki
mam kilka pytań czy ten serwo mechanizm da radę przesunąć ten dzyndzelek w zamku w drzwiach ??
jak wytrzymała jest klawiatura gdyż z tego co widzę jest ona wykonana z plastiku a u mnie raczej może mieć ciężko
jak długi ko można ustawić
witam , mam problem, Po weryfikacji Pańskiego kodu występuję błąd kompilacji :
Klawiatura_tra.ino: In function ‘void checkPassword()’:
Klawiatura_tra.ino:135:15: error: statement cannot resolve address of overloaded function
Błąd kompilacji.
Proszę o pomoc
Z góry dziękuje
Szkoda że film jest usunięty. :-/
Witam,
Podczas kompilacji otrzymuje taki błąd:
exit status 1
‚keypadEvent’ was not declared in this scope
Dodam że biblioteki mam zainstalowane z linków podanych w programie.
Z góry wielkie dzięki ;)