基于51单片机WiFi智能小车制作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机WiFi 智能小车制作 一、基本原理
51单片机WiFi 智能小车是利用PC 或手机作为控制端,通过手机连接wifi 模块(路由器)以获得wifi 信号,同时车载也连接wifi 模块以获得和手机相同的IP 地址,实现手机和小车的连接,然后利用PC 或手机上的控制软件以wifi 网络信号为载体发送相关信号,wifi 模块接收PC 或手机端发送来的相关信号并分析转换成TTL 电平信号,然后发送给单片机,单片机接收到的电平信号处理、分析、计算,转化成控制指令并发送给电机驱动模块以实现小车的前进、后退、左拐、右拐等功能。 二、购买所需材料
了解51单片机WiFi 智能小车基本原理后,需要购买所需材料进行制作。下面列出所需制作材料:
采
WiFi
手的自
固
持头
自
口、
三、开始制作
1、制作流程
开始制作前,我们首先需要看购买路由器的型号,笔者采用的是703n路由器,所以需要引出ttl线。
总体步骤为:路由器引TTL线→路由器刷OpenWrt固件→制作51单片机最小系统→下载下位机程序到51单片机→安装上位机程序至PC或手机→测试上、下位机通信→组装→调试完成。
2、路由器引ttl线
首先打开703n路由器,按照下图标示位置焊接ttl线。
注意:1、焊接的时候要小心焊接,焊好后微拉下查看松紧
2、焊接最好采用软线焊接,防止意外整块拉掉焊点
3、焊好后一定用胶固定,最好采用热熔胶
下图为引好ttl线样子
3 刷OpenWrt固件
何为OpenWrt固件,OpenWrt可以被描述为一个嵌入式的Linux 发行版,(主流路由器固件有dd-wrt,tomato,openwrt三类)而不是试图建立一个单一的,静态的系统。OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序。
对于开发人员,OpenWrt 是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。百度百科:
/link?url=18s7ZQFh6grF8LDGfd4LtrUdBXv5GWlDKLrNh8CeK1W0ixQpA9f2 FGZuf9ZOtKTlDZOhM1m7YsqlHXe_RNzzp_
---------------------------------------------------------------------------------------------------------------
第一步:把电脑IP改为192.168.1.xxx
第二步:把路由网络接口和电脑网卡直接用网线相连
第三步:打开路由的控制界面,地址默认一般是192.168.1.1(FAST和TP的一样),用户名密码均为admin,自己修改过的用自己修改后的地址
第四步:进入路由的控制界面,点“系统工具”>>“软件升级”>>“浏览”,选择下载的固件文件
第五步:点击升级,耐心等待。升级成功后只能用无线和路由器连接。到此,路由器刷固件完成。
4 51单片机最小系统制作
该步骤就不多说了,一般在网上买单片机最小系统,买回来直接安装单片机上去就可以了。不过有兴趣的朋友可以买些散件自己焊接。
5 下载下位机到单片机
把编写好的下位机程序下载到单片机,下图为usb-ttl与单片机链接示意图。
6安装上位机程序至PC或手机
下载上位机程序到电脑端或者手机上,进行安装。
7 测试上、下位机通信
测试上、下位机通信首先需要把路由器、单片机最小系统、电机驱动模块、减速电机连接起
来,上电测试。
具体接法见下图:
注意:该图从网上下载,最终接法按照各位买的模块说明书进行接线,不过接线方法都是大同小异。控制单元连接需要根据下位机程序连接in1~4.
路由器与单片机连接按照下图标示的接口,GND连GND、TX连RX、RX 连TX。
连接好各自的线路后(有摄像头的可以插上摄像头),最后给单片机、电机驱动板、路由器上电,等待路由器启动完成。在电脑无线网络里寻找WifRobot的昵称连接上。
打开上位机软件,按如下设置:
确定后重启上位机程序,查看摄像头图像是否正常,分别按下wasd看是否能驱动电机转动。
7 组装WiFi小车
到这一步基本没什么问题了,接下来就按照自己的嗜好组装自己心爱的小车了。
8 调试
车子安装好了以后就可以试车了,前后左右功能是否正常?摄像头功能是否正常?前进与后退有没有偏向?
上位机程序
private void ReadFromArm()
{
byte[] buffertocheck = new byte[1];
int bytesize = 0;
do
{
byte[] bufferofread = new byte[1024];
try { bytesize = stream.Read(bufferofread, 0,
bufferofread.Length); }
catch (Exception ex) { connection = Indicator.Unconnected; MessageBox.Show("连接中断,程序将退出。"); Application.Exit(); read.Abort(); } //MessageBox.Show(BitConverter.ToString(bufferofread));
byte[] buffertochecktemp = buffertocheck;
buffertocheck = new byte[buffertochecktemp.Length + bytesize]; Array.Copy(buffertochecktemp, 0, buffertocheck, 0, buffertochecktemp.Length);
Array.Copy(bufferofread, 0, buffertocheck,
buffertochecktemp.Length, bytesize);
int index_1, index_2;
while (Check7E(buffertocheck, out index_1, out index_2))
{
byte[] buffertodecode = new byte[index_2 + 1 - index_1];
Array.Copy(buffertocheck, index_1, buffertodecode, 0, index_2 + 1 - index_1);
byte[] bufferofdecode = PPP.Decode(buffertodecode);
//MessageBox.Show(BitConverter.ToString(bufferofdecode)); if (bufferofdecode[0] == bufferofdecode.Length && CheckSum(bufferofdecode))//保证从ARM来的帧是正确的
{
byte[] Zuohao = new byte[2];
int subindex = 1, index =
bufferofdecode[1]*256+bufferofdecode[2]-1;
string status=null;
switch (bufferofdecode[3])//分别处理从ARM来的帧
{
case POWER_ON://从ARM来的上电状态
status = "上电";
subindex = 1;
break;
case POWER_OFF://从ARM来的断电状态
status = "断电";