生活随笔
收集整理的這篇文章主要介紹了
如何将宿舍门变成指纹开锁?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、序言
話不多說,先上圖
在寫自己的整個心路歷程之前,想先說明幾點,以防大家噴:
1.我只是做著玩,怎么方便怎么來,電路亂但我看著爽,懶得整理。
2.我一點也不懂電路,用的都是某寶買的模塊,真的不會什么放大電路,電源也不會做,求說我浪費的大大繞個路,模塊都是我用獎學金買的,我自己覺得開心就好。
3.做這個的目的是,舍友一直忘記帶鑰匙,可以增加一種開門的選擇,純屬好玩。我們寢室平時都不斷電,只有在半夜11點才斷電。假如有哪一天,四個人都忘了帶鑰匙,并且寢室碰巧斷電,那我也認了,只能硬著頭皮去找宿管大爺了QAQ
4.說我亂拉電線、損壞公物什么什么的,我們寢室已經很破了,如果學校真讓我們賠錢換個新門,我一點也不介意,就當是造福下一代了。什么通告批評、處分之類的我不怕的。。。
二、我用了一些什么東西
以前用舊的單片機開發板、指紋模塊、電磁鐵、繼電器、聲音錄放模塊、開關電源、排插、螺絲、螺絲刀、電線、電鉆(只能鉆門了=。=)。
三、模塊分析
想了想,我這個東西可以大概分為三個模塊: 聲音模塊、指紋模塊、開鎖模塊,中控用的是51單片機開發板,我知道用一整個板子很浪費,用一個最小系統就好了,但是我平常幾乎不用單片機,所以放那里也是浪費,這點大家就不用噴我啦。
A.聲音模塊
這個模塊使用起來很簡單,在自己調試的時候不用接單片機,電源VCC端接在單片機開發板的5V,GND接單片機開發板的GND,然后按住REC說話,可以將自己的聲音錄進去,播放用其他兩個鍵就可以啦。我用這個模塊的目的是進門的時候,如果有軟萌軟萌的聲音跟你說“歡迎光臨”的話。。咳咳,想想就很心動。
如果調試成功的話,將左邊的P-L端,接在單片機的IO口,輸出高電平就可以播放歡迎語啦。
B.指紋模塊
先看一下實物圖
我買的這個指紋模塊有6個接口,從左到右分別是:
探測手指電路電源、模塊電源正輸入端、TXD、RXD、GND、手指探測信號輸出
解釋一下:手指探測電路,也就是接口1和接口6是為了減小指紋模塊的損耗,在實際使用中不用也行,編程時候只要循環獲取手指圖像就好了,但這么好的功能怎么能不用呢!有一點需要注意一下,接口6在探測到手指時,會開漏輸出低,需要接上拉電阻,然后接到單片機的外部中斷0處就好了。
C.開鎖模塊
這個是我當時有做指紋開門想法的時候,最糾結的一塊了。聲音和指紋都很好想,但是開門要怎么開?要用什么開?于是我就百度,看到了一張圖給了我靈感,那就是用電磁鐵,可以利用電磁鐵通電瞬間的吸力,將門鎖拉開。那如何控制電磁鐵呢?大概的想法就是利用繼電器控制電磁鐵的電源,如果指紋比對通過的話,單片機輸出信號給繼電器,然后繼電器的常斷端閉合,電磁鐵把鎖拉開。
三、So Easy的編程
單片機的編程很簡單,會編寫串口通信那部分就好了,指紋模塊購買之后,賣家會給你它的使用文檔,里面有通信協議。什么是通信協議呢,就是你的指紋模塊收到什么指令會進行采集圖像,收到什么指令會進行指紋比對等等。那指令只能靠單片的TXD發啦。我們來整理一下編程思路:
四、下面貼出主要源碼
#include <reg52.h>
#include "qxmcs51_config.h"
#include "delay.h"
#include "uart.h"
#include <stdio.h>
#include <intrins.h>unsigned char FP_Pack_Head[
6] = {
0xEF,
0x01,
0xFF,
0xFF,
0xFF,
0xFF};
unsigned char FP_Get_Img[
6] = {
0x01,
0x00,
0x03,
0x01,
0x0,
0x05};
unsigned char FP_Img_To_Buffer1[
7]={
0x01,
0x0,
0x04,
0x02,
0x01,
0x0,
0x08};
unsigned char FP_Img_To_Buffer2[
7]={
0x01,
0x0,
0x04,
0x02,
0x02,
0x0,
0x09};
unsigned char FP_Search[
11]={
0x01,
0x0,
0x08,
0x04,
0x01,
0x0,
0x0,
0x03,
0xA1,
0x0,
0xB2};
extern unsigned char RECEVICE_BUFFER[
24];sbit beep = P2^
3;
sbit door = P1^
2;
sbit voice = P1^
3;
void GetImage()
{
unsigned char i;
for(i=
0;i<
6;i++) Send_uart(FP_Pack_Head[i]);
for(i=
0;i<
6;i++) Send_uart(FP_Get_Img[i]);Recevice_Data(
0x0C);
}
void GenChar()
{
unsigned char i;
for(i=
0;i<
6;i++) Send_uart(FP_Pack_Head[i]);
for(i=
0;i<
7;i++) Send_uart(FP_Img_To_Buffer1[i]);Recevice_Data(
0x0C);}
void Search()
{
unsigned char i;
for(i=
0;i<
6;i++) Send_uart(FP_Pack_Head[i]);
for(i=
0;i<
11;i++) Send_uart(FP_Search[i]);Recevice_Data(
0x10);
if(RECEVICE_BUFFER[
9]==
0x00){door =
0;voice =
1;Delay_Ms(
2000);door =
1;}
else{door =
1;voice =
0;} }
#include <reg52.h>
#include <stdio.h>
#include "delay.h"
#define uchar unsigned char
#define uint unsigned intvolatile unsigned char RECEVICE_BUFFER[
24];
void UART_init()
{ SCON =
0x50;TMOD =
0x21;TCON =
0x40; TH1 =
0xFF;TL1 =
0xFF;PCON =
0x80;RI =
0; TI =
0; TR1 =
1; EA =
1; ES =
1; EX0 =
1;IT0 =
0;}
void Send_uart(
unsigned char c)
{SBUF = c;
while(!TI);TI =
0;}
unsigned char Receive_uart()
{
unsigned char dat;
while(!RI);RI =
0;dat = SBUF;
return (dat);}
void Recevice_Data(
unsigned char length)
{
unsigned char i;
for (i=
0;i<length;i++)RECEVICE_BUFFER[i] = Receive_uart();}
#include "qxmcs51_config.h"
#include "delay.h"
#include "uart.h"
#include "GetImage.h"
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>extern voice;
void main()
{ Delay_Ms(
100);UART_init();voice =
0;
while(
1);
}
void int0() interrupt
0
{ GetImage();GenChar();Search();}
五、總結一下下
學校附近很坑,各種材料都沒有地方能買,只能從某寶買,我覺得我等快遞的時間比我真正做東西的時間還長QAQ。其實還有很多小細節沒有寫,比如電磁鐵的要求電壓是24V,電流6A,那我怎么得到這樣的電壓電流呢。。因為我真的不懂電路,所以只能買了一個24V,10A的開關電源。還有電磁鐵的拉力至關重要,第一次買的電磁鐵拉力太小拉不開,只好又買了一個拉力大的。甚至螺絲的大小都要量一下,不然東西固定不到門上。然后還有單片機怎么供電?開關電源怎么供電等等,這些都是需要考慮的問題啦。
所以做完這個東西雖然花了不少錢,但還是蠻開心的,學到的東西還算是有點用?
大家有什么問題可以評論里問啦。
再加一句,大神不要來嘲笑我!!!我只是一個渣渣。。。。
over。。。
總結
以上是生活随笔為你收集整理的如何将宿舍门变成指纹开锁?的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。