Witam wszystkich,
Chciałbym zaprezentować swój pierwszy projekt na Majsterkowie – jest to system kontroli dostępu ukryty w planszy ouija (z nieco przerośniętym kursorem). Umieszczając kursor nad odpowiednimi literami we właściwej kolejności podajemy hasło, które rozpoznaje odbiornik i zmienia na określony czas stan przekaźnika, który może np. sterować elektrozamkiem. Kursor wibruje, gdy najeżdżamy na niektóre litery, a także wyposażony jest w styki umożliwiające jego ładowanie bez demontażu.
Jak to działa?
Od tyłu planszy, pod niektórymi literami, mamy naklejone tagi RFID. Zamontowane wewnątrz kursora Arduino Pro Mini, zasilane akumulatorem Li-Po i połączone z czytnikiem RFID i modułem radiowym NRF24L01 (2,4GHz), czyta identyfikatory tagów i porównuje je z zapisaną w pamięci tablicą. Gdy użytkownik nakieruje kursor, a więc antenę czytnika, na odpowiednie tagi w odpowiedniej kolejności, Arduino wysyła do odbiornika odpowiedni komunikat, a umieszczone w odbiorniku drugie Pro Mini odczytuje go i załącza przekaźnik, wysyłając też potwierdzenie otrzymania (acknowledge). Jeśli potwierdzenie nie dotrze do kursora, ten będzie ponawiał próby, aż uda się dotrzeć z przekazem. Teoretycznie zasięg modułu NRF24L01 może wynosić kilkadziesiąt metrów, ja wykonywałem próby na odległościach do 5m i działało bez zarzutów. Tak wygląda to od środka:
Mamy możliwość ładowania kursora w czasie, gdy nie jest on używany – należy położyć go na specjalnej podstawce wyposażonej w styki (bolce, sprężyny lub coś podobnego) i silny magnes – sprawi on, że przełączy się zamontowany w kursorze kontaktron, odłączając akumulator od układu i podłączając go do modułu ładowarki, którego wejścia wyprowadzone są na blaszki widoczne na górnym zdjęciu. Mamy do nich dostęp od strony pokrywki poprzez wywiercone otwory, w które trafiają bolce lub sprężyny zamocowane na podstawce i podłączone do źródła napięcia 5V w odbiorniku. Opisałem to w sposób niezwykle zagmatwany, ponieważ nie mam zdjęć podstawki, ale liczę, że ten schematyczny rysunek wyjaśni, jak ma wyglądać podstawka:
W załączeniu do tutoriala znajdziemy wszystkie potrzebne pliki. Kod (komentowany po angielsku) znajduje się na GitHubie. Zbierzmy zatem potrzebne zabawki i do dzieła.
Czego potrzebujemy?
Do wykonania projektu potrzebne będą, oprócz samej planszy ouija, następujące komponenty:
- 2x Arduino Pro Mini 5v-16MHz;
- Czytnik RFID z komunikacją przez UART – użyłem wariantu od Seed Studio, pracującego w standardzie 125KHz. Co bardzo ważne, ma on oddzielną antenę z drutu. Teoretycznie dałoby się zreplikować mój projekt na czytniku RC522, ale trudno mi ocenić, jak zachowa się antena PCB po wywierceniu otworu na okienko kursora, a poza tym należałoby przystosować kod do pracy z czytnikiem podłączonym przez SPI;
- Tagi (znaczniki) RFID – pracujące na częstotliwości takiej, jak czytnik. Kupujemy je w odpowiedniej ilości – co najmniej takiej, ile chcemy mieć różnych liter w naszym haśle. Idealnie, gdy będą małe, płaskie i samoprzylepne, ja kupiłem je w formie naklejki o średnicy 2cm;
- Akumulator Li-Po. Mój ma pojemność 1000mAh, bo miałem dużo miejsca w kursorze, spokojnie zmieściłby się kilkukrotnie większy;
- Moduł ładowarki pojedynczego ogniwa Li-Po. Użyłem podobnego do tego w linku. Bardzo przydają się wyprowadzenia wejść (VIN i GND), zaś USB będzie użyteczne tylko w sytuacjach awaryjnych;
- Moduł przetwornicy step-up dającej 5V przy napięciu wejściowym Li-Po 1S (3,0-4,2V), na przykład taki;
- 2x NRF24L01;
- Kontaktron – teoretycznie można kupić w Botlandzie mały, ale ja wykorzystałem taki o długości 45mm i prądzie pracy do 1A – hałasuje głośniej, niż niejeden przekaźnik;
- Silnik wibracyjny;
- Moduł przekaźnika lub po prostu przekaźnik z optoizolacją i elementami zabezpieczającymi;
- Regulator napięcia 7805;
- 2x regulator napięcia LM1117-3.3 lub odpowiednik;
- Elektromagnes, elektrozamek lub podobne urządzenie, które chcemy podłączyć do naszego przekaźnika;
- Stosowny do powyższego zasilacz dogniazdkowy – ja korzystałem z urządzeń na 12V, więc wziąłem taki;
- Stosowne do zasilacza gniazdo, które potem wlutujemy do układu odbiornika i wkleimy do obudowy;
- Komponenty, których chcemy użyć jako styków do ładowania kursora – zdecydowanie polecam rozebrać w tym celu koszyk na dwie baterie AA, znajdujący się w nim komplet niklowanych blaszek i sprężynek sprawdza się bardzo dobrze i ładnie się lutuje;
- Silny magnes, najlepiej neodymowy, do przełączania kontaktronu na odległość;
- Co najmniej 3 wkręty do drewna, dobrane do wymiarów naszego kursora;
- Drobna elektronika: kondensatory, rezystory, dioda prostownicza, microswitch, dwa LED-y THT, najlepiej żółty i zielony. Do testowego montażu może się przydać dwustanowy przełącznik suwany;
- Obudowa ogólnego przeznaczenia, ja użyłem czarnej ABS-owej, wymiary jeśli dobrze pamiętam 20x40x80mm.
Przydadzą się narzędzia:
- Lutownica z cyną i akcesoria: trzecia ręka, pęseta itd.;
- Małe obcinaczki – zdecydowanie polecam do jakichkolwiek projektów elektronicznych;
- Pistolet na klej;
- Konwerter USB-UART do programowania Arduino Pro Mini;
- Maszyneria do wykonania kursora – może to być frezarka CNC lub laser (wytniemy wtedy warstwy do późniejszego sklejenia), dałoby się też wydrukować załączony do tutoriala plik .skp na drukarce 3D.
- Standardowy komplet narzędzi warsztatowych (śrubokręty itd.).
I materiały:
- Kable różnych długości, kolorów i grubości;
- Goldpiny męskie w rastrze 2.54mm do wlutowania w Arduino;
- Koszulki termokurczliwe w średnicach zbliżonych do grubości kabli;
- Klej epoksydowy dwuskładnikowy;
- Odpowiednie drewno do obróbki lub filament do drukarki, zależnie od metody wykonywania kursora.
Tutaj zdjęcie grupowe większości użytych przeze mnie komponentów elektronicznych:
Oraz indywidualne, tego oto dużego kolegi:
1. Zanim zaczniemy elektronikę – przygotowanie planszy
Gdy zdobędziemy już planszę (można np. wypalić ją sobie laserem na kawałku sklejki), zaczynamy tymczasowy montaż tagów RFID pod wybranymi przez nas literami (tymi, które stanowią hasło, lub wszystkimi – wedle uznania). Mocujemy je przy użyciu np. taśmy malarskiej od tyłu planszy, bezpośrednio pod literami. Do ułatwienia sobie znajdowania odpowiednich punktów montażu można użyć np. pary magnesów. Jeśli mamy tagi samoprzylepne, nie korzystajmy jeszcze z fabrycznej warstwy klejącej. Nasze ułożenie zapewne będzie wielokrotnie zmieniane, a ta prowizorka ma nam posłużyć do testowania odpowiedniego ustawienia tagów, ich współpracy z czytnikiem i ogólnej sprawności układu.
2. Wykonanie kursora
Ponieważ ja otrzymałem już gotowe elementy drewniane do projektu, nie posiadam żadnych zdjęć z wykonania kursora. Zrobiłem model w SketchUpie, załączony do tego tutoriala – można go wydrukować w 3D, wrzucić na frezarkę lub przerobić na płaski rysunek i wyciąc laserem warstwy. Jak zobaczycie na kolejnych zdjęciach, można spokojnie zmieścić elektronikę w mniejszej kubaturze, niż ta, którą ja miałem do dyspozycji. Bardzo istotne jest, by okienko w Waszym kursorze zmieściło się z pewnym zapasem wewnątrz obrysu anteny – patrz zdjęcie w punkcie 3.
Po wykonaniu kursora pozostaje jeszcze wycięcie pasującej pokrywki ze sklejki – to spokojnie można zrobić narzędziami ręcznymi – i wycięcie w niej dwóch otworów na styki do ładowania, o których więcej poniżej.
3. Elektronika – kursor
Przystępujemy do pracy nad wnętrzem naszego kursora. Docelowo chcemy wykonać połączenia wg. poniższego schematu:
Tutaj uwaga – dobra praktyka zabrania, zresztą bardzo słusznie, podłączać silników bezpośrednio do pinów mikrokontrolera, jako że zwykle pobierają one znaczne prądy. Nakłaniam do zrobienia układu po bożemu, z tranzystorem, a nie tylko z diodą flyback. Na swoją obronę mam jedynie zmierzone prądy pobierane przez silnik wynoszące do 21mA, czyli prawię połowę mniejsze, niż deklarowana wydajność prądowa jednego pinu w ATMega328.
Na samym początku proponuję dla sprawdzenia ułożyć wszystkie elementy tam, gdzie chcemy je docelowo wkleić w korpus kursora:
Kluczowe jest umieszczenie anteny wewnątrz okienka w obudowie, przez które użytkownicy będą widzieć litery, na które nakierują kursor. Antena może być nieco przesunięta, by dobrze dopasować się do ułożenia liter – nie zawsze wystarczy, by tagi były dokładnie pod literami, może być potrzeba je rozsunąć, byśmy przypadkiem ich nie łapali czytnikiem, a to z kolei rodzi problem zgrania położenia kursora z literami. U mnie pomogło oddalenie górnego rzędu liter od dolnego i przesunięcie anteny w kursorze nieco do góry. Oprócz tego postanowiłem umieścić moduł radiowy na lewej ścianie kursora, a wysoko na przeciwległej przykleić kontaktron (którego brak na zdjęciu). Wszystkie inne elementy leżą płasko.
Przed lutowaniem zdecydowanie wskazane jest próbne zmontowanie komponentów kabelkami do płytek stykowych, lutujemy wtedy jedynie niezbędne minimum (goldpiny do programowania Pro Mini itd.) i jest mało problemów z rozmontowywaniem w razie potrzeby. Niestety jest spora szansa, że będzie to wyglądało tak:
Na tym zdjęciu i kilku innych kursor jest pokazany z przełącznikiem suwanym, którego używałem w czasie testowania elektroniki, zanim zamontowałem kontaktron. Warto podkleić wszystko taśmą, wgrać kod na Arduino i zrobić pierwsze testy: sprawdzamy, czy antena jest dobrze umieszczona, litery są czytane w odpowiednich momentach i znaczniki nie nakładają się na siebie.
Gdy wszystko pójdzie pomyślnie, możemy zacząć lutowanie. Ja robiłem to w kolejności: czytnik RFID, moduł radiowy, silnik wibracyjny kolejno do Arduino, a następnie przetwornica step-up i moduł ładowarki przez kontaktron równolegle do baterii – tu należy uważać, byśmy nie lutowali plusa baterii, gdy jest on pod napięciem – na szczęście możemy go przełączać kontaktronem, oczywiście wyjątek stanowi lutowanie samego kontaktronu do plusa. Ostatnim krokiem jest zlutowanie wyjść przetwornicy do Arduino i reszty układu. Kilka uwag odnośnie tych czynności:
Po pierwsze, najlepiej będzie zrezygnować ze złącz goldpinowych lub innych, które już są w naszych układach, wylutować je (jak wyżej) i polutować wszystko na stałe kolorowymi przewodami:
Zrobiłem tak ze wszystkimi połączeniami prócz goldpinów do programowania Arduino i złącza między anteną RFID a czytnikiem. Dodatkowo usunąłem przy użyciu obcinaczek wszystkie wystające od spodu elementy połączeń lutowniczych, uzyskując gładką powierzchnię, którą łatwiej ułożyć na płaskiej płycie obudowy.
Po drugie, zwróćmy uwagę, że przy łączeniu się z czytnikiem korzystamy z magistrali UART – tej samej, którą programujemy nasze Arduino (póki korzystamy z bootloadera). W kodzie załączonym do tutoriala nie zdecydowałem się na korzystanie z biblioteki Software Serial z obawy (być może nieuzasadnionej) przed spadkiem stabilności połączenia, więc zlutowałem przewód linii RX Arduino do pary kątowych goldpinów, by dało się odłączyć czytnik przy użyciu zworki:
Można wtedy normalnie programować Arduino przez FTDI, tym łatwiej, że na płytce piny UART wyprowadzone są po dwa razy – raz na dłuższym, raz na krótszym boku. Gdy skończymy programować, zworka wraca na swoje miejsce.
Po trzecie, wróćmy na moment do naszego układu NRF24L01. O ile może on komunikować się z urządzeniem pracującym na napięciu 5V, to sam musi być zasilany z 3.3V. Zasilony “piątką” odpali, będzie się komunikował poprawnie, ale po jakimś czasie – godzinie, dniu, czy tygodniu – w końcu odmówi współpracy. Musimy zatem skorzystać z regulatora, na przykład LM1117-3.3. Ponieważ chciałem ograniczyć ilość drutów wewnątrz obudowy, wlutowałem go (brzydko!) bezpośrednio na płytkę:
Na taki wybieg pozwoliło mi kilka zbiegów okoliczności, sprowadzających się do tego, że LM1117 widziany od przodu ma układ wyprowadzeń GND i VOUT taki, jak NRF24L01, zgadza się też raster, a pin VIN regulatora ładnie odstaje z boku, umożliwiając podłączenie go do linii 5V reszty układu. Nie zapominajmy o kondensatorze na wyjściu regulatora (załapał się w kadr na zdjęciach wyżej) i o połączeniu masy regulatora z resztą układu. Identyczny zabieg zastosowałem przy module radia dla odbiornika. Oczywiście nic nie stoi na przeszkodzie, by wlutować regulator normalnie, przez kable. Można też zastosować inny model Arduino, na którym znajdziemy wbudowany regulator 3.3V – na przykład Nano.
Gdy już mamy zlutowane elementy układu, chcielibyśmy połączyć kablami moduł ładowarki blaszki styków ładowania. Sprawa jest dość prosta – jedna blaszka do wejścia 5V, druga do GND. Moje blaszki pochodziły ze zdemontowanego koszyka baterii AAA i sprawdzają się dobrze. Zdjęcie zmontowanego kursora z blaszkami w pokrywce jest na samej górze tego posta, ale polecam zostawić sobie klejenie ich na potem.
Do zakończenia prac nad kursorem brakuje nam już tylko nieco kleju epoksydowego. Rozrabiamy go i kleimy wszystkie elementy. Ewentualny wyjątek możemy zrobić dla modułu ładowarki, by w sytuacji awaryjnej móc łatwiej skorzystać z wbudowanego USB. Jeśli nasz silnik wibracyjny miał fabryczną warstwę samoprzylepną, zdecydowanie lepiej użyć jej, niż kleju. Kontaktron montujemy w miejscu najlepiej odpowiadającym wybranej przez nas lokalizacji magnesu – u mnie jest to górny skraj prawej ściany. Przy używaniu epoksydu zwróćmy uwagę na cienkie druciki, które łatwo mogą się uszkodzić i warto je całe zalać, w moim przypadku były to przewody przy antenie RFID:
Gdy to wszystko już za nami, możemy wkleić blaszki w pokrywkę, tak, by nie ubrudzić powierzchni mającej się stykać ze sprężynami. Mamy już gotowy kursor, który wystarczy poskręcać (z czym lepiej poczekać). Testujemy kontaktron i ładowanie, a potem przechodzimy dalej.
4. Elektronika – odbiornik
Tym razem naszym celem jest odtworzenie tego schematu:
Microswitch u góry schematu jest opcjonalny – pozwala na manualne odblokowanie tego, co system ma blokować, w przypadku zgubienia/uszkodzenia kursora. Można np. pociągnąć go na długim kablu do innego pomieszcenia lub gdzieś ukryć. Dalsza część tekstu pisana jest z założeniem, że go montujemy.
Tak, jak poprzednio, montujemy układ na próbę, programujemy Arduino, sprawdzamy, czy wszystko działa i komunikuje się poprawnie z kursorem. Domyślny kod zawiera obsługę ledów sygnałowych i przewiduje następujące zachowania:
- Dwa szybkie mrugnięcia obu ledów po włączeniu kursora;
- Mrugnięcie zielonego leda co kilka sekund, świadczące o poprawnej komunikacji z kursorem;
- Włączenie się żółtego leda na stałe oznacza niski poziom baterii w kursorze;
Jeśli wszystko się zgadza, lutujemy komponenty ze sobą, otrzymując wnętrzności naszego odbiornika, podobne do tego:
Następnie, jeżeli wszystko jest sprawne, musimy się zająć naszą obudową. Powinniśmy wykonać w niej otwory dla gniazda jack, dwóch ledów i trzech par przewodów (ładowanie, wyjścia z przekaźnika i microswitch). Przeciągamy przewody:
I układamy nasze elementy:
Pozostaje nam jeszcze zmontowanie sobie podstawki ładującej i pociągnięcie do niej kabli – tu mam nadzieję, że wyjaśni co nieco rysunek u góry posta. Ważne jest oczywiście, by plus na sprężynie w podstawce zgadzał się z plusem na blaszce w kursorze, tak samo z minusem. Niedaleko naszej podstawki powinien być magnes, który wyłączy kursor i przestawi w go w tryb ładowania.
Wracając do odbiornika, w zależności od tego, co chcemy, by nasz układ robił, możemy użyć wyjść NC i NO przekaźnika w dowolnej konfiguracji. To samo dotyczy napięć na stykach przekaźnika – w moim przypadku jest to 12V z tego samego zasilacza, który zasila 7805, choć wcale nie musi tak być. Poniżej przykład mojego połączenia odbiornika z elektrozamkiem:
Jeśli wszystko działa, dawkujemy obficie klej na gorąco i pozostaje nam…
5. Konfiguracja systemu
Ponieważ trudno przewidzieć, do czego prezentowany tutaj układ może się przydać, nie sposób zawrzeć w kodzie i konfiguracji sprzętowej wszystkich możliwych wariantów ustawień. Ten punkt będzie traktował o możliwych modyfikacjach domyślnego kodu.
Pierwsze, co nas interesuje, to oczywiście hasło. Jest ono zapisane w kodzie kursora jako tablica ciągów znaków – by poznać identyfikatory tagów, najprościej wgrać testowy kod używanego przez nas czytnika do Arduino, a następnie odczytać dane, które trafią na Serial Monitor. Gdy już mamy nasze tagi, wklejamy je do tablicy, zastępując ciągi “1234” i dodając kolejne. Potem zmieniamy stosownie definicję TAGS_N, wstawiając do niej nową liczbę tagów. Możemy jeszcze zmienić maksymalną długość tagu, próg powiadomienia o niskim napięciu baterii i przyporządkowanie pinów. W kodzie odbiornika możemy ustawić inny czas załączenia przekaźnika. Oczywiście oba programy można modyfikować dowolnie (są na licencji LGPL), ale opisane powyżej zmiany są bardziej konfiguracją programów, niż ich przerabianiem. Gdy wszystko działa już, jak powinno, przystępujemy do skręcania.
6. Gotowe
Wygląda na to, że dobrnęliśmy do końca procesu. Mam nadzieję, że mój tutorial pozwolił zrozumieć zawiłości projektu, czekam na pytania i komentarze. Mogły pojawić się jakieś literówki bądź grubsze niedopatrzenia, wytykajcie je śmiało, poprawię, gdy tylko odeśpię. A ponieważ jesteśmy w internecie, to muszą być gify, więc załączam jednego związanego z pewnym obrazkiem:
DISCLAIMER: Nie jestem autorem projektów ani wykonawcą drewnianych elementów (plansza, kursor, pokrywka) widocznych na zdjęciach – otrzymałem je gotowe od zleceniodawcy, jako że projekt realizowałem jako zlecenie komercyjne. Uprzedzając ew. pytania wyjaśniam, że posiadam zgodę zleceniodawcy na publikację powyższego tutoriala i szczegółów technicznych projektu.
Pomysł fajny. Ale sama plansza ouija jest trochę niebezpieczna =]
Plansza jest meega niebezpieczna to nigdy nie jest zabawa. Egzorcyści mają dużo roboty bo ludzie nie wiedzą co się dzieje tracą zdrowie wszystko się wali itp. Jeśli ktoś myśli że to zabawka jest głupcem jeśli nie wierzy w to że to jest niebezpieczne jest naiwny. Możesz być pewien że zmarnuje życie. Możesz mieć tak że nic się pozornie nie stanie i powiesz to ściema. Poczekaj miesiąc rok lub dziesięć i nie zorientujesz się co się dzieje jak wszystko Ci runie na głowe. Coś zaprosić jest łatwo ale łatwo nie odejdzie i nie po dobroci. Wierzysz w Boga? Tak wierze… Wierzysz w złe duchy ? eeeetam to nie prawda. Albo wierzysz we wszystko albo nie wierzysz. Nie ma znaczenia czy jesteś ateistą muzułmanem katolikiem jak zjesz trójącego grzyba umrzesz nie ważne co myślisz.
Nie myslałeś o tym, żeby np. Kursor był tagiem? Albo można by jeszcze prościej, pod literami kontaktrony, a w kursorze magnes. Nie potrzebaby wtedy akumulatora i kursor mógłby być znacznie mniejszy. Problem tylko z wibrowaniem, ale to można by rozwiązać elektromagnesami w planszy, które przyciągając i odpychając ten magnes że sporą częstotliwością spowodowałoby wrażenie wibracji.
dominik: System oparty na kontaktronach łatwiej oszukać :) Kursor można było zmniejszyć i tak, np. projektując własne PCB, ale takiej wielkości element już dostałem i nie musiałem się ograniczać.
Świetny projekt! Byłbym zainteresowany wykonaniem takiego na zamówienie. Poproszę o kontakt. erskonet@gmail.com
W którym escape roomie będzie można to przetestować? ;-)