900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【物联网树莓派毕设04】Arduino实现电梯及人脸识别门禁

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

时间:2018-11-20 16:14:19

相关推荐

【物联网树莓派毕设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 bluetoothimport timedef get_Floor(num):bd_addr = "98:D3:28:F7:A0:8G" #蓝牙HC-05的物理地址port = 1sock = 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快速实现人脸识别

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。