Skip to content

System alarmowy oparty na czytniku kart RDM6300, RPi i czujniku ruchu

Notifications You must be signed in to change notification settings

JSiwy/raspberry_rdm6300_rfid_alarm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 

Repository files navigation

RDM6300 rfid alarm

Python 3.9.2

System oparty o RPi 3b+, czytnik rfid 125khz rdm6300, czujnik ruchu PIR HC-SR501, przekaźnik oraz posiadaną wsześniej syrenę z modulatorem. Całość zasilana jest z 12 voltowego akumulatora z przetwornicą do zasilania RPi

Table of contents

Wykorzystane elementy

Z założenia miał być to prosty projekt. Składa się on z:

Element Szczegóły Przykładoy artykuł
Mikrokomputer Raspberry Pi 3B+ https://cutt.ly/QwBooHAO
Czytnik kart 125kHz RDM6300 https://cutt.ly/mwBoo0Vw
Czujnik ruchu PIR HC-SR501 https://cutt.ly/UwBoo5fg
Przekaźnik napięcie 3.3V https://cutt.ly/uwBopiY6
Dioda LED Opcjonalne https://cutt.ly/fwBomeOj
Rezystor 2x 1kΩ https://cutt.ly/GwBopXaX
Syrena Opcjonalne Jakakolwiek syrena 12V

Powyższe linki nie są linkami sponsorowanymi a wskazują tylko na przykładowy egzemplarz części zastosowanej w projekcie

Budowa

W trakcie budowy pierwszej fazy posłużyłem sie poradnikiem:

https://mad-tinkerer-me.medium.com/rfid-with-raspberry-pi-on-the-cheap-766ae0b6c97e

Autror tego poradnika napisał także bibliotekę, która została wykorzystana w tym projekcie:

https://github.com/mad-tinkerer/python-rdm6300

  1. Podłączenie czytnika

uklad testowy

Schemat podłączanie czytnika do RPi

Pamiętaj o użyciu dzielnika napięcia, inaczej zostaną uszkodzone piny GPIO na raspberry

  1. Podłączenie czunika ruchu

    1. Pin GND połączyc z masą RPi
    2. Pin VCC połączyć z magistralą 5v
    3. Pin OUT podłączyć do 26 pinu RPi
  2. Podłączenie przekaźnika

    1. Podłączyć pin "+" do pinu pinu 3.3v
    2. Podłączyc pin "-" do masy
    3. Podłączyc pin "S" do w naszym przypadku pinu 18
  3. Podłączyc diode sygnalizującą

    1. Pin "-" do masy
    2. Pin "R" do pinu 38
    3. Pin "G" do pinu 40

Powstawanie

(Back to top)

Od pojawienia się pomysł wielkorotnie ewoluował. Zaczęlo się od prostego proojektu ze switch case opartym o czytnik rdm6300 i arduino nano.

  1. Schemat pierwszego zamysłu: alt text Zakładał on zasilenie arduino przez pin vin oraz komunikacje za pomoca portu szeregowego przy użyciu skrętki, dodatkowo przewodem tym miało lecieć zasilanie syreny

  2. Po analizie szkicu doszliśmy do wniosku iż plan jest nie optymalny oraz zaczęliśmy analizowac dodatkowe funkcje które mogły by byc przydatne: alt text Na tym etapie rozważaliśmy użycie NodeMCU by zastąpić arduino oraz zyskać komunikacje bezprzewodową dzięki modułowi ESP8266

  3. Nastepnie biąrąc pod uwage oczekiwane rezulataty zdecydowaliśmy o przejsciu na wykorszystanie mikrokomputera raspberry PI w wersji posiadanej (3b+): alt text Model RPi użyty w projekcie

  4. Po dostosowaniu projektu całość została złożona w jeden układ: alt text Złożony jeszcze prototypowo lecz w pełni układ alarmu alt text Schemat ideowy połączeń

Schemat działania

(Back to top)

  1. Czujnik ruchu wykrywa ruch
  2. Program odpytuje serwer o to czy alarm jest uzbrojony
  3. Jeśli alarm jest uzborjony uruchamia się czytnik kart
  4. W przeciwnym przypadku przekaźnik od syrwny jesy wyłączany
  5. Jeśli kartę przyłożono, zczytane ID jest wysyłane na serwer i walidowane
  6. W przypadku pozytywnej weryfikacji program zasypia na 2 minuty, po ich upływie wydaje dźwięk i czeka jescze 30s przed ponowym sprawdzeniem stanu alarmu na serwerze
  7. Jeśli walidacja nie przeszła pomyślnie alarm uruchamia sie na 30s
  8. Program działa w pętli

