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指纹门禁系统相关推荐

  1. 基于Arduino Nano的多功能桌面感应垃圾桶

    成品图 (垃圾桶由超声波感应自动开启,延时后关闭) (垃圾桶的所有布线全部精细的设置在桶盖,桶身完全没有布线,轻松取开,倒垃圾无忧) (内置的时钟可以为你精准报时,LM35温度传感器也可以尽可能准确地 ...

  2. arduino智能浇花系统_基于Arduino单片机的智能浇花器

    Internal Combustion Engine & Parts • 119 • 基于Arduino单片机的智能淺花器 卞 云 松 ;张 国 祥 ;任 佳 豪 :陆晨雨 (江海职业技术学院 ...

  3. 【毕业设计】基于Arduino的智能灌溉系统 - 嵌入式 单片机 物联网

    文章目录 1 简介 1 硬件要求 2 项目背景 3 实现功能 4 OLDE显示屏 5 IO扩展器 6 系统构建 7 完整代码 8 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片 ...

  4. Arduino Nano 引脚分配图及定义详解

    原创文章,转载请注明出处. Arduino Nano 是一款基于 Microchip ATmega 328P 8位微控制芯片的智能硬件开发板,尺寸小巧功能强悍. 双排针引出,可以方便栈接在面包板上,可 ...

  5. arduino nano 蓝牙_基于Arduino的摩尔斯电码练习及无线收发报训练器

    摘要:本文介绍一款基于Arduino NANO开发的,带2.4G无线收发报功能的摩尔斯电码训练器的系统设计思路.发射端通过NANO板的外部中断引脚采集电键输入的脉冲PPM序列同时驱动喇叭播放电键音,然 ...

  6. 【基于Arduino RFID门禁系统】

    基于Arduino RFID门禁系统 介绍 射频识别或RFID(Radio-Frequency Identification)是一种通过无线电信号进行自动识别,通过RFID标签检索和存储数据的方法. ...

  7. arduino nano 简单实现蓝牙模块与手机进行通信

    1.背景 目前很多通信方式都需要外附手柄,控制器,接收器,体积比较大,用起来不够方便.那么,对于距离要求不高的控制小项目,蓝牙通信一定是不二之选. 2.需要预备了解的内容 基础的编程思想和基础的C语言 ...

  8. Arduino Nano板各脚作用

    Arduino  Nano 样图和电路图 (样图一) (样图二) (电路图) (引脚分布图) 各引脚作用: 一.二脚:为串口输出输入引脚,板上通过CH340芯片转为了USB信号,方便主机下载程序.通信 ...

  9. Arduino——Nano—— 引脚分配图及定义详解

    Arduino Nano 是一款基于 Microchip ATmega 328P 8位微控制芯片的智能硬件开发板,尺寸小巧功能强悍. 双排针引出,可以方便栈接在面包板上,可以灵活地通过杜邦端子跟其它模 ...

最新文章

  1. gulp打包js/css时合并成一个文件时的顺序解决
  2. python 文件和目录操作
  3. JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室
  4. exe4j打包成可执行程序
  5. 机器学习问题方法总结
  6. day21-python模块
  7. [CQOI2018] 解锁屏幕(状压dp)
  8. 关于JavaScript的数组随机排序
  9. redis事务的简单介绍
  10. 存储器和寄存器数据传输(ARMv8)
  11. 8年测试经验,用例设计竟然不知道状态图法?
  12. 【对讲机的那点事】Tx/Rx系统中的非线性失真
  13. springbatch读取外部数据到mysql
  14. oracle 修改字段类型方法
  15. unity SDK/NDK的下载
  16. Oracle 锁表查询和解锁方法
  17. 盛京剑客系列26:极简估值教程——第二讲历史估值的参考与运用
  18. django.relatedField-关联域
  19. php 生成单色位图,使用PHP实现将jpg/png转成.wbmp/.bmp格式图片后再转为16进制字符串(单色位图取模)...
  20. (转)sqlserver 数据恢复方法

热门文章

  1. 数字源表如何测试MOS管?
  2. mysql sql 设置主键自动增长_Mysql、Sql Server、Oracle主键自动增长的设置
  3. 产业安全专家谈 | 外挂黑产猖獗,游戏厂商如何阻击应对?
  4. 如何用英语回答外企面试常见问题
  5. 【转】关于Flex未来走向的问答
  6. 移动版本的优化——说白了就是PC和移动端网页的对接
  7. 程序员与颈椎病(二):一个动作改善你的头晕头昏
  8. 图片缩放 转换bpp 图片合并
  9. 个人收藏视频资源 | 一大波干货来袭
  10. 新浪导航案例-padding影响盒子好处