- Gerekli Bileşenler
- Devre Şeması ve Açıklama
- PIC Mikrodenetleyici ile Parmak İzi Sensörünün Çalışması
- Programlama Açıklaması
Birkaç yıl önce bilim kurgu filmlerinde gördüğümüz Parmak İzi Sensörü, bir kişinin kimliğini çeşitli amaçlarla doğrulamak için artık çok yaygın hale geldi. Günümüzde ofislere katılım, bankalarda çalışan doğrulama, ATM'lerde nakit çekme veya para yatırma, devlet dairelerinde kimlik doğrulama vb. Gibi günlük hayatımızın her yerinde parmak izi tabanlı sistemleri görebiliyoruz. Arduino ile zaten arayüz yaptık ve Raspberry Pi ile bugün Parmak İzi Sensörünü PIC mikro denetleyici ile arayüzleyeceğiz. Bu PIC mikro denetleyici PIC16f877A Parmak İzi Sistemini kullanarak, sisteme yeni parmak izlerini kaydedebilir ve önceden beslenen parmak izlerini silebiliriz. Sistemin komple çalışma içinde gösterilmiştir video makalenin sonunda verilmiştir.
Gerekli Bileşenler
- PIC16f877A Mikrodenetleyici
- Parmak İzi Modülü
- Basmalı düğmeler veya tuş takımı
- 16x2 LCD
- 10k pot
- 18.432000 MHz Kristal Osilatör
- Ekmek Tahtası veya PCB (JLCPCB'den sipariş edilmiştir)
- Atlama telleri
- LED (isteğe bağlı)
- Direnç 150 ohm -1 k ohm (isteğe bağlı)
- 5v Güç kaynağı
Devre Şeması ve Açıklama
Bu ise projeyi arayüz sensörü PIC Mikrodenetleyici parmak izinin, biz kullandık 4 basma butonları bu düğmeler multifunctioning için kullanılır:. Anahtar 1, sistemde parmak izini saklarken veya silerken parmak izini eşleştirmek ve parmak izi kimliğini artırmak için kullanılır. Anahtar 2, yeni parmak izini kaydetmek ve sistemde parmak izini saklarken veya silerken parmak izi kimliğini azaltmak için kullanılır. 3 tuşu, sistemden saklanan parmağı silmek için kullanılır ve 4 tuşu, Tamam için kullanılır. Bir LED parmak izinin algılandığını veya eşleştiğini belirtmek için kullanılır. Burada UART üzerinde çalışan bir parmak izi modülü kullandık. Bu yüzden burada bu parmak izi modülünü PIC mikro denetleyici ile varsayılan baud hızı olan 57600'de arayüzledik.
Bu yüzden öncelikle aşağıdaki Devre Şemasında gösterildiği gibi gerekli tüm bağlantıları yapmamız gerekiyor. Bağlantılar basit, parmak izi modülünü PIC mikrodenetleyicinin UART'ına bağladık. Tüm mesajları görüntülemek için 16x2 LCD kullanılır. Bunun kontrastını kontrol etmek için LCD ile 10k pot da kullanılır. 16x2 LCD data pinleri bağlı PORTA pinleridir. LCD'nin d4, d5, d6 ve d7 pinleri sırasıyla PIC mikrodenetleyicinin RA0, RA1, RA2 ve RA3 pinlerine bağlıdır. PORTD'nin Pin RD0, RD1, RD2 ve RD'ye dört basma düğmesi (veya tuş takımı) bağlanır. LED ayrıca port PORTC'nin RC3 pinine bağlanır. Burada, mikro denetleyiciyi çalıştırmak için 18.432000 MHz harici kristal osilatör kullandık.
PIC Mikrodenetleyici ile Parmak İzi Sensörünün Çalışması
Bu projenin çalışması basittir, kaynak koddan oluşturulan hex dosyasını PIC programlayıcı veya brülör (PIckit2 veya Pickit3 veya diğerleri) yardımıyla PIC mikro denetleyicisine yükleyin ve ardından LCD ve ardından kullanıcı üzerinden bazı giriş mesajlarını göreceksiniz. işlemler için bir seçim girmeniz istenecektir. Parmak izini eşleştirmek için kullanıcının 1 tuşuna basması gerekir, ardından LCD, Parmağı Parmak İzi Sensörüne Yerleştir'i ister. Şimdi parmak izi modülünün üzerine parmağınızı koyarak parmak izlerimizin önceden kaydedilip kaydedilmediğini kontrol edebiliriz. Parmak iziniz kaydedilmişse, LCD, parmak izi benzeri ' ID: 2' saklama kimliğiyle mesajı gösterecektir, aksi takdirde 'Bulunamadı' gösterecektir .
Şimdi bir parmak izi kaydetmek için kullanıcının kayıt düğmesine veya 2 tuşuna basması ve LCD ekrandaki talimat mesajlarını izlemesi gerekir.
Kullanıcı parmak izlerinden herhangi birini silmek isterse, kullanıcının silme düğmesine veya 3 tuşuna basması gerekir . Bundan sonra LCD, silinecek parmak izinin kimliğini soracaktır. Arttırma ve azaltma için artık artırma basma düğmesi veya anahtar 1'i (eşleştirme basma düğmesi veya anahtar 1) ve azaltma basma düğmesi veya anahtar 2'yi (basma düğmesini veya anahtar 2'yi kaydetme) kullanarak, kullanıcı kaydedilen Parmak İzi kimliğini seçebilir ve OK'e basabilir parmak izini silmek için düğmesine basın. Daha fazla anlayış için projenin sonunda verilen videoya bakın.
Parmak İzi arayüzü Not: Bu projenin programı yeni başlayanlar için biraz karmaşıktır. Ancak, r305 parmak izi modülü veri sayfasını okuyarak yapılan basit arayüz kodu. Bu parmak izi modülünün işleyişiyle ilgili tüm talimatlar veri sayfasında verilmiştir.
Burada parmak izi modülüyle konuşmak için bir çerçeve formatı kullandık. Parmak izi modülüne bir komut veya veri talebi çerçevesi gönderdiğimizde, bize uygulanan komutla ilgili verileri veya bilgileri içeren aynı çerçeve formatıyla yanıt verir. Tüm veri ve komut çerçevesi formatı kullanım kılavuzunda veya R305 parmak izi modülünün veri sayfasında verilmiştir.
Programlama Açıklaması
Programlamada aşağıdaki çerçeve formatını kullandık.
Programa, bu projenin sonunda verilen kodun tamamını kontrol edebileceğiniz LCD, Düğmeler ve LED için yapılandırma bitlerini ayarlayarak ve makrolar ve pinler tanımlayarak başlıyoruz. PIC Microcontroller'da yeniyseniz, PIC Microcontroller Projesine Başlarken ile başlayın.
Daha sonra bazı değişken ve dizileri tanımlayıp başlattık ve bu projede parmak izi modülünü PIC mikro denetleyici ile arayüzlemek için kullanmamız gereken bir çerçeve oluşturduk.
uchar buf; uchar buf1; uçucu uint indeksi = 0; uçucu int bayrağı = 0; uint msCount = 0; uint g_timerflag = 1; uçucu uint sayısı = 0; uchar verileri; uint kimliği = 1; enum { CMD, DATA, SBIT_CREN = 4, SBIT_TXEN, SBIT_SPEN, }; const karakter passPack = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x7, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1B}; const char f_detect = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x3, 0x1, 0x0, 0x5}; const char f_imz2ch1 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x1, 0x0, 0x8}; const char f_imz2ch2 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x2, 0x0, 0x9}; const char f_createModel = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x3,0x5,0x0,0x9}; char f_storeModel = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x6,0x6,0x1,0x0,0x1,0x0,0xE}; const char f_search = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x8, 0x1B, 0x1, 0x0, 0x0, 0x0, 0xA3, 0x0, 0xC8}; char f_delete = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x7,0xC, 0x0,0x0,0x0,0x1,0x0,0x15};
Bundan sonra, LCD'yi çalıştırmak için LCD işlevini yaptık.
geçersiz lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; RS = rw; EN = 1; __delay_ms (5); EN = 0; LCDPORT = ch & 0x0F; EN = 1; __delay_ms (5); EN = 0; } Lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ gecikme_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD) için; }
Verilen işlev, UART'ı başlatmak için kullanılır
void serialbegin (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate)) - 1; // baud hızı @ 18.432000Mhz Clock TXSTAbits.SYNC = 0; // Eşzamansız Modu Ayarlama, yani UART RCSTAbits.SPEN = 1; // Seri Portu etkinleştirir TRISC7 = 1; // Veri Sayfasında Belirtildiği Gibi TRISC6 = 0; // Veri Sayfasında belirtildiği gibi RCSTAbits.CREN = 1; // Sürekli Alımı Etkinleştirir TXSTAbits.TXEN = 1; // İletimi etkinleştirir GIE = 1; // ENABLE, INTCONbits.PEIE'yi kesintiye uğratır = 1; // Çevre birimi kesintilerini etkinleştirin. PIE1bits.RCIE = 1; // USART'ın kesilmesi PIE1bits.TXIE = 0; // USART TX kesintisini devre dışı bırak PIR1bits.RCIF = 0; }
Verilen fonksiyonlar, parmak izi modülüne komutların aktarılması ve parmak izi modülünden veri alınması için kullanılır.
void serialwrite (char ch) { while (TXIF == 0); // Verici kaydı boş olana kadar bekleyin TXIF = 0; // Verici işaretini temizle TXREG = ch; // aktarılacak olan karakteri aktarım kaydına yükle } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } void interrupt SerialRxPinInterrupt (void) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; eğer (dizin> 0) bayrak = 1; RCIF = 0; // rx bayrağını temizle } } void serialFlush () { for (int i = 0; i
Daha sonra parmak izine iletilecek verileri hazırlayan ve parmak izi modülünden gelen verilerin kodunu çözen bir fonksiyon yapmamız gerekiyor.
int sendcmd2fp (char * pack, int len) { uint res = ERROR; serialFlush (); indeks = 0; __delay_ms (100); for (int i = 0; i
Şimdi, kodda dört farklı görev için kullanılabilen dört işlev vardır:
- Parmak izi kimliğini girme işlevi - birim getId ()
- Parmağı eşleştirme işlevi - boşluk eşleşmesi
- Yeni parmak kaydetme işlevi - void enrolFinger ()
- Parmağı silme işlevi - deleteFinger ()
Dört işlevin tümü ile birlikte tam kod, sonunda verilmiştir.
Şimdi ana işlevde, GPIO'ları, LCD'yi, UART'ı başlatıyoruz ve parmak izi modülünün bir mikro denetleyiciye bağlı olup olmadığını kontrol ediyoruz. Daha sonra LCD üzerinden bazı giriş mesajlarını gösterir. Son olarak while döngüsünde, projeyi çalıştırmak için tüm tuşları veya butonları okuruz.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; serialbegin (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("Parmak İzi"); lcdwrite (192, CMD); lcdprint ("Arayüz"); __delay_ms (2000); lcdwrite (1, CMD); lcdprint ("PIC16F877A Kullanımı"); lcdwrite (192, CMD); lcdprint ("Devre Özeti"); __delay_ms (2000); indeks = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP Bulunamadı"); __delay_ms (2000); indeks = 0; } lcdwrite (1, CMD); lcdprint ("FP Bulundu"); __delay_ms (1000); lcdinst (); while (1) { FP = eşleşme
Tam PIC Kodu ve Çalışma Videosu aşağıda verilmiştir. Parmak İzi Sensör Modülünü kullanarak diğer projelerimizi de kontrol edin:
- Arduino ile Parmak İzi Tabanlı Biyometrik Oylama Makinesi
- Arduino ve Parmak İzi Sensörünü kullanan Biyometrik Güvenlik Sistemi
- Arduino kullanarak Parmak İzi Tabanlı Biyometrik Seyirci Sistemi
- Raspberry Pi ile Parmak İzi Sensörü Arayüzü