久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4415|回復: 1
打印 上一主題 下一主題
收起左側

基于Arduino的密碼+指紋智能鎖(LCD1602顯示器)

[復制鏈接]
跳轉到指定樓層
樓主
ID:825006 發(fā)表于 2020-9-30 20:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 Sarmen 于 2020-9-30 21:07 編輯

**

基于Arduino的密碼+指紋智能鎖(LCD1602顯示器)

**

設計背景:

隨著科技的不斷進步,智能鎖的使用也越來越普遍,市場上的智能鎖多種多樣,有單一的智能鎖,比如密碼鎖,藍牙鎖,指紋鎖,人臉識別技術開鎖,甚至還有瞳孔識別等高階智能鎖;不過我們日常見到的、使用普遍的多為他們的結合體,功能并不單一。雖然智能門鎖出現的時間已經比較長了,已經算是一款非常成熟的產品了,但是一款產品的發(fā)展年限,一定是永無止境的,需要開發(fā)人員不斷地追求進步,才是現在的市場,因為用戶的需求在不斷的變化,所以產品自然會變,而產品的優(yōu)點和缺點也是避免不了的。換句話說,盡管智能鎖發(fā)展得很好,但是也存在一定的缺點和問題,比如安全性、穩(wěn)定性、耐用度等。在這個背景下,以及對智能鎖懷著好奇之心還有不可描述的興趣,我決定自己做一個智能鎖感受一下。
作為一名窮逼大學生,要做一個智能鎖肯定得考慮到成本問題,密碼鎖雖然成本低但是我又不想只是做一個單一的密碼鎖,想玩點特殊的,最后決定使用光學指紋識別模塊,提升智能鎖的檔次,光學指紋識別模塊相比于其他指紋識別模塊更便宜而且使用簡單。
然后我們再簡單了解以下指紋鎖,方便我們后續(xù)對它進行設計和研究。指紋鎖是在原有機械鎖的技術上增加指紋開鎖功能,指紋開鎖的主要技術是將用戶的指紋信息先儲存起來,當用戶用指紋驗證時,指紋識別系統(tǒng)會把用戶的指紋和儲存的指紋相對比,如果驗證的指紋與預先儲存的指紋相匹配,門鎖就會打開,如果不相匹配,會提示錯誤,門鎖無法打開。指紋鎖是通過指紋是否匹配的方法來認識主人與開鎖的,那么識別指紋的真假成了指紋鎖的一個重要技術指標。目前市場廣泛使用識別指紋的探頭可分了兩類,一類是光學指紋頭。較便宜,另一類是半導體指紋頭靈敏度更好也更精細,當然價格也是光學指紋頭的兩倍多。當然,除了這兩種,還有溫差感應式指紋識別和生物射頻指紋識別,這兩種并不常見,原因是前者受溫度影響較大,識別面積范圍小,后者雖然很牛逼,但是老貴了。扯遠了,感興趣的話大家可以去了解一下指紋學。
指紋鎖是機械鎖升級過來的,其主要目的是能夠保障財物安全的情況下,提高了我們生活的便利性,相比于機械鎖,指紋鎖是高出一個級別的,不法分子想要偽造主人的假指紋,比撬鎖的難度高出幾百倍。
總的來說,使用指紋鎖比使用機械鎖要更安全、更便捷、更舒心。大家可以放心大膽使用。密碼鎖就不多解釋了,因為太常見了,懂得都懂。
當然,做出來的產品那得必須考慮他的實用性,做出來不能用或者不實用,只能看那就違背了產品本身的定義。設計制作這個智能鎖時,我還在住在大學宿舍,那么,首當其沖的便是我們宿舍的門鎖,對,我得想想怎么把普通的機械鎖在不拆除的前提下改成智能鎖,最后,對門鎖進行點對點的受力分析,決定用舵機做傳動機構,用釣魚線做傳動繩拉動門鎖開關,實現開鎖。因為每個人原先的機械鎖都不一樣,要改動的話大家根據實際情況自己設計,這里只提供一個想法,就不多解釋或者上圖了。當然如果要拆掉原先的鎖自己換上一個鎖軸那就簡單多了。好,廢話不多說,總之大家可以簡單的理解為我是用舵機模擬開鎖。

硬件部分:

先給大家簡單介紹以下設計所需要的硬件,之后會告訴大家怎么連線,包括仿真和實物接線圖,我只是給出一個參考,大家自己設計的話完全可以根據自己的設計要求自己更改接線端口。

  • 控制芯片Arduino UNO
    額…這個不多說,新手的話網上有很多資料,老手的話就更不用說了,我這里就直接放上在網上看到寫的比較好的之一,新手可以學習了解以下。
    Arduino UNO數據手冊(新手入門)

    圖片來源于上述網址,意在讓大家認識一下Arduino UNO 芯片

  • 4×4矩陣按鍵
    4×4矩陣鍵盤又稱為行列式鍵盤,它是用4條I/O線作為行線,4條I/O線作為列線組成的鍵盤。在行線和列線的每一個交叉點上,設置一個按鍵。這樣鍵盤中按鍵的個數是4×4個。這種行列式鍵盤結構能夠有效地提高單片機系統(tǒng)中I/O口的利用率。由于單片機IO端口具有線與的功能,因此當任意一個按鍵按下時,行和列都有一根線被線與,通過運算就可以得出按鍵的坐標從而判斷按鍵鍵值。
    下圖是我在某寶買的矩陣鍵盤包括它的原理圖:

  • LCD1602顯示器
    這個顯示器我相信很多電子芯片愛好者肯定都有接觸或了解過,要想用它來顯示你總得知道它的工作原理吧,不清楚的話,前人之述備矣,網上解釋得很清楚了,大家可以去了解一下,方便后續(xù)工作地進行。
    LCD1602一般是16條引腳,我也有見過14條引腳的,但與16腳的相比缺少了背光電源A(15腳)和地線K(16腳),起始功能原理差不多,常見的還是16引腳的。下面是它的功能引腳,知道這個有利于接線。還有啥其他的具體知識,網上搜一下相關數據手冊就全出來了,這里就不多此一舉了。

  • AS608光學指紋識別模塊
    ATK-AS608 指紋識別模塊是 ALIENTEK 推出的一款高性能的光學指紋識別模塊。
    ATK-AS608 模塊采用了國內著名指紋識別芯片公司杭州晟元芯片技術有限公司(Synochip)
    的 AS608 指紋識別芯片。芯片內置 DSP 運算單元,集成了指紋識別算法,能高效快速采集圖像并識別指紋特征。模塊配備了串口、USB 通訊接口,用戶無需研究復雜的圖像處理及指紋識別算法,只需通過簡單的串口、USB 按照通訊協(xié)議便可控制模塊。本模塊可應用于各種考勤機、保險箱柜、指紋門禁系統(tǒng)、指紋鎖等場合。
    它長這樣:

    PCB原理圖:

    模塊引腳描述:

    大家可以去網上找一下相關數據手冊,當然,我相信你要是去某寶買的話都會有數據手冊給你的,只是想學習了解,沒有去買,然后實在找不到的話,我最后會放在我提供的資料包里,大家下載后可學習。

  • MG90S舵機
    我用的舵機是小規(guī)格的,俗稱9g舵機,了解過舵機的都知道,舵機實際上是通過脈寬調制來控制舵機角度的,舵機的控制信號是周期20ms 的脈寬調制(PWM)信號,其中脈沖寬度從 0.5ms-2.5ms,相對應舵盤的位置為 0~180 度,呈線性變化。我用Arduino做控制的話,實際上根據舵機的原理,寫代碼的方式也有兩種,一種是直接寫角度,另一種就是寫入PWM信號。代碼我后面也會給大家提供出來供大家下載。具體舵機啥原理,這玩意的資料網上很多,寫的也很清楚,這里不做多解釋。

    圖片來源于網絡。附圖是為了強調,舵機三條線的顏色分別表示為中間紅色接開發(fā)板5V電源,灰色接地,橙色接信號端,一般都是這樣的。了解一下方便后續(xù)接線。


實物接線方法:


LCD1602的VSS,VEE,RW均接地,其中為了使顯示更清晰,VEE需要串一個電位器調節(jié)電阻或者直接串上1K~2.2K左右的電阻,LCD1602的VDD端接開發(fā)板5V電源;舵機紅線接開發(fā)板5V電源,灰線接地;AS608指紋模塊Vi接開發(fā)板3.3V電源端,GND接開發(fā)板地。

仿真部分:

Proteus仿真接線圖:
因為仿真里是做不到指紋識別的,所以就沒有在仿真中加入指紋識別模塊,大家完全可以用某些元件代替,比如說就加個LED燈,我就懶得加了,因為我做仿真主要是想看LCD1602配合按鍵的效果以及我的代碼能不能應付得過來,所以仿真做不做指紋模塊對我來說不重要。

Proteus仿真效果圖(部分):



程序設計:

用Arduino做控制芯片的話,肯定都聽過Arduino專門的IDE編程軟件,去官網下載就好,也有Mixly圖形化編程軟件,但是個人還是建議用專門的IDE軟件會好點,因為開源的庫文件比較多。說到庫文件,好像指紋識別的庫文件需要自行下載并移到IDE庫文件夾中的,一般是不自帶的,我提供的資料里面有這次設計所需要的所有庫文件,大家只需要把我里面壓縮包Adafruit_Fingerprint_Sensor_Library.rar和Keypad-master.rar解壓后復制到Arduino根目錄的libraries文件夾內即可。
由于程序篇幅太長,這里僅提供思路,源碼在我的資料包里都有。
寫程序之前,得先弄清楚你要想實現什么功能,對于Arduino而言,很多代碼都是開源的,可以直接復制了用,我們只需要根據自己實際電路微改一下就行。廢話不多說,整個密碼+指紋鎖就是既能用密碼開鎖,也能用指紋開鎖,LCD1602時刻給用戶顯示提示,免得用戶一臉懵逼,不知道自己在干嘛,按鍵得充分應用起來,我是設置了按鍵有讓用戶選擇開鎖方式的功能,在主界面時用戶可以選擇開鎖方式,按下指定鍵即可切換開鎖方式,使用靈活,當密碼輸入正確,顯示器做出提示,舵機轉動;當指紋識別正確,顯示器做出提示,舵機也能轉動。錯誤的話當然會提示你錯誤,重新輸入或者重新指紋識別啦。具體看我資料里的用戶使用手冊,需要強調以下,因為某些原因,我提供的這個資料只是基礎版,能夠基本實現其功能,供大家學習了解足以,完美版也有而且我還在不斷完善,感興趣且想要深入了解的朋友可以在討論區(qū)留言討論,如果針對初版有更好的想法歡迎討論。

下面我附上部分代碼:

