Programowany otwieracz do garażu, część trzecia

Wczoraj poczyniłem spore postępy w pisaniu oprogramowania strony Arduinowej tegoż rozwiązania – wygląda na to że jest gotowa. Oprogramowanie pozwala na:

  • rozpoznawanie wczytanych kodów i kart RFID i sprawdzanie czy jest to jeden z dozwolonych kodów/kart (zrobiłem sztuczne ograniczenie na 10 kodów i 10 kart, z czego jeden jest „specjalny” – można go używać nie tylko do otwierania i zamykania, ale i do dodawania i usuwania innych kodów/kart przez klawiaturę)
  • kontrolę kodów i kart przez złącze RS232 – można dodawać nowe kody i karty, sprawdzać jakie kody i karty są zaprogramowane, usuwać je, zmieniać długość kodu, zapisywać konfigurację do EEPROM i odczytywać ją z EEPROM

Dodatkowo dokonałem integracji tego rozwiązania z przekaźnikami i teraz mogę sterować ich otwieraniem i zamykaniem. Nadal nie mam jednak rozwiązanego problemu badania stanu drzwi (otwarte/zamknięte/gdzieś pomiędzy). Myślę o jakimś hybrydowym rozwiązaniu – czujniku kontaktronowym na szczycie drzwi (dawał by mi sygnał że są całkowicie zamknięte) oraz dwóch ultradźwiękowych czujnikach odległości zamocowanym na suficie – informowały by on mnie że drzwi są całkowicie lub częściowo otwarte + pozwalały by na zgrubne określenie w jakim kierunku drzwi się poruszają. Nie ma za bardzo jak fizycznie zainstalować kontaktronowego czujnika pełnego otwarcia drzwi, więc to rozwiązanie odpada. Ultradźwiękowe czujniki odległości są bardzo tanie i łatwe do obsługi za pomocą Arduino. Ich dodatkową zaletą było by wykrywanie czy garaż jest pusty, czy coś w nim stoi (samochód). 

Przykładowe zdjęcie czyjegoś garażu i mój pomysł na montaż czujników
Jednak po małym grzebaniu w elektronice otwieracza drzwi do garażu mam w końcu pomysł jak kontrolować jego światło oraz otwieranie/zamykanie.Okazuje się że do guziczka sterującymi trzema funkcjami idą tylko dwa kabelki – podejrzewałem że będzie tam jakaś elektronika, protokół itp. ale okazuje się że całość jest bardzo banalnie rozwiązana. Zwarcie tych dwóch kabelków powoduje że drzwi się otwierają/zamykają (co dokładnie zrobią to nie wiadomo, zawsze ruszają w przeciwnym kierunku niż w czasie poprzedniego zwarcia). Podpięcie pod nie kondensatora 1 mikrofarad  powoduje włączenie/wyłączenie światła. A podpięcie kondensatora 22 mikrofarady powoduje włączenie/wyłączenie funkcji blokady otwierania drzwi sygnałem radiowym. To ostatnie jest zbędne. 
W związku z tym plan akcji jest taki że główny kontroler będzie na Arduino. Jego zadaniem będzie obsługa klawiatury i kart, sterowanie światłem i drzwiami, wykrywanie stanu drzwi no i komunikacja po RS-232 ze światem zewnętrznym. Natomiast Rapsbery Pi będzie wyłącznie zajmowało się obsługą internetu i zamianą protokołu REST na RS-232 – gadanie z Arduino. Z uwagi na to że Pi obecnie ma mało zadań myślę że zamiast używać kosztownego Pi 2 Model B, kupię Pi A+ za jakieś grosze i użyje tenże do całego projektu. 256 MB RAM wystarczy na odpalenie jakiejś prostej aplikacji w Java wraz z Jetty. 
Jedyna niejasność jaka mi jeszcze została to sposób połączenia Pi i Arduino. Mam dwie opcje – jedną za pomocą kabelka USB – prosto i skutecznie + rozwiązuje to problem zasilania Arduino. Niestety jeżeli zdecyduję się na użycie Pi model A+, to to rozwiązanie odpada. A+ ma tylko jeden port USB, a ja potrzebuję go do Wi-Fi.

Drugą opcją jest użycie pinów 14 i 15 z PI i 0 oraz 1 z Arduino. Oczywiście problemem jest różnica napięć. Można to obejść na dwa sposoby – jednym z nich jest użycie specjalnego, 3.3V Arduino – są takie, ale jako że już mam 5V, to nie mam ochoty kupować następnego. Więc trzeba zastosować adapter – znalazłem takowy bardzo tanio, oparty jest o scalak TXB0104 i potrafi automatycznie wykryć kierunek transmisji. Ma on cztery bity = dwa z nich przydadzą się do komunikacji, a pozostałe dwa planuję użyć do zaimplementowania opcji watchdog’a = Arduino będzie oczekiwało od Pi wiadomości „P” co jakiś czas i jeżeli takowa nie przyjdzie przez ileś tam sekund, to Arduino zresetuje Pi. I vice versa – jeżeli Pi wyśle wiadomość „P” do Arduino i nie dostanie odpowiedzi przez jakiś czas, to ono zresetuje Arduino. W ten sposób oba komputery będą się trzymały „w szachu” 😉

Marek Cyzio Opublikowane przez: