需要的制作材料
- 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```cpp
#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);
}