W trakcie procesu powstawanie napotkałem całkiem sporo problemów

Problemy z odczytem rfid

uklad testowy

Zbudowany układ do testu odczytów

Uruchomienie czytnika na RPi miało być bajecznie proste, ot pobierasz bibliotekę, uruchamiasz przykład i działa. Lecz nie tym razem, w konsoli wita nas komunikat:

WARNING:root:[/dev/ttyS0] got trash resetting rfid read to assume we are at the beginning

uklad testowy

Komunikat błędu wyświetlany w konsoli

Poszukiwanie błędów rozpocząłem od sprawdzenia baud-u portu szeregowego. Zgodnie z dokumentacją modułu rdm6300 baud to 9600. Po sprawdzeniu biblioteki – ślepy trop, biblioteka sama ustawia prawidłową częstotliwość.

  • Funkcja z biblioteki rdm6300

    alt text

  • Po kilku próbach sukces – udaje się, jest odczyt. Niestety działa raz: alt text Pojedyńczy prawidłowy odczyt w morzu błędów

Kolejny etap to dalsza analiza biblioteki. Wynika z niej, że oczekuje ona na odczytanie 0x02 – oznacza ono początek ID karty i 0x03, które oznacza koniec transmisji. Wszystko co zostało odebrane pomiędzy zamieniane jest na znaki zgodnie z tablicą ASCII. Skoro więc otrzymujemy błąd oznacza to, że odczytujemy coś co nie pasuje do patternu biblioteki.

  • Aby podejrzeć co odbieramy użyjemy narzędzia minicom (pip install minicom) z poleceniem

    minicom -b 9600 -H -o -D /dev/ttyS0

  • Jeden z odczytów alt text Zawartość błędnie odczytana przez czytnik

  • Inny odczyt alt text Inna treść, nadal nie to czego szukamy

  • Prawidłowy odczyt udany za którymś razem: alt text Sukces, mamy to czego poszukiwaliśmy

Przy dalszej obserwacji okazało się, że skrypt działa poprawnie tylko i wyłącznie, gdy na raspberry świeci się czerwona dioda pwr:

uklad testowy

Zaznaczona dioda, która musi się świecić

Rozwiązaniem okazało sie przełączenie zasilania na zasilacz podający na wyjściu 5.35v, lecz było to nie w pełni poprawne rozwiązanie. Prawdziwą przyczyną były spadki napięcia na przewodzie zasilającym, dopiero na przewodzie o większym przekroju raspberry ruszyło przy prawidłowym napięciu 5v

Problem z sprawedzeniem na serwerze odczytanych kart rfid

  1. Po przyłożeniu karty do czytnika odczytany powienen zostac identyfikator (tag) karty alt text Prawidłowo odczytany i zdekodowany tag karty

  2. Odczytany tag powinien zostac wysłany zapytaniem POST do serwera i na podstawie kodu odpowiedzi powinna zostac podjęta decyzja o dalszym postępowaniu

  • Kod 204 - Użytkownik uwierzetelniony w systemie
  • Kod 422 - Użytkownik nie znajduje się w bazie danych, błąd
  1. W naszym przypadku odpowiedzią był kod 415

    415 Unsupported Media Type

uklad testowy

Błąd zwracany przez serwer
Oznacza on, że serwer odmawia przyjęcia żądania, ponieważ format ładunku jest w nieobsługiwanym formacie.
Po krótkich poszukiwaniach znalazłem informację, że:

Problem z formatem może wynikać ze wskazanego Content-Type lub Content-Encoding żądania lub w wyniku bezpośredniej inspekcji danych.

  • Po wypisaniu dokładniejszej informacji pokazuje się taki zapis: alt text Zapis błędu zwracanego przez serwer

    Na nasze szczęście pokazuje on główną przyczyne błędu i rozwiązanie, trzbe zmienić header content-type z application/json na application/ld+json.

  • Po zmianie nagłówka zapytanie zaczęło działać. alt text Prawidłowa odpowiedź uzyskana z serwera

Problem z zasterowaniem przekaźnika

Dalszy rozwój

(Back to top)

W planach jest dalszy rozwój projektu

Rozbudowa funkcjonalności serwera

  • Dodanie logów osób autoryzowanych
  • Wysyłanie maila w momencie błędnej autoryzacji/wywołania alarmu

Contributing

(Back to top)

Autor:

  • BOT_Siwy

Backend:

  • paffcio

Wsparcie merytoryczne i debugowanie:

  • rbml
  • mz

About

System alarmowy oparty na czytniku kart RDM6300, RPi i czujniku ruchu

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages