基于51单片机WiFi智能小车制作.docx
《基于51单片机WiFi智能小车制作.docx》由会员分享,可在线阅读,更多相关《基于51单片机WiFi智能小车制作.docx(20页珍藏版)》请在冰点文库上搜索。
![基于51单片机WiFi智能小车制作.docx](https://file1.bingdoc.com/fileroot1/2023-5/15/353b793b-3bef-4dd7-bf8d-ae106ab137ce/353b793b-3bef-4dd7-bf8d-ae106ab137ce1.gif)
基于51单片机WiFi智能小车制作
基于51单片机WiFi智能小车制作
一、基本原理
51单片机WiFi智能小车是利用PC或手机作为控制端,通过手机连接wifi模块(路由器)以获得wifi信号,同时车载也连接wifi模块以获得和手机相同的IP地址,实现手机和小车的连接,然后利用PC或手机上的控制软件以wifi网络信号为载体发送相关信号,wifi模块接收PC或手机端发送来的相关信号并分析转换成TTL电平信号,然后发送给单片机,单片机接收到的电平信号处理、分析、计算,转化成控制指令并发送给电机驱动模块以实现小车的前进、后退、左拐、右拐等功能。
二、购买所需材料
了解51单片机WiFi智能小车基本原理后,需要购买所需材料进行制作。
下面列出所需制作材料:
序号
材料
备注
图例
1
51单片机最小系统
一般采用11.0592M晶振
2
51单片机
3
703n路由器
DB120或WiFi模块
4
L298n电机驱动模块
有动手能力的可以自己做
5
减速电机及轮子一套
6
小车底盘
7
摄像头
根据固件支持摄像头购买
8
电源
根据自己需要购买种类
9
杜邦线及小配件
制作所需工具:
序号
工具名称
备注
图例
1
电烙铁一套
包括松香焊锡
2
螺丝刀
平口、十字等
3
微型电钻
可以自制
4
手工刀
5
剪刀
6
万用表
7
热熔胶枪或快干胶
8
USB下载器
三、开始制作
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是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。
XX百科:
baike.baidu./link?
url=18s7ZQFh6grF8LDGfd4LtrUdBXv5GWlDKLrNh8CeK1W0ixQpA9f2FGZuf9ZOtKTlDZOhM1m7YsqlHXe_RNzzp_
---------------------------------------------------------------------------------------------------------------
第一步:
把电脑IP改为192.168.1.xxx
第二步:
把路由网络接口和电脑网卡直接用网线相连
第三步:
打开路由的控制界面,地址默认一般是192.168.1.1(FAST和TP的一样),用户名密码均为admin,自己修改过的用自己修改后的地址
第四步:
进入路由的控制界面,点“系统工具”>>“软件升级”>>“浏览”,选择下载的固件文件
第五步:
点击升级,耐心等待。
升级成功后只能用无线和路由器连接。
到此,路由器刷固件完成。
451单片机最小系统制作
该步骤就不多说了,一般在网上买单片机最小系统,买回来直接安装单片机上去就可以了。
不过有兴趣的朋友可以买些散件自己焊接。
5下载下位机到单片机
把编写好的下位机程序下载到单片机,下图为usb-ttl与单片机示意图。
6安装上位机程序至PC或手机
下载上位机程序到电脑端或者手机上,进行安装。
7测试上、下位机通信
测试上、下位机通信首先需要把路由器、单片机最小系统、电机驱动模块、减速电机连接起来,上电测试。
具体接法见下图:
注意:
该图从网上下载,最终接法按照各位买的模块说明书进行接线,不过接线方法都是小异。
控制单元连接需要根据下位机程序连接in1~4.
路由器与单片机连接按照下图标示的接口,GND连GND、TX连RX、RX连TX。
连接好各自的线路后(有摄像头的可以插上摄像头),最后给单片机、电机驱动板、路由器上电,等待路由器启动完成。
在电脑无线网络里寻找WifRobot的昵称连接上。
打开上位机软件,按如下设置:
确定后重启上位机程序,查看摄像头图像是否正常,分别按下wasd看是否能驱动电机转动。
7组装WiFi小车
到这一步基本没什么问题了,接下来就按照自己的嗜好组装自己心爱的小车了。
8调试
车子安装好了以后就可以试车了,前后左右功能是否正常?
摄像头功能是否正常?
前进与后退有没有偏向?
上位机程序
privatevoidReadFromArm()
{
byte[]buffertocheck=newbyte[1];
intbytesize=0;
do
{
byte[]bufferofread=newbyte[1024];
try{bytesize=stream.Read(bufferofread,0,bufferofread.Length);}
catch(Exceptionex){connection=Indicator.Unconnected;MessageBox.Show("连接中断,程序将退出。
"); Application.Exit();read.Abort();}
//MessageBox.Show(BitConverter.ToString(bufferofread));
byte[]buffertochecktemp=buffertocheck;
buffertocheck=newbyte[buffertochecktemp.Length+bytesize];
Array.Copy(buffertochecktemp,0,buffertocheck,0,buffertochecktemp.Length);
Array.Copy(bufferofread,0,buffertocheck,buffertochecktemp.Length,bytesize);
intindex_1,index_2;
while(Check7E(buffertocheck,outindex_1,outindex_2))
{
byte[]buffertodecode=newbyte[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=newbyte[2];
intsubindex=1,index=bufferofdecode[1]*256+bufferofdecode[2]-1;
stringstatus=null;
switch(bufferofdecode[3])//分别处理从ARM来的帧
{
casePOWER_ON:
//从ARM来的上电状态
status="上电";
subindex=1;
break;
casePOWER_OFF:
//从ARM来的断电状态
status="断电";
subindex=1;
break;
caseABNORMAL:
//从ARM来的异常状态
status="异常";
subindex=1;
break;
caseWARNING:
//从ARM来的警告信号
status="有";
subindex=2;
break;
caseNEED_HELP:
//从ARM来的求救信号
status="有";
subindex=3;
break;
}
if(0<=index&&index<=49)
{
listView1.Items[index].SubItems[subindex].Text=status;
if(status=="异常"||status=="有")
listView1.Items[index].SubItems[subindex].ForeColor=Color.Red;
else
listView1.Items[index].SubItems[subindex].ForeColor=Color.Black;
}
}
intnewlength=buffertocheck.Length-1-index_2;
if(newlength==0)
{
buffertocheck=newbyte[1];
}
else
{
buffertochecktemp=buffertocheck;
buffertocheck=newbyte[newlength];
Array.Copy(buffertochecktemp,index_2+1,buffertocheck,0,newlength);
}
}
}while(connection==Indicator.Connected);
}
///
///向ARM发送
///
///座号2字节
///命令字1字节
publicvoidWriteToArm(byte[]Zuohao,bytemingling)
{
if(connection==Indicator.Connected)//在与ARM保持连接的情况下可写
{
byte[]frame=newbyte[5];
frame[0]=0x05;
Array.Copy(Zuohao,0,frame,1,2);
frame[3]=mingling;
bytetemp=0;
foreach(byteiteminframe)
temp+=item;
frame[4]=(byte)(0-temp);
byte[]frametosend=PPP.Encode(frame);
Console.WriteLine(BitConverter.ToString(frametosend));
try{stream.Write(frametosend,0,frametosend.Length);}
catch(Exceptionex){}
}
}
///
///向ARM发送
///
///座号2字节
///命令字加ASC码n字节
publicvoidWriteToArm(byte[]Zuohao,byte[]minglingandASC)
{
if(connection==Indicator.Connected)//在与ARM保持连接的情况下可写
{
byte[]frame=newbyte[4+minglingandASC.Length];
frame[0]=(byte)frame.Length;
Array.Copy(Zuohao,0,frame,1,2);
Array.Copy(minglingandASC,0,frame,3,minglingandASC.Length);
bytetemp=0;
foreach(byteiteminframe)
temp+=item;
frame[frame.Length-1]=(byte)(0-temp);
byte[]frametosend=PPP.Encode(frame);
Console.WriteLine(BitConverter.ToString(frametosend));
try{stream.Write(frametosend,0,frametosend.Length);}
catch(Exceptionex){}
}
}
另外数据收发还需要协议,和嵌入式网关通信的指令和协议定制如下:
因此数据量较少,协议也就比较简单,此协议在发送接收时用PPP封装。
显示部分使用C#编写的运行于Windows.NetFramework上的窗体应用程序,根据实际需求,对每个实验台状态的显示使用ListView控件实现,当出现异常情况,或实验台出现警告、求助信号时,ListView的相应字段文字会通过改变颜色来提醒监视人员,监视人员还可以通过一个文字发送窗体来向LED屏发送要显示的文字。
总之界面清晰直观,简便易用。