3158| 2
|
[2019年] 【嘉年华展示】探险车 |
本帖最后由 szjuliet 于 2019-9-29 22:24 编辑 此探险车模拟真实场景,代替人们探索未知环境,进行观测或前往危险环境工作,具有一定的越野能力和自动工作能力。 使用者可以通过控制端(手机或平板)对小车进行操控。 小车本身通过各种传感器采集数据并反馈到控制端,使用者能够通过小车搭载的摄像头远程观察情况。 主控部分由一个树莓派板加Arduino板组合而成,既利用了树莓派处理能力强大的优点,也利用了Arduino功能实现简单的特点。 作品所含功能
拟完善功能:
一、项目解构及流程图: 本项目可以解构为三大部分:APP端、车体组装及硬件部分。 1. 小车蓝牙连接流程 2. 小车登录界面流程 3. 小车操作界面流程 4. 人脸识别流程图 二、车体组装 小车使用的材料为高强度、低成本、耐高温耐腐蚀的铝镁合金,能有效降低制作成本,以履带方式传动,能够适应多种复杂路况。 小车采用了蓝牙&局域网通信双通信结构。 小车采用arduino主控器获取并传送传感器数据,控制小车及摄像头的方向,使用性能更好的树莓派获取动态图像并将图像传给控制端。 小车采用双电源:9V电池盒和充电宝供电,确保电力充足。 小车正面安装了Arduino UNO和树莓派。UNO上放置了蓝牙模块HC-06,小车使用蓝牙方式与手机通讯。树莓派连接摄像头,使用wifi方式将实时图像回传手机。 小车前方是超声波传感器,用于侦测前方是否有物体。小车上方是摄像头,连接树莓派;摄像头上的舵机连接UNO,使用蓝牙方式连接手机后,手机控制摄像头的方向。 在电池盒的下方有气体传感器和温湿度传感器连接到UNO 三、Arduino编程(回传环境数据,接收小车、摄像头的控制命令并执行) [mw_shl_code=cpp,true]#include <Servo.h> #include <dht11.h> dht11 DHT11; Servo myservo1; Servo myservo2; void setup() { pinMode(2, OUTPUT); pinMode(3, INPUT); pinMode(12, INPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); myservo1.attach(4); myservo2.attach(9); Serial.begin(9600); myservo1.write(85); myservo2.write(10); } int sd = 200; int x = 85; int y = 10; int wd = 0; int s = 0; int qt = 0; int csb = 0; void loop() { digitalWrite(2, LOW); delayMicroseconds(2); digitalWrite(2, HIGH); delayMicroseconds(10); digitalWrite(2, LOW); csb = pulseIn(3, HIGH) / 58; if (csb > 99) csb = 99; DHT11.read(12); wd = (int)DHT11.temperature; s = (int)DHT11.humidity; qt = analogRead(0)/10; Serial.print("T#"); Serial.print(wd); Serial.print("H#"); Serial.print(s); Serial.print("C#"); Serial.print(csb); Serial.print("G#"); Serial.println(qt); for (int i=0;i<200;i++) { delay(10); char t = Serial.read(); if (t == '3') { digitalWrite(7, HIGH); digitalWrite(8, HIGH); analogWrite(5, sd); analogWrite(6, sd); } if (t == '1') { digitalWrite(7, LOW); digitalWrite(8, LOW); analogWrite(5, sd); analogWrite(6, sd); } if (t == '4') { digitalWrite(7, HIGH); digitalWrite(8, LOW); analogWrite(5, sd); analogWrite(6, sd); } if (t == '2') { digitalWrite(7, LOW); digitalWrite(8, HIGH); analogWrite(5, sd); analogWrite(6, sd); } if (t == '6') { digitalWrite(7, HIGH); digitalWrite(8, LOW); analogWrite(5, 0); analogWrite(6, 0); } if (t == '-') { sd = sd - 5; if (sd < 0) sd = 0; } if (t == '+') { sd = sd + 5; if (sd > 200) sd = 200; } if (t == '9') { x = x + 5; myservo1.write(x); delay(200); if (x > 180) x = 180; } if (t == '0') { x = x - 5; myservo1.write(x); delay(200); if (x < 0) x = 0; } if (t == '7') { y = y + 5; myservo2.write(y); delay(200); if (y > 120) y = 120; } if (t == '8') { y = y - 5; myservo2.write(y); delay(200); if (y < 0) y = 0; } } }[/mw_shl_code] 四、树莓派图像获取 树莓派使用mjpg-streamer获取USB摄像头图像。 项目工程:https://github.com/jacksonliam/mjpg-streamer。 将工程下载后,传送到树莓派系统中解压: unzip mjpg-streamer-master.zip 安装支持库:sudo apt-get install libjpeg8-dev 安装编译工程需要用到cmake:sudo apt-get install cmake 进入工程mjpg-streamer-experimental,进行完全编译:make clean all 进入树莓派设置菜单:sudo raspi-config,启用摄像头“Enable Camera”后重启树莓派。 进入mjpg-streamer-experimental目录,启动普通USB摄像头:./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www" 打开浏览器, 查看静态截图:http://<树莓派IP>:8080/?action=snapshot 查看动态图像:http://<树莓派IP>:8080/?action=stream 参考资料:https://blog.csdn.net/blueslime/article/details/12429411 五、手机端编程 1. 组件设计
手机客户端截图: 2. 逻辑设计:
登录成功后,手机屏幕呈现登录者照片
|
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed