0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Arduino構(gòu)建基于指紋的生物識(shí)別投票機(jī)

科技觀察員 ? 來(lái)源:circuitdigest ? 作者:薩達(dá)姆 ? 2023-01-06 16:13 ? 次閱讀

我們都非常熟悉電子投票機(jī),您的投票以電子方式登記,您無(wú)需使用選票即可在選舉中投票。今天,安全性是一個(gè)主要問(wèn)題,還需要確保某人不能投票兩次,因此可以通過(guò)引入基于指紋的投票來(lái)解決這個(gè)問(wèn)題,在這種情況下,一個(gè)人可以根據(jù)他的指紋獲得授權(quán)。這也將阻止虛假投票。所以今天我們正在 使用Arduino構(gòu)建基于指紋的生物識(shí)別投票機(jī) 。

所需組件:

  1. Arduino Uno
  2. 指紋傳感器模塊
  3. 按鈕
  4. 指示燈 -2
  5. 1K 電阻器 -3
  6. 2.2K電阻
  7. 權(quán)力
  8. 連接線
  9. 蜂鳴器
  10. 16x2 液晶顯示器
  11. 面包板

投票機(jī)中的指紋傳感器模塊:

指紋 傳感器模塊或指紋掃描儀是一種模塊 ,用于捕獲手指的指紋圖像,然后將其轉(zhuǎn)換為等效模板,并將它們保存到Arduino所選ID(位置)上的內(nèi)存中。在這里,所有過(guò)程都由Arduino控制,例如拍攝指紋圖像,將其轉(zhuǎn)換為模板和存儲(chǔ)位置等。

指紋傳感器模塊

在這個(gè)指紋投票機(jī)電路中,我們使用指紋傳感器模塊通過(guò)在系統(tǒng)中輸入手指來(lái)驗(yàn)證真正的選民。在這里,我們使用 5 個(gè)按鈕來(lái)匹配、注冊(cè)/返回、刪除/確定、向上和向下。注冊(cè)和德?tīng)栨I在這里具有雙重功能。注冊(cè)鍵用于將新的手指印模注冊(cè)到系統(tǒng)和返回功能中。意味著當(dāng)用戶想要注冊(cè)新手指時(shí),他/她需要按注冊(cè)鍵,然后LCD詢問(wèn)用戶想要存儲(chǔ)指紋輸出的ID或位置。現(xiàn)在,如果此時(shí)用戶不想繼續(xù),那么他/她可以再次按注冊(cè)鍵返回(這次注冊(cè)鍵表現(xiàn)為后退鍵)。表示注冊(cè)密鑰同時(shí)具有注冊(cè)和返回功能。DEL/OK 鍵還具有相同的雙重功能,就像用戶注冊(cè)新手指時(shí)一樣,他/她需要使用另外兩個(gè)鍵(即向上和向下)選擇手指 ID 或位置,現(xiàn)在用戶需要按 DEL/OK 鍵(這次此鍵的行為類(lèi)似于確定)以繼續(xù)使用選定的 ID 或位置。匹配鍵用于每當(dāng)選民想要投票時(shí),他/她需要首先通過(guò)手指在指紋傳感器上對(duì)真正的選民進(jìn)行身份驗(yàn)證,如果他/她通過(guò)了此身份驗(yàn)證,那么他/她就可以投票。

生物識(shí)別投票機(jī)中的指紋注冊(cè)

工作說(shuō)明:

對(duì)于初學(xué)者來(lái)說(shuō),這個(gè)用于選舉的生物識(shí)別投票系統(tǒng)的工作有點(diǎn)復(fù)雜。首先,用戶需要在按鈕/鍵的幫助下注冊(cè)手指或投票者(在此代碼中,選民的最大限制為 25)。為此,用戶需要按REGISTER鍵,然后LCD要求輸入手指將成為商店的位置/ ID。所以現(xiàn)在用戶需要使用向上/向下鍵輸入ID(位置)。選擇位置/ID 后,用戶需要按確定鍵(DEL 鍵)。現(xiàn)在,液晶屏將要求將手指放在指紋模塊上。現(xiàn)在用戶需要將手指放在指紋模塊上。然后液晶屏將要求將手指從指紋模塊中取出,并再次要求放置手指?,F(xiàn)在用戶需要再次將手指放在指紋模塊上?,F(xiàn)在,指紋模塊獲取圖像并將其轉(zhuǎn)換為模板,并通過(guò)選定的ID將其存儲(chǔ)在指紋模塊的內(nèi)存中?,F(xiàn)在選民將被登記,他/她可以投票。通過(guò)同樣的方法,所有選民都可以登記到系統(tǒng)中。

