Czytnik RFID 125 kHz
Od dłuższego czasu w ofercie Nettigo jest czytnik kart RFID z interfejsem UART. Co to znaczy?
System RFID w uproszczeniu składa się z dwóch elementów – czytnika i tokenów. Token to fizyczna rzecz, mająca w sobie trochę elektroniki. Każdy token ma swój unikalny numer. Gdy token zostanie zbliżony do drugiego elementu – czytnika, ten będzie w stanie odczytać ten numer.
Jakie ma to zalety? Po pierwsze – token nie musi mieć swojego zasilania (wbudowanej baterii). Może być mały, lekki i odporny na wodę. Po drugie – nie jest potrzebny fizyczny kontakt tokena i czytnika – wystarczy token zbliżyć na kilka, kilkanaście centymetrów aby go odczytać.
Na rynku dostępnych jest kilka standardów, jeden z pierwszych to standard działający na częstotliwości 125 kHz. Urządzenia i tokeny do niego są proste a co za tym idzie niedrogie.
Jak skorzystać z RFID?
Pokażę teraz jak wygląda odczytywanie tokenów. Zestaw RFID sprzedawany przez Nettigo składa się z czytnika oraz 5 tokenów – 2 kart oraz trzech breloczków. Przyjrzyjmy się jednemu.

Jest na nim numer. Ale to nie numer, który zostanie odczytany przez czytnik. Dlaczego? Gdyby numer nadrukowany na tokenie oraz ten 'w środku’ były takie same, łatwo byłoby sklonować token, a tak aby poznać jego numer trzeba go odczytać – nie jest to jakiś duży problem, ale zawsze utrudnienie.
Teraz – jak go odczytać. Przyjrzyjmy się czytnikowi. Jak napisałem ma interfejs UART, czyli można go podłączyć do Arduino korzystając z portu szeregowego, lub do komputera za pomocą konwertera USB/Serial.
Czytnik ma trzy złącza: 2, 3, i 5 pinów. Złącze dwu-pinowe jest przeznaczone na antenę dołączoną do zestawu. Nie ma znaczenia jak ją podłączymy. Pozostałe dwa złącza pozwoli opisać to zdjęcie:

Zaznaczyłem na czerwono piny nr 1 i tak złącze trzy-pinowe:
- LED – podłączenie dla diody sygnalizującą pracę czytnika (świeci ciągle gaśnie na chwilę w momencie odczytania tokena)
- +5V – wyprowadzone napięcie zasilania
- GND – masa
Jak widać rola jego jest informacyjna – można podłączyć diodę, która będzie ludziom sygnalizować że został odczytany token.
Złącze 5-cio pinowe to jest to co nam jest potrzebne aby uzyskać informację od czytnika:
- TX – czyli to co odczytuje czytnik
- RX – dane wysyłane do czytnika (ten model nie jest konfigurowalny, więc nie ma pożytku z tego)
- NC – nie używany
- GND – masa
- +5V – zasilanie
Zademonstruję podłączenie czytnika do komputera z wykorzystaniem konwertera USB/Serial – FTDI Friend. Podłączamy TX (pin 1) czytnika do RX na FTDI Friend, masę i zasilanie 5V – i gotowe:

Po wsadzeniu kabla USB do komputera i podpięciu monitora portu szeregowego (Hyperterminal na Windows, gtkterm lub minicom na Linuxie, lub monitor z Arduino IDE, parametry portu 9600,8,N,1) dostaniemy np taki ciąg:
0041DEF392FE
Najpierw – bajt o wartości 0x02 – symbol startu numeru karty, potem 5 bajtów zapisanych w ASCI w kodowaniu szesnastkowym (tutaj to 00-41-DE-F3-92), dwa znaki sumy kontrolnej (XOR 5 bajtów, tutaj to FE), bajt o wartości 0x03 – znak końca transmisji.
W dużym skrócie – to tyle. Podłączyć do Arduino można 'tak samo’. Czyli podłączamy zasilanie i masę, oraz RX na Arduino (D0) z TX na czytniku i korzystając z Serial.read() można odczytywać dane.
Cały układ podłączony via FTDI Friend wygląda tak:

