需要的制作材料
- Arduino nano开发板
- AS608指纹模块
- MG995 360舵机(360舵机的控制与180舵机控制不相同,360舵机只可以控制旋转的速度,180舵机可以控制旋转的角度)
- 面包板,电线若干
准备部分
参考了大佬的代码http://t.csdnimg.cn/GB29Q
- arduino模块可以看b站视频,,零基础(c语言零基础也可以看)
【【太极创客】零基础入门学用Arduino 第一部分 合辑】https://www.bilibili.com/video/BV164411J7GE?vd_source=7183d94355e25d7a846a2242f0eb9c7d - AS608指纹模块
-
可以使用一个上位机软件进行操作的。
-
使用usb转ttl,把AS608连接上电脑
-
通过上位机录入指纹。
- 舵机
- 宿舍门是金属材质,热熔胶可能粘不上去,这里建议可以使用ab胶水
代码部分
该代码功能是
- 检测到手指,wak变为高电平,然后触发中断,离开睡眠模式
- 判断wak是否为高电平,如果是那么就开始判断是否为正确的指纹
- 如果为正确的指纹,就驱动舵机开锁
- 结束后关闭as608灯,并且重新进入睡眠模式
引脚接线
arduino AS608
3.3V vi
4 tx
3 rx
gnd GND
3.3V vt
2 wak
舵机接线使用9号引脚
//需要在arduino库管理中添加库Adafruit_Fingerprint
#include <Servo.h>
#include <avr/sleep.h>
#include <Adafruit_Fingerprint.h>
Servo myservo;
SoftwareSerial mySerial(4,3);
int pos=0;
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int as608read=2;
void wakeUp() {
// 这个函数将在外部中断触发时调用,但可以保持空白
sleep_disable();
}
void setup() {
myservo.attach(9);
Serial.begin(9600);
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
pinMode(as608read,INPUT);
finger.LEDcontrol(false);
attachInterrupt(digitalPinToInterrupt(as608read), wakeUp, CHANGE);
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // 设置最深的睡眠模式
sleep_enable(); // 启用睡眠模式
}
void loop() {
sleep_mode(); // 进入睡眠模式,等待中断唤醒
if(digitalRead(as608read)==HIGH){
finger.LEDcontrol(true);
getFingerprintIDez();
delay(500);
finger.LEDcontrol(false);
}
delay(100);
}
int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK){
finger.LEDcontrol(0x02,0,0x01,0);
return -1;
}
p = finger.image2Tz();
if (p != FINGERPRINT_OK){
finger.LEDcontrol(0x02,0,0x01,0);
return -1;
}
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK){
finger.LEDcontrol(0x02,0,0x01,0);
return -1;
}
finger.LEDcontrol(0x02,0,0x02,0);
opendoor();
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
void opendoor(){
pos=0;
myservo.write(pos);
delay(2000);
pos=112;
myservo.write(pos);
delay(600);
pos=90;
myservo.write(pos);
delay(400);
}
完成图
一些注意点:
- 对于Arduino Uno,通常支持外部中断的引脚包括:引脚2:支持外部中断0(INT0)引脚3:支持外部中断1(INT1)
- 可以看一下这个博客:http://t.csdnimg.cn/GB29Q。里面有控制AS608不同颜色,以及检测手指才开灯的方法,(AS608的灯好像可以换颜色,但是我这个模块可能是坏了,换不了)