投票機(jī)框圖

現(xiàn)在,如果用戶想要?jiǎng)h除或刪除任何存儲(chǔ)的ID,那么他/她需要按DEL鍵,按DEL鍵后,LCD將要求選擇位置意味著選擇要?jiǎng)h除的ID?,F(xiàn)在用戶需要選擇ID并按確定鍵(相同的DEL鍵)?,F(xiàn)在LCD會(huì)讓您知道手指已成功刪除。

投票流程:

現(xiàn)在,當(dāng)用戶想要投票時(shí),他/她需要按匹配鍵,然后蜂鳴器將發(fā)出嗶嗶聲,LED也會(huì)發(fā)光,LCD將要求將手指放在指紋模塊上。現(xiàn)在Arduino會(huì)給你三次嘗試把你的手指。將手指放在指紋模塊上后,指紋模塊捕獲手指圖像,發(fā)現(xiàn)其ID存在于系統(tǒng)中。如果檢測(cè)到手指 ID,則 LCD 將顯示授權(quán)選民。這意味著用戶有權(quán)投票。然后系統(tǒng)進(jìn)入下一階段進(jìn)行投票?,F(xiàn)在綠色LED會(huì)亮起,這意味著現(xiàn)在選民可以通過(guò)按重新當(dāng)選的鍵(來(lái)自本演示中的紅色面包板)為他們的候選人投票?,F(xiàn)在,如果同一選民想再次投票,那么系統(tǒng)將顯示它 “已投票”。 表示同一選民無(wú)法再次投票,蜂鳴器將發(fā)出 5 秒的嗶嗶聲。如果任何非注冊(cè)用戶想要投票,則指紋模塊將不會(huì)在系統(tǒng)中檢測(cè)到其ID,LCD將顯示“未找到指紋”。

使用Arduino的生物識(shí)別投票機(jī)中的投票按鈕

這里的CAN1,CAN2,CAN3代表候選人1,候選人2和候選人3,他們參加了選舉。

電路說(shuō)明:

這個(gè)基于指紋的投票機(jī)項(xiàng)目的電路非常簡(jiǎn)單,其中包含用于控制整個(gè)項(xiàng)目過(guò)程的Arduino,用于注冊(cè),刪除,選擇ID和投票目的的按鈕,用于警報(bào)的蜂鳴器,用于指示的LED和用于指示選民并顯示結(jié)果的16x2 LCD。黃色 LED 表示指紋模塊已準(zhǔn)備好拍攝手指圖像,綠色 LED 表示系統(tǒng)已準(zhǔn)備好進(jìn)行投票或查看結(jié)果。

1.png

按鈕直接連接到 Arduino 的引腳 A0(注冊(cè))、A1(DEL)、A2(向上)、A3(向下)和 A4(匹配)、D5(Can1)、D4(Can2)、D3(Can3)、D2(結(jié)果)相對(duì)于接地。黃色 LED 通過(guò) 1k 電阻連接到 Arduino 的數(shù)字引腳 D7 相對(duì)于接地,綠色 LED 以相同的方法連接到 Arduino 的 D6。指紋模塊的 Rx 和 Tx 直接連接到 Arduino 的串行引腳 Tx 和 Rx。5v 電源用于為取自 Arduino 板的指紋模塊供電。A5 處還連接了一個(gè)蜂鳴器。16x2 LCD 配置為 4 位模式,其 RS、EN、D4、D5、D6 和 D7 直接連接到 Arduino 的數(shù)字引腳 D13、D12、D11、D10、D9 和 D8。

程序說(shuō)明:

在設(shè)置功能中,我們已經(jīng)給出了定義引腳的方向,并啟動(dòng)了LCD和指紋模塊。

之后,在 void loop() 函數(shù)中,我們等待檢查鍵并按匹配鍵開(kāi)始指紋進(jìn)行輸入并將捕獲的圖像ID與存儲(chǔ)的ID進(jìn)行比較。如果發(fā)生匹配,則繼續(xù)下一步。

