基于arduino+as608+360舵机的宿舍指纹锁

需要的制作材料

  1. Arduino nano开发板
  2. AS608指纹模块
  3. MG995 360舵机(360舵机的控制与180舵机控制不相同,360舵机只可以控制旋转的速度,180舵机可以控制旋转的角度)
  4. 面包板,电线若干

准备部分

参考了大佬的代码http://t.csdnimg.cn/GB29Q

  1. arduino模块可以看b站视频,,零基础(c语言零基础也可以看)
    【【太极创客】零基础入门学用Arduino 第一部分 合辑】https://www.bilibili.com/video/BV164411J7GE?vd_source=7183d94355e25d7a846a2242f0eb9c7d
  2. AS608指纹模块
  • 可以使用一个上位机软件进行操作的。

  • 使用usb转ttl,把AS608连接上电脑

  • 通过上位机录入指纹。

  1. 舵机
  • 宿舍门是金属材质,热熔胶可能粘不上去,这里建议可以使用ab胶水

代码部分

该代码功能是

  1. 检测到手指,wak变为高电平,然后触发中断,离开睡眠模式
  2. 判断wak是否为高电平,如果是那么就开始判断是否为正确的指纹
  3. 如果为正确的指纹,就驱动舵机开锁
  4. 结束后关闭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);
}


完成图

一些注意点:

  1. 对于Arduino Uno,通常支持外部中断的引脚包括:引脚2:支持外部中断0(INT0)引脚3:支持外部中断1(INT1)
  2. 可以看一下这个博客:http://t.csdnimg.cn/GB29Q。里面有控制AS608不同颜色,以及检测手指才开灯的方法,(AS608的灯好像可以换颜色,但是我这个模块可能是坏了,换不了)
posted @ 2024-05-06 11:14  zhudachang  阅读(60)  评论(0编辑  收藏  举报