完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
`一、源起 据日本《朝日新闻》报道,由日本原子力安全技术中心研发出动救灾的“防灾监测机器人”Monirobo已到达福岛核电站。这种“防灾监测机器人”是设计用于辐射量太高、人员无法操作的状况下运作。 目前已经部署的红色机器人,负责侦测受损反应炉的辐射指数;数天后将部署黄色机器人,采集辐射尘样本和监测易燃气体。 这种机器人高度一点五公尺,可在相隔一公里的距离遥控操作,确保人员安全。它的车轮是如坦克般的履带,机械臂用于移除障碍物和收取样本。配备辐射侦测器、3D相机以及温度与湿度感应器等。法国GIE Intra也送出多台遥控机器人协助救灾,有些机器人如坦克。这些在1986年切尔诺贝利核灾后研制的机器人,可隔着9.65公里距离遥控,开进反应炉铲土和移除墙壁、侦测辐射,甚至可爬墙。 实现这样的机器人很难吗?能不能做一个简化版的? 二、创意方案与栏目互动 这个创意是个舶来品。记得有个国外作者做了一个基于Arduino和wifi路由器的智能机器人。 要求有摄像头,能够拍摄小车经过地方的影像。 要求使用Arduino模块实现控制。 三、组件列表
四、文档 整个技术文档我们会在稍后一周公布,欢迎大家持续关注。 五、照片 感谢热心网友“庄子”全程参与了本次方案的开发,并提供了详细的技术支持资料。 基于Arduino开源平台的WiFi视频监控小车 Arduino_romeo主控板 小车 云台+摄像头 摄像头 六、源代码 下面放出ROMEO板的源程序将这个程序使用Arduino 0022 下载进去: 复制内容到剪贴板 代码:#include //电机控制端口设置 #define EN1 5//控制左侧电机速度 #define EN2 6//控制右侧电机速度 #define IN1 4//控制左侧电机方向 #define IN2 7//控制右侧电机方向 #define FORW 0//前进 #define BACK 1//后退 #define dataLenMax 16 //设置最大数据帧长度 不大于16 Servo servoX; //云台X轴舵机 左右 Servo servoY; //云台Y轴舵机 上下 //控制电机转动子函数 void Motor_Control(int M1_DIR,int M1_EN,int M2_DIR,int M2_EN) { //////////M1//////////////////////// if(M1_DIR==FORW)//M1电机的方向 digitalWrite(IN1,LOW); //置高,设置方向向前 else digitalWrite(IN1,HIGH);//置低,设置方向向后 if(M1_EN==0)//M1电机的速度 analogWrite(EN1,LOW);//置低,停止 else analogWrite(EN1,M1_EN);//否则,就设置相应的数值 ///////////M2////////////////////// if(M2_DIR==FORW)//M2电机的方向 digitalWrite(IN2,LOW);//置高,方向向前 else digitalWrite(IN2,HIGH);//置低,方向向后 if(M2_EN==0)//M2电机的速度 analogWrite(EN2,LOW);//置低,停止 else analogWrite(EN2,M2_EN);//否则,就设置相应的数值 } void setup() { int i; for(i=4;i<=7;i++)//设置控制电机的各端口为输出模式 pinMode(i, OUTPUT); Serial.begin(19200);//设置波特率为19200bps servoX.attach(10); servoY.attach(11); } ///////////////////UART通讯命令字宏定义/////////////////////////////////////////// #define UART_START0 0X55 //通讯数据帧头 #define UART_START1 0XAA //通讯数据帧头 #define UART_END 0X0A //返回数据包结束标志 ////////////////////////// 命令字定义///////////////////////////////////////////////////// // 波特率 57600BPS,无奇偶效验,一位停止位。文中的数字都是8位的十六进制数 ///// ///////////////////////////////////2路舵机控制///////////////////////////////////////////// //本指令可同时控制6路舵机,每路可单独控制位置和速度。 //字头 桢长度 命令字 S1位置 S1速度 S2位置 S2速度 校验和 //55 aa 4 01 //"S1位置,s2位置"为2个舵机的角度值,范围为0~180,90为中位。 //"S1速度,s2速度"为运动的速度值,spd越高,运动速度越快,范围为0~0xff。 //返回值: //字头 桢长度 命令字 应答标志 校验和 //55 aa 01 01 S SUM //返回操作标志。设置成功S返回0X01,失败无返回。 ////////////////////////////////////////////////////////////////////////////////////////////// #define RC_MOTO_SET 0X01 // 2路舵机控制 ////////////////////////////////2路电机调速控制//////////////////////////////////////////////// //本指令可同时控制2路直流电机速度。(机器人头超前方,人面对机器人后方) //字头 桢长度 命令字 左电机 右电机 校验和 //55 aa 2 02 S1 S2 SUM //S1,S2分别代表2个电机的PWM输出占空比。0x80代表电机停止,0x00代表正转最大速度(100%占空比,机器人向前),0xff代表反转最大速度(100%占空比机器人向后)。 //返回值: //字头 桢长度 命令字 应答标志 校验和 //55 aa 01 02 S SUM //返回操作标志。设置成功S返回0X01,失败无返回。 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define MOTO_SET 0X02 //2路电机调速控制 void loop() { //定义变量 int dataLen = 0; //数据长度 int start_flag = 0; //数据帧起始标志 int data_index = 0; //数据帧索引 int com_index = 0; //命令索引 int temp_char1 = 0; //接收暂存器1 int temp_char0 = 0; //接收暂存器1 int i,x,y; //变量 int state = 0; //接收数据帧状态 1代表有数据帧,0代表没有接收到数据帧 int SUM; //校验和 int RxData[32]; //数据存储寄存器 int Serial_flag; int Moto1S,Moto2S; //电机1.2 速度控制暂存 int Moto1D,Moto2D; //电机1.2 方向控制暂存 while(1) { temp_char1 = Serial.read(); //读取串口数据 if(temp_char1!=-1) //有数据接收到 { Serial_flag=1; if(start_flag == 0) // 判断 是否有 0X55 0XAA 数据帧头 { 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; } } else temp_char0 = temp_char1; } else if( com_index < 2) { switch(com_index) { case 0 : RxData[2] = temp_char1; //数据长度 dataLen = temp_char1; break; case 1 : RxData[3] = temp_char1; //命令字 break; } com_index++; } else if((data_index < dataLen) && (dataLen < dataLenMax)) //接收数据,同时数据不大于最大数据长度 { RxData[data_index+4] = temp_char1; data_index ++; } else { RxData[data_index+4] = temp_char1; state = 1; start_flag = 0; } } if(state == 1) //如果有数据帧接收到 { SUM = 0; for(i=0; i if(SUM == RxData[dataLen+4]) //如果校验和正确 解析命令 { if(RxData[3] == RC_MOTO_SET) //舵机云台控制命令 { if(RxData[4]>=150) x=150; else if(RxData [4]<=30) x=30; else x = RxData[4]; if(RxData[6]>=150) y=150; else if(RxData[6]<=30) y=30; else y = RxData[6]; servoX.write(x); servoY.write(y); state = 0; } else if(RxData[3] == MOTO_SET) //电机控制命令 { ///////////////////电机1控制量变换///////////////////////////// if(RxData[4] == 0X80) Moto1S = 0; else if(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; else if(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; } } } } } 程序使用了一种帧结构 每个数据命令都是 55 AA开头,最后一个字节有一个简单的校验和。这样是为了防止路由器发出错误数据干扰小车。因为据我观察,路由器在启动的时候会发出一大堆字符。如果协议太简单小车可能会读取到错误数据乱动作。 程序做了小车速度控制,及其两个云台舵机控制在里面。云台X轴舵机接数字10口,Y轴舵机接11口。其他功能可以在上面增加。此时下载好程序后可以通过 JoystickInterface 这个软件用USB线连接测试一下小车是否能够可靠运行。 如果USB线能控制,将路由器的串口线接在ROMEO的串口,对应关系为 路由器G接ROMEO板GND,T接RX,R接TX。注意接线最好都断电操作。 修改控制按键键值,下面是一些控制代码,将键抬起设置为停止这样就可以在无按键的时候小车自动停止。 停止 55AA0202808003 100% 速度前进 55AA0202000003 100% 速度后退 55AA0202FFFF01 100% 速度左转 55AA0202FF0002 100% 速度右转 55AA020200FF02 直至Wifi监控小车就算基本功能实现完毕。后面还有很多功能可以试试,比如通过以太网远程遥控。加一些传感器,车灯什么的。可以发挥的空间很大。 七、相关问题 Q:什么是Wifi Robot无线远程智能遥控小车? A:Wifi Robot无线远程智能遥控小车就是利用非常成熟的WIFI无线网络为数据载体,实现控制数据,音视频双向数据交换而达到控制小车和视频监控等等功能。 Q:Wifi Robot无线远程智能遥控小车有什么功能? A:Wifi Robot无线远程智能遥控小车是集无线通讯、实时四驱、多向机械云台、视频监控、电器红外遥控、环境温度检测、为一体的多功能智能遥控车。 Q:Wifi Robot无线远程智能遥控小车用在什么地方? A:Wifi Robot无线远程智能遥控小车可以放在公司作为产品演示的高级智能助手,帮你递送文件,帮你拿听百威,帮你拿盒万宝路,又或者向你的客户打声招呼。 Wifi Robot无线远程智能遥控小车可以放在家里当做一贴切保姆,你可以在公司用电脑监控家里的的一切动态,可以在车上就设定好家里空调温度,可以定时电视机在什么时候换什么台,这一切你只需要连接到ITELNET。 Wifi Robot无线远程智能遥控小车也是广场上的明星,你带着他在城市广场上炫耀,玩耍,让它拿个小礼物送心仪的MM,让他帮你丢垃圾,这一切都不是问题。
基于Arduino开源平台的WIFI视频监控小车.part4.rar
(1.39 MB, 下载次数: 409
)
基于Arduino开源平台的WIFI视频监控小车.part3.rar
(1.72 MB, 下载次数: 384
)
基于Arduino开源平台的WIFI视频监控小车.part2.rar
(1.72 MB, 下载次数: 692
)
`
|
||
相关推荐
171 个讨论
|
||
|
真的是好帖子真的是好帖子
|
|
|
|
|
|
|
|
|
不错的文件,值得收藏
|
|
|
|
|
|
|
|
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
140 浏览 0 评论
483 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
815 浏览 0 评论
1346 浏览 2 评论
804 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16904 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 20:19 , Processed in 0.818855 second(s), Total 57, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
45800