亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于 Arduino、键盘与线性执行器的密码门锁

组件与物料

组件数量备注
Arduino UNO1
4×4 薄膜矩阵键盘1
L293D 双 H 桥驱动芯片1
12V 线性执行器1

项目介绍

本项目实现一个基于密码的门锁:通过 4×4 矩阵键盘输入 4 位密码,正确则驱动线性执行器伸缩开锁。虽然网上已有类似教程,但作者尝试以更清晰方式讲解键盘扫描原理与密码验证逻辑。

键盘内部结构与扫描原理

矩阵键盘内部为 4 行 4 列按键,按下时对应行列短路。采用列输入上拉、行输出轮询低电平的扫描方式:依次拉低各行,读取列状态,若某列为低则判断对应按键按下。

基于 Arduino、键盘与线性执行器的密码门锁
基于 Arduino、键盘与线性执行器的密码门锁
基于 Arduino、键盘与线性执行器的密码门锁

代码 1:按键扫描 (无库版本)

手写扫描逻辑,便于理解及移植到不支持 Keypad 库的单片机 (如 STM32)。串口监视器实时显示按下的键值。

int rows=4; int columns=4;
#define c3 9 #define c2 8 #define c1 7 #define c0 6
#define r3 5 #define r2 4 #define r1 3 #define r0 2

void setup() {
  Serial.begin(9600);
  pinMode(c0,INPUT_PULLUP); pinMode(c1,INPUT_PULLUP);
  pinMode(c2,INPUT_PULLUP); pinMode(c3,INPUT_PULLUP);
  pinMode(r0,OUTPUT); pinMode(r1,OUTPUT);
  pinMode(r2,OUTPUT); pinMode(r3,OUTPUT);
  pinMode(11,OUTPUT); pinMode(12,OUTPUT);
}

char readkey(void) {
  digitalWrite(r0,LOW); digitalWrite(r1,HIGH); digitalWrite(r2,HIGH); digitalWrite(r3,HIGH);
  if(digitalRead(c0)==LOW){delay(500); return '1';}
  else if(digitalRead(c1)==LOW){delay(500); return '2';}
  else if(digitalRead(c2)==LOW){delay(500); return '3';}
  else if(digitalRead(c3)==LOW){delay(500); return 'A';}
  digitalWrite(r0,HIGH); digitalWrite(r1,LOW); digitalWrite(r2,HIGH); digitalWrite(r3,HIGH);
  if(digitalRead(c0)==LOW){delay(500); return '4';}
  else if(digitalRead(c1)==LOW){delay(500); return '5';}
  else if(digitalRead(c2)==LOW){delay(500); return '6';}
  else if(digitalRead(c3)==LOW){delay(500); return 'B';}
  digitalWrite(r0,HIGH); digitalWrite(r1,HIGH); digitalWrite(r2,LOW); digitalWrite(r3,HIGH);
  if(digitalRead(c0)==LOW){delay(500); return '7';}
  else if(digitalRead(c1)==LOW){delay(500); return '8';}
  else if(digitalRead(c2)==LOW){delay(500); return '9';}
  else if(digitalRead(c3)==LOW){delay(500); return 'C';}
  digitalWrite(r0,HIGH); digitalWrite(r1,HIGH); digitalWrite(r2,HIGH); digitalWrite(r3,LOW);
  if(digitalRead(c0)==LOW){delay(500); return '*';}
  else if(digitalRead(c1)==LOW){delay(500); return '0';}
  else if(digitalRead(c2)==LOW){delay(500); return '#';}
  else if(digitalRead(c3)==LOW){delay(500); return 'D';}
  return 'o';
}

char nfunc(void) { char key='o'; while(key=='o') key=readkey(); return key; }

void loop() {
  char key1 = nfunc();
  if(key1) Serial.print(key1);
}

代码 2:密码验证与开锁

设定密码 "1234",收集 4 位输入后比对,正确则拉高引脚 11、拉低引脚 12 驱动 L293D 使执行器收缩开锁 (持续 250ms),错误串口提示 "intruder"。

char password[5]="1234";
char typed[5];
int count=0;

void loop() {
  char key1 = nfunc();
  if(key1) {
    typed[count]=key1;
    count++;
    Serial.print(key1);
  }
  if(count==4){
    if(strcmp(typed,password)==0) {
      Serial.println(" correct");
      digitalWrite(11,HIGH);
      digitalWrite(12,LOW);
      delay(250);
      digitalWrite(11,LOW);
    } else {
      Serial.println(" intruder");
    }
    count=0;
  }
}

硬件连接

执行器接在 L293D 电机输出端,L293D 逻辑侧由 Arduino 5V 供电,功率侧接 12V。Arduino 引脚 11、12 分别接 L293D 输入端控制正反转。

基于 Arduino、键盘与线性执行器的密码门锁

原理图与演示视频

基于 Arduino、键盘与线性执行器的密码门锁
基于 Arduino、键盘与线性执行器的密码门锁

视频演示:按键显示、密码正确 LED 亮、执行器动作开锁。

制造工艺

  1. 银行金库内幕:历史、设计与安全未来
  2. 旋转门:设计、历史与节能效益
  3. 运河与船闸:美国水路运输的工程、历史与未来
  4. 现代弹子锁的演变与制造
  5. 组合锁:设计原理、制造工艺与历史演变
  6. 树莓派太阳能气象站DIY指南
  7. 树莓派蓝牙近感智能门锁:手机离开自动上锁
  8. Windows IoT + 树莓派打造人脸识别智能门锁
  9. 打造安全的 Arduino RFID 门锁——分步指南
  10. Arduino Nano 驱动 128x64 OLED 实时运行康威生命游戏 (元胞自动机)
  11. 基于 Arduino 与 ESP8266 的 WiFi 智能门锁:手机扫码解锁
  12. 发动机配置全解析:类型特征与分类体系