Spisu treści:
Wideo: Czytnik RFID AVR/Arduino z kodem UART w C: 4 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:34
RFID to szaleństwo, które można znaleźć wszędzie – od systemów inwentaryzacyjnych po systemy identyfikatorów. Jeśli kiedykolwiek byłeś w domu towarowym i przechodziłeś przez te wyglądające na wykrywacze metali przedmioty w punktach wejścia/wyjścia, to widziałeś RFID. Istnieje kilka miejsc, w których można znaleźć dobre informacje na temat konfigurowania RFID, a ta instrukcja koncentruje się na instalacji czytnika Parallax RFID (Serial TTL) w odbiorniku AVR, z naciskiem na kod C potrzebny do odczytania wejścia szeregowego. Kod jest w C i nie używa żadnych zewnętrznych bibliotek. W rzeczywistości przemawia bezpośrednio do 2400 bodów bez użycia UART, synchronizując się z szybkością transmisji czytnika RFID i odczytując pin cyfrowy, do którego jest podłączony. Podekscytowany? Ja też.
Krok 1: Zdobądź towar
Będziesz potrzebować następującej listy części:
- Czytnik RFID (paralaksa #28140 39,99 USD)
- Znacznik RFID (paralaksa #32397 0,99 USD)
- AVR lub klon Arduino (jeśli korzystasz ze standardowego AVR, potrzebujesz również kondensatora max232, 5 x 1uF i złącza DE9)
- Płytka stykowa bez lutowania
Opcjonalny
- 4-pozycyjny nagłówek
- Drut
(i max232 itp. do przesyłania informacji o znaczniku) Możesz również podłączyć swój ulubiony ekran LCD zamiast wysyłać dane znacznika przez RS232.
Krok 2: Połącz części
Sprzętowa strona rzeczy jest dość prosta. Zamiast umieszczać czytnik RFID bezpośrednio w płytce prototypowej, zdecydowałem się na szybki kabel, aby móc nieco lepiej poruszać czytnikiem RFID. W tym celu po prostu odciąłem 4 pozycje z żeńskiej listwy gniazdowej, którą leżałem i przylutowałem na trzech przewodach. Taśma elektryczna uzupełniła złącze getta. Czytnik RFID posiada 4 złącza:
- Vcc
- WŁĄCZYĆ
- NA ZEWNĄTRZ
- Gnd
Jak się zapewne domyślasz, podłącz Vcc do +5V, a Gnd do masy. Ponieważ czytnik RFID zużywa tak dużo energii, możesz uderzać pinem ENABLE, aby go wyłączać i włączać w różnych odstępach czasu. Po prostu zdecydowałem się go włączyć. Ponieważ jest odwrócony, pociągnij go NISKI, aby go aktywować. Alternatywnie możesz podłączyć go do uziemienia. Podłączyłem go do PIND3, aby dać mi opcje włączania/wyłączania, jeśli zdecyduję. Pin OUT to miejsce, w którym czytnik wysyła swoje dane szeregowe po odczytaniu tagu. Podłączyłem go do PIND2. Uwaga, we Wszechświecie Paralaksy czerwony oznacza iść. Oznacza to, że zielona dioda LED oznacza, że urządzenie jest nieaktywne i bezczynne, a czerwona dioda LED oznacza, że urządzenie jest aktywne. *wzruszył ramionami* Idź rysunek.
Krok 3: Napisz kod
Aby odczytać dane z czytnika RFID, musisz wiedzieć, kiedy został przesłany tag, ściągnąć dane z portu szeregowego, a następnie gdzieś wysłać.
Format danych czytnika RFID
Czytnik Parallax RFID wysyła dane w stałym, lodowatym tempie 2400 bodów. Znacznik RFID ma 10 bajtów. Aby umożliwić wykrywanie/korektę błędów, ponieważ czytnik może zostać wyłączony z losowego szumu, 10-bajtowy RFID jest ograniczony przez sygnał startu i stopu. Wartownik początku to wysuw wiersza (0x0A), a wskaźnik zatrzymania to powrót karetki (0x0D). To wygląda tak:
[Start Sentinel |Bajt 1|Bajt 2|Bajt 3|Bajt 4|Bajt 5|Bajt 6|Bajt 7|Bajt 8|Bajt 9|Bajt 10| Zatrzymaj Strażnika]To są trzy podstawowe kroki.
Dowiedz się, kiedy tag został przesłany
Użyłem przerwania zmiany pinu w odbiorniku AVR, który powiadamia oprogramowanie układowe, że nastąpiła zmiana na monitorowanym pinie. Konfiguracja AVR do tego jest łatwa i wymaga ustawienia flagi, poinformowania MCU, który pin chcesz monitorować, oraz ustawienia globalnego bitu przerwania. Skonfiguruj PCINT
BSET(PCICR, PCIE2); // zmiana pinów rejestru kontrolnego przerwań pcie2 BSET(PCMSK2, PCINT18); // włącz przerwanie zmiany pinu dla PCINT18 (PD2) BSET(SREG, 7); // Ustaw SREG I-bitNapisz swoją procedurę obsługi przerwań Chcesz, aby ISR był krótki, więc w moim wektorze przerwań czytam cały bajt, bit po bicie, i przechowuję bajt w globalnej, nietrwałej tablicy znaków. Przy każdym przerwaniu wykonuję następujące czynności:
- Sprawdź, czy jestem na początku
- Wyśrodkuj czas na środkowym impulsie przy 2400 bodach (szybkość czytnika RFID)
- Pomiń bit początkowy i zatrzymaj się na środku następnego bitu
- Odczytaj każdy bit do liczby całkowitej bez znaku
- Kiedy mam 8 bitów, wstaw bajt do tablicy znaków
- Po zebraniu 12 bajtów poinformuj MCU, że tag został odczytany w celu wykrycia błędów.
Zmodyfikowałem kod SoftSerial od Mikala Harta, który zmodyfikował kod od Davida Mellisa dla eksperymentalnie określonych opóźnień w procedurach szeregowych.
Parsowanie wyjścia RS232
Procedura PCINT zawiera kod do odczytu wyjścia RS232 z czytnika RFID. Po uzyskaniu 12 bajtów (10-bajtowy RFID plus wartownicy) ustawiam bDataReady na 1 i pozwalam głównej pętli przetwarzać dane i wyświetlać je.
// to jest procedura obsługi przerwania ISR(PCINT2_vect){ if (BCHK(PIND, RFID_IN)) // Bit startu staje się niski return; uint8_t bit = 0; Dostrojone opóźnienie (CENTER_DELAY); // Wyśrodkuj bit startowy for (uint8_t x = 0; x < 8; x++) { TunedDelay(INTRABIT_DELAY); // pomiń trochę, bracie… if (BCHK(PIND, RFID_IN)) BSET(bit, x); w przeciwnym razie BCLR(bit, x); } TunedDelay (INTRABIT_DELAY); // pomiń bit stopu RFID_tag[rxIdx] = bit; ++rxIdx; if (rxIdx == 12) bDataReady = 1;}
Wyświetl swój tag
W main(), podczas pętli for(ever), sprawdzam, czy ustawiono bDataReady, sygnalizując, że cała struktura RFID została wysłana. Następnie sprawdzam, czy jest to prawidłowy tag (tj. znaki początku i końca to odpowiednio 0x0A i 0x0D), a jeśli tak, wysyłam go przez moje połączenie RS232.
for (;;){ if (bDataReady) {#ifdef _DEBUG_ USART_tx_S("Bajt początkowy: "); USART_tx_S(itoa(znacznik_RFID[0], &ibuff[0], 16)); ibuff[0] = 0; ibuff[1] = 0; USART_tx_S("\nBajt zatrzymania: "); USART_tx_S(itoa(RFID_tag[11], &ibuff[0], 16));#endif if (ValidTag()) { USART_tx_S("\nZnacznik RFID: "); for(uint8_t x = 1; x < 11; x++) { USART_tx_S(itoa(znacznik_RFID[x], ibuff, 16)); if (x != 10) USART_tx(&apos:&apos); } USART_tx_S("\n"); } rxIdx = 0; bDataReady = 0; }}
Krok 4: Kod i pożegnanie
Ta strona zawiera plik zip z odpowiednim kodem. Został napisany w AVR Studio 4.16. Jeśli używasz notatnika programisty, eclipse lub vi (lub czegoś innego), będziesz musiał skopiować zaufany plik Makefile do katalogu i dodać te pliki do linii źródłowej. Pamiętaj również, że czas dla sekcji odczytu szeregowego jest oparty na MCU 16 MHz. Jeśli pracujesz z inną częstotliwością zegara, będziesz musiał eksperymentalnie określić dostrojone opóźnienia, aby skoncentrować się na impulsach szybkości transmisji. Mam nadzieję, że ta instrukcja pomogła ci w jakiś sposób. Jeśli masz jakieś sugestie, jak można to ulepszyć, daj mi znać!
Zalecana:
Czytnik RFID oparty na ESP32 z wyświetlaczem dotykowym: 7 kroków
Czytnik RFID oparty na ESP32 z wyświetlaczem dotykowym: Na tej małej instrukcji pokażę, jak stworzyć prosty czytnik RFID z wyjściem TFT do montażu na ścianie za pomocą modułu ESP32 DEV KIT C, płytki czytnika opartej na RC-522 i zestawu AZ-Touch ESP. Możesz użyć tego czytnika do dostępu do drzwi lub alarmu intruza
Czytnik RFID Arduino z wyświetlaczem TFT: 7 kroków
Czytnik RFID Arduino z wyświetlaczem TFT: Pokażę ci w tej instrukcji, jak zaprojektować ładnie wyglądający czytnik RFID z wyświetlaczem TFT i do montażu na ścianie. Bardzo łatwo jest stworzyć ładnie wyglądający czytnik RFID z wyjściem TFT do montażu na ścianie za pomocą Arduino MKR do wyboru i nasz Ar
Demo 4x4 elektronicznej szachownicy/ z Arduino Mega + czytnik RFID + czujniki Halla: 7 kroków
Demo 4x4 elektronicznej szachownicy / z Arduino Mega + czytnik RFID + czujniki Halla: Cześć twórcy, jestem Tahir Miriyev, absolwent Uniwersytetu Technicznego Bliskiego Wschodu w Ankara/Turcja w 2018 roku. Specjalizowałem się w matematyce stosowanej, ale zawsze lubiłem robić rzeczy, zwłaszcza gdy wymagało to trochę pracy ręcznej z elektroniką, projektowaniem i programowaniem
Czytnik Arduino RFID UHF: 10 kroków
Czytnik Arduino RFID UHF: Celem tej instrukcji jest dostarczenie łatwego do zrozumienia przykładu połączenia mikrokontrolera z czytnikiem RFID UHF. Używany przez nas czytnik to Thinkify TR-265. Demonstracja składa się z trzech tagów UHF, każdy z unikalnym identyfikatorem
Czytnik Bluetooth OBD2: 3 kroki
Czytnik Bluetooth OBD2: Witaj, to mój pierwszy instruktaż i mam nadzieję, że jest łatwy do zrozumienia i możesz stworzyć własny. Jeśli masz jakieś pytania, skontaktuj się ze mną, a może pomogę. Postaram się, aby to było niezwykle proste do naśladowania dzięki temu