🚚 Besplatna dostava za narudžbe veće od 35EUR

KKM: RDM6300

KKM: RDM6300-Uncategorized

Početnik si s Dasduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala tvrtke soldered na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Dasduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

UVOD

Imate potrebu osigurati neovlašten pristup prostoriju ili zgradi, trebate kontrolirati kada netko dolazi ili odlazi iz zgrade ili tome slično onda je ovaj tutorijal namijenjen baš vama. Radi se o RDM6300 rfid čitaču koji služi za očitavanje kartica ili tagova koji sadrže poseban kod na sebi i svaki kod na kartici ili tagu se razlikuje. Kako sam čitač radi i kako kartica i on komuniciraju opisano je u nastavku, te je na kraju dan kod koji omogućuje kontrolu pristupa.

Karakteristike modula:
• Frekvencija: 125kHz
• Udaljenost očitanja: 2-5 cm
• Komunikacija: serijska
• Napon: 5V
• Dimenzije: 3.8 x 1.8 x 1.2cm

KAKO RADI?

RDM6300 modul dolazi s malom vanjskom antenom (petljom). Iako sve ovo zvuči komplicirano, kada malo bolje pogledamo osnovne dijelove te kako radi, postaje jednostavno i razumljivo pa zato krenimo s upoznavanjem principa rada ovog uređaja.
Modul dolazi s vanjskom antenom koja je bitan dio ovog modula i bez nje ne može raditi. Na modulu imamo čip koji upravlja s radom antene i preko nje prima podatke te nam te podatke šalje putem serijske komunikacije na Dasduino. RFID čitač također napaja kartice koje približimo anteni jer su kartice pasivne i nemaju bateriju ili drugi izvor napajanja unutar sebe. Kartice se sastoje od malog čipa koji u sebi ima pohranjen kod koji je jedinstven za svaku karticu. Također unutar kartice se nalazi antena (petlja) slična anteni RFID čitača koja napaja sam čip unutar kartice i preko koje se također podaci šalju do antene rfid čitača.

Dakle princip je jednostavan kada se kartica nalazi u blizini antene rfid čitača ona zbog elektromagnetskih valova dobije napajanje preko svoje antene i čip u kartici se „probudi“ te krene sa slanjem koda, a rfid čitač primi taj kod i pošalje ga na Dasduino. Kada odmaknemo karticu ona ostaje bez napajanja i nema slanja koda. Iz toga razloga nekada se zna dogoditi da ako karticu držimo blizu antene rfid čitača da nam više puta očita karticu.

 

KAKO POVEZATI?

Modul se na Dasduino povezuje preko serijske komunikacije(UART) te iz toga razloga moramo koristiti SoftwareSerial biblioteku koja nam omogućava da serijsku komunikaciju kreiramo na drugim pinovima, jer nam pinovi 0 i 1 trebaju za Serial monitor i komunikaciju s računalom.
Modul ćemo spojiti na napajanje (5 V i GND) , a pinove Tx i Rx ćemo spojiti na pinove D2 i D3 pinove Dasduina, ali sve je također vidljivo i na danoj shemi.

ARDUINO KOD

Za rad s ovim modulom koristimo biblioteku koja dolazi instalirana s Arduino IDE pa ju nije potrebno instalirati. Biblioteka nam kreira serijsku komunikaciju na pinovima koje mi odaberemo, a mi smo u ovom kodu za Tx pin odabrali D2, a za Rx pin odabrali smo D3 sa Dasduina.
Prvi primjer koda nam na Serial monitor ispisuje jedinstveni kod koji je pohranjen u kartici kada karticu približimo čitaču( anteni čitača). Ovaj kod potrebno je znati ako želimo imati kontrolirani pristup prostoriji što je opisano u drugom primjeru.

#include <SoftwareSerial.h&gt//uključujemo biblioteku koja nam služi za uspostavu serijske komunikacije na drugim pinovima
SoftwareSerial RFID(2, 3); //(RX,TX) Konstruktor za našu biblioteku SoftwareSerial 
                 // s kojom na pinovima 2 i 3 postavljamo serijsku komunikaciju
void setup() {
  Serial.begin(9600);//Inicijalizacija serijske komunikacije( brzina 9600 bauda)
  RFID.begin(9600);//Inicijalizacija softverske serijske komunikacije( brzina 9600 bauda)
}
void loop() {
  // provjeravamo dali ima podataka od rfid čitača i ako ima onda ih čitamo
if(RFID.available()>0){
  //s while petljom omogućujemo čitanje podataka sve dok ih ima od rfid čitača
 while(RFID.available()>0){
  int i=RFID.read(); //pročitani bit spremamo u varijablu i
  Serial.print(i,DEC); //varijablu i ispisujemo na Serial monitor kao decimalni broj
  Serial.print(",");// dodajemo razma između svakog broja
}
  Serial.println();//kada pročitamo podatke za jednu karticu idemo u novi red i čekamo nove podatke od rfid čitača
}
}

