【物联网树莓派毕设04】Arduino实现电梯及人脸识别门禁

一、前言

        这次是利用Arduino实现毕设中的电梯联动及门禁的部分,因为之前大二的时候用过Arduino做过课设,比较熟悉,其中一个项目就是实现模拟电梯运行。毕设的电梯部分,功能不用很复杂,只需要实现简单的呼梯即可。Arduino利用蓝牙与树莓派通信,通过树莓派进行人脸识别后,获取目标楼层需求,进而利用树莓派自带的蓝牙将数据传输给Arduino,同时打开进入酒店电梯门禁。效果图如下:

                                                         

                                   电梯                                                           人脸识别门禁

二、具体实现

1、硬件准备

        (1)Arduino 的R3主板

        (2)步进电机:驱动电梯上下

         (3)74HC164芯片,1位共阴或共阳数码管:楼层显示

         (4)超声波模块:测距,感知电梯所在楼层状态

         (5)蓝牙HC-05:与树莓派蓝牙通信

         (6)舵机SG90:门禁开关(注意:是90-180°的,不要360°)

         (7)面包板、杜邦线若干、树莓派和摄像头就不多说了

2、功能验证

        (1)舵机:有3根线,分别是黑红黄,其中黑色线接地,红色线接电源5V,黄色线则是信号线。通过write()函数来控制舵机的角度,范围:0-180°。

#include <Servo.h>

Servo myservo;  // 定义Servo对象来控制

void setup(){   
    myservo.attach(10); // 控制线连接数字10    
}

void loop() {
    myservo.write(135); //角度可以自己根据需要调整
    delay(1000);
    myservo.write(30);
    delay(1000);
}

        (2)步进电机:按下图将步进电机和驱动板连接好,驱动板左侧IN1、IN2、IN3、IN4分别接至arduino的2-5串口上,看清驱动板的正负极,分别接地和5V,这里就不画接线图了

void setup(){     
  for (int i = 2; i < 6; i++) { //步进电机串口的初始化 
    pinMode(i, OUTPUT);       
  }
}

void clockwise(int num){    //步进电机正转函数 512/圈
  for (int count = 0; count < num; count++){
    for (int i = 2; i < 6; i++){
      digitalWrite(i, HIGH);
      delay(3);
      digitalWrite(i, LOW);
    }
  }
}

void anticlockwise(int num){    //步进电机反转函数  512/圈
  for (int count = 0; count < num; count++){
    for (int i = 5; i > 1; i--){
      digitalWrite(i, HIGH);
      delay(3);
      digitalWrite(i, LOW);
    }
  }
}
void loop() { 
    clockwise(512);
    delay(1000);
    anticlockwise(512);
    delay(1000);
}

        (3)超声波测距:有4个引脚,VCC接5V,GND接地,trig接串口8,echo接串口9,测试结果会打印在串口监视器上。

int ting = 8;
int echo = 9;
float distance;   //测距距离

void setup(){
   Serial.begin(9600); 
//初始化超声波测距串口
  pinMode(ting,OUTPUT);
  pinMode(echo,INPUT);
}

void SendDis(){      //发送超声波测距距离
  digitalWrite(ting,LOW);
  delayMicroseconds(2);
  digitalWrite(ting,HIGH);
  delayMicroseconds(10);
  digitalWrite(ting,LOW);
  distance = pulseIn(echo,HIGH)/58.00;
  Serial.println(distance);
}

void loop() { 
    SendDis();
    delay(1000);
}

        (4)74HC164驱动数码管显示数字。74HC595更简单,但是需要3个串口,在串口不紧张的时候可以使用595,这里提供一种74HC164的方法,需要2个串口即可驱动数码管。

         如图所示,根据74HC164的功能引脚图,DSA和DSB串联接到串口7上,CP时钟口接到带~的串口6上,这就是所需的两个串口。然后,Q0-Q7分别接上数码管的a-g上,GND接地,VCC和MR非串联接5V。其中,数码管的公共端,若是共阴,则串联接低电平;若是共阳,则串联一个电阻接高电平。

const unsigned char DuanMa[3]={0xf9,0xa4,0xb0};   //数码管段码 这里给出1、2、3的
int CLK = 6;
int DAT = 7;

void setup() {
  //初始化数码管串口
  pinMode(CLK, OUTPUT);
  pinMode(DAT, OUTPUT);
}

void SendByte(unsigned char dat){    //发送数码管数据  
  static unsigned char i;
  for(i=0;i<8;i++){
    digitalWrite(CLK,LOW);
    digitalWrite(DAT,bitRead(dat,7-i));
    digitalWrite(CLK,1);
  }
}

void loop(){
    SendByte(DuanMa[0]);
    delay(1000);
    SendByte(DuanMa[1]);
    delay(1000);
    SendByte(DuanMa[2]);
    delay(1000);
}

        (5)蓝牙HC-05,这里需要用到虚拟串口,选择Arduino上的11、12串口,利用函数SoftwareSerial mySerial(11,12)设置,这里11是RXD,12是TXD。要注意是蓝牙的RXD接Arduino的TXD,蓝牙的TXD接Arduino的RXD,然后VCC和GND分别接5V和地即可。

/*
 * Arduino部分
 */
#include <SoftwareSerial.h>

SoftwareSerial mySerial(11,12);

void setup() {
    //开启串口通信
    Serial.begin(115200);
    mySerial.begin(9600); 
}

void loop() { 
  //蓝牙通信
  while(mySerial.available())
  {
    char c;
    c = mySerial.read();
    mySerial.println(c);
    switch(c)
    {
      case '1':Serial.println("~~~电梯去往1楼~~~");break;
      case '2':Serial.println("~~~电梯去往2楼~~~");break;
      case '3':Serial.println("~~~电梯去往3楼~~~");break;
      default:break;
    }
  }
 
}

        树莓派打开VNC界面,右上角点击蓝牙图标, Turn On bluetooth,点击Add Device,Arduino上电之后,可以在列表中找到HC-05,鼠标放上去旁边会显示蓝牙地址,点击连接,默认密码:1234,即可配对成功。

"""
    树莓派部分
"""
import bluetooth
import time

def get_Floor(num):
    bd_addr = "98:D3:28:F7:A0:8G" #蓝牙HC-05的物理地址
    port = 1

    sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
    sock.connect((bd_addr,port))
    
    sock.send(num)
    sock.close()

if __name__== '__main__':
    while True:
        num =input("输入目标楼层:")
        get_Floor(num)
        time.sleep(0.2)

3、模块整合

        (1)电梯

        思路:利用超声波测距获取距离数据,根据数据划分1、2、3楼;根据楼层信息驱动数码管显示;根据蓝牙接收到的目标楼层信息,与当前所处楼层进行比较,驱动步进电机带动电梯上下。

        (2)人脸识别门禁

        思路:根据人脸识别的结果,调用蓝牙发送订单人的目标楼层信息给Arduino,Arduino驱动舵机,开关门禁,进而驱动电梯即可。

        (3)完整代码请私信

         更多信息:

        【物联网树莓派毕设01】树莓派4B快速实现VNC连接

        【物联网树莓派毕设02】树莓派4B安装Pyhton3及opencv

        【物联网树莓派毕设03】树莓派4B调用百度API快速实现人脸识别

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Congra_kira

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值