Cara Membuka Pintu Garasi Anda Dengan RFID
() translation by (you can also view the original English article)
Radio Frequency Identification, atau RFID, adalah teknologi menarik yang telah mendapatkan popularitas dalam beberapa tahun terakhir. Ini menciptakan kemampuan untuk menandai sesuatu dengan chip pasif yang sangat kecil yang kemudian memungkinkan pembacaan jauh dari informasi pada chip itu. Tag RFID biasanya digunakan untuk kartu penggeser pintu keamanan, identifikasi untuk hewan peliharaan yang hilang, dan komunikasi lapangan yang lebih baru di dekat telepon pintar.
Dalam tutorial ini saya akan menjelaskan beberapa dasar tentang cara kerja RFID, menjelaskan beberapa jenis RFID yang berbeda, dan menunjukkan bagaimana anda dapat membangun pembuka pintu garasi RFID.
Dasar-dasar RFID
RFID adalah teknologi yang sangat keren yang menggunakan energi dari sinyal pembaca RFID untuk memberi daya pada tag atau transponder. Ini kemudian mengembalikan sinyal yang berisi isi chip memori tag.

Ada sejumlah jenis RFID. Beberapa tag dapat memiliki sejumlah kecil data yang ditulis kepada mereka yang dapat dibaca nanti. Yang lain sangat canggih sehingga membutuhkan pembaca untuk memberi sinyal kunci enkripsi sebelum tag dapat memecahkan kode dan mengembalikan isinya. Kebanyakan tag, bagaimanapun, hanya berisi nomor ID unik permanen. Informasi lebih lanjut tentang RFID tersedia di Wikipedia.
Format chip RFID dan frekuensi bervariasi. Ada sup alfabet seluruh jenis. Banyak ponsel pintar membaca format NFC dan MIFARE.
Untuk proyek ini, bagaimanapun, saya akan menggunakan jenis EM4100 125K Wiegand chip. Jenis RFID ini menggunakan pembaca dan tag murah yang merupakan alasan utama untuk chip ini dalam kit saya. Selama anda memiliki pembaca dan tag yang kompatibel, bagaimanapun, jenis RFID tidak akan menjadi masalah untuk proyek ini.
Proyek RFID
Dalam proyek ini, saya akan menggunakan tag RFID dan Arduino untuk membuka pintu garasi ketika tag resmi terdeteksi. Menggunakan komponen RFID tingkat rendah adalah tugas yang cukup rumit, jadi kami menggunakan papan breakout yang melakukan pembacaan tingkat rendah dan mentransmisikan kode tag melalui pin serial. Ini adalah cara kerja papan breakout RFID. Tutorial ini menggunakan satu papan breakout seperti itu.
Untuk tutorial ini saya akan memilah desain untuk pembuka pintu garasi dan menciptakan bukti fungsional konsep.
Komponen Proyek
- Arduino (Hampir semua model 5V seharusnya berfungsi, saya menggunakan Uno)
- Papan RFID Reader dengan antena
- Tag RFID (saya menemukan bahwa EM4100 125K fobs kunci Wiegand murah dan mudah ditemukan di ebay)
- Breadboard
- Sebuah LED standar
- 220 Ohm Resistor (Red Red Brown)
- Relay (Aleph SD1A05AWJ)
- Diode (1N4148)
- Jumper Wires
Bagaimana itu bekerja
Prosesnya cukup sederhana.
Pertama, papan pembaca RFID membaca tag dan mengirimkan kode ke Arduino. Arduino kemudian membaca kode dari koneksi serial dan membandingkannya dengan daftar kode RFID resmi. Jika tag berada di daftar yang diotorisasi, Arduino akan menarik pin tinggi untuk menyediakan 5V untuk menutup relai. Ketika relai ditutup, ia menghubungkan terminal kontak sinyal pintu garasi. Pintu garasi terbuka.
Membangun
Langkah 1. Pengaturan Pembaca RFID
Dengan menggunakan lembar data atau instruksi pada pembaca RFID, kencangkan pin daya, ground, serial, dan antena. Di bawah ini adalah diagram pin dari pembaca yang saya miliki. Kami menggunakan pin 2 dan 3 Arduino untuk komunikasi serial dengan papan RFID sehingga kami dapat meninggalkan pin 0 dan 1 untuk keluaran konsol.



