Kita tahu di kantor, pusat perbelanjaan, dan di banyak tempat lain di mana hanya orang dengan kartu otorisasi yang diperbolehkan memasuki ruangan. Sistem ini menggunakan sistem komunikasi RFID. RFID digunakan di pusat perbelanjaan untuk menghentikan pencurian karena produk ditandai dengan chip RFID dan ketika seseorang meninggalkan gedung dengan chip RFID, alarm dibunyikan secara otomatis. Tag RFID dirancang sekecil bagian pasir. Sistem otentikasi RFID mudah dirancang dan harganya murah. Beberapa sekolah dan perguruan tinggi saat ini menggunakan sistem absensi berbasis RFID.
Dalam proyek ini kami akan merancang sistem pengumpulan tol berbasis RFID untuk tujuan keamanan. Jadi sistem ini membuka gerbang dan hanya mengizinkan orang dengan tag RFID resmi. ID pemegang tag resmi diprogram ke dalam Mikrokontroler ATMEGA dan hanya pemegang tersebut yang diizinkan meninggalkan atau memasuki lokasi.
Komponen Diperlukan
Perangkat keras: Mikrokontroler ATmega32, catu daya (5v), Programmer AVR-ISP, JHD_162ALCD (modul LCD 16x2), kapasitor 100uF (terhubung melintasi catu daya), tombol, resistor 10KΩ, kapasitor 100nF, LED (dua buah), EM-18 (Modul pembaca RFID), IC driver motor L293D, motor DC 5V.
Perangkat lunak: Atmel studio 6.1, progisp atau flash magic.
Diagram Sirkuit dan Penjelasan Kerja
Pada rangkaian sistem pengumpulan tol RFID yang ditunjukkan di atas, PORTA ATMEGA32 terhubung ke port data LCD. Di sini kita harus ingat untuk menonaktifkan komunikasi JTAG di PORTC ke ATMEGA dengan mengubah sekring byte, jika kita ingin menggunakan PORTC sebagai port komunikasi normal. Pada LCD 16x2 terdapat 16 pin seluruhnya jika ada lampu belakang, jika tidak ada lampu belakang akan ada 14 pin. Kami dapat menyalakan atau meninggalkan pin lampu belakang. Sekarang di 14 pin ada 8 data pin (7-14 atau D0-D7), 2 pin power supply (1 & 2 atau VSS & Vdd atau gnd + 5V &), 3 rd pin untuk kontrol kontras (VEE-kontrol seberapa tebal karakter harus ditampilkan), 3 pin kontrol (RS & RW & E).
Di sirkuit, Anda dapat mengamati bahwa saya hanya mengambil dua pin kontrol. Ini memberikan fleksibilitas pemahaman yang lebih baik. Bit kontras dan BACA / TULIS tidak sering digunakan sehingga dapat disingkat menjadi ground. Ini menempatkan LCD dalam kontras tertinggi dan mode baca. Kita hanya perlu mengontrol pin ENABLE dan RS untuk mengirim karakter dan data yang sesuai.
Koneksi yang dibuat untuk LCD, diberikan di bawah ini:
PIN1 atau VSS ke ground
PIN2 atau VDD atau VCC ke daya + 5v
PIN3 atau VEE ke ground (memberikan kontras maksimum yang terbaik untuk pemula)
PIN4 atau RS (Pilihan Register) ke PD6 dari MCU
PIN5 atau RW (Baca / Tulis) ke ground (menempatkan LCD dalam mode baca memudahkan komunikasi untuk pengguna)
PIN6 atau E (Enable) ke PD5 Mikrokontroler
PIN7 atau D0 sampai PA0
PIN8 atau D1 ke PA1
PIN9 atau D2 ke PA2
PIN10 atau D3 ke PA3
PIN11 atau D4 ke PA4
PIN12 atau D5 ke PA5
PIN13 atau D6 ke PA6
PIN14 atau D7 ke PA7
Di sirkuit, Anda dapat melihat kami telah menggunakan komunikasi 8bit (D0-D7). Namun ini tidak wajib dan kita dapat menggunakan komunikasi 4bit (D4-D7) tetapi dengan program komunikasi 4 bit menjadi agak rumit, jadi saya lebih suka komunikasi 8 bit.
Jadi dari pengamatan tabel di atas kita menghubungkan 10 pin LCD ke controller dimana 8 pin adalah pin data dan 2 pin untuk kontrol.
Sebelum melangkah ke depan, kita perlu memahami tentang komunikasi serial. Modul RFID disini mengirimkan data ke controller secara serial. Ini memiliki mode komunikasi lain tetapi untuk komunikasi mudah kami memilih RS232. Pin RS232 modul terhubung ke pin RXD ATMEGA.
Data yang dikirim oleh modul RFID adalah:
Sekarang untuk antarmuka modul RFID, diperlukan fitur-fitur berikut:
1. Pin RXD (fitur penerimaan data) pengontrol harus diaktifkan.
2. Karena komunikasi serial kita perlu mengetahui kapan data bye diterima, sehingga kita dapat menghentikan program sampai byte lengkap diterima. Ini dilakukan dengan memungkinkan data menerima interupsi lengkap.
3. RFID mengirimkan data ke pengontrol dalam mode 8bit. Jadi dua karakter akan dikirim ke pengontrol sekaligus. Ini ditunjukkan pada gambar di atas.
4. Dari gambar diatas, tidak terdapat bit paritas, bit one stop pada data yang dikirim oleh modul.
Fitur-fitur di atas diatur dalam register pengontrol; kita akan membahasnya secara singkat,
MERAH (RXEN): Bit ini mewakili fitur penerimaan data. Bit ini harus disetel agar data dari modul dapat diterima oleh pengontrol. Ini juga mengaktifkan pin RXD pengontrol.
BROWN (RXCIE): Bit ini harus disetel untuk mendapatkan interupsi setelah penerimaan data berhasil. Dengan mengaktifkan bit ini kita mengetahui, tepat setelah data 8 bit diterima.
PINK (URSEL): Bit ini harus disetel sebelum mengaktifkan bit lain di UCSRC. Setelah pengaturan, bit lain yang dibutuhkan di UCSRC, URSEL harus dinonaktifkan atau ditiadakan.
KUNING (UCSZ0, UCSZ1, UCSZ2): Ketiga bit ini digunakan untuk memilih jumlah bit data yang kami terima atau kirim dalam sekali jalan.
Karena data yang dikirim modul RFID adalah tipe data 8bit, maka UCSZ0, UCSZ1 menjadi satu dan UCSZ2 menjadi nol.
ORANGE (UMSEL): Bit ini diatur berdasarkan apakah sistem berkomunikasi secara asinkron (keduanya menggunakan jam yang berbeda) atau secara sinkron (keduanya menggunakan jam yang sama).
Karena modul dan pengontrol menggunakan jam yang berbeda, bit ini harus disetel ke nol atau dibiarkan sendiri karena semuanya disetel ke nol secara default.
HIJAU (UPM1, UPM0): Kedua bit ini disesuaikan berdasarkan paritas bit yang kami gunakan dalam komunikasi.
Karena modul RFID mengirim data tanpa paritas, kami telah menyetel UPM1, UPM0 ke nol atau keduanya dapat dibiarkan sendiri karena semua bit dalam register mana pun disetel ke nol secara default.
BLUE (USBS): Bit ini digunakan untuk memilih jumlah stop bits yang kita gunakan selama komunikasi.
Karena modul RFID mengirimkan data dengan bit one stop, kita hanya perlu membiarkan bit USBS saja.
Sekarang akhirnya kita perlu mengatur baud rate, dari gambar di atas terlihat jelas bahwa modul RFID mengirimkan data ke controller dengan baud rate 9600bps (bits per second).
Tingkat baud diatur dalam pengontrol dengan memilih UBRRH yang sesuai.
Nilai UBRRH dipilih dengan cara referensi silang baud rate dan frekuensi kristal CPU, Jadi dengan referensi silang nilai UBRR terlihat sebagai '6', sehingga baud rate diatur.
Sekarang seperti yang ditunjukkan pada gambar, dua pin dari pengontrol menuju ke L293D, yang merupakan H-BRIDGE yang digunakan untuk mengontrol kecepatan dan arah putaran untuk motor DC daya rendah.
L293D merupakan IC H-BRIDGE yang dirancang untuk menggerakkan motor DC berdaya rendah dan ditunjukkan pada gambar, IC ini terdiri dari dua h-bridge sehingga dapat menggerakkan dua buah motor DC. Sehingga IC ini dapat digunakan untuk menggerakkan motor robot dari sinyal mikrokontroler.
Sekarang seperti yang telah dibahas sebelumnya IC ini memiliki kemampuan untuk mengubah arah putaran motor DC. Ini dicapai dengan mengontrol level tegangan pada INPUT1 dan INPUT2.
Aktifkan Pin |
Masukkan Pin 1 |
Masukkan Pin 2 |
Arah Motor |
Tinggi |
Rendah |
Tinggi |
Belok kanan |
Tinggi |
Tinggi |
Rendah |
Belok kiri |
Tinggi |
Rendah |
Rendah |
Berhenti |
Tinggi |
Tinggi |
Tinggi |
Berhenti |
Jadi seperti yang ditunjukkan pada tabel di atas, untuk putaran bijak 2A harus tinggi dan 1A harus rendah. Begitu pula untuk berlawanan arah jarum jam 1A harus tinggi dan 2A harus rendah.
Setiap kali kartu resmi didekatkan ke modul, motor diprogram untuk bergerak searah jarum jam selama sedetik, untuk menunjukkan gerbang tol dibuka setelah sedetik itu kembali, memberitahukan bahwa gerbang tol ditutup. Cara kerja tol plaza paling baik dijelaskan dalam langkah demi langkah kode C yang diberikan di bawah ini.
Penjelasan Pemrograman
Di bawah ini adalah penjelasan baris ke baris untuk kode Sistem Pengumpulan Tol RFID. Anda dapat memahami konsep dan cara kerja proyek ini dengan membaca kode di bawah ini. Untuk mengunduh atau menyalin, Anda dapat menemukan kode lengkap di bagian bawah halaman.
#include // header untuk mengaktifkan kontrol aliran data pada pin
#define F_CPU 1000000 // memberi tahu frekuensi kristal pengontrol terpasang
#include
#define E 5 // memberi nama “enable” pada pin ke 5 PORTD, karena terhubung ke pin pengaktifan LCD
#define RS 6 // beri nama “registerselection” pada pin ke 6 PORTD, karena terhubung ke pin LCD RS
void send_a_command (perintah char unsigned);
void send_a_character (karakter karakter tidak bertanda);
batal send_a_string (char * string_of_characters);
int utama (kosong)
{
DDRA = 0xFF; // menempatkan porta sebagai pin keluaran
DDRD = 0b11111110;
_delay_ms (50); // memberikan penundaan 50ms
DDRB = 0b11110000; // Mengambil beberapa pin portB sebagai masukan.
UCSRB - = (1 <
UCSRC - = (1 <
UCSRC & = ~ (1 <
UBRRH & = ~ (1 <
UBRRL = 6; // pengaturan baud rate // Berikut ini berisi ID tag, ini harus diubah untuk tag yang berbeda, Ini harus diperbarui agar proyek dapat bekerja
/ * Setelah membuang program di controller, seseorang harus mengambil kartu yang harus diotorisasi dan mendapatkan ID tag. Ini diperoleh dengan menempatkan tag di dekat modul RFID dan ID akan ditampilkan di layar. Setelah mendapatkan ID, program harus diupdate dengan mengganti nomor ID di bawah ini dengan nomor ID baru.
char ADMIT = {{(0x97), (0xa1), (0x90), (0x92)}, {(0x97), (0xa1), (0x90), (0x93)}, {(0x97), (0xa1), (0x90), (0x94)}, {(0x97), (0xa1), (0x90), (0x95)}, {(0x97), (0xa1), (0x90), (0x96)}}; |
Sekarang di atas kami hanya mengotorisasi lima kartu, ini dapat diubah menjadi nomor apa pun.
Misalnya menganggap program default dibuang di controller, dapatkan kartu yang harus diotorisasi. Tempatkan satu per satu di dekat modul, Anda akan mendapatkan ID untuk masing-masing sebagai xxxxxxxx (907a4F87), Jika ada 7 tag yang kita miliki, maka kita akan memiliki 7 8 bit ID. * /
// sekarang untuk tujuh kartu // char ADMIT = {{(0x90), (0x7a), (0x4F), (0x87)},; // mengalokasikan memori untuk menunjukkan ID yang dikirim oleh modul int i = 0; int suara = 0; int k = 0; send_a_command (0x01); // Bersihkan Layar 0x01 = 00000001 _delay_ms (50); send_a_command (0x38); // memberitahu lcd kita menggunakan perintah 8bit / mode data _delay_ms (50); send_a_command (0b00001111); // LAYAR LCD ON dan courser berkedip char MEM; // mengalokasikan memori untuk menyimpan ID lengkap dari tag send_a_string ("NOMOR RFID"); // mengirim string send_a_command (0x80 + 0x40 + 0); // memindahkan kurir ke baris kedua sementara (1) { sementara (! (UCSRA & (1 <
{ } COUNTA = UDR; // UDR menyimpan data delapan bit yang diterima dan dimasukkan ke dalam integer. MEM = COUNTA; // Dua karakter pertama diperbarui ke memori itoa (COUNTA, SHOWA, 16); // perintah untuk meletakkan nomor variabel di LCD (nomor variabel, di mana karakter yang akan diganti, yang basis adalah variabel (sepuluh di sini saat kita menghitung angka di base10)) send_a_string (SHOWA); // memberi tahu layar untuk menampilkan karakter (diganti dengan nomor variabel) orang kedua setelah memposisikan kurser pada LCD sementara (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // karakter ketiga dan keempat diperbarui ke memori sementara (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // karakter kelima dan keenam diperbarui ke memori sementara (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // karakter ketujuh dan delapan diperbarui ke memori send_a_string (""); send_a_command (0x80 + 0x40 + 0); UCSRB & = ~ (1 <
untuk (i = 0; i <5; i ++) { if ((MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT)) {// memeriksa otorisasi membeli membandingkan dua karakter sekaligus dengan karakter di memori PORTB - = (1 <
PORTB & = ~ (1 <
_delay_ms (220); // penundaan _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); PORTB - = (1 <
PORTB & = ~ (1 <
_delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); PORTB & = ~ (1 <
PORTB - = (1 <
} } UCSRB - = (1 <
} } void send_a_command (perintah char unsigned) { PORTA = perintah; PORTD & = ~ (1 <
PORTD - = 1 <
_delay_ms (50); PORTD & = ~ 1 <
PORTA = 0; } batal send_a_character (karakter unsigned char) { PORTA = karakter; PORTD - = 1 <
PORTD - = 1 <
_delay_ms (50); PORTD & = ~ 1 <
PORTA = 0; } batal send_a_string (karakter * string_of_characters) { sementara (* string_of_characters> 0) { send_a_character (* string_of_characters ++); } } |