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相关推荐

  1. esp8266+arduino IDE+阿里云IOT+萤石云=远程视频遥控车(一)

    @TOC一.创意来源 新冠病毒流行之际,有一山东技术妹子DIY一款遥控车.该车能代替妺子在社区内买馒头. 这是一个不错的创意,值得仿制. 二.小车功能: 为了增加遥控距离,蓝牙.NRF24L01都不选 ...

  2. DIY远程控制开关(tiny6410+LED+yeelink+curl)

    上一次,介绍了如何实现远程监控室内温度,大家伙反响还是很热烈的,笔者很欣慰,独乐乐不如众乐乐啊.不过话说回来,那个实现只能是远程监测家中温度,假如发现家里热得很,想远程打开空调开关提前降降温,回家后不 ...

  3. android手机改电视,DIY让手机变成万能电视遥控器 手机万能遥控器设置方法

    今天小编教教大家DIY让手机变成万能电视遥控器.苹果,安卓的机器都可以.不过有些安卓的机子有自带红外的.比如三星安卓的机子除了音频接口的还有otg接口更牛逼,otg口的有学习和编程功能. 需要准备的东 ...

  4. 树莓派远程4G遥控车教程(二)-相机云台舵机初步调试

    树莓派远程4G遥控车教程(二)-相机云台舵机初步调试 树莓派远程4G遥控车教程(一)-准备工作 树莓派远程4G遥控车教程(三)-摄像头安装及实现局域网实时监控 树莓派远程4G遥控车教程(四)-实时监控 ...

  5. 树莓派远程4G遥控车教程(三)-摄像头安装及实现局域网实时监控

    树莓派远程4G遥控车教程(三)-摄像头安装及实现局域网实时监控 树莓派远程4G遥控车教程(一)-准备工作 树莓派远程4G遥控车教程(二)-相机云台舵机初步调试 树莓派远程4G遥控车教程(四)-实时监控 ...

  6. 手工DIY:手机变身扫描仪_极客迷

    手工DIY:手机变身扫描仪_极客迷 手工DIY:手机变身扫描仪_极客迷 posted on 2017-07-16 16:10 lexus 阅读(...) 评论(...) 编辑 收藏 转载于:https ...

  7. 树莓派远程4G遥控车教程(四)-实时监控内网穿透及集成舵机控制功能

    树莓派远程4G遥控车教程(四)- 内网穿透及监控页面集成舵机控制功能 树莓派远程4G遥控车教程(一)-准备工作 树莓派远程4G遥控车教程(二)-相机云台舵机初步调试 树莓派远程4G遥控车教程(三)-摄 ...

  8. 多路继电器控制4G远程手机APP

    多路继电器控制4G远程手机APPS274是多功能可编程的无线工业物联网数据监测采集控制 终端,是多功能多应用场景的 4G 物联智能网关.  采用 GSM/GPRS/3G/4G 网络通信,不受距离限制 ...

  9. 【原创-远程控制手机】vnc远程手机利器の之doridVNC高光时刻

    VNC远程大家并不陌生,怎么嵌入到手机里,方便大家远程手机,就像电脑用vncviwer控制电脑一样?话不多说,请看详细操作步骤.先来两张效果图. 简介 Vncserver for Android ma ...

最新文章

  1. ICCV 2021 | 最新开源!多视角几何和注意力机制实现新视角合成
  2. asp.net创建文件夹出错的解决方案[转]
  3. 【日常小记】linux中强大且常用命令:find、grep
  4. windows远程桌面无法粘贴复制的问题解决方法
  5. Java生成、解析二维码方案以及代码实现
  6. spring注解原理
  7. opencv3/C++ 机器学习-EM算法/Expectation Maximization
  8. 微信小程序 公众号 订阅消息 模板 正则 参数校验
  9. 如何用RIGOL任意函数发生器产生任意波形
  10. 电脑便签损坏怎么修复
  11. 抗超大规模DDOS攻击
  12. xx:xx,xx:xx规则的字符串怎么解析呢
  13. TOUGH2系列建模方法及在CO2地质封存、水文地球化学、地热、地下水污染等领域中的实践技术应用
  14. 【天祺围棋】围棋分段位【打谱】【猜局】提高法
  15. 橱柜选购要简约实用 合理配置能够节省成本
  16. html5 app c,HTML5开发日 手机QQ浏览器与Web App开发者共赢
  17. 解读微信终端开源背后的故事
  18. 支付通道轮询工具:智能支付路由
  19. 华为 C8800 C8650 tun.ko 模块
  20. HTML页面的自动刷新以及跳转

热门文章

  1. 光迹涂鸦(光绘)初级教程
  2. 【数据结构】广度优先遍历 最小转机问题
  3. OSChina 周二乱弹 —— 我敢给你上菜,你敢吃么?
  4. Möller-Trumbore算法-射线三角形相交算法
  5. iOS专属 利用快捷指令拿美团饿了么外卖红包
  6. 微信朋友圈长视频服务器地址,微信朋友圈发布60秒+长视频教程
  7. 字符串的左旋右旋问题
  8. python列表02
  9. Java面试题集-JVM(二)
  10. 当HTC SYNC(91助手)连接不上手机时,怎么办?