Ikuti langkah-langkah ini untuk menghubungkan papan pembaca RFID.
- Kawat ground ke pin ground pembaca
- Kawat daya ke pin daya pembaca
- Kawat Arduino pin 2 ke pin TX dari papan RFID
- Kawat Arduino pin 3 ke pin RX
- Hubungkan antena ke pembaca
- Hubungkan anoda LED ke pin pwr dari indikator papan.
- Hubungkan pin katoda dari LED ke ground melalui resistor
Pengaturan papan breadboard saya ditunjukkan di bawah ini.



Langkah 2. Pengaturan Relay
Tambahkan relai ke papan breadboard. Dua pin internal menjalankan elecromagnet yang akan menutup relai. Anda dapat melihat pada diagram di bawah ini bagaimana menjalankan arus melalui pin 3 hingga 7 akan mempengaruhi relai.

- Jalankan pin 4 dari Arduino ke pin 3 pada relai. Ketika ditarik tinggi, pin ini akan memberikan arus yang cukup untuk menutup relai.
- Jalankan pin 7 pada relai ke ground.
- Tambahkan dioda antara pin 3 dan 7 dengan strip cat ke arah pin 3 dari relai.
Ini adalah papan breadboard saya dengan relay yang terhubung.



Langkah 3. Program Arduino
- Salin kode dari akhir tutorial ini. Kode ini dikomentari secara menyeluruh untuk membantu anda memahami apa yang terjadi di setiap langkah. Di dekat bagian atas kode Anda dapat melihat di mana tempat untuk mengubah daftar nilai tag RFID. Kami akan menjalankan kode satu kali dan melambaikan tag RFID Anda sehingga anda dapat menyalin dan menempelkan ID dari tag resmi anda ke dalam kode final.
- Klik upload di Arduino IDE
- Bukalah Serial Monitor dari Arduino IDE dengan menekan CTRL SHIFT M atau Memilih menu Tools > Serial Monitor.
setup ()
. Dalam contoh ini: 38400
.Anda akan melihat sesuatu seperti ini:
RFID GDO V0.1
Tag read: 3D00CFBB80
Checksum: C9 — passed.
3D00CFBB80
Bad tag. Go away.
Salin dan tempel ID Anda (3D00CFBB80
dalam contoh ini) ke dalam kode ke dalam daftar goodTags. Catatan, kode yang berbeda dapat berada di baris baru selama itu dikelilingi oleh tanda kutip dan memiliki koma setelahnya. Daftar kode tunggal mungkin terlihat seperti ini:
char* goodTags[] = {
"3D00CFBB80",
};
Klik unggah di Arduino IDE kemudian bukalah Serial Monitor dari Arduino IDE dengan menekan CTRL SHIFT M atau Memilih menu Tools > Serial Monitor.
Sekarang ketika anda menjalankan kode, anda akan melihat sesuatu seperti ini:
RFID GDO V0.1
Tag read: 3D00CFBB80
Checksum: C9 -- passed.
3D00CFBB80
Opening Door!
Di bawah ini adalah foto saya menguji tag RFID dengan relay. Multimeter terhubung ke pin 1 dan 9 dari relai sehingga harus mendeteksi kontinuitas ketika relai menutup.



Dengan multimeter terhubung, anda dapat mendengar bip dari multimeter untuk menunjukkan kontinuitas dan kemudian tink sangat samar dan relai terkunci kembali terbuka.
Langkah 4. Membuka Pintu Garasi
Kebanyakan pembuka pintu garasi beroperasi sangat sederhana dengan membuka ketika mereka memiliki kontak tertutup. Ketika anda menekan tombol di dinding, anda menutup kontak. Pada pembuka pintu garasi saya, saya memiliki terminal di mana kabel dari tombol terhubung. Anda dapat melihat terminal yang disorot di sini:



