RFID staat voor Radio Frequency Identification. RFID-module kan een kleine hoeveelheid gegevens lezen of schrijven in een passieve RFID-tag, die kan worden gebruikt in identificatieproces in verschillende systemen zoals aanwezigheidssysteem, beveiligingssysteem, stemsysteem enz. RFID is een zeer handige en gemakkelijke technologie.
Om de passieve RFID-kaarten en tag te kunnen lezen, hebben we een microcontroller met UART-hardware nodig. Als we een microcontroller zonder UART selecteren, moeten we software UART implementeren. Hier gebruiken we PIC Microcontroller PIC16F877A voor het koppelen van RFID. We lezen gewoon het unieke identificatienr. van RFID-tags en weergeven op 16x2 LCD.
RFID-module en zijn werking
In dit project hebben we gekozen voor de EM-18 RFID-module, een kleine, goedkope en energiezuinige module. EM-18 RFID-module gebruikt 125 KHz RF-frequentie om passieve 125 KHz RFID-tags te lezen. EM-18-module gebruikt oscillator, demodulator en gegevensdecoder om gegevens van een passieve kaart te lezen.
RFID-tag
Er zijn drie soorten RFID-tags beschikbaar: passief, actief of passief met batterijondersteuning. Er zijn verschillende soorten RFID-tags met verschillende soorten en maten op de markt verkrijgbaar. Weinigen van hen gebruiken verschillende frequenties voor communicatiedoeleinden. We zullen 125Khz passieve RFID-kaarten gebruiken die de unieke ID-gegevens bevatten. Hier zijn de RFID-kaart en tags die we voor dit project gebruiken.
Werking van RFID
Als we de datasheet (http://www.alselectro.com/files/rfid-ttl-em18.pdf) van EM-18 Module zien, kunnen we de achterkant van de module en het applicatiecircuit zien:
De module maakt gebruik van het UART-communicatieprotocol met een baudsnelheid van 9600. Wanneer een geldige frequentie-tag in het magnetische veld van de EM-18-lezer wordt gebracht, gaat de BC557-transistor aan en begint de zoemer te piepen, ook de LED gloeit. We gebruiken een module die gemakkelijk op de markt verkrijgbaar is en een compleet circuit heeft met een zoemer, led en een extra RS232-poort.
Hier is de RFID-bordmodule die we gebruiken met pincodes. Deze module heeft ook een extra voedingsoptie.
Eén ding moet in gedachten worden gehouden dat de output van de EM-18-lezer 5V logisch niveau gebruikt. We zouden een andere microcontroller kunnen gebruiken die een lager logisch niveau gebruikt, maar in dergelijke gevallen is de extra logisch niveau-omzetter vereist. In enkele gevallen is de UART-pin van de 3.3V-microcontroller vaak 5V-tolerant.
De UART-uitvoer levert 12-bits ASCII- gegevens. De eerste 10 bits zijn het RFID-tagnummer, wat de unieke ID is, en de laatste twee cijfers worden gebruikt voor het testen van fouten. Die laatste twee cijfers zijn de XOR van het tagnummer. De EM-18-module leest de gegevens van 125 KHz passieve RFID-tags of kaarten.
Deze tags of ID's hebben een in de fabriek geprogrammeerde geheugenarray waarin het unieke ID-nummer wordt opgeslagen. Omdat deze passief zijn, dus er is geen batterij aanwezig in de kaart of tags, worden ze geactiveerd door het magnetische veld van de RF-transceivermodule. Deze RFID-tags zijn gemaakt met behulp van de EM4102 CMOS IC die ook wordt geklokt door het magnetische veld.
Materiaal vereist
Om dit project te maken hebben we de volgende items nodig:
- PIC16F877A
- 20Mhz kristal
- 2 stuks 33pF keramische schijfcondensator
- LCD-scherm van 16x2 tekens
- Een breadboard
- 10k vooraf ingestelde pot
- 4.7k weerstand
- Enkeldraads draden om aan te sluiten
- Een 5V-adapter
- RF-module EM-18
- 5V zoemer
- 100uF &.1uF 12V condensator
- BC557-transistor
- LED
- 2.2k en 470R weerstand.
We gebruiken het EM-18-modulebord met voorgeconfigureerde zoemer en led. De componenten van 11 tot 15 zijn dus niet nodig.
Schakelschema
Het schema is eenvoudig; we hebben LCD via poort RB aangesloten en de EM-18 module over de UART Rx-pin aangesloten.
We hebben de verbinding gemaakt op breadboard volgens schema.
Code Uitleg
Zoals altijd moeten we eerst de configuratiebits in de pic-microcontroller instellen, enkele macro's definiëren, inclusief bibliotheken en kristalfrequentie. U kunt de code voor al degenen in de volledige code aan het einde controleren.
// PIC16F877A Configuratiebitinstellingen // 'C' source line config statements // CONFIG #pragma config FOSC = HS // Oscillator Selectie bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT uitgeschakeld) # pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT uitgeschakeld) #pragma config BOREN = ON // Brown-out Reset Bit inschakelen (BOR ingeschakeld) #pragma config LVP = OFF // Laagspanning (enkele voeding) In-Circuit Serial Programming Enable bit (RB3 / PGM-pin heeft PGM-functie; laagspanningsprogrammering ingeschakeld) #pragma config CPD = OFF // Data EEPROM Geheugencodebeschermingsbit (Data EEPROM-codebescherming uitgeschakeld) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (schrijfbeveiliging uitgeschakeld; alle programmageheugen kan worden geschreven door EECON-besturing) #pragma config CP = OFF // Flash Program Memory Code Protection bit (codebescherming uit) # include "supporing_cfile \ lcd.h" #include "supporing_cfile \ eusart1.h"
Als we de hoofdfunctie zien, hebben we een functie aangeroepen om het systeem te initialiseren. We initialiseren LCD en UART in deze functie.
/ * Deze functie is voor systeeminitialisatie. * / void system_init (void) { TRISB = 0x00; // POORT B ingesteld als uitvoerpin lcd_init (); // Dit zal de lcd EUSART1_Initialize () initialiseren ; // Hiermee wordt de Eusart } geïnitialiseerd
Nu hebben we in de hoofdfunctie een 13-bits array gebruikt die het RFID-nummer is. We ontvangen elk stukje van het RFID-nr. met behulp van EUSART1_Read (); functie, die wordt gedeclareerd in de UART-bibliotheek. Na ontvangst van 12 bits, printen we de array als string in het LCD-scherm.
void main (void) { unsigned char count; niet-ondertekende teken RF_ID; system_init (); lcd_com (0x80); lcd_puts ("Circuit Digest"); while (1) { for (count = 0; count <12; count ++) { RF_ID = 0; RF_ID = EUSART1_Read (); } lcd_com (0xC0); // Zet de cursor op de tweede regel die begint met lcd_puts ("ID:"); lcd_puts (RF_ID); } }
De volledige code met demonstratievideo wordt hieronder gegeven.
Controleer ook de interfacing van RFID met andere microcontrollers:
RFID-interface met MSP430 Launchpad
RFID-interface met 8051 Microcontroller
RFID-interface met Arduino