Kami tahu di pejabat, pusat membeli-belah dan di banyak tempat lain di mana hanya orang yang mempunyai kad kebenaran dibenarkan memasuki bilik. Sistem ini menggunakan sistem komunikasi RFID. RFID digunakan di pusat membeli-belah untuk menghentikan pencurian kerana produk ditandai dengan cip RFID dan ketika seseorang meninggalkan bangunan dengan cip RFID, penggera akan dibunyikan secara automatik. Tag RFID direka sekecil pasir. Sistem pengesahan RFID senang dirancang dan harganya murah. Beberapa sekolah dan kolej kini menggunakan sistem kehadiran berdasarkan RFID.
Dalam projek ini kita akan merancang sistem pengumpulan tol berdasarkan RFID untuk tujuan keselamatan. Oleh itu, sistem ini membuka pintu dan membenarkan orang hanya dengan tag RFID yang dibenarkan. ID pemegang teg yang sah diprogramkan ke Mikrokontroler ATMEGA dan hanya pemegang tersebut yang dibenarkan keluar atau memasuki premis.
Komponen Diperlukan
Perkakasan: Pengawal mikro ATmega32, bekalan kuasa (5v), Pengaturcara AVR-ISP, JHD_162ALCD (modul LCD 16x2), kapasitor 100uF (disambungkan merentasi bekalan kuasa), butang, perintang 10KΩ, kapasitor 100nF, LED (dua keping), EM-18 (Modul pembaca RFID), IC pemandu motor L293D, motor DC 5V.
Perisian: Atmel studio 6.1, progisp atau flash magic.
Diagram Litar dan Penjelasan Kerja
Dalam rangkaian sistem pengumpulan tol RFID yang ditunjukkan di atas, PORTA ATMEGA32 disambungkan ke port data LCD. Di sini kita harus ingat untuk mematikan komunikasi JTAG di PORTC ke ATMEGA dengan menukar bait fius, jika kita ingin menggunakan PORTC sebagai port komunikasi biasa. Dalam LCD 16x2, terdapat 16 pin di atas semua jika ada lampu belakang, jika tidak ada lampu belakang akan ada 14 pin. Kita boleh menghidupkan atau meninggalkan pin lampu belakang. Sekarang dalam 14 pin terdapat 8 data pin (7-14 atau D0-D7), 2 pin bekalan kuasa (1 & 2 atau VSS & VDD atau GND & + 5V), 3 rd pin untuk kawalan kontras (VEE-kawalan bagaimana tebal watak harus ditunjukkan), 3 pin kawalan (RS & RW & E).
Di litar, anda dapat melihat bahawa saya hanya mengambil dua pin kawalan. Ini memberikan fleksibiliti pemahaman yang lebih baik. Bit kontras dan BACA / MENULIS tidak sering digunakan sehingga boleh dipendekkan ke tanah. Ini meletakkan LCD dalam mod kontras dan baca tertinggi. Kita hanya perlu mengawal pin ENABLE dan RS untuk menghantar watak dan data yang sesuai.
Sambungan yang dibuat untuk LCD, diberikan di bawah:
PIN1 atau VSS ke pembumian
PIN2 atau VDD atau VCC untuk +5v kuasa
PIN3 atau VEE ke ground (memberikan kontras maksimum terbaik untuk pemula)
PIN4 atau RS (Pemilihan Daftar) ke PD6 MCU
PIN5 atau RW (Baca / Tulis) ke tanah (meletakkan LCD dalam mod baca memudahkan komunikasi untuk pengguna)
PIN6 atau E (Aktifkan) ke PD5 Mikrokontroler
PIN7 atau D0 hingga PA0
PIN8 atau D1 hingga PA1
PIN9 atau D2 hingga PA2
PIN10 atau D3 hingga PA3
PIN11 atau D4 hingga PA4
PIN12 atau D5 hingga PA5
PIN13 atau D6 hingga PA6
PIN14 atau D7 hingga PA7
Di litar, anda dapat melihat kami telah menggunakan komunikasi 8bit (D0-D7). Namun ini bukan wajib dan kita boleh menggunakan komunikasi 4bit (D4-D7) tetapi dengan program komunikasi 4 bit menjadi sedikit rumit, jadi saya lebih suka komunikasi 8 bit.
Oleh itu, dari pemerhatian dari jadual di atas, kita menyambungkan 10 pin LCD ke pengawal di mana 8 pin adalah pin data dan 2 pin untuk kawalan.
Sebelum melangkah ke hadapan, kita perlu memahami mengenai komunikasi bersiri. Modul RFID di sini menghantar data ke pengawal secara bersiri. Ia mempunyai mod komunikasi yang lain tetapi untuk komunikasi yang mudah, kita memilih RS232. Pin modul RS232 disambungkan ke pin RXD ATMEGA.
Data yang dihantar oleh modul RFID adalah seperti:
Sekarang untuk antara muka modul RFID, ciri berikut diperlukan:
1. Pin RXD (ciri penerimaan data) pengawal mesti diaktifkan.
2. Oleh kerana komunikasi bersifat bersiri, kita perlu mengetahui setiap kali data selamat diterima, sehingga kita dapat menghentikan program sehingga bait lengkap diterima. Ini dilakukan dengan membolehkan data menerima gangguan sepenuhnya.
3. RFID menghantar data ke pengawal dalam mod 8bit. Oleh itu, dua watak akan dihantar ke pengawal pada satu masa. Ini ditunjukkan dalam rajah di atas.
4. Dari rajah di atas, tidak ada bit pariti, satu bit berhenti dalam data yang dihantar oleh modul.
Ciri-ciri di atas ditetapkan dalam daftar pengawal; kita akan membincangkannya secara ringkas,
MERAH (RXEN): Bit ini mewakili ciri data penerimaan. Bit ini mesti ditetapkan agar data dari modul diterima oleh pengawal. Ia juga membolehkan pin pengawal RXD.
BROWN (RXCIE): Bit ini mesti ditetapkan untuk mendapat gangguan setelah penerimaan data berjaya. Dengan mengaktifkan bit ini kita dapat mengetahui, tepat setelah data 8 bit diterima.
PINK (URSEL): Bit ini mesti ditetapkan sebelum mengaktifkan bit lain di UCSRC. Setelah menetapkan, bit lain yang diperlukan di UCSRC, URSEL mesti dilumpuhkan atau dihentikan.
KUNING (UCSZ0, UCSZ1, UCSZ2): Ketiga bit ini digunakan untuk memilih bilangan bit data yang kami terima atau hantar dalam sekali jalan.
Oleh kerana data yang dihantar oleh modul RFID adalah jenis data 8bit, kita harus menetapkan UCSZ0, UCSZ1 menjadi satu dan UCSZ2 menjadi sifar.
ORANGE (UMSEL): Bit ini ditetapkan berdasarkan sama ada sistem berkomunikasi secara tidak segerak (kedua-duanya menggunakan jam yang berbeza) atau secara serentak (kedua-duanya menggunakan jam yang sama).
Oleh kerana modul dan pengawal menggunakan jam yang berbeza, bit ini mesti ditetapkan ke sifar atau dibiarkan sahaja kerana semuanya ditetapkan ke sifar secara lalai.
HIJAU (UPM1, UPM0): Kedua-dua bit ini disesuaikan berdasarkan pariti bit yang kita gunakan dalam komunikasi.
Oleh kerana modul RFID mengirimkan data tanpa pariti, kami telah menetapkan kedua-dua UPM1, UPM0 menjadi sifar atau mereka dapat dibiarkan begitu sahaja kerana semua bit dalam daftar apa pun ditetapkan ke nol secara lalai.
BLUE (USBS): Bit ini digunakan untuk memilih bilangan bit berhenti yang kita gunakan semasa komunikasi.
Oleh kerana modul RFID menghantar data dengan satu bit berhenti, kita hanya perlu meninggalkan USBS sedikit sahaja.
Akhirnya kita perlu menetapkan kadar baud, dari gambar di atas jelas bahawa modul RFID menghantar data ke pengawal dengan kadar baud 9600bps (bit per saat).
Kadar baud ditetapkan dalam pengawal dengan memilih UBRRH yang sesuai.
Nilai UBRRH dipilih dengan laju baud rujukan silang dan frekuensi kristal CPU, Oleh itu dengan rujukan silang nilai UBRR dilihat sebagai '6', dan dengan itu laju baud ditetapkan.
Sekarang seperti yang ditunjukkan dalam gambar, dua pin dari pengawal menuju ke L293D, yang merupakan H-BRIDGE yang digunakan untuk mengawal kelajuan dan arah putaran untuk motor DC berkuasa rendah.
L293D adalah IC H-BRIDGE yang direka untuk menggerakkan motor DC berkuasa rendah dan ditunjukkan dalam gambar, IC ini terdiri daripada dua jambatan h dan oleh itu ia dapat menggerakkan dua motor DC. Jadi IC ini dapat digunakan untuk menggerakkan motor robot dari isyarat mikrokontroler.
Sekarang seperti yang dibincangkan sebelum ini IC mempunyai kemampuan untuk mengubah arah putaran motor DC. Ini dicapai dengan mengawal tahap voltan pada INPUT1 dan INPUT2.
Dayakan Pin |
Pin Input 1 |
Pin Input 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 dalam jadual di atas, untuk putaran jam 2A harus tinggi dan 1A harus rendah. Begitu juga untuk lawan arah jam 1A harus tinggi dan 2A harus rendah.
Setiap kali kad yang dibenarkan dibawa berhampiran modul, motor diprogram untuk bergerak searah jarum jam untuk sesaat, untuk menunjukkan pintu tol dibuka sesaat kemudian ia kembali, memberitahu pintu tol ditutup. Cara kerja plaza tol dijelaskan dengan lebih baik dalam langkah demi langkah kod C yang diberikan di bawah.
Penjelasan Pengaturcaraan
Berikut adalah penjelasan garis ke baris untuk kod Sistem Pengumpulan Tol RFID. Anda boleh memahami konsep dan kerja projek ini dengan membaca kod di bawah. Untuk memuat turun atau menyalin, anda boleh mendapatkan kod lengkap di bahagian bawah halaman.
#include // header untuk membolehkan kawalan aliran data ke atas pin
#define F_CPU 1000000 // memberitahu frekuensi kristal pengawal dilampirkan
#sertakan
#define E 5 // memberikan nama "aktifkan" ke pin ke- 5 PORTD, kerana disambungkan ke pin aktifkan LCD
#define RS 6 // memberikan nama "registerelection" ke pin ke- 6 PORTD, kerana dihubungkan ke pin LCD RS
batal send_a_command (perintah char yang tidak ditandatangani);
batal send_a_character (watak char yang tidak ditandatangani);
batal send_a_string (char * string_of_characters);
int utama (tidak sah)
{
DDRA = 0xFF; // meletakkan porta sebagai pin output
DDRD = 0b11111110;
_delay_ms (50); // memberikan kelewatan 50ms
DDRB = 0b11110000; // Mengambil beberapa pin portB sebagai input.
UCSRB - = (1 <
UCSRC - = (1 <
UCSRC & = ~ (1 <
UBRRH & = ~ (1 <
UBRRL = 6; // menetapkan kadar baud // Berikut ini mengandungi ID tag, ini mesti diubah untuk tag yang berbeza, ini mesti dikemas kini agar projek berfungsi
/ * Setelah membuang program di pengawal, seseorang mesti mengambil kad yang mesti disahkan dan mendapatkan ID kad. Ini diperoleh dengan meletakkan tanda di dekat modul RFID dan ID akan ditunjukkan di skrin. Setelah mendapatkan ID, program mesti dikemas kini dengan menggantikan nombor ID di bawah dengan nombor 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 kita hanya mengizinkan lima kad, kad ini boleh ditukar menjadi nombor apa pun.
Sebagai contoh menganggap program lalai dibuang dalam pengawal, dapatkan kad yang seharusnya diberi kebenaran. Letakkan satu demi satu modul dekat yang lain, anda akan mendapat ID untuk setiap modul sebagai xxxxxxxx (907a4F87), Sekiranya ada 7 tag yang kita ada, maka kita akan mempunyai 7 ID 8 bit. * /
// sekarang untuk tujuh kad ia berlaku // char ADMIT = {{(0x90), (0x7a), (0x4F), (0x87)},; // memperuntukkan memori untuk menunjukkan ID yang dihantar mengikut modul int i = 0; undi int = 0; int k = 0; send_a_command (0x01); // Skrin Kosong 0x01 = 00000001 _delay_ms (50); send_a_command (0x38); // memberitahu lcd bahawa kita menggunakan mod perintah / data 8bit _delay_ms (50); send_a_command (0b00001111); // LCD SCREEN ON dan courser berkelip char MEM; // memperuntukkan memori untuk menyimpan ID lengkap dari tag send_a_string ("NOMOR RFID"); // menghantar tali send_a_command (0x80 + 0x40 + 0); // beralih kurser ke baris kedua semasa (1) { sementara (! (UCSRA & (1 <
{ } COUNTA = UDR; // UDR menyimpan data lapan bit yang diterima dan dimasukkan ke dalam bilangan bulat. MEM = NEGARA; // dua watak pertama dikemas kini ke memori itoa (COUNTA, SHOWA, 16); // perintah untuk meletakkan nombor pemboleh ubah dalam LCD (nombor berubah, watak mana yang akan diganti, asas mana yang berubah-ubah (sepuluh di sini kerana kita mengira nombor di pangkalan10)) send_a_string (SHOWA); // memberitahu paparan untuk menunjukkan watak (digantikan oleh pemboleh ubah nombor) orang kedua setelah meletakkan jurulatih pada LCD sementara (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = NEGARA; // watak ketiga dan keempat dikemas kini ke memori sementara (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // aksara kelima dan keenam dikemas kini ke memori sementara (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // ketujuh dan lapan aksara dikemas kini ke memori send_a_string (""); send_a_command (0x80 + 0x40 + 0); UCSRB & = ~ (1 <
untuk (i = 0; i <5; i ++) { jika ((MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT)) {// memeriksa kebenaran membeli membandingkan dua watak pada satu masa dengan watak dalam memori PORTB - = (1 <
PORTB & = ~ (1 <
_delay_ms (220); // kelewatan _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 <
} } batal send_a_command (perintah char yang tidak ditandatangani) { PORTA = arahan; PORTD & = ~ (1 <
PORTD - = 1 <
_delay_ms (50); PORTD & = ~ 1 <
PORTA = 0; } batal send_a_character (watak char yang tidak ditandatangani) { PORTA = watak; PORTD - = 1 <
PORTD - = 1 <
_delay_ms (50); PORTD & = ~ 1 <
PORTA = 0; } batal send_a_string (char * string_of_characters) { sementara (* string_of_characters> 0) { send_a_character (* string_of_characters ++); } } |