基于Arduino的WiFi视频小车设 计 制 作 方 案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

“基于Arduino的WiFi视频小车”
设计制作方案
云南施甸第二完全中学
二〇一六年十一月一日
目录
一、项目产生的背景分析 (2)
1.1项目想法 (2)
1.2用户将如何从产品中获益 ......................................................................... 2-3
二、方案设计 (3)
2.1小车整体系统..................................................................................................... 2-3
2.2小车部件介绍..................................................................................................... 3-5
三、小车组装 (6)
3.1小车配件购置 (6)
3.2小车部件组装................................................................................................... 7-10
3.3小车程序代码的调试 (11)
3.3.1小车驱动安装 (11)
3.3.2小车编程环境(arduino 1.6.3) ................................................. 11-20
四、实践总结 (21)
五、小车设计制作的里程碑 (21)
六、本项目初步预算工具清单列表 (22)
“基于Arduino的WiFi视频小车”设计制作方案
一、项目产生的背景分析
1.1项目想法
现在是一个智能化的时代,各种智能化设备正在逐步替代人为的操作。

随着汽车工业的迅速发展,关于智能汽车的研究也越来越受人关注。

设计的智能小车能够实现自动寻迹、避障功能、可控制行驶速度、电脑手机wifi连接控制行驶及其他的控制方式。

本系统能实现对小车的运动状态进行实时控制。

系统控制灵活、可靠、精度高,可满足对系统的各项要求。

通过对本小车的研究,我们可以初步构建智能汽车的模型与理论基础。

所谓的wifi智能小车就是可以通过WIFI网络控制的视频传输可移动甚至可以安装其他机械手各类传感器实现数据互动的小车,对于那些不安全的以及人无法进入的场所进行无线监测,wifi小车监控是一个很好的解决方案,能够很好的进行监控控制。

现在无线wifi功能的设备随处可见,本设计利用现有的网络资源搭建一台wifi视频监控小车,即利用带有wifi的设备进行控制小车,实现无线监控。

1.2用户将如何从产品中获益
本设计产品的受益人群包括8—14岁的学生和广大电子爱好者,从中不仅锻炼了动手能力,学习Arduino编程的一些基础知识,激发他们爱好科技的兴趣
二、方案设计
2.1小车整体系统
该小车硬件部分由Arduino UNO单片机、电机驱动模块XB-L293D、keys红外接收模块、无线路由模块、视频监控模块、循迹模块、避障模块。

系统结构如下图:
2.2小车部件介绍
小车主板:arduino 是该小车的控制中心,需要保证小车的正常运行,在装配时必须胆大心细,保证组装无误。

小车电机驱动板:一般情况下,单片机不能直接驱动电机,故必须外加驱动电路。

最常见的比如H 桥电路,由于本小车是四个驱动电机,所以该电路设计成了双H 桥驱动电路。

该驱动电路可以直接驱动两路3—30V 直流电机,将小车一侧的两个电机并在一起,IN1、IN2、IN3、IN4引脚从arduino 板接入控制电平,控制电机的正反转,ENA,ENB 接控制使能端,控制电机停转。

这样就实现了小车的四轮驱动控制
外接电源
避障模块 轮子
Keys 红外 接收器
循迹模块
无线路由模块
XB-L293D
驱动板
4个直流电机
Arduino UNO 主控板
视频监控模

小车避障、循迹模块:利用红外光电传感器对路面黑色轨迹进行检测并将检测的信号反馈会arduino单片机,arduino单片机会返回的信号进行分析判断,及时控制电机控制小车的方向,从而实现避障、循迹。

避障传感器循迹传感器
红外通信模块:红外遥控系统主要分为调制、发射和接收三部分。

红外接收模块中
的一体化红外接收头,内部集成了红
外接收电路,包括红外检测二极管,
放大器,限幅器,带通滤波电容,积
分电路,比较器等。

能够将接收到的
调制波进行解调。

要使用遥控器控制
arduino,首先我们得知道遥控器各按
键对应的编码,不同的遥控器,不同
的按键,不同的协议,对应不同的编
码。

通过得到的编码,改到程序中,
就能实现与红外模块的通信。

无线路由模块:可通过WIFI操控前进、
后退、左转、右转、视频监控和拍照等。

三、小车组装
3.1小车配件购置
本小车配件通过淘宝网购配置来的。

https:///index.htm?spm=a1z10.1-c.w5002-8298665166.2.1RiEGw,具体配置清单如下:
3.2小车部件组装
电机、轮子、底盘安装
在安装时多研究一下说明书,四驱电机接线时一定要特别注意不能接错,否则会导致小车整体功能不能实现。

路由器、视频安装
电机驱动板安装
安装时驱动板对位空的铜柱螺丝没必要一次性扭紧,到整车安装完成后再扭紧,在这一步最为重要,除主板接线外,其他的线接到驱动板时,必须按原理接线图来进行一一连接,同时线的排线安放整齐用扎带来进行适当固紧。

L293D原理图
Arduino uno R3主板安装
安装时把小车主板四个空装入底盘的铜柱,固定好主板,接下来就是把线连接好,切记一定要按说明书上的连接示意图来进行连接,此步一定要细心些。

这样整个小车就组装好了。

如下组装好的整车图:
小车排线连接图
3.3小车程序代码的调试
3.3.1小车驱动安装
3.3.2小车编程环境(arduino 1.6.3)
XB-4WD-ARDUINO-WIFI智能小车前进后退左转右转方法【调速】程序:
/******************************* 电机的引脚定义及接线说明*************/ int L_IN_Positive=14; //ARDUINO(A0)------ L293驱动板(L+)
int L_IN_Negative=15; //ARDUINO(A1)------ L293驱动板(L-)
int R_IN_Positive=16; //ARDUINO(A2)------ L293驱动板(R+)
int R_IN_Negative=17; //ARDUINO(A3)------ L293驱动板(R-)
/** 端口初始化**********************************************/
void setup()
{
pinMode(L_IN_Positive, OUTPUT); //定义数字14 接口为输出接口
pinMode(L_IN_Negative, OUTPUT); //定义数字15 接口为输出接口
pinMode(R_IN_Positive, OUTPUT); //定义数字16 接口为输出接口
pinMode(R_IN_Negative, OUTPUT); //定义数字17 接口为输出接口
}
/*** 小车前进********************************************/
void front_run(int a) //前进
{
digitalWrite(L_IN_Positive, HIGH);
digitalWrite(L_IN_Negative, LOW);
analogWrite(L_IN_Positive,150);
analogWrite(L_IN_Negative, 0);
digitalWrite(R_IN_Positive, HIGH);
digitalWrite(R_IN_Negative, LOW);
analogWrite(R_IN_Positive,150);
analogWrite(R_IN_Negative,0);
delay(a * 100);
}
/**** 小车后退*******************************/
void back_run(int b) //后退
{
digitalWrite(L_IN_Positive, LOW);
digitalWrite(L_IN_Negative, HIGH);
analogWrite(L_IN_Positive,0);
analogWrite(L_IN_Negative, 150);
digitalWrite(R_IN_Positive, LOW);
digitalWrite(R_IN_Negative, HIGH);
analogWrite(R_IN_Positive,0);
analogWrite(R_IN_Negative,150);
delay(b * 100);
}
/****** 小车左转************************************/
void left_run(int c) //左转
{
digitalWrite(L_IN_Positive, LOW);
digitalWrite(L_IN_Negative, LOW);
analogWrite(L_IN_Positive,0);
analogWrite(L_IN_Negative, 0);
digitalWrite(R_IN_Positive, HIGH);
digitalWrite(R_IN_Negative, LOW);
analogWrite(R_IN_Positive,150);
analogWrite(R_IN_Negative,0);
delay(c * 100);
}
/***** 小车右转*************/
void right_run(int d) //右转
{
digitalWrite(L_IN_Positive, HIGH);
digitalWrite(L_IN_Negative, LOW);
analogWrite(L_IN_Positive,150);
analogWrite(L_IN_Negative, 0);
digitalWrite(R_IN_Positive, LOW);
digitalWrite(R_IN_Negative, LOW);
analogWrite(R_IN_Positive,0);
analogWrite(R_IN_Negative,0);
delay(d * 100);
}
/**** 主程序***************/
void loop()
{
front_run(1); //前进
delay(1000);
back_run(1); //后退
delay(1000);
left_run(1); //左转
delay(1000);
right_run(1); //右转
delay(1000);
}
注意在上传程序时串口设置在COM3上,主板上的针脚5V GND和数字针脚0、1上的线先不要插入,否则会出现上传错误。

