Arduino Nano+AS608指纹门禁系统
100元制作宿舍指纹门禁系统
- 效果图:
- 硬件清单
- 各个模块连接
- 程序流程图
- 驱动文件以及配置烧录环境
- 驱动文件
- 配置编译器
- 局部源码
- **演示视频**
- 更新内容
- 完整源码下载:
效果图:
- 这里用的是电容式的AS608指纹模块
硬件清单
名称 | 用途 |
---|---|
Arduino Nano | 开发板 处理各种数据 |
ESP8266 WIFI模块 | 用于数据远程传输 |
AS608指纹模块 | 用于采集指纹 |
MG90S舵机 | 用于带动门锁 |
OLED0.96 | 显示系统信息 |
4x4矩阵按键 | 操作交互 |
USB电源模块 | 为多级和开发板供电 |
DHT11温度传感器 | 采集环境温度与湿度 |
合计100元
各个模块连接
这里接线图中的是光学式AS608指纹模块 接线方式与电容式版本大同小异
程序流程图
驱动文件以及配置烧录环境
驱动文件
Arduino CH340驱动
链接:https://pan.baidu.com/s/1Jo0fVYdAcBBleallQAm4wg
提取码:2021
配置编译器
Arduino IDE1.8.15
链接:https://pan.baidu.com/s/1OUqRsGI-ZgVyFzZ3q8QqFg
提取码:2021
依次勾选开发板型号、端口号
随后按快捷键Ctrl+U即可编译并烧录
局部源码
/**************更新内容*************************************** 更新于2021年5月27日 B站这个视频终于10万播放量了* 更新一下新的代码叭:* * 将之前的u8g2库更改为u8g库;* 功能不变的下精简优化了代码 减少体积30%* Arduino Nano ROM占用由99%降低至69%;* 优化系统里流畅度;* 提高系统稳定性;* --------------------------------------------------------* By: Zyb * Bilibili: aiwyq* Coolapk: aiwyq* VX /Phone: 17820488893* 2021 05.27********************************************************** *//********请提前装好以下库文件 工具-管理库(Ctrl+Shift+I)*******/
/**********U8glib库 DHT11库 Adafruit_Fingerprint**********/
/***报错请自行找原因***/
#include <U8glib.h> //u8g库 用于0.96 OLED IIC显示器 修改于21年5.24 原为u8g库
#include <Adafruit_Fingerprint.h>//AS608指纹库
#include<DHT.h>//温湿度传感 #include "font.h" //调用同目录下的字库
DHT dht(7,DHT11);//温湿度data接脚
#ifdef U8X8_HAVE_HW_I2C
#endif
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C / TWI
#define x_coordinate 40
#define KEY1 2
#define KEY2 3
#define KEY3 4
#define KEY4 5
#define KEY5 6
SoftwareSerial mySerial(11,12);//新建一个名为mySerial的软串口 并将11号引脚作为RX端 12号引脚作为TX端
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
u16 q=1024,t,h; //累计开门次数、温度、湿度
u8 key_num=0;void key_init()
{pinMode(KEY1, INPUT_PULLUP);pinMode(KEY2, INPUT_PULLUP);pinMode(KEY3, INPUT_PULLUP);pinMode(KEY4, INPUT_PULLUP);pinMode(KEY5, INPUT_PULLUP);
}u8 key_scan(u8 mode)
{static u8 key_up=1;//按键按松开标志if(mode)key_up=1; //支持连按if(key_up&&(digitalRead(KEY1)==0||digitalRead(KEY2)==0||digitalRead(KEY3)==0||digitalRead(KEY4)==0||digitalRead(KEY5)==0)){delay(10);key_up=0;if(digitalRead(KEY1)==0)return 1;else if(digitalRead(KEY2)==0)return 2;else if(digitalRead(KEY3)==0)return 3;else if(digitalRead(KEY4)==0)return 4;else if(digitalRead(KEY5)==0)return 5;}else if(digitalRead(KEY1)==1&&digitalRead(KEY2)==1&&digitalRead(KEY3)==1&&digitalRead(KEY4)==1&&digitalRead(KEY5)==1)key_up=1;return 0;// 无按键按下
}void MG90S()//MG90S舵机PWM脉冲
{for(int i=1; i<51; i++){servopulse(75);delay(10);}delay(1444);for(int i=1; i<51; i++){servopulse(10);delay(10);}
}void servopulse(int angle)//MG90S舵机PWM脉冲
{int pulsewidth = (angle * 11) + 500;digitalWrite(9, HIGH);delayMicroseconds(pulsewidth);digitalWrite(9, LOW);delayMicroseconds(20000 - pulsewidth);
}/**
@添加指纹
*/
void Add_FR()
{ u8 i,ensure,processnum=0; u8 ID_NUM=0; char str2[10];while(1){switch (processnum){case 0:i++;u8g.firstPage();do{u8g.drawXBMP(32,24,64,16,State5); /* 字串 请按手指 64x16 */}while(u8g.nextPage());ensure=finger.getImage();if(ensure==FINGERPRINT_OK){ensure=finger.image2Tz(1);//生成特征if(ensure==FINGERPRINT_OK){u8g.firstPage();do{u8g.drawXBMP(32,24,64,16,State6); /* 字串 指纹正常 64x16 */}while(u8g.nextPage());// Serial.println(" 000 is true");i=0;processnum=1;//跳到第二步}else {};}else {};break;case 1:i++;u8g.firstPage();do{u8g.drawXBMP(32,24,64,16,State7); /* 字串 再按一次 64x16 */}while(u8g.nextPage());ensure=finger.getImage();if(ensure==FINGERPRINT_OK){ensure=finger.image2Tz(2);//生成特征if(ensure==FINGERPRINT_OK){u8g.firstPage();do{u8g.drawXBMP(32,24,64,16,State6); /* 字串 指纹正常 64x16 */}while(u8g.nextPage());i=0;processnum=2;//跳到第三步}else {};}else {};break;case 2:u8g.firstPage();do{u8g.drawXBMP(32,24,64,16,State8);/* 字串 创建模板 64x16 */}while(u8g.nextPage());ensure=finger.createModel();if(ensure==FINGERPRINT_OK){u8g.firstPage();do{u8g.drawXBMP(16,24,96,16,State9); /* 字串 模板创建成功 96x16 */}while(u8g.nextPage());processnum=3;//跳到第四步}else{u8g.firstPage();do{u8g.drawXBMP(16,24,96,16,State10); /* 字串 模板创建失败 96x16 */}while(u8g.nextPage());i=0;processnum=0;//跳回第一步}delay(500);break;case 3:u8g.firstPage();do{u8g.drawXBMP(1,0,128,48,State11);/* 字串 按K4加,按K2减 按K3保存 0=< ID <=99 128x48*/u8g.setFont(u8g_font_6x10); // 选择字体u8g.drawStr(40,62,"ID=00");}while(u8g.nextPage());while(key_num!=3){key_num=key_scan(0);if(key_num==2){key_num=0;if(ID_NUM>0)ID_NUM--;if(ID_NUM<10)sprintf(str2,"ID=0%d",ID_NUM);elsesprintf(str2,"ID=%d",ID_NUM);u8g.firstPage();do{u8g.setFont(u8g_font_6x10); // 选择字体u8g.drawXBMP(1,0,128,48,State11);u8g.drawStr(40,62,str2);}while(u8g.nextPage());}if(key_num==4){key_num=0;if(ID_NUM<99)ID_NUM++;if(ID_NUM<10)sprintf(str2,"ID=0%d",ID_NUM);elsesprintf(str2,"ID=%d",ID_NUM);u8g.firstPage();do{u8g.setFont(u8g_font_6x10);u8g.drawStr(40,62,str2);u8g.drawXBMP(1,0,128,48,State11);}while(u8g.nextPage());}}key_num=0;ensure=finger.storeModel(ID_NUM);//储存模板if(ensure==0x00){u8g.firstPage();do{u8g.drawXBMP(16,24,96,16,State12); /* 字串 录入指纹成功 96x16 */}while(u8g.nextPage());Serial.println("FR receive OK");delay(1500);return ;}else{processnum=0;}break;}delay(400);if(i==10)//超过5次没有按手指则退出{break;}}
}void Press_FR()
{...
}void Del_FR()
{...
}void MENU()
{u8g.firstPage();do{u8g.setFont(u8g_font_6x10); // 选择字体u8g.drawXBMP(4,0,112,16,State1); //显示字模汉字 /* 竹401指纹门禁 128x16 */u8g.drawXBMP(40,16,64,16,State2);/* 字串 添加指纹 64x16 */u8g.drawXBMP(40,32,64,16,State3);/* 字串 删除指纹 64x16 */u8g.drawXBMP(40,48,64,16,State4);/* 字串 验证指纹 64x16 */u8g.drawStr(22,30,"K1");u8g.drawStr(22,46,"K2");u8g.drawStr(22,62,"K3");}while(u8g.nextPage());Serial.println("一切准备就绪....");Serial.println("By Zhongyanbin");
}void setup()
{// put your setup code here, to run once:key_init();dht.begin();//开启温湿度u8g.begin(); //开启OLED通信Serial.begin(9600); //开启串口通信 波特率9600finger.begin(57600); //设置AS608波特率 57600MENU();
}void loop()
{...
}
演示视频
- 添加指纹/删除指纹/开锁步骤↓
- B站完整版4K60帧详细视频演示操作/安装教程:BV1Yy4y187wshttps://b23.tv/Vm2rDE
- 感谢各位的支持 让此视频达到了10w热度
更新内容
- 更新于2021年5月27日 B站这个视频终于10万播放量了
- 更新一下新的代码叭:
- 将之前的u8g2库更改为u8g库;
- 功能不变的下精简优化了代码 减少体积30%
- Arduino Nano ROM占用由99%降低至69%;
- 优化系统里流畅度;
- 提高系统稳定性;
第一篇csdn帖子
欢迎各位大佬指正
完整源码下载:
https://github.com/aiwyq/Arduino-fingerprint
Arduino Nano+AS608指纹门禁系统相关推荐
- 基于Arduino Nano的多功能桌面感应垃圾桶
成品图 (垃圾桶由超声波感应自动开启,延时后关闭) (垃圾桶的所有布线全部精细的设置在桶盖,桶身完全没有布线,轻松取开,倒垃圾无忧) (内置的时钟可以为你精准报时,LM35温度传感器也可以尽可能准确地 ...
- arduino智能浇花系统_基于Arduino单片机的智能浇花器
Internal Combustion Engine & Parts • 119 • 基于Arduino单片机的智能淺花器 卞 云 松 ;张 国 祥 ;任 佳 豪 :陆晨雨 (江海职业技术学院 ...
- 【毕业设计】基于Arduino的智能灌溉系统 - 嵌入式 单片机 物联网
文章目录 1 简介 1 硬件要求 2 项目背景 3 实现功能 4 OLDE显示屏 5 IO扩展器 6 系统构建 7 完整代码 8 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片 ...
- Arduino Nano 引脚分配图及定义详解
原创文章,转载请注明出处. Arduino Nano 是一款基于 Microchip ATmega 328P 8位微控制芯片的智能硬件开发板,尺寸小巧功能强悍. 双排针引出,可以方便栈接在面包板上,可 ...
- arduino nano 蓝牙_基于Arduino的摩尔斯电码练习及无线收发报训练器
摘要:本文介绍一款基于Arduino NANO开发的,带2.4G无线收发报功能的摩尔斯电码训练器的系统设计思路.发射端通过NANO板的外部中断引脚采集电键输入的脉冲PPM序列同时驱动喇叭播放电键音,然 ...
- 【基于Arduino RFID门禁系统】
基于Arduino RFID门禁系统 介绍 射频识别或RFID(Radio-Frequency Identification)是一种通过无线电信号进行自动识别,通过RFID标签检索和存储数据的方法. ...
- arduino nano 简单实现蓝牙模块与手机进行通信
1.背景 目前很多通信方式都需要外附手柄,控制器,接收器,体积比较大,用起来不够方便.那么,对于距离要求不高的控制小项目,蓝牙通信一定是不二之选. 2.需要预备了解的内容 基础的编程思想和基础的C语言 ...
- Arduino Nano板各脚作用
Arduino Nano 样图和电路图 (样图一) (样图二) (电路图) (引脚分布图) 各引脚作用: 一.二脚:为串口输出输入引脚,板上通过CH340芯片转为了USB信号,方便主机下载程序.通信 ...
- Arduino——Nano—— 引脚分配图及定义详解
Arduino Nano 是一款基于 Microchip ATmega 328P 8位微控制芯片的智能硬件开发板,尺寸小巧功能强悍. 双排针引出,可以方便栈接在面包板上,可以灵活地通过杜邦端子跟其它模 ...
最新文章
- gulp打包js/css时合并成一个文件时的顺序解决
- python 文件和目录操作
- JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室
- exe4j打包成可执行程序
- 机器学习问题方法总结
- day21-python模块
- [CQOI2018] 解锁屏幕(状压dp)
- 关于JavaScript的数组随机排序
- redis事务的简单介绍
- 存储器和寄存器数据传输(ARMv8)
- 8年测试经验,用例设计竟然不知道状态图法?
- 【对讲机的那点事】Tx/Rx系统中的非线性失真
- springbatch读取外部数据到mysql
- oracle 修改字段类型方法
- unity SDK/NDK的下载
- Oracle 锁表查询和解锁方法
- 盛京剑客系列26:极简估值教程——第二讲历史估值的参考与运用
- django.relatedField-关联域
- php 生成单色位图,使用PHP实现将jpg/png转成.wbmp/.bmp格式图片后再转为16进制字符串(单色位图取模)...
- (转)sqlserver 数据恢复方法