【DIY】远程手机遥控车 androidbot
一、设计初衷:
当过爸爸妈妈的都有类似感受:小孩慢慢长大,学说话,学走路,而自己平时上班太忙,陪小孩的时间自然就少了!为了弥补心中遗憾,很多我认识的朋友中会在自己家里安装WIFI IP camera方便自己随时查看小孩在家是否有哭闹或者做一些不安全的事,而也有很少一部分喜欢DIY的朋友选择了自己动手,我也是其中之一。
二、项目发展历程
尤其是当我女儿在2岁左右的时候,此时才刚好学会说话,走路,我是特别希望自己能多点时间陪伴她,于是这个项目在当时2015.8启动了。
这款安卓手机远程陪伴机器人项目经过了2年的反复改进,目前有三个版本,分别是2015/2016/2017三个版本, 虽然从外观,硬件和软件app上都有很大变动,但都是围绕主要功能来改进的:远程视频陪伴。
三、优势:
设计之初不完全是为了DIY,我是希望能够做出一款实用便宜易用的产品,所以没有采用常用的DIY开源硬件方案例如arduino,而是选择了价格便宜,功耗极低的蓝牙BT4.0和MCU控制一体TI最新芯片CC2541来做控制方案。当然也相信大家能理解我为什么会选择android手机来做机器人大脑。
项目过程中遇到最大难题是android手机兼容性问题,在APP的开发过程中,这个问题花最多时间和精力才做到今天这种程度,我个人感觉是非常有成就感的。
因为类似项目不止我一个人想做,但最后都因为这个问题而放弃,包括国外2012很火的romo机器人,国内也有不少这样的公司,他们最终都不得不选择苹果的手机或者平板来做。这里面主要是解决了app在没有root权限的情况下待机以后还会长时间不掉线,还可以随时被唤醒。
与WIFI IP camera对比:
1)可以到处跑,因为不需要插着电源线;2)省电,待机长,所以不用担心充电问题。3)监控温湿度声音情况。
四、功能:
1)远程视频(android手机+webrtc)
2)蓝牙遥控车(20天待机 BT4.0 CC2541)
3)百度语音识别和聊天(android手机编程)
4)温湿度传感器 (DHT11传感器模块)
5)声音传感器
五、硬件列表
下图是完整的实物零件图,基本上是从淘宝上面淘的(除了控制底板),
2)小车底盘(淘宝上面有非常多的小车底盘卖,自己任选),
3)马达:TT马达3元/个
4)轮子:2元/个
5)锂电池:2200mAH 7.4V + 充电器 一起30元
1)控制板包括:
蓝牙模块CC2541:11元
电机模块:5元
稳压模块:5元
温湿度传感器:5元
底板:自己设计的,自己也可以用面包板或者飞线来代替,只是可能会比较乱不好看。
自己算算很便宜吧!
CrabRobot是一款小孩陪伴机器人APP, 已经通过小米审核,可以在小米应用商店搜索CrabRobot
1、两大功能:
1)、移动看家
2)、智能语音聊天
2、其他特点:
1)用手机替代网络摄像头,更智能,更省电;
2)自动应答;
3)查询环境温湿度信息;
4)支持蓝牙玩具遥控车; (移动功能和温湿度查询功能,需要配一款蓝牙玩具遥控车,可待机20天)。
3、使用方法:
1、注册账号,分别在两部手机上各自注册一个账号;
2、添加对方为好友;
3、把其中一部手机放到蓝牙遥控玩具车上;
组装后效果图,个人挺满意的 ^_^:
七、开放资源
https://github.com/luojin012/Android-phone-telepresence-robot
1、开源:控制电路板,结构,控制板软件;app免费使用
2、app接口免费使用,接口开放
这里列举下蓝牙命令接口,
例如通过蓝牙发送命令:
1) b2;\n
小车以2的速度前行,如果是负数就倒车
2) t3;\n
小车以3的速度转弯,负数的话就是反方向转弯
温湿度传感器命令:
如果小车控制板上有温湿度传感器,也可以按照下面格式发送数据到APP
DHT:60.2;28.5
60.2是湿度,28.5是温度。
控制板的代码是开源的基于CC251蓝牙模块C51核写的
读取温湿度代码,这里要感谢“甜甜的大香瓜”,在他的基础上修改来的,少走了弯路。
//****************************************************************************** //name: DHT11_Read_Humiture //introduce: DHT11的读温湿度函数 //parameter: none //return: TRUE:读取正确,FALSE:读取错误 //author: 甜甜的大香瓜 //email: 897503845@qq.com //changetime: 2016.04.11 //****************************************************************************** void DHT11_Read_Humiture(uint8 *pDHT11_data) { uint8 nHumidity_integer; uint8 nHumidity_decimal; uint8 nTemperature_integer; uint8 nTemperature_decimal; uint8 nChecksum; uint8 nChecksum_count; uint8 nFLAG; // EA = 0;//主机开始信号 SET_PIN_OUT; //IO口配置为输出 SET_DATA_PIN; //输出高电平 // Delay_Us(100000); CLR_DATA_PIN; //输出低电平 Delay_Us(4000); //延时至少18MS SET_DATA_PIN; //输出高电平 Delay_Us(4); //切换到DHT11端发数据 SET_PIN_IN; //IO口配置为输入 Delay_Us(4); if(DATA_PIN == 0) { //DHT11响应 nFLAG = 2; EA = 0;while((DATA_PIN == 0) && (nFLAG++)); nFLAG = 2; while((DATA_PIN == 1) && (nFLAG++)); //DHT11读值 nHumidity_integer = DHT11_Read_Char(); //湿度高位,整数 nHumidity_decimal = DHT11_Read_Char(); //湿度低位,小数 nTemperature_integer = DHT11_Read_Char(); //温度高位,整数 nTemperature_decimal = DHT11_Read_Char(); //温度低位,小数 nChecksum = DHT11_Read_Char(); //校验和 EA = 1; //结束 SET_DATA_PIN; //计算校验和 nChecksum_count = nHumidity_integer + nHumidity_decimal + nTemperature_integer + nTemperature_decimal; //验证数据正确性 if(nChecksum == nChecksum_count) { //正确,则将读出的值保存到全局变量 pDHT11_data[0] = nHumidity_integer; pDHT11_data[1] = nHumidity_decimal; pDHT11_data[2] = nTemperature_integer; pDHT11_data[3] = nTemperature_decimal; } else { //错误,则值全为0 pDHT11_data[0] = 0; pDHT11_data[1] = 0; pDHT11_data[2] = 0; pDHT11_data[3] = 0; EA = 1; return ; } } else { //错误,则值全为0 pDHT11_data[0] = 0; pDHT11_data[1] = 0; pDHT11_data[2] = 0; pDHT11_data[3] = 0; EA = 1; return ; } EA = 1; return ; }
命令接受解析控制,可以看到和上面命令例子 是对应的。
void car_stop()
{motor_Set(motor_A0, 0);motor_Set(motor_A1, 0);motor_Set(motor_B0, 0);motor_Set(motor_B1, 0);car.left=car.right=0;car.carn=0;
}/*void motor_Set( uint8 pin_d, uint8 mode )
{// // cmd_st.key_timer=0;// PIN_setOutputValue(hKeyPins, pin_d, mode);pin_d=mode;
}
*/
void cmd_pase(char *data_c,int len)
{int i;//char *data_c=Receive_CMD[0].receive_buf;//memset(RX2_Buffer,0,BUF_LENTH);for(i=0;i<len;i++){if(data_c[i]=='t') // turn right or left {car.right=atoi(data_c+i+1);if(car.right>0)car.right+=2;elsecar.right-=2;car.left=-car.right;//motor_Set(duoji_A, 1);douji.x=0; car.carn=0;break;}else if(data_c[i]=='b') // both motor speed{car.right=car.left= atoi(data_c+i+1);//motor_Set(duoji_A, 1);douji.x=0; car.carn=0;//if(car.right==2)// car_led = ~car_led; break;}}
}void receing_data(char datar)
{if(datar==';'){Receive_CMD[0].receive_buf[Receive_CMD[0].receive_len++] = 0; Receive_CMD[0].receive_status=2;idle_buf++;/cmd_pase(Receive_CMD[0].receive_buf,Receive_CMD[0].receive_len);Receive_CMD[0].receive_status=0;Receive_CMD[0].receive_len=0;}else//else if(Receive_CMD[0].receive_status<2){Receive_CMD[0].receive_buf[Receive_CMD[0].receive_len++] = datar; Receive_CMD[0].receive_status=1;if(Receive_CMD[0].receive_len>max_rebuf) Receive_CMD[0].receive_len=0;}}#if 1void car_control()
{// car_led = (car.left||car.right); car.left_count++;if((car.left_count>=8)){car.left_count=1;if(car.left!=1){motor_Set(motor_A0, 0);motor_Set(motor_A1, 0);}}if(car.left==0){ // stopmotor_Set(motor_A0, 0);motor_Set(motor_A1, 0);} if(car.left==car.left_count)motor_Set(motor_A0, 1);//motor_A0=1; if(car.left==-car.left_count)motor_Set(motor_A1, 1);//motor_A1=1; */car.right_count++; if((car.right_count>=8)){car.right_count=1;if(car.right!=1){// car.right=0;motor_Set( motor_B0, 0 );motor_Set( motor_B1, 0 );}}if(car.right==car.right_count){motor_Set(motor_B0, 1);//car_led = 1; }// motor_B0=1; if(car.right==(-car.right_count)){motor_Set(motor_B1, 1);// car_led = 1; }if(car.right==0){ // stopmotor_Set(motor_B0, 0);motor_Set(motor_B1, 0);} }
让我开心的是,隔壁家的男孩比我们家的女儿更喜欢玩;另外有次我把样品拿出去玩时,有个妈妈问有没有开始卖,她也需要一个来照看她家的老人和小孩。
https://item.taobao.com/item.htm?id=552635703115 想自己DIY的伙伴可以联系我,提供3D打印相关外壳及其它硬件!QQ:1074814960
【DIY】远程手机遥控车 androidbot相关推荐
- esp8266+arduino IDE+阿里云IOT+萤石云=远程视频遥控车(一)
@TOC一.创意来源 新冠病毒流行之际,有一山东技术妹子DIY一款遥控车.该车能代替妺子在社区内买馒头. 这是一个不错的创意,值得仿制. 二.小车功能: 为了增加遥控距离,蓝牙.NRF24L01都不选 ...
- DIY远程控制开关(tiny6410+LED+yeelink+curl)
上一次,介绍了如何实现远程监控室内温度,大家伙反响还是很热烈的,笔者很欣慰,独乐乐不如众乐乐啊.不过话说回来,那个实现只能是远程监测家中温度,假如发现家里热得很,想远程打开空调开关提前降降温,回家后不 ...
- android手机改电视,DIY让手机变成万能电视遥控器 手机万能遥控器设置方法
今天小编教教大家DIY让手机变成万能电视遥控器.苹果,安卓的机器都可以.不过有些安卓的机子有自带红外的.比如三星安卓的机子除了音频接口的还有otg接口更牛逼,otg口的有学习和编程功能. 需要准备的东 ...
- 树莓派远程4G遥控车教程(二)-相机云台舵机初步调试
树莓派远程4G遥控车教程(二)-相机云台舵机初步调试 树莓派远程4G遥控车教程(一)-准备工作 树莓派远程4G遥控车教程(三)-摄像头安装及实现局域网实时监控 树莓派远程4G遥控车教程(四)-实时监控 ...
- 树莓派远程4G遥控车教程(三)-摄像头安装及实现局域网实时监控
树莓派远程4G遥控车教程(三)-摄像头安装及实现局域网实时监控 树莓派远程4G遥控车教程(一)-准备工作 树莓派远程4G遥控车教程(二)-相机云台舵机初步调试 树莓派远程4G遥控车教程(四)-实时监控 ...
- 手工DIY:手机变身扫描仪_极客迷
手工DIY:手机变身扫描仪_极客迷 手工DIY:手机变身扫描仪_极客迷 posted on 2017-07-16 16:10 lexus 阅读(...) 评论(...) 编辑 收藏 转载于:https ...
- 树莓派远程4G遥控车教程(四)-实时监控内网穿透及集成舵机控制功能
树莓派远程4G遥控车教程(四)- 内网穿透及监控页面集成舵机控制功能 树莓派远程4G遥控车教程(一)-准备工作 树莓派远程4G遥控车教程(二)-相机云台舵机初步调试 树莓派远程4G遥控车教程(三)-摄 ...
- 多路继电器控制4G远程手机APP
多路继电器控制4G远程手机APPS274是多功能可编程的无线工业物联网数据监测采集控制 终端,是多功能多应用场景的 4G 物联智能网关. 采用 GSM/GPRS/3G/4G 网络通信,不受距离限制 ...
- 【原创-远程控制手机】vnc远程手机利器の之doridVNC高光时刻
VNC远程大家并不陌生,怎么嵌入到手机里,方便大家远程手机,就像电脑用vncviwer控制电脑一样?话不多说,请看详细操作步骤.先来两张效果图. 简介 Vncserver for Android ma ...
最新文章
- ICCV 2021 | 最新开源!多视角几何和注意力机制实现新视角合成
- asp.net创建文件夹出错的解决方案[转]
- 【日常小记】linux中强大且常用命令:find、grep
- windows远程桌面无法粘贴复制的问题解决方法
- Java生成、解析二维码方案以及代码实现
- spring注解原理
- opencv3/C++ 机器学习-EM算法/Expectation Maximization
- 微信小程序 公众号 订阅消息 模板 正则 参数校验
- 如何用RIGOL任意函数发生器产生任意波形
- 电脑便签损坏怎么修复
- 抗超大规模DDOS攻击
- xx:xx,xx:xx规则的字符串怎么解析呢
- TOUGH2系列建模方法及在CO2地质封存、水文地球化学、地热、地下水污染等领域中的实践技术应用
- 【天祺围棋】围棋分段位【打谱】【猜局】提高法
- 橱柜选购要简约实用 合理配置能够节省成本
- html5 app c,HTML5开发日 手机QQ浏览器与Web App开发者共赢
- 解读微信终端开源背后的故事
- 支付通道轮询工具:智能支付路由
- 华为 C8800 C8650 tun.ko 模块
- HTML页面的自动刷新以及跳转