XB-4WD-ARDUINO-WIFI智能小车红外遥控器程序代码
/#include <IRremote.h>/******** 红外的引脚定义及接线说明
/int RECV_PIN = 7; //ARDUINO(7)------ L293D驱动板(红外)
/ 电机的引脚定义及接线说明**********/
int L_IN_Positive=14; //ARDUINO(A0)------ L293D驱动板(L+)
int L_IN_Negative=15; //ARDUINO(A1)------ L293D驱动板(L-)
int R_IN_Positive=16; //ARDUINO(A2)------ L293D驱动板(R+)
int R_IN_Negative=17; //ARDUINO(A3)------ L293D驱动板(R-)
/***** 控制小车的红外编码*******************/
long front_run = 0x00FF18E7;
long back_run = 0x00FF4AB5;
long left_run = 0x00FF5AA5;
long right_run =0x00FF10EF;
long stop = 0x00FF38C7;
IRrecv irrecv(RECV_PIN); //库函数
decode_results results;
void dump(decode_results *results)
{
int count = results->rawlen;
if (results->decode_type == UNKNOWN)
{
Serial.println("Could not decode message");
}
else
{
if (results->decode_type == NEC)
{
Serial.print("Decoded NEC: ");
}
else if (results->decode_type == SONY)
{
Serial.print("Decoded SONY: ");
}
else if (results->decode_type == RC5)
{
Serial.print("Decoded RC5: ");
}
else if (results->decode_type == RC6)
{
Serial.print("Decoded RC6: ");
}
Serial.print(results->value, HEX);
Serial.print(" (");
Serial.print(results->bits, DEC);
Serial.println(" bits)");
}
Serial.print("Raw (");
Serial.print(count, DEC);
Serial.print("): ");
for (int i = 0; i < count; i++)
{
if ((i % 2) == 1)
{
Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else
{
Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(" ");
}
Serial.println("");
}
/******************** 端口初始化*******/
void setup()
{
Serial.begin(9600);
pinMode(RECV_PIN, INPUT);
pinMode(L_IN_Positive,OUTPUT);
pinMode(L_IN_Negative,OUTPUT);
pinMode(R_IN_Positive,OUTPUT);
pinMode(R_IN_Negative,OUTPUT);
irrecv.enableIRIn(); // Start the receiver
}
int on = 0;
unsigned long last = millis();
/********* 主程序***********************/
void loop()
{
if (irrecv.decode(&results))
{
if (millis() - last > 250)
{
on = !on;
digitalWrite(13, on ? HIGH : LOW);
dump(&results);
}
if (results.value == front_run )
{
digitalWrite(R_IN_Positive,HIGH);//使直流电机(右)GO
digitalWrite(R_IN_Negative,LOW);
digitalWrite(L_IN_Positive,HIGH);//使直流电机(左)GO
digitalWrite(L_IN_Negative,LOW);
}
if (results.value == back_run )
{
digitalWrite(R_IN_Positive,LOW);//使直流电机(右)后退
digitalWrite(R_IN_Negative,HIGH);
digitalWrite(L_IN_Positive,LOW);//使直流电机(左)后退digitalWrite(L_IN_Negative,HIGH);
}
if (results.value == left_run )
{
digitalWrite(R_IN_Positive,HIGH);//使直流电机(右)STOP
digitalWrite(R_IN_Negative,HIGH);
digitalWrite(L_IN_Positive,HIGH);//使直流电机(左)GO
digitalWrite(L_IN_Negative,LOW);
}
if (results.value == right_run )
{
digitalWrite(R_IN_Positive,HIGH);//使直流电机(右)GO
digitalWrite(R_IN_Negative,LOW);
digitalWrite(L_IN_Positive,HIGH);//使直流电机(左)STOP
digitalWrite(L_IN_Negative,HIGH);
}
if (results.value == stop )
{
digitalWrite(R_IN_Positive,HIGH);//使直流电机(右)STOP
digitalWrite(R_IN_Negative,HIGH);
digitalWrite(L_IN_Positive,HIGH);//使直流电机(左)STOP
digitalWrite(L_IN_Negative,HIGH);
}
last = millis();
irrecv.resume(); // Receive the next value
}
}
在做此项调试时先把IRremote函式库资料夹放进Arduino libraries目录底下XB-4WD-ARDUINO-WIFI智能小车WIFI遥控程序代码:
/***** 电机的引脚定义及接线说明************************/
int L_IN_Positive=14; //ARDUINO(A0)------ L293驱动板(L+)
int L_IN_Negative=15; //ARDUINO(A1)------ L293驱动板(L-)
int R_IN_Positive=16; //ARDUINO(A2)------ L293驱动板(R+)
int R_IN_Negative=17; //ARDUINO(A3)------ L293驱动板(R-)
int L_EN = 3; //ARDUINO(3)------ L293驱动板(LEN)
int R_EN = 5; //ARDUINO(5)------ L293驱动板(REN)
/********** 控制编码************************************/
int wifi_value;
/****** 小车前进********************************/
void front_run(void)
{
analogWrite(L_EN,255); //调节参数可调速度(0-255)
analogWrite(R_EN,255); //调节参数可调速度(0-255)
digitalWrite(L_IN_Positive,HIGH);
digitalWrite(L_IN_Negative,LOW);
digitalWrite(R_IN_Positive,HIGH);
digitalWrite(R_IN_Negative,LOW);
}
/******** 小车后退**********************************/
void back_run(void)
{
analogWrite(L_EN,255); //调节参数可调速度(0-255)
analogWrite(R_EN,255); //调节参数可调速度(0-255)
digitalWrite(L_IN_Positive,LOW);
digitalWrite(L_IN_Negative,HIGH);
digitalWrite(R_IN_Positive,LOW);
digitalWrite(R_IN_Negative,HIGH);
}
/******* 小车左转***************************************************/ void left_run(void)
{
analogWrite(L_EN,180); //调节参数可调速度(0-255)
analogWrite(R_EN,180); //调节参数可调速度(0-255)
digitalWrite(L_IN_Positive,LOW);
digitalWrite(L_IN_Negative,HIGH);
digitalWrite(R_IN_Positive,HIGH);
digitalWrite(R_IN_Negative,LOW);
}
/******* 小车右转*********************/
void right_run(void)
{
analogWrite(L_EN,180); //调节参数可调速度(0-255)
analogWrite(R_EN,180); //调节参数可调速度(0-255)
digitalWrite(L_IN_Positive,HIGH);
digitalWrite(L_IN_Negative,LOW);
digitalWrite(R_IN_Positive,LOW);
digitalWrite(R_IN_Negative,HIGH);
}
/******* 小车停止*************************/
void stop_run(void)
{
analogWrite(L_EN,0);
analogWrite(R_EN,0);
digitalWrite(L_IN_Positive,LOW);
digitalWrite(L_IN_Negative,LOW);
digitalWrite(R_IN_Positive,LOW);
digitalWrite(R_IN_Negative,LOW);
}
/******* 端口初始化************************/
void setup()
{
Serial.begin(9600); //设置波特率为9600bps
wifi_value=0;
pinMode(L_IN_Positive,OUTPUT);
pinMode(L_IN_Negative,OUTPUT);
pinMode(R_IN_Positive,OUTPUT);
pinMode(R_IN_Negative,OUTPUT);
}
/*************** 主程序/
void loop()
{
if(Serial.available())
{
wifi_value = Serial.read();
switch(wifi_value)
{
case '4': //前进
front_run();
wifi_value=0;
break;
case '2': //后退
back_run();
wifi_value=0;
break;
case '3': //左转
left_run();
wifi_value=0;
break;
case '1': //右转
right_run();
wifi_value=0;
break;
case '0': //停止
stop_run();
wifi_value=0;
break;
}
}
}
在做此项调试时,先把小车的APP下载到手机并进行安装,安装完成后打开小车WALN设置,连接到小车专用的WIFI设置,界面如下:
四、实践总结
1、通过本次实践,不仅在考验我们动手能力的同时,还能提高我们对于代码作用驱动具体行动的方式的了解
2、学习的方式的多样化理解:纸上得来终觉浅,很多东西不一定要通过看书来了解的,动手同样是一种不可或缺的方式
3、能力提升的表现:理解能力,学习能力,动手能力等等多种能力的提升是不言而喻的,这在以后对我们的学习与生活都是很好的教材与铺垫
4、没有最好只有更好的意识:精益求精是我们不断超越自己的指导思想,小车的不足之处对于我们或许也是一种不可缺少的动力吧
5、在装配和调试过程中,遇到了引脚线接错,检查了好多遍才找到错误。

在调试过程中程序可以在ARDUINO1.6.3和ARDUINO1.6.9中正常上传,但在ARDUINO1.7.9中确不能上传成功。

6、在代码调试中,我们确不能把代码在Mixly Arduino 0.97中用可视化图形按钮编写出来,有些代码是看不懂的。

7、在小车运行中不能做到循迹、避障和红外遥控的功能。

8、本小车设计方案仅限于学习ARDUINO的一些基本知识,还不能真正应用于现实生活中的某些方面。

如果想达到实际应用还需要我们继续努力和改进小车的功能。

五、小车设计制作的里程碑
1、8月5日—8月9日:酝酿小车设计方案(已完成)
2、8月10日—8月17日:网上购买小车配件(已完成)
3、8月15日—9月15:Arduino开源硬件基础知识学习和LED灯的试验教学。

(已完成)
4、9月20日—9月30日:组装小车并写入程序调试小车的运行。

(已完成)
5、10月1日—11月1日:写入程序反复调试小车各功能部件(已完成)
六、本项目配件工具清单列表(人民币658.00元)
设备名称网购链接
价格
(元)
与任务2
之间关联
arduino uno r3 wifi 视频智能小车机套件https:///item.htm?spm=a
1z09.2.0.0.BiUvuO&id=524030253399&_u=b
i9kc8k07b1
370 主要配件
充电电池套装https:///item.htm?spm=a
1z09.2.0.0.BiUvuO&id=520812736175&_u=b
i9kc8kf76d
40 辅助配件
ArduinoUNOR3开发板入门套件https:///item.htm?spm=a
1z09.2.0.0.BiUvuO&id=45406267079&_u=bi
9kc8k4205
179 辅助配件
史丹利螺丝刀套装https:///item.htm?spm=
a230r.1.14.47.ayPUqY&id=524144784965&n
s=1&abbucket=7
69 组装工具
合计658.00。

相关文档
最新文档