Drugi primjer je kontrolirani pristup prostoriji pomoću rfid tehnologije. Ako želimo dodati novu karticu koja bi imala pristup prostoriji u kod trebamo ubaciti jedinstveni kod kartice koji možemo očitati s prvim primjerom programa. Kada ubacimo kod trebamo samo još u funkciji provjeri dodati da se pri usporedbi dozvoljenih kartica s očitanom provjeri i naša nova kartica i to je sve. Ovdje možemo imati kartica koliko hoćemo samo moramo u programu napraviti izmjene na ova dva mjesta kako je opisano.

#include <SoftwareSerial.h>//uključujemo biblioteku koja nam služi za uspostavu serijske komunikacije na drugim pinovima
SoftwareSerial RFID(2, 3); //(RX,TX) Konstruktor za našu biblioteku SoftwareSerial s
 //kojom na pinovima 2 i 3 postavljamo serijsku komunikaciju
//varijabla u koju spremamo kod s očitane kartice kako bi ga mogli usporediti s našim spremljenim karticama
int novakartica[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//varijable u koje spremamo kodove kartica kojima želimo omogućiti pristup(promijeniti kod za vaše kartice)
int kartica1[14]={2,48,55,48,48,51,70,53,48,50,51,52,66,3};
int kartica2[14]={2,48,55,48,48,51,70,53,48,49,67,55,52,3};
// ako dodajemo novu karticu trebamo ovdje upisati njen kod
int ok=-1;//varijabla u koju spremamo dali je pristup odbijen ili dozvoljen
int dozvoljeno=12;//pin na koji je spojena zelena dioda i koji se aktivira kada je pristup dozvoljen
int odbijeno=13;// pin na koji je spojena crvena dioda i koji se aktivira kada je pristup odbijen
void setup(){
 Serial.begin(9600);//Inicijalizacija serijske komunikacije( brzina 9600 bauda)
 RFID.begin(9600);//Inicijalizacija softverske serijske komunikacije( brzina 9600 bauda)
 //postavljamo pinove na kojima su spojene led diode kao izlazne pinove
 pinMode(dozvoljeno,OUTPUT);
 pinMode(odbijeno,OUTPUT);
 }
 //funkcija u kojoj uspoređujemo dva koda s kartica koje predajemo u funkciji provjeri
 //( provjerava se očitana kartica i jedna od spremljenih kartica)
 //ako je kod isti funkcija vraća true, a ako nije onda vraća false i tako znamo dali je očitana kartica
 //jedna od onih kojima je dozvoljen pristup
 boolean usporedi(int a[14],int b[14]){
 int br=0;
 boolean vrati=false;
 //u for petlji uspoređujemo svaki broj obje kartice i ako su isti povećavamo brojač br
 for(int i=0;i<14;i++){
 if(a[i]==b[i])
 br++;
 }
 //ako brojač br ima vrijednost 14 znači da su svi brojevi jednaki odnosno da imamo dozvoljen pristup
 //te onda u varijablu vrati spremamo true
 if(br==14){
 vrati=true;
 }
 return vrati;
 }
//funkcija koja redom provjerava očitanu karticu sa svakom od spremljenih kartica
//ako su kartice iste onda varijablu ok postavlja na 1, ako nisu onda je varijabla ok 0
void provjeri(){
 ok=0;
 if(usporedi(kartica1,novakartica)==true){
 ok++;
 }
 if(usporedi(kartica2,novakartica)==true){
 ok++;
 }
 //ako želimo imati još kartica trebamo dodati još if uvjeta i napraviti provjeru kao u dva gornja uvjeta
}
//funkcija koja očitava karticu i poziva funkciju provjeri, te također ona pali određenu led diodu ovisno o prislonjenoj kartici
void ocitaj(){
 ok=-1;
 delay(100);
 //ako imamo podataka na serijskoj komunikaciji od rfid čitača onda ih pročitamo i spremimo u polje novakartica
 if(RFID.available()>0){
 for(int i=0;i<14;i++){
 int data=RFID.read();
 novakartica[i]=data;
 }
 provjeri(); //pozivamo funkciju provjeri
 }
 //ako je ok veći od nule onda je prislonjena kartica jedna od spremljenih i pristup je dozvoljen te palimo i nakon sekunde gasimo zelenu led diodu
 if(ok>0){
 Serial.println("dozvoljen pristup");
 digitalWrite(dozvoljeno,HIGH);
 delay(1000);
 digitalWrite(dozvoljeno,LOW);
 ok=-1;
 }
 //ako je ok jednak nuli onda pristup nije dozvoljen i palimo te nakon sekunde gasimo crvenu led diodu
 else if(ok==0){
 Serial.println("Pristup odbijen");
 digitalWrite(odbijeno,HIGH);
 delay(1000);
 digitalWrite(odbijeno,LOW);
 ok=-1;
 }
 }
void loop(){
 // u loop-u stalno pozivamo funkciju očitaj koja onda poziva ostale potrebne funkcije
 ocitaj();
 }