void loop() 
{
 lcd.setCursor(0,0);
 lcd.print("Press Match Key ");
 lcd.setCursor(0,1);
 lcd.print("to start system");
 
 digitalWrite(indVote, LOW);
 digitalWrite(indFinger, LOW);
 if(digitalRead(match)==0)
 {
  digitalWrite(buzzer, HIGH);
  delay(200);
  digitalWrite(buzzer, LOW);
  digitalWrite(indFinger, HIGH);
  for(int i=0;i<3;i++)
..... .....
....... ....

給定 void checkKeys() 函數(shù)用于檢查是否按下注冊(cè)或 DEL 鍵以及按下時(shí)該怎么做。如果按下 ENROL 鍵,則調(diào)用 Enroll( ) 函數(shù)并按下 DEL 鍵,則調(diào)用 delete() 函數(shù)。

void checkKeys()
{
   if(digitalRead(enroll) == 0)
   {
    lcd.clear();
    lcd.print("Please Wait");
    delay(1000);
    while(digitalRead(enroll) == 0);
    Enroll();
   }

   else if(digitalRead(del) == 0)
   {
    lcd.clear();
    lcd.print("Please Wait");
    delay(1000);
    delet();
   }  
}

給定函數(shù)用于輸入要?jiǎng)h除的 ID 并調(diào)用uint8_t *deleteFingerprint(uint8_t id) *函數(shù),該函數(shù)將從記錄中刪除手指。

void delet()
{
   int count=0;
   lcd.clear();
   lcd.print("Delete Finger    ");
   lcd.setCursor(0,1);
   lcd.print("Location:");
   while(1)
   {
     lcd.setCursor(9,1);
     lcd.print(count);
     if(digitalRead(up) == 0)
     {
       count++;
       if(count>25)
       count=0;
       delay(500);
     }
.... .....
..... .....

給定功能用于從所選ID的記錄中刪除指紋。

uint8_t deleteFingerprint(uint8_t id) 
{
  uint8_t p = -1;  
  lcd.clear();
  lcd.print("Please wait");
  p = finger.deleteModel(id);
  if (p == FINGERPRINT_OK) 
  {
    Serial.println("Deleted!");
    lcd.clear();
    lcd.print("Figer Deleted");
    lcd.setCursor(0,1);
    lcd.print("Successfully");
    delay(1000);
  } 
  
  else 
  {
    Serial.print("Something Wrong"); 
    lcd.clear();
    lcd.print("Something Wrong");
    lcd.setCursor(0,1);
    lcd.print("Try Again Later");
    delay(2000);
    return p;
  }   
}

給定功能用于獲取指紋圖像并將其轉(zhuǎn)換為模板,并通過(guò)選定的ID將其保存到指紋模塊存儲(chǔ)器中。

uint8_t getFingerprintEnroll() 
{
  int p = -1;
  lcd.clear();
  lcd.print("finger ID:");
  lcd.print(id);
  lcd.setCursor(0,1);
  lcd.print("Place Finger");
  delay(2000);
  while (p != FINGERPRINT_OK)
  {
    p = finger.getImage();
..... .....
....... ....

給定函數(shù)用于投票和顯示結(jié)果:

void Vote()
{
  lcd.clear();
  lcd.print("Please Place");
  lcd.setCursor(0,1);
  lcd.print("Your Vote");
  digitalWrite(indVote, HIGH);
  digitalWrite(indFinger, LOW);
  digitalWrite(buzzer, HIGH);
  delay(500);
  digitalWrite(buzzer, LOW);
  delay(1000);
  while(1)
  {
        if(digitalRead(sw1)==0)

#include

#include

LiquidCrystal lcd(13,12,11,10,9,8);

#include

uint8_t id;

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial);

#define enroll 14

#define del 15

#define up 16

#define down 17

#define match 18

#define indVote 6

#define sw1 5

#define sw2 4

#define sw3 3

#define resultsw 2

#define indFinger 7

#define buzzer 19

#define records 25

int vote1,vote2,vote3;

int flag;

void setup()

{

delay(1000);

pinMode(enroll, INPUT_PULLUP);

pinMode(up, INPUT_PULLUP); 

pinMode(down, INPUT_PULLUP); 

pinMode(del, INPUT_PULLUP);

pinMode(match, INPUT_PULLUP);

pinMode(sw1, INPUT_PULLUP); 

pinMode(sw2, INPUT_PULLUP);

pinMode(sw3, INPUT_PULLUP);

pinMode(resultsw, INPUT_PULLUP);

pinMode(buzzer, OUTPUT);

pinMode(indVote, OUTPUT);

pinMode(indFinger, OUTPUT);

lcd.begin(16,2);

if(digitalRead(resultsw) ==0)

{

for(int i=0;iEEPROM.write(i+10,0xff);

   EEPROM.write(0,0);

   EEPROM.write(1,0);

   EEPROM.write(2,0);

   lcd.clear();

   lcd.print("System Reset");

   delay(1000);

}

lcd.clear();

lcd.print("Voting Machine");

lcd.setCursor(0,1);

lcd.print("by Finger Print");

delay(2000);

lcd.clear();

lcd.print("Circuit Digest");

lcd.setCursor(0,1);

lcd.print("Saddam Khan");

delay(2000);

if(EEPROM.read(0) == 0xff)

EEPROM.write(0,0);

if(EEPROM.read(1) == 0xff)

EEPROM.write(1,0);

if(EEPROM.read(1) == 0xff)

EEPROM.write(1,0);

//finger.begin(57600);

Serial.begin(57600);

lcd.clear();

lcd.print("Finding Module");

lcd.setCursor(0,1);

delay(1000);

if (finger.verifyPassword()) 

{

  //Serial.println("Found fingerprint sensor!");

  lcd.clear();

  lcd.print("Found Module ");

  delay(1000);

} 

else 

{

//Serial.println("Did not find fingerprint sensor :(");

lcd.clear();

lcd.print("module not Found");

lcd.setCursor(0,1);

lcd.print("Check Connections");

while (1);

}

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Cn1");

lcd.setCursor(4,0);

lcd.print("Cn2");

lcd.setCursor(8,0);

lcd.print("Cn3");

lcd.setCursor(12,0);

lcd.print("Cn4");

lcd.setCursor(0,1);

vote1=EEPROM.read(0);

lcd.print(vote1);

lcd.setCursor(6,1);

vote2=EEPROM.read(1);

lcd.print(vote2);

lcd.setCursor(12,1);

vote3=EEPROM.read(2);

lcd.print(vote3);

delay(2000);

}

void loop()

{

lcd.setCursor(0,0);

lcd.print("Press Match Key ");

lcd.setCursor(0,1);

lcd.print("to start system");

digitalWrite(indVote, LOW);

digitalWrite(indFinger, LOW);

if(digitalRead(match)==0)

{

digitalWrite(buzzer, HIGH);

delay(200);

digitalWrite(buzzer, LOW);

digitalWrite(indFinger, HIGH);

for(int i=0;i<3;i++)

{

lcd.clear();

lcd.print("Place Finger");

delay(2000);

int result=getFingerprintIDez();

if(result>=0)

{

  flag=0;

    for(int i=0;i
    {

      if(result == EEPROM.read(i+10))

      {

         lcd.clear();

          lcd.print("Authorised Voter");

          lcd.setCursor(0,1);

          lcd.print("Please Wait....");

          delay(1000);

          Vote();

          EEPROM.write(i+10, 0xff);

          flag=1;

          return;

      }

    }



    if(flag == 0)

    {

    lcd.clear();

    lcd.print("Already Voted");

    //lcd.setCursor(0,1);

    //lcd.print("")

    digitalWrite(buzzer, HIGH);

    delay(5000);

    digitalWrite(buzzer, LOW);

    return;

    }

 }

}

lcd.clear();

}

checkKeys();

delay(1000);

}

void checkKeys()

{

if(digitalRead(enroll) == 0)

{

lcd.clear();

lcd.print("Please Wait");

delay(1000);

while(digitalRead(enroll) == 0);

Enroll();

}

else if(digitalRead(del) == 0)

{

lcd.clear();

lcd.print("Please Wait");

delay(1000);

delet();

}

}

void Enroll()

{

int count=0;

lcd.clear();

lcd.print("Enter Finger ID:");

while(1)

{

lcd.setCursor(0,1);

 lcd.print(count);

 if(digitalRead(up) == 0)

 {

   count++;

   if(count>25)

   count=0;

   delay(500);

 }



 else if(digitalRead(down) == 0)

 {

   count--;

   if(count<0)

   count=25;

   delay(500);

 }

 else if(digitalRead(del) == 0)

 {

      id=count;

      getFingerprintEnroll();

      for(int i=0;iif(EEPROM.read(i+10) == 0xff)

        {

          EEPROM.write(i+10, id);

          break;

        }

      }

      return;

 }



   else if(digitalRead(enroll) == 0)

 {        

      return;

 }

}

}

void delet()

{

int count=0;

lcd.clear();

lcd.print("Enter Finger ID");

while(1)

{

lcd.setCursor(0,1);

 lcd.print(count);

 if(digitalRead(up) == 0)

 {

   count++;

   if(count>25)

   count=0;

   delay(500);

 }



 else if(digitalRead(down) == 0)

 {

   count--;

   if(count<0)

   count=25;

   delay(500);

 }

 else if(digitalRead(del) == 0)

 {

      id=count;

      deleteFingerprint(id);

      for(int i=0;iif(EEPROM.read(i+10) == id)

        {

          EEPROM.write(i+10, 0xff);

          break;

        }

      }

      return;

 }

   else if(digitalRead(enroll) == 0)

 {        

      return;

 }

}

}

uint8_t getFingerprintEnroll()

{

int p = -1;

lcd.clear();

lcd.print("finger ID:");

lcd.print(id);

lcd.setCursor(0,1);

lcd.print("Place Finger");

delay(2000);

while (p != FINGERPRINT_OK)

{

p = finger.getImage();

switch (p)

{

case FINGERPRINT_OK:

  //Serial.println("Image taken");

  lcd.clear();

  lcd.print("Image taken");

  break;

case FINGERPRINT_NOFINGER:

  //Serial.println("No Finger");

  lcd.clear();

  lcd.print("No Finger");

  break;

case FINGERPRINT_PACKETRECIEVEERR:

  //Serial.println("Communication error");

  lcd.clear();

  lcd.print("Comm Error");

  break;

case FINGERPRINT_IMAGEFAIL:

  //Serial.println("Imaging error");

  lcd.clear();

  lcd.print("Imaging Error");

  break;

default:

  //Serial.println("Unknown error");

   lcd.clear();

  lcd.print("Unknown Error");

  break;

}

}

// OK success!

p = finger.image2Tz(1);

switch (p) {

case FINGERPRINT_OK:

  //Serial.println("Image converted");

  lcd.clear();

  lcd.print("Image converted");

  break;

case FINGERPRINT_IMAGEMESS:

  //Serial.println("Image too messy");

   lcd.clear();

   lcd.print("Image too messy");

  return p;

case FINGERPRINT_PACKETRECIEVEERR:

  //Serial.println("Communication error");

        lcd.clear();

  lcd.print("Comm Error");

  return p;

case FINGERPRINT_FEATUREFAIL:

  //Serial.println("Could not find fingerprint features");

        lcd.clear();

  lcd.print("Feature Not Found");

  return p;

case FINGERPRINT_INVALIDIMAGE:

  //Serial.println("Could not find fingerprint features");

              lcd.clear();

  lcd.print("Feature Not Found");

  return p;

default:

  //Serial.println("Unknown error");

              lcd.clear();

  lcd.print("Unknown Error");

  return p;

}

//Serial.println("Remove finger");

lcd.clear();

lcd.print("Remove Finger");

delay(2000);

p = 0;

while (p != FINGERPRINT_NOFINGER) {

p = finger.getImage();

}

//Serial.print("ID "); //Serial.println(id);

p = -1;

//Serial.println("Place same finger again");

lcd.clear();

lcd.print("Place Finger");

  lcd.setCursor(0,1);

  lcd.print("   Again");

while (p != FINGERPRINT_OK) {

p = finger.getImage();

switch (p) {

case FINGERPRINT_OK:

  //Serial.println("Image taken");

  break;

case FINGERPRINT_NOFINGER:

  //Serial.print(".");

  break;

case FINGERPRINT_PACKETRECIEVEERR:

  //Serial.println("Communication error");

  break;

case FINGERPRINT_IMAGEFAIL:

  //Serial.println("Imaging error");

  break;

default:

  //Serial.println("Unknown error");

  return;

}

}

// OK success!

p = finger.image2Tz(2);

switch (p) {

case FINGERPRINT_OK:

  //Serial.println("Image converted");

  break;

case FINGERPRINT_IMAGEMESS:

  //Serial.println("Image too messy");

  return p;

case FINGERPRINT_PACKETRECIEVEERR:

  //Serial.println("Communication error");

  return p;

case FINGERPRINT_FEATUREFAIL:

  //Serial.println("Could not find fingerprint features");

  return p;

case FINGERPRINT_INVALIDIMAGE:

  //Serial.println("Could not find fingerprint features");

  return p;

default:

  //Serial.println("Unknown error");

  return p;

}

// OK converted!

//Serial.print("Creating model for #"); //Serial.println(id);

p = finger.createModel();

if (p == FINGERPRINT_OK) {

//Serial.println("Prints matched!");

} else if (p == FINGERPRINT_PACKETRECIEVEERR) {

//Serial.println("Communication error");

return p;

} else if (p == FINGERPRINT_ENROLLMISMATCH) {

//Serial.println("Fingerprints did not match");

return p;

} else {

//Serial.println("Unknown error");

return p;

}

//Serial.print("ID "); //Serial.println(id);

p = finger.storeModel(id);

if (p == FINGERPRINT_OK) {

//Serial.println("Stored!");

lcd.clear();

lcd.print("Stored!");

delay(2000);

} else if (p == FINGERPRINT_PACKETRECIEVEERR) {

//Serial.println("Communication error");

return p;

} else if (p == FINGERPRINT_BADLOCATION) {

//Serial.println("Could not store in that location");

return p;

} else if (p == FINGERPRINT_FLASHERR) {

//Serial.println("Error writing to flash");

return p;

}

else {

//Serial.println("Unknown error");

return p;

}

}

int getFingerprintIDez()

{

uint8_t p = finger.getImage();

if (p != FINGERPRINT_OK)

return -1;

p = finger.image2Tz();

if (p != FINGERPRINT_OK)

return -1;

p = finger.fingerFastSearch();

if (p != FINGERPRINT_OK)

{

lcd.clear();

lcd.print("Finger Not Found");

lcd.setCursor(0,1);

lcd.print("Try Later");

delay(2000);

return -1;

}

// found a match!

//Serial.print("Found ID #");

//Serial.print(finger.fingerID);

return finger.fingerID;

}

uint8_t deleteFingerprint(uint8_t id)

{

uint8_t p = -1;

lcd.clear();

lcd.print("Please wait");

p = finger.deleteModel(id);

if (p == FINGERPRINT_OK)

{

//Serial.println("Deleted!");

lcd.clear();

lcd.print("Figer Deleted");

lcd.setCursor(0,1);

lcd.print("Successfully");

delay(1000);

}

else

{

//Serial.print("Something Wrong"); 

lcd.clear();

lcd.print("Something Wrong");

lcd.setCursor(0,1);

lcd.print("Try Again Later");

delay(2000);

return p;

}

}

void Vote()

{

lcd.clear();

lcd.print("Please Place");

lcd.setCursor(0,1);

lcd.print("Your Vote");

digitalWrite(indVote, HIGH);

digitalWrite(indFinger, LOW);

digitalWrite(buzzer, HIGH);

delay(500);

digitalWrite(buzzer, LOW);

delay(1000);

while(1)

{

if(digitalRead(sw1)==0)

    {

      vote1++;

      voteSubmit(1);

      EEPROM.write(0, vote1);

      while(digitalRead(sw1)==0);

      return;

    }

    if(digitalRead(sw2)==0)

    {

      vote2++;

        voteSubmit(2);

        EEPROM.write(1, vote2);

      while(digitalRead(sw2)==0);

      return;

    }

    if(digitalRead(sw3)==0)

    {

      vote3++;

         voteSubmit(3);

         EEPROM.write(2, vote3);

      while(digitalRead(sw3)==0);

      return;

    }

    

     if(digitalRead(resultsw)==0)

     {

          lcd.clear();

          lcd.setCursor(0,0);

          lcd.print("Can1");

          lcd.setCursor(6,0);

          lcd.print("Can2");

          lcd.setCursor(12,0);

          lcd.print("Can3");

          for(int i=0;i<3;i++)

          {

            lcd.setCursor(i*6,1);

            lcd.print(EEPROM.read(i));

          }

          delay(2000);

       int vote=vote1+vote2+vote3;

       if(vote)

       {

        if((vote1 > vote2 && vote1 > vote3))

        {

         lcd.clear();

         lcd.print("Can1 Wins");

         delay(2000);

         lcd.clear();

        }

        else if(vote2 > vote1 && vote2 > vote3)

        {

         lcd.clear();

         lcd.print("Can2 Wins");

         delay(2000);

         lcd.clear();

        }

        else if((vote3 > vote1 && vote3 > vote2))

        {

         lcd.clear();

         lcd.print("Can3 Wins");

         delay(2000);

         lcd.clear();

        }

       

       else

       {

         lcd.clear();

         lcd.print("   Tie Up Or   ");

         lcd.setCursor(0,1);

         lcd.print("   No Result   ");

         delay(1000);

         lcd.clear();

       }

       

      }      

       else 

       {

         lcd.clear();

         lcd.print("No Voting....");

         delay(1000);

         lcd.clear();

       }

       vote1=0;vote2=0;vote3=0;vote=0;

       lcd.clear();

       return;

     }

}

digitalWrite(indVote, LOW);

}

void voteSubmit(int cn)

{

lcd.clear();

if(cn == 1)

lcd.print("Can1");

else if(cn == 2)

lcd.print("Can2");

else if(cn == 3)

lcd.print("Can3");

lcd.setCursor(0,1);

lcd.print("Vote Submitted");

digitalWrite(buzzer , HIGH);

delay(1000);

digitalWrite(buzzer, LOW);

digitalWrite(indVote, LOW);

return;

}


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 生物識(shí)別
    +關(guān)注

    關(guān)注

    3

    文章

    1210

    瀏覽量

    52527
  • 指紋傳感器
    +關(guān)注

    關(guān)注

    6

    文章

    196

    瀏覽量

    63488
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6471

    瀏覽量

    187303
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DIY一個(gè)屬于你的Arduino投票機(jī)

    這個(gè)項(xiàng)目是教你如何使用簡(jiǎn)單的組件,如按鈕和LCD打造一個(gè)基于Arduino投票機(jī),本系統(tǒng)的突出亮點(diǎn)是串行監(jiān)視器中的Arduino IDE用于執(zhí)行輪詢操作,不需要其他外部應(yīng)用程序。
    的頭像 發(fā)表于 11-05 09:18 ?1.1w次閱讀

    虹膜/指紋/人臉識(shí)別 誰(shuí)是生物識(shí)別黑科技?

    識(shí)別方式來(lái)看,生物識(shí)別可以分為指紋識(shí)別、人臉識(shí)別、聲音識(shí)別、虹膜
    發(fā)表于 10-15 08:58 ?2269次閱讀

    如何使用Arduino指紋模塊制作生物識(shí)別考勤系統(tǒng)

    ,8051和樹(shù)莓派的其他電子考勤系統(tǒng)項(xiàng)目。在這個(gè)項(xiàng)目中,我們使用指紋模塊和Arduino來(lái)獲取和保存考勤數(shù)據(jù)和記錄。通過(guò)使用指紋傳感器,系統(tǒng)對(duì)用戶來(lái)說(shuō)將變得更加安全。以下部分介紹了**使用 A
    的頭像 發(fā)表于 01-25 15:54 ?3461次閱讀
    如何使用<b class='flag-5'>Arduino</b>和<b class='flag-5'>指紋</b>模塊制作<b class='flag-5'>生物</b><b class='flag-5'>識(shí)別</b>考勤系統(tǒng)

    指紋識(shí)別在新型學(xué)籍管理系統(tǒng)中的應(yīng)用

    動(dòng)態(tài)信息的有效性和真實(shí)性識(shí)別能力,目前還是采用傳統(tǒng)的書(shū)面簽字方法.為此,結(jié)合廈門(mén)大學(xué)新型教務(wù)管理系統(tǒng)的開(kāi)發(fā),采用指紋識(shí)別技術(shù),構(gòu)建了針對(duì)學(xué)籍信息管理系統(tǒng)模塊的遠(yuǎn)程簽到系統(tǒng).引入指紋考勤
    發(fā)表于 04-24 09:47

    指紋識(shí)別電子鎖(單片機(jī)+集成指紋模塊)

    些力不從心。隨著生物識(shí)別技術(shù)逐漸興起,傳統(tǒng)的安全防盜系統(tǒng)面臨極大的挑戰(zhàn)。基于這種現(xiàn)狀,我們提出了一套項(xiàng)目旨在通過(guò)對(duì)Atmeg16單片機(jī)的學(xué)習(xí),以安全防盜為目的,設(shè)計(jì)出一款基于單片機(jī)指紋
    發(fā)表于 12-05 01:06

    新唐指紋識(shí)別

    指紋識(shí)別技術(shù)是一種生物識(shí)別技術(shù)。指紋識(shí)別系統(tǒng)是一套包括指紋圖像獲取、處理、特征提取和比對(duì)等模塊的模式識(shí)別系統(tǒng)。
    發(fā)表于 01-27 15:06

    如何開(kāi)發(fā)嵌入式指紋識(shí)別系統(tǒng)?

    生理測(cè)定技術(shù)是當(dāng)前研究的熱點(diǎn)之一。目前,有很多技術(shù)等生物測(cè)定技術(shù)可用于身份認(rèn)證,包括:虹膜識(shí)別、視網(wǎng)膜識(shí)別、面部識(shí)別、簽名識(shí)別、聲音
    發(fā)表于 09-20 07:19

    生物識(shí)別技術(shù)可靠嗎?

    其實(shí),生物識(shí)別技術(shù)還可以稱之為生物特征識(shí)別技術(shù)。這種技術(shù)是通過(guò)利用生物本身具備唯一性的特征來(lái)進(jìn)行身份識(shí)別的技術(shù)手段,然而具備
    發(fā)表于 11-02 07:13

    怎樣去設(shè)計(jì)一種基于單片機(jī)指紋識(shí)別電子密碼鎖

    文末下載完整資料1.1指紋識(shí)別簡(jiǎn)介1.1.1指紋識(shí)別原理??指紋識(shí)別技術(shù)的原理和其它生物識(shí)別技術(shù)的原理相似。它是利用人體的指紋特征對(duì)個(gè)體身份
    發(fā)表于 07-13 09:04

    求一種指紋識(shí)別方案

    指紋識(shí)別技術(shù)是眾多生物特征識(shí)別技術(shù)中的一種,指紋識(shí)別是將識(shí)別對(duì)象的指紋進(jìn)行分類(lèi)比對(duì)從而進(jìn)行判別。
    發(fā)表于 07-21 09:08

    絕對(duì)實(shí)用的ARM指紋識(shí)別系統(tǒng)方案

    最為實(shí)用、應(yīng)用最為廣泛的生物識(shí)別技術(shù),尤其在民用生物識(shí)別技術(shù)中?!   鹘y(tǒng)的指紋識(shí)別系統(tǒng)都是基于PC機(jī)的,這種系統(tǒng)具有識(shí)別速度快、樣本存儲(chǔ)
    發(fā)表于 11-09 06:02

    生物識(shí)別三大技術(shù)(指紋、人臉、虹膜)趨勢(shì)分析

    全球生物識(shí)別市場(chǎng)結(jié)構(gòu)中,指紋識(shí)別份額達(dá)到58%,人臉識(shí)別的份額為18%,緊隨其后的是新興的虹膜識(shí)別,份額為7%,此外還有與
    發(fā)表于 07-22 11:50 ?6671次閱讀

    生物識(shí)別如何應(yīng)對(duì)AI生成的指紋

    基于指紋的身份驗(yàn)證仍然是保護(hù)設(shè)備或系統(tǒng)的一種有效方法,但大多數(shù)系統(tǒng)都不會(huì)驗(yàn)證指紋或其他生物識(shí)別特征是來(lái)自真人還是復(fù)制品。
    發(fā)表于 07-30 11:33 ?1047次閱讀

    如何使用Arduino制作生物特征投票機(jī)

    電子發(fā)燒友網(wǎng)站提供《如何使用Arduino制作生物特征投票機(jī).zip》資料免費(fèi)下載
    發(fā)表于 11-22 10:59 ?0次下載
    如何使用<b class='flag-5'>Arduino</b>制作<b class='flag-5'>生物</b>特征<b class='flag-5'>投票</b><b class='flag-5'>機(jī)</b>

    生物識(shí)別有哪些方式?

    。 1、指紋識(shí)別技術(shù) 指紋識(shí)別技術(shù)是數(shù)字生物識(shí)別技術(shù)中最為普及的技術(shù)之一,它可通過(guò)光學(xué)、電容、超聲波等不同的方式來(lái)確定指紋圖案。指紋識(shí)別技術(shù)
    的頭像 發(fā)表于 08-11 19:22 ?2083次閱讀