Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 其他文档 > 基于Arduino开源平台的WIFI视频监控小车

基于Arduino开源平台的WIFI视频监控小车

收藏

本作品内容为基于Arduino开源平台的WIFI视频监控小车,格式为 doc ,大小 7004797 KB ,页数为 16页

基于Arduino开源平台的WIFI视频监控小车


('基于Arduino开源平台的WIFI视频监控小车市面上美国WowWee公司推出路威(ROVIO)机器人,一个可以通过WiFi无线局域网络控制的八方移动的机器人摄像机,支持使用者利用内部网络或者通过INTERNET来进行远程遥控。通过网络,使用台式电脑、笔记本、智能手机(PDA,SMARTPHONE),PSP和WiLi遥控手柄进行控制,具有实时控制监控、声像传递、根据设定路线(path)巡航,拍照,自动EMAIL。在这里我们可以通过价廉的路由器搭建WIFI视频监控小车。加起来成本一千多元就可以搞定一台可以自己编程玩的机器人。下面是材料清单:材料清单序号材料名称单价1A4WD小车2052ROMEO控制板30035节2300MAH电池65412V电池包1305充电器906上海贝尔RG-100A路由器557中星微301摄像头208两自由度DF15MG云台259合计:11241.A4WD是一个铝合金结构的四轮驱动小车,每个轮子都有一个电机作为驱动,马力强劲。首先根据小车附带的安装说明书装配小车车体,如图就是装好的效果。在底盘里面装了5节2300MAH的镍氢充电电池。2.接下来安装ROMEO扩展板,ROMEO扩展板是一个基于Arduino开源平台的扩展板。因为全球DIY爱好者都在使用,所以提供了丰富的例子程序。基本上想实现的功能都能够找到参考代码。Arduino封装了底层枯燥的寄存器操作,使程序开发都是基于应用的函数调用。输入输出口的定义也是非常直观。程序操作某个口,就对应硬件的某个接口。3.安装两自由度DF15MG云台及其摄像头,DF15MG云台可以上下左右180度旋转。301摄像头是一个裸板没有外壳,所以体积非常小,用一个红外开关的支架就可以装上去,还需要用热熔胶固定。这里我把摄像头的USB线减掉了很长,消除了很大的牵绊。4.最复杂也是最重要的设备来了,就是一个无线路由器。路由器需要支持OpenWrt。他是早年思科公司Linksys释放出WRT54G路由器源码后,DIY爱好者在其上面进行修改增加了很多功能。OpenWrt是基于Linux。Linux为我们提供了很多免费的软件,我们可以用一个很低的价钱购买像WRT54G的硬件,做成一个小型的Linux系统,现在OpenWrt已经提供了100多个已编译好的软件,而且数量还在不断增加,而OpenWrtSDK更简化了开发软件的工序。更多关于OpenWrt的资料可以访问OpenWrt中文:http://www.openwrt.org.cn5.接下来我们来改造路由器。前面我购买过大亚DB120路由器,配置和现在使用的贝尔RG100A一样,我把机壳拆掉,将裸板直接装在了小车上,不幸的是,莫名其妙的就烧掉了。我觉得可能是不小心短路或者静电什么的。所以我建议还是在将必要的线引出后把塑料盖子装上。这个图是拆掉的内部主板图。配置如下:CPU:BCM6358300MhzFLASH:32M内存:16M6.将TTL电平的串口引出,线序为1》V3.3V电源输出2》G地3》T数据发送输出4》R数据接收输入在这里只需要将G,T,R三条线引出来。我使用了一个USB转TTL的设备做测试,先看看路由器是否能够正常发送数据。将线从机壳后面引出后就可以将外壳固定在小车上面了。下面是安装好的图。7.接下来的任务就是设置路由器。路由器的设置在爱果联盟http://www.igee.cn介绍。首先连接网线到电脑。通过网线烧写固件openwrt-RG100A_DB120-jffs2-128k-cfe.bin这个固件支持RG100A和DB120两种使用BCM6358处理器的路由器。其他使用这个芯片的路由器你也可以试试。具体如何烧写可以看http://www.openwrt.org.cn相关内容。烧写完毕重启路由器在GOOGLE浏览器输入192.168.1.1用户名:root密码:admin设置路由器,为了方便调试,把IPV4address设置成了192.168.3.1WIFI参数,设置为AP,无加密。设置一遍密码,我发现如果不设置一下,后面putty软件无法登陆。设置完后reboot。等待跳转到登陆界面说明重启成功。8.安装winscp429setup.exe软件WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件。打开WinSCP如图设置登陆名密码及其文件传输协议。点击保存,然后登录。中途会有几个错误警告不用管。安装winSCP好后用这个软件将wifirobot_1.2_brcm63xx.ipk上传至路由器root下的根目录。此时打开putty.exePuTTY是自由的跨平台Telnet/SSH客户端,同时在Win32和Unix系统下模拟xterm终端。输入网址后就可以登录远程设备。此时输入用户名:root密码:admin输入命令cd/回车Ls/回车显示root目录的文件这个界面有点像DOS。此时能看到刚才拷贝进去的wifirobot_1.2_brcm63xx.ipk文件输入下面的命令执行安装程序:opkginstallwifirobot_1.2_brcm63xx.ipk正常的会看到以下的进度且不会出现错误安装完成后,请先reboot重启下路由重启之后输入命令编辑wifirobot配置文件,2.6版的需要修改两个配置文件。输入vi/etc/init.d/wifirobot编辑配置用键盘方向键移到需要编辑的地方,输入小写a进入编辑状态,用数字键盘输入19200,删除键可以删除,编辑完后,按ESC退出编辑状态,将键盘切换为大写英文,连续输入两个大写Z即可保存退出!#!/bin/sh/etc/rc.commonSTART=80SSD=start-stop-daemonNAME=wifirobot#video_mod=gspca_zc3xxvideo_mod=gspca_ov519(这两个是摄像头驱动,有#的就是被屏蔽的,如果大家手上的301摄像头有花屏现象,可以屏蔽另外一个换个驱动试试)ser_name=/dev/ttyS0(路由TTL口设置,一般都是ttyS0)ser_speed=19200(TTL波特率设置,要改成19200才能连接ROMEO板)video_name=/dev/video0start(){killallmjpg_streamer>/dev/null2>&1sleep1/usr/bin/stty-F$ser_namespeed$ser_speedraw-echo>/dev/null2>&1echo"Settheserialspeedto"&&/usr/bin/stty-F$ser_namespeed$serrmmod$video_mod>/dev/null2>&1&&sleep2insmod$video_mod>/dev/null2>&1&&sleep5#ln-s/dev/v4l/video0$video_name/usr/bin/mjpg_streamer-b-i"input_uvc.so--device$video_name--fps10/usr/sbin/lighttpd-f/etc/lighttpd/lighttpd.conf>/dev/null2>&1echo"WifiRobot1.2started!"ESC两个大写ZZ保存退出,在继续修改第二个配置文件输入vi/web/app_car.php编辑第二个配置文件root@OpenWrt:/#vi/web/app_car.php//舵机控制库//电机控制端口设置#defineEN15//控制左侧电机速度#defineEN26//控制右侧电机速度#defineIN14//控制左侧电机方向#defineIN27//控制右侧电机方向#defineFORW0//前进#defineBACK1//后退#definedataLenMax16//设置最大数据帧长度不大于16ServoservoX;//云台X轴舵机左右ServoservoY;//云台Y轴舵机上下//控制电机转动子函数voidMotor_Control(intM1_DIR,intM1_EN,intM2_DIR,intM2_EN){//////////M1////////////////////////if(M1_DIR==FORW)//M1电机的方向digitalWrite(IN1,LOW);//置高,设置方向向前elsedigitalWrite(IN1,HIGH);//置低,设置方向向后if(M1_EN==0)//M1电机的速度analogWrite(EN1,LOW);//置低,停止elseanalogWrite(EN1,M1_EN);//否则,就设置相应的数值///////////M2//////////////////////if(M2_DIR==FORW)//M2电机的方向digitalWrite(IN2,LOW);//置高,方向向前elsedigitalWrite(IN2,HIGH);//置低,方向向后if(M2_EN==0)//M2电机的速度analogWrite(EN2,LOW);//置低,停止elseanalogWrite(EN2,M2_EN);//否则,就设置相应的数值}voidsetup(){inti;for(i=4;i<=7;i++)//设置控制电机的各端口为输出模式pinMode(i,OUTPUT);Serial.begin(19200);//设置波特率为19200bpsservoX.attach(10);servoY.attach(11);}///////////////////UART通讯命令字宏定义///////////////////////////////////////////#defineUART_START00X55//通讯数据帧头#defineUART_START10XAA//通讯数据帧头#defineUART_END0X0A//返回数据包结束标志//////////////////////////命令字定义///////////////////////////////////////////////////////波特率57600BPS,无奇偶效验,一位停止位。文中的数字都是8位的十六进制数////////////////////////////////////////2路舵机控制///////////////////////////////////////////////本指令可同时控制6路舵机,每路可单独控制位置和速度。//字头桢长度命令字S1位置S1速度S2位置S2速度校验和//55aa401//"S1位置,s2位置"为2个舵机的角度值,范围为0~180,90为中位。//"S1速度,s2速度"为运动的速度值,spd越高,运动速度越快,范围为0~0xff。//返回值://字头桢长度命令字应答标志校验和//55aa0101SSUM//返回操作标志。设置成功S返回0X01,失败无返回。//////////////////////////////////////////////////////////////////////////////////////////////#defineRC_MOTO_SET0X01//2路舵机控制////////////////////////////////2路电机调速控制//////////////////////////////////////////////////本指令可同时控制2路直流电机速度。(机器人头超前方,人面对机器人后方)//字头桢长度命令字左电机右电机校验和//55aa202S1S2SUM//S1,S2分别代表2个电机的PWM输出占空比。0x80代表电机停止,0x00代表正转最大速度(100%占空比,机器人向前),0xff代表反转最大速度(100%占空比机器人向后)。//返回值://字头桢长度命令字应答标志校验和//55aa0102SSUM//返回操作标志。设置成功S返回0X01,失败无返回。///////////////////////////////////////////////////////////////////////////////////////////////////////////////#defineMOTO_SET0X02//2路电机调速控制voidloop(){//定义变量intdataLen=0;//数据长度intstart_flag=0;//数据帧起始标志intdata_index=0;//数据帧索引intcom_index=0;//命令索引inttemp_char1=0;//接收暂存器1inttemp_char0=0;//接收暂存器1inti,x,y;//变量intstate=0;//接收数据帧状态1代表有数据帧,0代表没有接收到数据帧intSUM;//校验和intRxData[32];//数据存储寄存器intSerial_flag;intMoto1S,Moto2S;//电机1.2速度控制暂存intMoto1D,Moto2D;//电机1.2方向控制暂存while(1){temp_char1=Serial.read();//读取串口数据if(temp_char1!=-1)//有数据接收到{Serial_flag=1;if(start_flag==0)//判断是否有0X550XAA数据帧头{if(temp_char1==UART_START1){if(temp_char0==UART_START0){start_flag=1;RxData[0]=UART_START0;RxData[1]=UART_START1;data_index=0;com_index=0;}}elsetemp_char0=temp_char1;}elseif(com_index<2){switch(com_index){case0:RxData[2]=temp_char1;//数据长度dataLen=temp_char1;break;case1:RxData[3]=temp_char1;//命令字break;}com_index++;}elseif((data_index=150)x=150;elseif(RxData[4]<=30)x=30;elsex=RxData[4];if(RxData[6]>=150)y=150;elseif(RxData[6]<=30)y=30;elsey=RxData[6];servoX.write(x);servoY.write(y);state=0;}elseif(RxData[3]==MOTO_SET)//电机控制命令{///////////////////电机1控制量变换/////////////////////////////if(RxData[4]==0X80)Moto1S=0;elseif(RxData[4]<0X80)//小于0X80的控制数据代表正转{Moto1D=FORW;//正转Moto1S=0xff-RxData[4]2;//将0X00最大速度到0X7F最小速度,转换为0最小到255最大速度的值}else//大于0X80的控制数据代表反转{Moto1D=BACK;//反转Moto1S=(RxData[4]-0X80)2;//将0XFF最大速度到0X81最小速度,转换为0最小到254最大速度的值}///////////////////电机2控制量变换/////////////////////////////if(RxData[5]==0X80)Moto2S=0;elseif(RxData[5]<0X80)//小于0X80的控制数据代表正转{Moto2D=FORW;//正转Moto2S=0xff-RxData[5]2;//将0X00最大速度到0X7F最小速度,转换为0最小到255最大速度的值}else//大于0X80的控制数据代表反转{Moto2D=BACK;//反转Moto2S=(RxData[5]-0X80)2;//将0XFF最大速度到0X81最小速度,转换为0最小到254最大速度的值}Motor_Control(Moto1D,Moto1S,Moto2D,Moto2S);//电机速度及其方向控制state=0;}}}}}程序使用了一种帧结构每个数据命令都是55AA开头,最后一个字节有一个简单的校验和。这样是为了防止路由器发出错误数据干扰小车。因为据我观察,路由器在启动的时候会发出一大堆字符。如果协议太简单小车可能会读取到错误数据乱动作。程序做了小车速度控制,及其两个云台舵机控制在里面。云台X轴舵机接数字10口,Y轴舵机接11口。其他功能可以在上面增加。此时下载好程序后可以通过JoystickInterface这个软件用USB线连接测试一下小车是否能够可靠运行。如果USB线能控制,将路由器的串口线接在ROMEO的串口,对应关系为路由器G接ROMEO板GND,T接RX,R接TX。注意接线最好都断电操作。修改控制按键键值,下面是一些控制代码,将键抬起设置为停止这样就可以在无按键的时候小车自动停止。停止55AA0202808003100%速度前进55AA0202000003100%速度后退55AA0202FFFF01100%速度左转55AA0202FF0002100%速度右转55AA020200FF02直至Wifi监控小车就算基本功能实现完毕。后面还有很多功能可以试试,比如通过以太网远程遥控。加一些传感器,车灯什么的。可以发挥的空间很大。',)


  • 编号:1700774453
  • 分类:其他文档
  • 软件: wps,office word
  • 大小:16页
  • 格式:docx
  • 风格:商务
  • PPT页数:7004797 KB
  • 标签:

广告位推荐

相关其他文档更多>