„LED – podłączenie dla diody sygnalizującą pracę czytnika (świeci ciągle gaśnie na chwilę w momencie odczytania tokena)” – to przecież zależy od podłączenia ;) Można krótszą nóżkę podpiąć do pinu LED, a dłuższą do +5V i będzie świecić wyłącznie w momencie odczytywania. Ciekawe jest też połączenie dwóch diod – np. czerwonej i zielonej:) Zieloną dłuższą nogą do 5V, a czerwnoną krótszą nogą do GND. Pozostałe, obydwie nogi do pinu LED ;)
Generalnie świetnie. CZy można dostać linki lub kawałek kodu z opisem.Na tym blogu jest świetnie wytłumaczone, gdyby ktoś pokusił się o rozwinięcie tematu RFID tak jak w tematach z LED czy Tranzystor
Pytanie za 100 punktów: jak obliczyć ID tokena na podstawie numeru zewnętrznego (nadrukowanego na karcie badz breloku)? Czy te dane nie są w ogole powiazane? Chyba powinny byc…
Właśnie chyba nie powinno być związku. Gdyby był, to wystarczy odczytać numer na karcie i można by zrobić jej kopię. Taka chyba jest tego idea. Co prawda tokeny 125 kHz to żadne bezpieczeństwo…
@netmaniac, dzieki za odp. W takim razie pytanie za 50 punktów: to po co są te numery nadrukowane na tag?
@Marek
A po to, że możesz skojarzyć w jakimś systemie numer na karcie z odczytanym przez czytnik – dzięki temu można się zorientować która karta jest która, bez konieczności ponownego odczytu przez czytnik.
@netmaniac, ok rozumiem – rzeczywiscie jest to jakis pomysl. Mam jeszcze jedno pytanko: załozmy, ze mam czujnik odleglosci przez ardu i rfid przez ardu i teraz, jesli odleglosc >10cm to 'wygas’ czujnik a jesli <10 to uaktywnij. Jest cos takiego mozliwe sprzetowo czy tylko ewentualnie softwareowo? Tzn, ze czytnik bedzie caly czas czytał, caly czas aktywny a jedynie w kodzie wylaczone zostanie zczytywanie tych danych?
w jakich poziomach napięć to pracuje? bo przy zasilaniu 5v po podłączeniu miernika do TX wychodzi 3,36v, po odczytaniu rfida na chwilę zanika. czy mogę uznać, że to chodzi na 3,3v czy gdzieś popełniam błąd? Pytam wcześniej bo nie chcę stosować konwertera poziomów napięć a mój mikrokontroler toleruje właśnie tylko 3,3?
@kamilos
W dokumentacji jest tylko: „TTL Electricity Level RS232 format” więc stawiałbym jednak, że to 5V.
Pomiar był zrobiony zwykłym multimetrem? Jeżeli tak to wartość jest zapewne zupełnie przekłamana, przez to że nie jest to stały sygnał tylko transmisja danych. Multimetr nie da rady tego złapać, musi to być coś jak oscyloskop, żeby można zobaczyć przebieg i zmierzyć napięcia chwilowe.
Witam
A jak podłączyć do jednego arduino dwa lub więcej takich czytników z możliwością rozróżnienia do którego został przyłożony token/karta ?
Tak aby zrobić np kontrolę wejścia ze sterowaniem elektrozaczepów. Jeden czytnik na wejście a drugi na wyjście.
Pozdrawiam
LaToZ
Najłatwiej chyba użyć do tego Arduino MEGA lub DUE. One mają dodatkowe 3 sprzętowe porty szeregowe.
W zwykłych Arduino jest biblioteka SoftwareSerial. http://arduino.cc/en/Reference/SoftwareSerial
Ma ona jedną wadę. Może odbierać tylko z jednego wejścia szeregowego na raz. Wejście wybiera się metodą listen().
Podobno w tym module wyjście LED przechodzi w stan niski, kiedy odczyta kartę, na chwile przed wysłaniem danych.
Mógłbyś zrobić eksperyment w którym podłączasz wyjścia LED do wejścia cyfrowego i tam gdzie pojawi się stan niski, aktywujesz odpowiedni SoftwareSerial dla danego czujnika. Oczywiście każdy SoftwareSerial musi mieć przypisane inne piny do komunikacji szeregowej.
Rozumiem, że za odczyt tokenów odpowiada antena?
Czy dałoby się podłączyć kilka anten do tego układu i rozróżniać do której anteny został przyłożony token.
Rożek: Tu jest blog na którym autor przez kilka miesięcy próbuje zbudować własny czytnik RFID z użyciem Teensy 2.0 (to taka bliźniacza platforma do Arduino).
http://everhack.blog.atxhackerspace.org/2011/07/26/avr-rfid-reader-part-1/
Sporo wyjaśnia odnośnie jego działania. Może to ci pozwoli zrobić rozwiązanie pasujące do twoich potrzeb.
@rozek,@sprae
Ale w sumie hack z kilkoma antenami może być ciekawy – wziąć multiplekser http://nettigo.pl/parts/304 lub http://nettigo.pl/products/102 i podłączyć anteny. 74HC4067 przepuszcza sygnały analogowe i może dałoby radę ;)
Czy można zrobić tak żeby po przyłożeniu karty urządzenie wyłańczało się na sekunde/ dwie sekundy a następnie włańczało ?
Prosto pewnie nie (tzn można zrobić jakiś układ odcinający zasilanie), ale nie prościej ignorować odczyty z czytnika przez 2 sek od pierwszego?
Witam
Potrzebuje w napisaniu/znalezieniu programu który ma działać następująco:
-Przykładam token zapala się Dioda1 na 10s
-Przykładam jeszcze raz gaśnie Dioda1 zapala się dioda2 na 10s
(jeśli by dało rade to jeśli nie przyłożę drugi raz tokenu, automatycznie po 30 s zgaśnie dioda1 i zapali się dioda2 na 10s)
Błagam o pomoc bo meczę się z tym już kilka dni i nie mogę dojść do ładu.