- Kaitkan Pin 1 dan 9 dari relai pada papan breadboard ke terminal pada pembuka pintu garasi
- Lambaikan tag RFID Anda di dekat antena
- Perhatikan pintu terbuka
dengan gelombang tangan Anda.
Langkah 5. Jadikan Permanen
- Pasang antena di suatu tempat dapat membaca tag melalui pintu atau dinding. RFID dapat melewati benda padat sehingga antena dapat disembunyikan di balik dinding garasi tergantung pada materi. Mungkin diperlukan beberapa percobaan dan kesalahan untuk menemukan tempat di mana ia dapat membaca tag.
- Pindahkan sirkuit ke perfboard dan solderkan solusi permanen
- Masukkan proyek dalam kotak dan taruh di garasi Anda.
Kode sumber untuk proyek ini
1 |
/*
|
2 |
RFID Garage door opener sample code by Ben Miller @VMfoo |
3 |
ReadKey function inspired and borrowed in part from the arduino playground |
4 |
example: http://playground.arduino.cc/Code/ID12 |
5 |
|
6 |
*/
|
7 |
|
8 |
// include the SoftwareSerial library so you can use its functions: |
9 |
#include //leaving the hardware serial ports for debugging
|
10 |
|
11 |
#define rxPin 2 //pin to receive data from RFID reader
|
12 |
#define txPin 3 //transmit pin for softserial initialization
|
13 |
#define doorPin 4 //pin to trigger relay
|
14 |
|
15 |
// set up a new serial port
|
16 |
NewSoftSerial RFIDPort = NewSoftSerial(rxPin, txPin); |
17 |
byte pinState = 0; |
18 |
|
19 |
// for incoming serial data
|
20 |
int incomingByte = 0; |
21 |
// character array for the value of the RFID tag
|
22 |
char tagValue[10];
|
23 |
|
24 |
//What tag values are authorized |
25 |
char* goodTags[] = { |
26 |
"3D00CFBB80",
|
27 |
//"######", //add another tag by replacing the #'s with your code and uncommenting this line |
28 |
}; |
29 |
// Calculate the number of tags in the array above
|
30 |
int tagCount = sizeof(goodTags)/sizeof(goodTags[0]); |
31 |
|
32 |
void setup() { |
33 |
// define pin modes for the opener relay
|
34 |
pinMode(doorPin, OUTPUT); |
35 |
|
36 |
// set the data rate for the SoftwareSerial port |
37 |
RFIDPort.begin(9600); |
38 |
Serial.begin(38400); //serial monitor rate |
39 |
Serial.println("RFID GDO V0.1"); //hello world |
40 |
}
|
41 |
|
42 |
void loop() { |
43 |
//loop and read
|
44 |
if ( RFIDPort.available() ) { |
45 |
if ( readKey() ) { |
46 |
//check tag value |
47 |
if(goodTag()){ //if this is allowed |
48 |
openDoor(); |
49 |
} else { |
50 |
Serial.println("Bad tag. Go away."); |
51 |
}
|
52 |
}
|
53 |
}
|
54 |
}
|
55 |
|
56 |
int goodTag() { |
57 |
for(int i=0; i < tagCount; i++) { //walk through the tag list |
58 |
if(strcmp(tagValue, goodTags[i]) == 0) { |
59 |
return 1; |
60 |
}
|
61 |
}
|
62 |
return 0; |
63 |
}
|
64 |
|
65 |
void openDoor(){
|
66 |
Serial.println("Opening Door!"); |
67 |
digitalWrite(doorPin, HIGH); |
68 |
delay(500); // half a second is plenty of time to let trigger the contact |
69 |
digitalWrite(doorPin, LOW); |
70 |
//to prevent "bounce" or secondary reads if the tag is still close to the reader |
71 |
//we delay 3 seconds |
72 |
delay(3000); |
73 |
}
|
74 |
|
75 |
int readKey(){
|
76 |
byte i = 0; |
77 |
byte val = 0; |
78 |
byte checksum = 0; |
79 |
byte bytesRead = 0; |
80 |
byte tempByte = 0; |
81 |
byte tagBytes[6]; // "Unique" tags are only 5 bytes but we need an extra byte for the checksum |
82 |
// char tagValue[10]; this is defined globaly to simplify code
|
83 |
|
84 |
if((val = RFIDPort.read()) == 2) { // Check for header |
85 |
bytesRead = 0; |
86 |
while (bytesRead < 12) { // Read 10 digit code + 2 digit checksum |
87 |
if (RFIDPort.available()) { |
88 |
val = RFIDPort.read(); |
89 |
|
90 |
// Append the first 10 bytes (0 to 9) to the raw tag value |
91 |
// Check if this is a header or stop byte before the 10 digit reading is complete |
92 |
if (bytesRead < 10) { tagValue[bytesRead] = val; } if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02)) { break; // Stop reading } // Ascii/Hex conversion: if ((val >= '0') && (val <= '9')) { val = val - '0'; } else if ((val >= 'A') && (val <= 'F')) { val = 10 + val - 'A'; } // Every two hex-digits, add a byte to the code: if (bytesRead & 1 == 1) { // Make space for this hex-digit by shifting the previous digit 4 bits to the left tagBytes[bytesRead >> 1] = (val | (tempByte << 4)); if (bytesRead >> 1 != 5) { // If we're at the checksum byte, |
93 |
checksum ^= tagBytes[bytesRead >> 1]; // Calculate the checksum... (XOR)
|
94 |
};
|
95 |
} else {
|
96 |
tempByte = val; // Store the first hex digit first
|
97 |
};
|
98 |
|
99 |
bytesRead++; // Ready to read next digit
|
100 |
}
|
101 |
}
|
102 |
// Send the result to the host connected via USB
|
103 |
if (bytesRead == 12) { // 12 digit read is complete
|
104 |
tagValue[10] = '\0'; // Null-terminate the string |
105 |
|
106 |
Serial.print("Tag read: ");
|
107 |
for (i=0; i<5; i++) {
|
108 |
// Add a leading 0 to pad out values below 16
|
109 |
if (tagBytes[i] < 16) {
|
110 |
Serial.print("0");
|
111 |
}
|
112 |
Serial.print(tagBytes[i], HEX);
|
113 |
}
|
114 |
Serial.println();
|
115 |
|
116 |
Serial.print("Checksum: ");
|
117 |
Serial.print(tagBytes[5], HEX);
|
118 |
Serial.println(tagBytes[5] == checksum ? " -- passed." : " -- error.");
|
119 |
Serial.println(tagValue);
|
120 |
Serial.println();
|
121 |
return 1; //return value to indicate that we read something
|
122 |
}
|
123 |
}
|
124 |
bytesRead=0;
|
125 |
return 0;
|
126 |
}
|
Ringkasan
Dalam tutorial ini saya menguraikan dasar-dasar teknologi RFID dan bagaimana memanfaatkannya untuk proyek anda sendiri. Sementara komponen tingkat rendah yang membaca RFID mungkin sulit bagi penggemar untuk menggunakan, papan breakout RFID memungkinkan menggunakan RFID sangat mudah dalam proyek-proyek dengan Arduino atau bahkan Raspberry Pi melalui port serial. Setelah ID dibaca dari tag, mudah untuk menindaklanjuti informasi. Dalam contoh ini kami menggerakkan relay untuk membuka pintu garasi.
Sebagai tambahan:
- Saya memeriksa perbedaan dalam jenis teknologi RFID
- Saya mengeksplorasi konsep cara kerja RFID
- Anda mengikuti contoh memasang papan pembaca RFID ke Arduino
- Baca dan cetak pengidentifikasi RFID dari tag ID
- Menambahkan relai ke sirkuit untuk menutup kontak saat tag yang tepat dibaca
- Sambungkan relai ke pembuka pintu garasi untuk menambahkan kontrol akses berbasis RFID