Advertisement
  1. Computer Skills

Cara Membuka Pintu Garasi Anda Dengan RFID

Scroll to top
Read Time: 10 min

() 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.

rfidvisual
Interogasi sinyal memberi kekuatan pada chip RFID

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.

rfid_specsheetrfid_specsheetrfid_specsheet
Datasheet akan menunjukkan pin out

Ikuti langkah-langkah ini untuk menghubungkan papan pembaca RFID.

  1. Kawat ground ke pin ground pembaca
  2. Kawat daya ke pin daya pembaca
  3. Kawat Arduino pin 2 ke pin TX dari papan RFID
  4. Kawat Arduino pin 3 ke pin RX
  5. Hubungkan antena ke pembaca
  6. Hubungkan anoda LED ke pin pwr dari indikator papan.
  7. Hubungkan pin katoda dari LED ke ground melalui resistor

Pengaturan papan breadboard saya ditunjukkan di bawah ini.

rfidhookeduprfidhookeduprfidhookedup
Arduino terhubung ke papan pembaca RFID

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.

rfidhookedup
Skema relay
  1. Jalankan pin 4 dari Arduino ke pin 3 pada relai. Ketika ditarik tinggi, pin ini akan memberikan arus yang cukup untuk menutup relai.
  2. Jalankan pin 7 pada relai ke ground.
  3. Tambahkan dioda antara pin 3 dan 7 dengan strip cat ke arah pin 3 dari relai.
Kiat: Saat menggunakan relai atau benar-benar apa pun yang menggunakan medan elektromagnetik, selalu gunakan "flyback" diode untuk melindungi sistem dari lonjakan daya ketika medan magnet runtuh.

Ini adalah papan breadboard saya dengan relay yang terhubung.

Breadboard with RFID and relay setupBreadboard with RFID and relay setupBreadboard with RFID and relay setup
Breadboard dengan konfigurasi RFID dan relay

Langkah 3. Program Arduino

  1. 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.
  2. Klik upload di Arduino IDE
  3. Bukalah Serial Monitor dari Arduino IDE dengan menekan CTRL SHIFT M atau Memilih menu Tools > Serial Monitor.
Kiat: Pastikan baud rate dari Monitor Serial sesuai dengan apa yang kita tetapkan dalam fungsi 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.

Testing the RFID loopTesting the RFID loopTesting the RFID loop
Menguji loop RFID

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:

garagedoorterminalsgaragedoorterminalsgaragedoorterminals
Pintu pembuka pintu garasi
  1. Kaitkan Pin 1 dan 9 dari relai pada papan breadboard ke terminal pada pembuka pintu garasi
  2. Lambaikan tag RFID Anda di dekat antena
  3. Perhatikan pintu terbuka

dengan gelombang tangan Anda.

Langkah 5. Jadikan Permanen

  1. 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.
  2. Pindahkan sirkuit ke perfboard dan solderkan solusi permanen
  3. 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
Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Computer Skills tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.