需要的製作材料
- 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);
}