【嘉年华展示】探险车
本帖最后由 szjuliet 于 2019-9-29 22:24 编辑此探险车模拟真实场景,代替人们探索未知环境,进行观测或前往危险环境工作,具有一定的越野能力和自动工作能力。
使用者可以通过控制端(手机或平板)对小车进行操控。
小车本身通过各种传感器采集数据并反馈到控制端,使用者能够通过小车搭载的摄像头远程观察情况。
主控部分由一个树莓派板加Arduino板组合而成,既利用了树莓派处理能力强大的优点,也利用了Arduino功能实现简单的特点。
https://v.qq.com/x/page/z0929zaop6l.html
作品所含功能
[*]人脸识别(app端)
通过人脸进行注册和登录系统
[*]小车移动(通过app操控)
通过手机app控制车的行走:前进、后退、左转、右转
[*]远程数据传输
app和小车可以通过蓝牙及wifi方式进行通讯并相互传送数据
[*]实时传输图像
能够将当前场景的图像实时传输到手机,也可以通过电脑浏览器观看。摄像头的角度可以通过手机控制
[*]回传当前环境值(温湿度、有害气体、障碍)
能够将当前环境值传送到移动客户端
拟完善功能:
[*]识别当前环境场景及物体名称
[*]能够语音通信
一、项目解构及流程图:
本项目可以解构为三大部分:APP端、车体组装及硬件部分。
1. 小车蓝牙连接流程
2. 小车登录界面流程
3. 小车操作界面流程
4. 人脸识别流程图
二、车体组装
小车使用的材料为高强度、低成本、耐高温耐腐蚀的铝镁合金,能有效降低制作成本,以履带方式传动,能够适应多种复杂路况。
小车采用了蓝牙&局域网通信双通信结构。
小车采用arduino主控器获取并传送传感器数据,控制小车及摄像头的方向,使用性能更好的树莓派获取动态图像并将图像传给控制端。
小车采用双电源:9V电池盒和充电宝供电,确保电力充足。
小车正面安装了Arduino UNO和树莓派。UNO上放置了蓝牙模块HC-06,小车使用蓝牙方式与手机通讯。树莓派连接摄像头,使用wifi方式将实时图像回传手机。
小车前方是超声波传感器,用于侦测前方是否有物体。小车上方是摄像头,连接树莓派;摄像头上的舵机连接UNO,使用蓝牙方式连接手机后,手机控制摄像头的方向。
在电池盒的下方有气体传感器和温湿度传感器连接到UNO
三、Arduino编程(回传环境数据,接收小车、摄像头的控制命令并执行)
#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;
}
}
}
四、树莓派图像获取
树莓派使用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. 逻辑设计:
[*]初始化人脸识别等变量代码块
[*]App初始化
[*]调用照相机拍摄照片代码块
[*]添加人脸代码块
[*]人脸识别代码块
登录成功后,手机屏幕呈现登录者照片
[*]过程【未检测到人脸】
[*]控制蓝牙的代码块
[*]控制摄像头云台转动的代码块
[*]App登录界面的按钮操作的代码块
[*]控制小车行走的代码块
[*]改变小车速度的代码块
[*]每1500毫秒接收一次小车的传感器回传值
[*]获得树莓派IP地址后将图像显示到手机上
我的榜样。高技术含量。{:5_190:} 学习学习学习
页:
[1]