- Nepieciešamās sastāvdaļas:
- Pirkstu nospiedumu sensora modulis balsošanas mašīnā:
- Darba skaidrojums:
- Ķēdes skaidrojums:
- Programmas skaidrojums:
Mēs visi esam diezgan pazīstami ar elektroniskajām balsošanas mašīnām, kur jūsu balss tiek reģistrēta elektroniski, un jums nav jāizmanto vēlēšanu zīme, lai balsotu vēlēšanās. Mūsdienās drošība rada lielas bažas, un ir jānodrošina arī tas, ka kāds nevar balsot divreiz, tāpēc šo problēmu var atrisināt, ieviešot balsošanu ar pirkstu nospiedumiem, kur personu var pilnvarot, pamatojoties uz pirkstu nospiedumiem. Tas arī apturēs viltus balsošanu. Tāpēc šodien mēs veidojam uz FingerPrint balstītu biometrisko balsošanas iekārtu, izmantojot Arduino.
Pārbaudiet arī mūsu iepriekšējos elektroniskās balsošanas iekārtas projektus, izmantojot dažādus mikrokontrollerus:
- Elektroniskā balsošanas mašīna, izmantojot Raspberry Pi
- RFID balstīta balsošanas mašīna
- AVR mikrokontrolleru bāzes elektroniskās balsošanas mašīnas projekts
- Elektroniskā balsošanas mašīna, izmantojot Arduino
Nepieciešamās sastāvdaļas:
- Arduino Uno
- Pirkstu nospiedumu sensora modulis
- Spiediet pogas
- Gaismas diodes -2
- 1K rezistors -3
- 2.2K rezistors
- Jauda
- Savienojošie vadi
- Buzzer
- 16x2 LCD
- Maizes dēlis
Pirkstu nospiedumu sensora modulis balsošanas mašīnā:
Pirkstu drukas sensora modulis vai pirkstu drukas skeneris ir modulis, kas uztver pirksta izdrukas attēlu, pēc tam pārveido to līdzvērtīgā veidnē un saglabā tos atmiņā ar Arduino izvēlēto ID (atrašanās vietu). Šeit visu procesu pavada Arduino, piemēram, pirkstu nospiedumu attēla uzņemšana, pārveidošana par veidnēm un atrašanās vietas saglabāšana utt.
Šajā FingerPrint balsošanas automāta shēmā mēs esam izmantojuši pirkstu drukas sensora moduli, lai autentificētu patieso vēlētāju, ievadot viņu pirkstu sistēmā. Šeit mēs izmantojam 5 spiedpogas, lai saskaņotu, reģistrētu / atgrieztos, dzēstu / labi, augšup un lejup. Reģistrēšanās un Del taustiņam šeit ir dubultas funkcijas. Reģistrācijas taustiņš tiek izmantots, lai reģistrētu jaunu pirkstu nospiedumus sistēmā un muguras funkcijās. Tas nozīmē, ka tad, kad lietotājs vēlas reģistrēt jaunu pirkstu, viņam / viņai jānospiež reģistrācijas taustiņš, pēc tam LCD pieprasa ID vai vietu, kur lietotājs vēlas saglabāt pirkstu nospiedumu izvadi. Tagad, ja lietotājs nevēlas turpināt tālāk, viņš / viņa var vēlreiz nospiest reģistrēšanās taustiņu, lai atgrieztos (šoreiz reģistrēšanās taustiņš darbojas kā Atpakaļ). Nozīmē, ka reģistrēšanās taustiņam ir gan reģistrēšanās, gan atpakaļ funkcija. DEL / OK taustiņš ir arī tāda pati dubultā funkcija kā, kad lietotājs reģistrē jaunu pirkstu, tad viņam / viņai ir jāizvēlas pirksta ID vai atrašanās vieta, izmantojot vēl divus taustiņus, proti, augšup un lejup, tagad lietotājam jānospiež taustiņš DEL / OK (šoreiz šis taustiņš darbojas tāpat kā labi), lai turpiniet ar izvēlēto ID vai atrašanās vietu. Spēles atslēga tiek izmantota ikreiz, kad vēlētājs vēlas balsot, tad viņam / viņai vispirms ir jāapstiprina īstais vēlētājs, turot pirkstu uz pirkstu nospiedumu sensora, ja viņš / viņa ir izturējis šo autentifikāciju, tad viņš / viņa var balsot.
Lai uzzinātu vairāk par pirkstu nospiedumu un citu lietu reģistrēšanu, pārbaudiet mūsu iepriekšējo pamācību par pirkstu drukas sensora saskarni ar Arduino, kā arī pārbaudiet mūsu demonstrācijas video šīs apmācības beigās.
Darba skaidrojums:
Šīs biometriskās vēlēšanu sistēmas darbība ir mazliet sarežģīts iesācējiem. Pirmkārt, lietotājam ar spiedpogu / taustiņu palīdzību jāreģistrē pirksti vai vēlētāji (šajā kodā vēlētāja maksimālais ierobežojums ir 25). Lai to izdarītu, jānospiež taustiņš ENROLL un pēc tam LCD pieprasa ievadīt atrašanās vietu / ID, kur pirksts būs veikals. Tāpēc tagad lietotājam jāievada ID (atrašanās vieta), izmantojot UP / DOWN taustiņus. Pēc atrašanās vietas / ID izvēles lietotājam jānospiež taustiņš OK (DEL taustiņš). Tagad LCD lūgs novietot pirkstu virs pirksta drukas moduļa. Tagad lietotājam jāpieliek pirksts virs pirksta drukas moduļa. Tad LCD lūgs noņemt pirkstu no pirkstu drukas moduļa un atkal lūgs ievietot pirkstu. Tagad lietotājam atkal jāpieliek pirksts virs pirksta drukas moduļa. Tagad pirkstu nospiedumu modulis uzņem attēlu un pārvērš tos veidnēs un pēc atlasītā ID saglabā pirkstu drukas moduļa atmiņā.Tagad vēlētājs tiks reģistrēts un viņš / viņa varēs balsot. Ar to pašu metodi visus vēlētājus var reģistrēt sistēmā.
Tagad, ja lietotājs vēlas noņemt vai izdzēst kādu no saglabātajiem ID, viņam / viņai jānospiež taustiņš DEL, pēc DEL taustiņa nospiešanas LCD lūgs atlasīt atrašanās vietu, piemēram, atlasīt ID, kas jāizdzēš. Tagad lietotājam jāizvēlas ID un jānospiež taustiņš OK (tas pats DEL taustiņš). Tagad LCD paziņos, ka pirksts ir veiksmīgi izdzēsts.
Balsošanas process:
Tagad, kad lietotājs vēlas balsot, viņam / viņai ir jānospiež atbilstības taustiņš, pēc tam skaņas signāls iepīkstas un gaismas diode arī mirgos, un LCD lūgs novietot pirkstu virs pirksta nospieduma moduļa. Tagad Arduino trīs reizes mēģinās pielikt pirkstu. Pēc pirksta novietošanas virs pirkstu nospiedumu moduļa pirkstu nospiedumu modulis uztver pirksta attēlu, atrodot tā ID sistēmā. Ja tiek konstatēts pirksta ID, LCD displejā būs redzams autorizētais vēlētājs. Tas nozīmē, ka lietotājam ir tiesības balsot. Un tad sistēma pāriet uz nākamo balsošanas posmu. Tagad zaļā gaismas diode spīdēs, tas nozīmē, ka tagad vēlētājs var balsot par saviem kandidātiem, nospiežot attiecīgo taustiņu (no RED maizes dēļa šajā demonstrācijā). Ja tas pats vēlētājs vēlas balsot vēlreiz, sistēma to parādīs "Jau nobalsots " . Nozīmē, ka viens un tas pats vēlētājs vairs nevar balsot, un signāls pīkst 5 minūtes. Ja kāds nereģistrēts lietotājs vēlas balsot, pirkstu nospiedumu modulis sistēmā neatklās tā ID un LCD displejā būs redzams “ Nav atrasts pirkstu nospiedums” .
CAN1, CAN2, CAN3 šeit apzīmē 1., 2. un 3. kandidātu, kuri ir kandidējuši vēlēšanās.
Ķēdes skaidrojums:
Šī FingerPrint balstītā balsošanas automāta projekta shēma ir ļoti vienkārša, kas satur Arduino visa projekta procesa kontrolei, spiedpogu reģistrēšanai, dzēšanai, ID izvēlei un balsošanas mērķim, skaņas signālu trauksmei, LED indikācijai un 16x2 LCD instrukcijai Vēlētājs un arī rezultāta uzrādīšana. Dzeltenā gaismas diode norāda, ka pirkstu nospiedumu modulis ir gatavs uzņemt pirksta attēlu, un zaļā gaismas diode norāda, ka sistēma ir gatava balsot vai redzēt rezultātus.
Spiedpoga ir tieši savienota ar tapu A0 (ENROLL), A1 (DEL), A2 (UP), A3 (DOWN) un A4 (Match), D5 (Can1), D4 (Can2), D3 (Can3), D2 (Rezultāts) attiecībā uz zemi. Dzeltenā gaismas diode ir savienota ar Arduino digitālo tapu D7 attiecībā pret zemi caur 1k rezistoru, un zaļā gaismas diode ir savienota ar Arduino D6 ar to pašu metodi. Pirkstu nospiedumu moduļa Rx un Tx ir tieši savienoti ar Arduino sērijas tapām Tx un Rx. 5v padevi izmanto pirkstu nospiedumu moduļa darbināšanai, kas ņemts no Arduino dēļa. Pie A5 ir pievienots arī skaņas signāls. 16x2 LCD ir konfigurēts 4 bitu režīmā, un tā RS, EN, D4, D5, D6 un D7 ir tieši savienoti ar Arduino digitālo tapu D13, D12, D11, D10, D9 un D8.
Programmas skaidrojums:
Programmā mēs esam izmantojuši Adafruit Fingerprint Sensor Library, lai pirkstu nospiedumu moduli sasaistītu ar Arduino dēli. Jūs varat pārbaudīt visu kodu zemāk. Šeit mēs izskaidrojam galvenās Arduino programmas funkcijas.
Iestatīšanas funkcijā mēs esam devuši norādījumus noteiktām tapām un esam uzsākuši LCD un pirkstu nospiedumu moduli.
Pēc tam funkcijā void loop () mēs esam gaidījuši pārbaudes taustiņu un nospieduši taustiņu Match, lai sāktu pirkstu nospiedumu, lai ņemtu ievadi un salīdzinātu uzņemtā attēla ID ar saglabātajiem ID. Ja notiek sakritība, turpiniet nākamo soli.
void loop () {lcd.setCursor (0,0); lcd.print ("Preses spēles taustiņš"); lcd.setCursor (0,1); lcd.print ("lai palaistu sistēmu"); digitalWrite (indVote, LOW); digitalWrite (indFinger, LOW); if (digitalRead (sakritība) == 0) {digitalWrite (buzzer, HIGH); kavēšanās (200); digitalWrite (zummer, LOW); digitalWrite (indFinger, HIGH); par (int i = 0; i <3; i ++)…………………
Ņemot vērā void checkKeys (), tiek izmantota funkcija, lai pārbaudītu, vai taustiņš Enroll vai DEL ir nospiests vai nav, un kā rīkoties, ja tiek nospiests. Ja nospiedis taustiņu ENROLL, tiek izsaukta funkcija Reģistrēties () un nospiežot DEL taustiņu, tiek izsaukta dzēšanas () funkcija.
void checkKeys () {if (digitalRead (reģistrēties) == 0) {lcd.clear (); lcd.print ("Lūdzu, uzgaidiet"); kavēšanās (1000); while (digitalRead (reģistrēties) == 0); Reģistrēties (); } else if (digitalRead (del) == 0) {lcd.clear (); lcd.print ("Lūdzu, uzgaidiet"); kavēšanās (1000); dzēst (); }}
Dotā funkcija tiek izmantota, lai ievadītu dzēšamo ID un izsauktu funkciju uint8_t deleteFingerprint (uint8_t id) , kas izdzēsīs pirkstu no ierakstiem.
void dzēst () {int skaits = 0; lcd.clear (); lcd.print ("Dzēst pirkstu"); lcd.setCursor (0,1); lcd.print ("Atrašanās vieta:"); kamēr (1) {lcd.setCursor (9,1); lcd.print (skaits); ja (digitalRead (augšup) == 0) {skaits ++; ja (skaits> 25) skaits = 0; kavēšanās (500); }……………….
Šī funkcija tiek izmantota pirkstu nospiedumu dzēšanai no izvēlētā ID ieraksta.
uint8_t deleteFingerprint (uint8_t id) {uint8_t p = -1; lcd.clear (); lcd.print ("Lūdzu, uzgaidiet"); p = finger.deleteModel (id); if (p == FINGERPRINT_OK) {Serial.println ("Izdzēsts!"); lcd.clear (); lcd.print ("Figer dzēsts"); lcd.setCursor (0,1); lcd.print ("Veiksmīgi"); kavēšanās (1000); } else {Serial.print ("Kaut kas nepareizs"); lcd.clear (); lcd.print ("Kaut kas nepareizs"); lcd.setCursor (0,1); lcd.print ("Mēģiniet vēlreiz vēlāk"); kavēšanās (2000); atgriešanās p; }}
Attiecīgā funkcija tiek izmantota, lai uzņemtu pirkstu nospiedumu attēlu un pārveidotu tos par veidni un ar atlasīto ID saglabātu pirkstu nospiedumu moduļa atmiņā.
uint8_t getFingerprintEnroll () {int p = -1; lcd.clear (); lcd.print ("pirksta ID:"); lcd.print (id); lcd.setCursor (0,1); lcd.print ("Vietas pirksts"); kavēšanās (2000); kamēr (p! = FINGERPRINT_OK) {p = finger.getImage ();…………………
Dotā funkcija tiek izmantota balsošanai un rezultātu parādīšanai:
anulēt Balsojums () {lcd.clear (); lcd.print ("Lūdzu, ievietojiet"); lcd.setCursor (0,1); lcd.print ("Jūsu balss"); digitalWrite (indVote, HIGH); digitalWrite (indFinger, LOW); digitalWrite (zummeris, HIGH); kavēšanās (500); digitalWrite (zummer, LOW); kavēšanās (1000); while (1) {if (digitalRead (sw1) == 0)…………………
Pārbaudiet pilnu kodu un demonstrācijas video zemāk.