Inhaltsverzeichnis:
- Schritt 1: Holen Sie sich die Ware
- Schritt 2: Verbinden Sie die Teile
- Schritt 3: Schreiben Sie den Code
- Schritt 4: Code und Abschied
Video: AVR/Arduino RFID-Reader mit UART-Code in C - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:23
RFID ist der Trend und überall zu finden – von Inventarsystemen bis hin zu Ausweis-ID-Systemen. Wenn Sie schon einmal in einem Kaufhaus waren und an den Ein-/Ausgängen durch diese Metalldetektoren gelaufen sind, dann haben Sie RFID gesehen. Es gibt mehrere Orte, um gute Informationen zum Einrichten von RFID zu finden, und diese Anleitung konzentriert sich auf die Installation des Parallax RFID-Lesers (serielles TTL) auf einem AVR, mit Schwerpunkt auf dem C-Code, der zum Lesen der seriellen Eingabe erforderlich ist. Der Code ist in C und verwendet keine externen Bibliotheken. Tatsächlich spricht es 2400 Baud direkt ohne die Verwendung eines UART, indem es sich mit der Baudrate des RFID-Lesegeräts synchronisiert und den digitalen Pin liest, mit dem er verbunden ist. Aufgeregt? Ich auch.
Schritt 1: Holen Sie sich die Ware
Sie benötigen die folgende Teileliste:
- RFID-Lesegerät (Parallaxe #28140 39,99 $)
- RFID-Tag (Parallaxe #32397 0,99 €)
- AVR- oder Arduino-Klon (wenn Sie einen Standard-AVR verwenden, benötigen Sie auch einen max232, 5 x 1uF-Kondensatoren und einen DE9-Anschluss)
- Lötfreies Steckbrett
Optional
- Kopfzeile mit 4 Positionen
- Kabel
(und das max232 usw. für die Kommunikation der Tag-Informationen) Sie können auch Ihren bevorzugten LCD-Bildschirm anschließen, anstatt Tag-Daten über RS232 zu senden.
Schritt 2: Verbinden Sie die Teile
Die Hardwareseite der Dinge ist ziemlich einfach. Anstatt meinen RFID-Leser direkt in mein Steckbrett zu stecken, entschied ich mich für ein schnelles Kabel, damit ich den RFID-Leser etwas besser bewegen konnte. Dafür habe ich einfach 4 Positionen von einer Buchsenleiste, die ich herumliegen hatte, abgeschnitten und an drei Drähten angelötet. Isolierband vervollständigte den Ghetto-Anschluss. Der RFID-Leser hat 4 Anschlüsse:
- Vcc
- AKTIVIEREN
- AUS
- Gnd
Wie Sie es wahrscheinlich erraten haben, verbinden Sie Vcc mit +5V und Gnd mit Masse. Da der RFID-Leser so viel Strom verbraucht, können Sie den ENABLE-Pin anschlagen, um ihn in verschiedenen Intervallen aus- und wieder einzuschalten. Ich habe mich einfach dafür entschieden, es beizubehalten. Da es invertiert ist, ziehen Sie es LOW, um es zu aktivieren. Alternativ können Sie es mit Masse verbinden. Ich habe es mit PIND3 verbunden, um mir Optionen zum Aktivieren / Deaktivieren zu geben, wenn ich mich dafür entscheide. Am OUT-Pin sendet der Reader seine seriellen Daten, nachdem er ein Tag gelesen hat. Ich habe es mit PIND2 verbunden. Beachten Sie, dass im Parallax Universe Rot bedeutet, dass es geht. Das heißt, eine grüne LED bedeutet, dass das Gerät inaktiv und inaktiv ist, während eine rote LED bedeutet, dass das Gerät aktiv ist. *achselzucken* Denk mal.
Schritt 3: Schreiben Sie den Code
Um die Daten vom RFID-Lesegerät zu lesen, müssen Sie wissen, wann ein Tag gesendet wurde, die Daten von der seriellen Schnittstelle abziehen und dann irgendwohin senden.
Datenformat des RFID-Lesegeräts
Der Parallax RFID-Leser sendet Daten mit einem festen, eiszeitlichen Tempo von 2400 Baud. Ein RFID-Tag ist 10 Byte groß. Um eine Fehlererkennung/-korrektur zu ermöglichen, da das Lesegerät durch zufälliges Rauschen ausgelöst werden könnte, wird das 10-Byte-RFID durch einen Start- und Stopp-Wächter begrenzt. Der Start-Wächter ist Zeilenvorschub (0x0A) und der Stopp-Wächter ist Wagenrücklauf (0x0D). Es sieht aus wie das:
[Start Sentinel |Byte 1|Byte 2|Byte 3|Byte 4|Byte 5|Byte 6|Byte 7|Byte 8|Byte 9|Byte 10| Wächter stoppen]Dies sind die drei wichtigsten Schritte.
Wissen, wann ein Tag gesendet wurde
Ich habe einen Pin Change Interrupt auf dem AVR verwendet, der die Firmware benachrichtigt, dass eine Änderung an einem überwachten Pin aufgetreten ist. Die Konfiguration des AVR dafür ist einfach und erfordert das Setzen des Flags, die Angabe des zu überwachenden Pins der MCU und das Setzen des globalen Interrupt-Bits. PCINT konfigurieren
BSET(PCICR, PCIE2); // Pinänderungs-Interrupt-Steuerregister pcie2 BSET (PCMSK2, PCINT18); // Pin-Wechsel-Interrupt für PCINT18 (PD2) aktivieren BSET (SREG, 7); // Setze SREG I-BitSchreiben Sie Ihre Interrupt-Service-Routine Sie möchten Ihre ISR kurz halten, also lese ich in meinem Interrupt-Vektor das gesamte Byte, Bit für Bit, und speichere das Byte in einem globalen flüchtigen Zeichenarray. Bei jedem Interrupt mache ich folgendes:
- Überprüfen Sie, ob ich am Anfang stehe
- Zentrieren Sie das Timing auf den mittleren Puls bei 2400 Baud (die Geschwindigkeit des RFID-Lesers)
- Überspringe das Startbit und pausiere bis zur Mitte des nächsten Bits
- Lies jedes Bit in eine vorzeichenlose ganze Zahl ein
- Wenn ich 8 Bit habe, füge das Byte in ein Zeichenarray ein
- Wenn ich 12 Byte gesammelt habe, teilen Sie der MCU mit, dass das Tag zur Fehlererkennung gelesen wurde.
Ich habe SoftSerial-Code von Mikal Hart modifiziert, der Code von David Mellis für die experimentell ermittelten Verzögerungen in den seriellen Routinen modifiziert hat.
RS232-Ausgang parsen
Die PCINT-Routine enthält den Code zum Lesen der RS232-Ausgabe des RFID-Readers. Wenn ich 12 Bytes (10-Byte-RFID plus Sentinels) habe, setze ich bDataReady auf 1 und lasse die Hauptschleife die Daten verarbeiten und anzeigen.
// Dies ist der Interrupt-HandlerISR (PCINT2_vect) { if (BCHK (PIND, RFID_IN)) // Startbit geht auf Low Return; uint8_t-Bit = 0; TunedDelay(CENTER_DELAY); // Auf Startbit zentrieren für (uint8_t x = 0; x < 8; x++) { TunedDelay(INTRABIT_DELAY); // ein bisschen überspringen, Bruder… if (BCHK(PIND, RFID_IN)) BSET(bit, x); sonst BCLR(bit, x); } TunedDelay(INTRABIT_DELAY); // Stoppbit überspringen RFID_tag[rxIdx] = bit; ++rxIdx; if (rxIdx == 12) bDataReady = 1;}
Zeigen Sie Ihr Tag an
In main() überprüfe ich während der for(ever)-Schleife, ob bDataReady gesetzt wurde, was signalisiert, dass die gesamte RFID-Struktur gesendet wurde. Ich überprüfe dann, ob es ein gültiges Tag ist (dh Start- und Stoppzeichen sind 0x0A bzw. 0x0D), und wenn ja, sende ich es über meine RS232-Verbindung aus.
for (;;){ if (bDataReady) {#ifdef _DEBUG_ USART_tx_S("Startbyte: "); USART_tx_S(itoa(RFID_tag[0], &ibuff[0], 16)); ibuff[0] = 0; ibuff[1] = 0; USART_tx_S("\nStopbyte: "); USART_tx_S(itoa(RFID_tag[11], &ibuff[0], 16));#endif if (ValidTag()) { USART_tx_S("\nRFID-Tag: "); for(uint8_t x = 1; x < 11; x++) { USART_tx_S(itoa(RFID_tag[x], ibuff, 16)); if (x != 10) USART_tx(&apos:&apos); } USART_tx_S("\n"); } rxIdx = 0; bDataReady = 0; }}
Schritt 4: Code und Abschied
Diese Seite enthält eine ZIP-Datei mit dem entsprechenden Code. Es wurde in AVR Studio 4.16 geschrieben. Wenn Sie den Editor des Programmierers, Eclipse oder vi (oder etwas anderes) verwenden, müssen Sie ein vertrauenswürdiges Makefile in das Verzeichnis kopieren und diese Dateien zur Quellzeile hinzufügen. Beachten Sie auch, dass das Timing für den seriellen Leseabschnitt auf a basiert 16MHz-MCU. Wenn Sie mit einer anderen Taktfrequenz laufen, müssen Sie experimentell die abgestimmten Verzögerungen bestimmen, um die Baudratenimpulse zu zentrieren. Ich hoffe, dass diese Anleitung Ihnen in irgendeiner Weise geholfen hat. Wenn Sie Verbesserungsvorschläge haben, zögern Sie nicht, mich zu informieren!
Empfohlen:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Schnittstellentastatur mit Arduino. [Einzigartige Methode]: 7 Schritte (mit Bildern)
Schnittstellentastatur mit Arduino. [Einzigartige Methode]: Hallo, und willkommen zu meinem ersten instructable! :) In diesem instructables möchte ich eine fantastische Bibliothek für die Schnittstelle der Tastatur mit Arduino teilen - 'Password Library' einschließlich 'Keypad Library'. Diese Bibliothek enthält die besten Funktionen, die wir wi
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Erfahren Sie, wie Sie mit PROCESSING eine Echtzeitschnittstelle in ARDUINO erstellen !!!!): 5 Schritte (mit Bildern)
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Learn How to Make a Real Time Interface in ARDUINO Using PROCESSING !!!!): Ein SCARA-Roboter ist eine sehr beliebte Maschine in der Industriewelt. Der Name steht sowohl für Selective Compliant Assembly Robot Arm als auch für Selective Compliant Articulated Robot Arm. Es ist im Grunde ein Roboter mit drei Freiheitsgraden, da er die ersten beiden Displ
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: 7 Schritte (mit Bildern)
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: Update: 7. April 2019 - Rev 3 von lp_BLE_TempHumidity, fügt Datums- / Zeitdiagramme mit pfodApp V3.0.362+ hinzu und automatische Drosselung beim Senden von DatenUpdate: 24. März 2019 – Rev 2 von lp_BLE_TempHumidity, fügt weitere Plotoptionen hinzu und i2c_ClearBus, fügt GT832E
Arduino und RFID verbinden: 4 Schritte (mit Bildern)
So verbinden Sie Arduino und RFID: Auf diesem instructable werde ich versuchen zu zeigen, wie man einen RFID-Sensor mit dem Arduino verbindet. Ich verwende den RFID-Sensor von seeedstudio in der seriellen Version davon. Es gibt ein paar Teile, die Sie brauchen werden. Ich habe auch einige RFID-Schlüssel gekauft. UPDATE: Jetzt w