/*定義部分*/Servo myservo;
LiquidCrystal liquid_crystal_display{A5, A4, A0, A1, A2, A3,};
char password[;
char initial_password[, new_password[;
int i = 0;
char key_pressed = 0;
const byte rows = 4;
const byte columns = 4;
char hexaKeys[rows][columns] = {  {'7', '8', '9', 'A'},  {'4', '5', '6', 'B'},  {'1', '2', '3', 'C'},  {'*', '0', '#', 'D'}};
byte row_pins[rows ]= {10, 11, 12, 13};
byte column_pins[columns ]= {4, 5, 6, 7}; //鍵盤的引腳設定
Keypad keypad_key = Keypad( makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);
/*loop循環(huán)函數*/
void loop()
{  
key_pressed = keypad_key.getKey();  
switch (key_pressed)  
{   
  case 'A': KeyWay(); break;   
case 'B': getFingerprintID(); break;  
}
}

/*KeyWay()函數循環(huán)部分*/
while (flag == 0)
  {   
  if (t == 3 || key_pressed == 'D')   
  {      
liquid_crystal_display.clear();     
liquid_crystal_display.print("A/B select way!");   
   liquid_crystal_display.setCursor(0, 1);   
  i = 0;  //清除按鍵按下次數的記錄,避免密碼判斷錯誤      
flag = 1;    }   
key_pressed = keypad_key.getKey();   
if (key_pressed)    {   
  password[i++ = key_pressed;     
liquid_crystal_display.print(key_pressed);   
  if (key_pressed == 'C')   
  {        
liquid_crystal_display.clear();     
   liquid_crystal_display.print("Enter again:");   
    liquid_crystal_display.setCursor(0, 1);     
   i = 0;        //清除按鍵按下次數的記錄,避免密碼判斷錯誤     
   key_pressed = 0;     
}     
while (key_pressed == '*')   
   {      
  change();   
  }   
  }   
  if (i == 6)  
  {     
delay(200);  
    for (int j = 0; j < 6; j++)      
  initial_password[j ]= EEPROM.read(j);  
    if (!(strncmp(password, initial_password, 6)))            //比較輸入密碼與當前密碼是否一致   
  {     
   liquid_crystal_display.clear();      
  liquid_crystal_display.print("Password via!");     
   liquid_crystal_display.setCursor(0, 1);  
      liquid_crystal_display.print("Welcome home!");   
    liquid_crystal_display.setCursor(0, 2);   
    myservo.write(180);   
    delay(1000);   
     myservo.write(0);     
   liquid_crystal_display.clear();   
     liquid_crystal_display.print("A/B select way!");   
     liquid_crystal_display.setCursor(0, 1);   
    i = 0;              //清除按鍵按下次數的記錄,避免密碼判斷錯誤   
    flag = 1;   
  }   
  else      {      
  liquid_crystal_display.clear();
       liquid_crystal_display.print("Wrong Password!");   
    delay(1000);   
    liquid_crystal_display.clear();     
   liquid_crystal_display.print("Enter Password:");   
    liquid_crystal_display.setCursor(0, 1);      
  t++;  
      i = 0;
     }  
  }
}

指紋識別函數我就不說了,因為初代版本真的就很簡單,給大家個提示,我們完全可以直接在官網提供的Adafruit_Fingerprint_Sensor_Library文件里看到它的指紋載入、識別、刪除函數,然后做些修改或增添就好,有C語言基礎那就是小CASE。

實物效果圖:




資料下載網址:

我把初代,能夠基本實現其功能的資料都放在那里了,里面還有使用手冊,感興趣的可以下載看看。
密碼+指紋鎖資料包
然后我錄了視頻放B站了,感興趣的可以看一下,喜歡就點贊加關注吧!
整體效果視




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:583873 發(fā)表于 2020-10-23 12:06 | 只看該作者
此處沒有下載?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美日韩系列 | 国产精品福利视频 | 亚洲一区二区三区免费 | 亚洲精品片 | 成人黄色电影在线播放 | 亚洲狠狠 | 国产主播第一页 | 国产高清一二三区 | 九九伦理片 | 日韩在线观看中文字幕 | 精品免费国产一区二区三区四区 | 你懂的在线视频播放 | 亚洲一区二区三区久久 | 国产免费一区二区三区网站免费 | 久久99精品久久久久久噜噜 | 天天综合天天 | 国产成人精品一区二区三区在线 | 国产精品一区在线观看 | 美女毛片| av一区二区三区 | www国产成人免费观看视频,深夜成人网 | 欧美日韩在线视频一区 | 91精品国产91久久久久久丝袜 | 成人久久18免费网站 | 色吊丝2288sds中文字幕 | 久久精品aaa | 国产小视频在线观看 | 久久久久久亚洲精品 | 国产精品无 | 亚洲国产高清在线 | 色综合天天天天做夜夜夜夜做 | 国产伦精品一区二区三区照片91 | 亚洲免费三级 | 日韩一区二区三区av | 欧美一区免费 | 精品久久久久久亚洲国产800 | 国产精品久久久久无码av | 精品视频在线观看 | 九九热精品视频 | 欧美激情久久久 | 亚洲精品天堂 |