宠物互动--逗宠萌物(程序有更新20170728)

2017-05-177.3万
精华项目
AI 快速预览详细 收起
本项目介绍了一款自制的蓝牙遥控小球,用于与宠物互动。主要材料包括8CM直径亚克力球、N20减速电机、Arduino Nano、HC05蓝牙模块等。通过简单的Arduino编程和3D打印技术,可以轻松制作出这个有趣的宠物玩具。在制作过程中,作者分享了一些避坑经验,如使用7.4V锂电池以避免电机启动时电压拉低导致蓝牙断开的问题。此外,还提供了详细的接线图和程序代码,方便读者参考。
话不多说,来段视频压压惊先:


做逗喵小球的故事如下↓
       相信很多人都喜欢小动物(不仅仅喜欢小动物,还要吃掉小动物,这个我开玩笑的),例如小狗或小喵什么的!现在分享一个好玩的小玩意!类似Sphero的球型机器,可以用来逗喵溜狗。2016年大概5月份的时候看到做BB-8机器人的泰哥做了一个遥控小球,我也好想做一个,可是他说电脑坏了重装系统后建模文件没了。恰好2016年暑假8月份我家走来了一只流浪小喵,好萌好可爱啊!我正好在学习solidworks三维建模,于是就决定自己试着做一个逗喵的小球。
宠物互动--逗宠萌物(程序有更新20170728)图3
        看图,是不是好可爱呢?喵~~不过好瘦小啊,呜呜呜,好可怜QAQ!!!正好家里有老鼠,父母把小喵收养下来了,我也正式成为一名铲屎官啦。过了不久10月份的时候又来多了一只小黄喵,一起收养了,现在他们成为好朋友啦ˏ₍•ɞ•₎ˎˏ₍•ʚ•₎ˎ

宠物互动--逗宠萌物(程序有更新20170728)图4
宠物互动--逗宠萌物(程序有更新20170728)图5

小球3D建模效果图:
宠物互动--逗宠萌物(程序有更新20170728)图6
一边学习Solidworks一边建模,断断续续地画,大概画了一个多月吧,建完模后又修改了好多遍才满意。
零件清单:
材料名称
数量
1(建议多买几个备用)
N20减速电机4mm出轴(转速大约300RPM/6V)
2
1
1
3
1
1
2
杜邦线、28号硅胶线、热缩管、扎带
若干
14
按stl文件说明打印(轮子多打印几个备用
宠物互动--逗宠萌物(程序有更新20170728)图7
橡胶圈是买这种橡胶圈车轮拆下来的,尺寸大概是外径28mm、内径25mm、线径3mm。
宠物互动--逗宠萌物(程序有更新20170728)图8
       想自己做的自己到网上购买上面说的电子零件,在这里说说做小球时走过的坑!用DF活动的现金券在DF商店买了Bluno Nano、3.7v锂电、HR8833微型电机驱动板结果发现没一个能用上,原来那个集成蓝牙功能的Bluno Nano是个不通用的蓝牙,蓝牙软件必须用官方提供的app,不支持密码配对,自己弄好的蓝牙遥控app用不了;HR8833驱动板需要两个5V或以上的电源输入才能工作,我还以为一个是电源输入,另外一个可以输出电源的,折腾了我快一个多星期才搞懂了,真是每块板子都有它不工作的脾气啊!!!希望DFRobot能完善一下这些电子零件和模块,做个通用的蓝牙Nano板,电机驱动板也做得更人性化易用;3.7v电池电机启动瞬间会把电压拉低,导致蓝牙自动断开然后小球会失控,一直滚停不下来,所以改用7.4v锂电就没有问题了。

接线图:接线很简单,就是一个蓝牙小车的接线方式
宠物互动--逗宠萌物(程序有更新20170728)图9
组装零件
第一个版本内部尺寸小了,两边的牛眼轮距离外壳有个空隙
宠物互动--逗宠萌物(程序有更新20170728)图10
宠物互动--逗宠萌物(程序有更新20170728)图11
第二个版本修改建模尺寸后让别人重新打印
宠物互动--逗宠萌物(程序有更新20170728)图12
宠物互动--逗宠萌物(程序有更新20170728)图13
宠物互动--逗宠萌物(程序有更新20170728)图14
宠物互动--逗宠萌物(程序有更新20170728)图15
小球程序:
  1. /*
  2. *   日期:2017-07-24
  3. *   功能:逗宠萌物程序
  4. *   版本:v1.1
  5. */
  6. #define IN1 4 // 4 5 右轮
  7. #define IN2 5
  8. #define IN3 6 // 6 7 左轮
  9. #define IN4 7
  10. #define SPINACW '6' //逆时针转编码
  11. #define SPINCW '5' //顺时针转编码
  12. #define RIGHT '4'//右转编码
  13. #define LEFT '3' //左转编码
  14. #define BACK '2'//后退编码
  15. #define GO '1'//前进编码
  16. #define STOP '0'//停止编码
  17. int PWM_Speed;//PWM量输出
  18. void setup() {
  19.   Serial.begin(9600);//设置蓝牙波特率
  20.   pinMode(IN1,OUTPUT);
  21.   pinMode(IN2,OUTPUT);
  22.   pinMode(IN3,OUTPUT);
  23.   pinMode(IN4,OUTPUT);
  24.   initCar();
  25.   PWM_Speed=200;
  26. }
  27. void loop() {
  28.   if(Serial.available()>0){
  29.       char ch = Serial.read();
  30.       if(ch == GO){
  31.          //前进
  32.          go();
  33.          Serial.print("GO\n");
  34.       }else if(ch == BACK){
  35.          //后退
  36.          back();
  37.          Serial.print("BACK\n");
  38.       }else if(ch == LEFT){
  39.          //左转
  40.          turnLeft();
  41.          Serial.print("turnLeft\n");
  42.       }else if(ch == RIGHT){
  43.         //右转
  44.         turnRight();
  45.         Serial.print("turnRight\n");
  46.       }else if(ch == STOP){
  47.         //停止
  48.         stopCar();
  49.         Serial.print("stop\n");
  50.       }else if(ch == SPINCW){
  51.         //顺时针转编码
  52.         spinCW();
  53.         Serial.print("spinCW\n");
  54.       }else if(ch == SPINACW){
  55.         //逆时针自转
  56.         spinACW();
  57.         Serial.print("spinACW\n");
  58.       }
  59.     }
  60. }
  61. void initCar(){
  62.   //默认全是低电平,停止状态
  63.   digitalWrite(IN1,LOW);
  64.   digitalWrite(IN2,LOW);
  65.   digitalWrite(IN3,LOW);
  66.   digitalWrite(IN4,LOW);
  67. }
  68. //左转
  69. void turnLeft(){
  70.   analogWrite(IN1,PWM_Speed);
  71.   digitalWrite(IN2,LOW);        //右轮前进
  72.   digitalWrite(IN3,LOW);
  73.   digitalWrite(IN4,LOW);        //左轮后退
  74. }
  75. //右转
  76. void turnRight(){
  77.   digitalWrite(IN1,LOW);
  78.   digitalWrite(IN2,LOW);        //右轮后退
  79.   digitalWrite(IN3,LOW);
  80.   analogWrite(IN4,PWM_Speed);  //左轮前进
  81. }
  82. //前进
  83. void go(){
  84.   digitalWrite(IN1,HIGH);
  85.   digitalWrite(IN2,LOW);         //右轮前进
  86.   digitalWrite(IN3,LOW);
  87.   digitalWrite(IN4,HIGH);         //左轮前进
  88. }
  89. //后退
  90. void back(){
  91.   digitalWrite(IN1,LOW);
  92.   digitalWrite(IN2,HIGH);        //右轮后退
  93.   digitalWrite(IN3,HIGH);
  94.   digitalWrite(IN4,LOW);        //左轮后退
  95. }
  96. // 顺时针自转
  97. void spinCW()
  98. {
  99.   digitalWrite(IN1, LOW);
  100.   digitalWrite(IN2, HIGH);       //右轮后退
  101.   digitalWrite(IN3, LOW);
  102.   digitalWrite(IN4, HIGH);        //左轮前进
  103. }
  104. // 逆时针自转
  105. void spinACW()
  106. {
  107.   digitalWrite(IN1, HIGH);
  108.   digitalWrite(IN2, LOW);        //右轮前进
  109.   digitalWrite(IN3, HIGH);
  110.   digitalWrite(IN4, LOW);       //左轮后退
  111. }
  112. // 默认停止
  113. void stopCar(){
  114.   initCar();
  115. }
复制代码

感觉小球程序用PWM控制好像会好点
蓝牙模块先不要安装,先烧录程序,通过Arduino IDE串口发送字符测试电机转向,方向不对就修改子函数下的digitalWrite(INX,HIGH或者LOW);测试好再装蓝牙模块

蓝牙模块设置参考:蓝牙HC05模块探究-设置AT指令
下载附件蓝牙模块设置教程.zip
蓝牙模块设置好后再组装到Arduino板子上,我比较喜欢用杜邦线与蓝牙模块连接,不焊死,方便拆下来用到别的地方
  1. #define AT 2//en接2号引脚
  2. #define LED 13
  3. void setup()
  4. {
  5.       pinMode(LED,OUTPUT);
  6.       pinMode(AT,OUTPUT);
  7.       digitalWrite(AT,HIGH);
  8.       Serial.begin(38400);//这里应该和你的模块通信波特率一致
  9.       delay(100);
  10.       Serial.println("AT");
  11.       delay(100);
  12.       Serial.println("AT+NAME=Arduino");//命名模块名
  13.       delay(100);
  14.       Serial.println("AT+ROLE=0");//设置主从模式:0从机,1主机
  15.       delay(100);
  16.       Serial.println("AT+PSWD=1234");//设置配对密码,如1234
  17.       delay(100);
  18.       Serial.println("AT+UART=9600,0,0");//设置波特率9600,停止位1,校验位无
  19.       delay(100);
  20.       Serial.println("AT+RMAAD");//清空配对列表
  21. }
  22. void loop()
  23. {
  24.       digitalWrite(LED, HIGH);
  25.       delay(500);
  26.       digitalWrite(LED, LOW);
  27.       delay(500);
  28. }
复制代码

宠物互动--逗宠萌物(程序有更新20170728)图16
组装完成
宠物互动--逗宠萌物(程序有更新20170728)图17
用扎带把电池固定
宠物互动--逗宠萌物(程序有更新20170728)图18
完成
宠物互动--逗宠萌物(程序有更新20170728)图19

我在GitHub上找到了一个android开源的蓝牙遥控App把源码修改成自己想要的,我不会iOS,所以就没有iOS苹果手机的App啦。
遥控App演示:
宠物互动--逗宠萌物(程序有更新20170728)图20
自定义编码默认值为:前进 1、后退 2、左转 3、右转 4、停止 0
滑动虚拟摇杆上-前进、下-后退、左-左转、右-右转、松开为停止;也可以作为其它蓝牙小车的遥控app。
小球演示:

Processing上位机程序
我做完小球和安卓程序觉得还不够好玩,电脑也可以利用起来的,于是看了两天Processing的资料写出了个电脑蓝牙遥控小球的程序
使用方法:到Processing官网下载IDE安装,先让蓝牙模块连接电脑获取串口(设备管理器上查看),例如COM3(不同电脑可能不一样)修改下面String arduinoPort = "COM3";再运行程序
  1. import processing.serial.*;//加载Serial库
  2. Serial port;//创建端口
  3. char stop = '0';//停止编码
  4. char up = '1';//前进编码
  5. char down = '2';//后退编码
  6. char left = '3';//左转编码
  7. char right = '4';//右转编码
  8. char CW = '5';//顺时针编码
  9. char ACW= '6';//逆时针编码
  10. void setup() {
  11.   size(680, 480, P3D);
  12.   //String arduinoPort = Serial.list()[0]; // 方法1,自动获取活动串口
  13.   String arduinoPort = "COM3";       // 方法2,直接填入端口号
  14.   port = new Serial(this, arduinoPort, 9600);//初始化端口(指定端口和波特率)把'端口名称'改成Arduino连接的端口,类似COM3
  15. }
  16. void draw() {
  17.   //文字
  18.   text("up", 326, 156);
  19.   text("down", 316, 335);
  20.   text("left", 230, 240);
  21.   text("right", 420, 240);
  22.   //按下键盘方向键从端口发送数据
  23.   if (keyPressed && (key == CODED)) {  
  24.     if (keyCode == UP) {
  25.       port.write(up);
  26.       fill(0);
  27.       rect(315, 165, 50, 50);//上
  28.      
  29.     } else if (keyCode == DOWN) {  
  30.       port.write(down);
  31.       fill(0);
  32.       rect(315, 265, 50, 50);//下
  33.       
  34.     } else if (keyCode == LEFT) {  
  35.       port.write(left);
  36.       fill(0);
  37.       rect(265, 215, 50, 50);//左
  38.       
  39.     } else if (keyCode == RIGHT) {
  40.       port.write(right);
  41.       fill(0);
  42.       rect(365, 215, 50, 50);//右
  43.       
  44.     }
  45.   } else {  
  46.     stop();
  47.   }
  48.   
  49.   //普通键盘编码事件
  50.   //按键a为小球逆时针旋转,按键d为小球顺时针旋转
  51.   if(keyPressed){
  52.     if (key == 'a'){
  53.       port.write(ACW);//逆时针自转
  54.     }else if (key == 'd'){
  55.       port.write(CW);//顺时针自转
  56.     }
  57.   }else{
  58.     stop();
  59.   }
  60. }
  61. //默认停止
  62. void stop(){
  63. port.write(stop);
  64.     fill(255, 255, 255);
  65.     rect(315, 165, 50, 50);//上
  66.     rect(265, 215, 50, 50);//左
  67.     rect(365, 215, 50, 50);//右
  68.     rect(315, 265, 50, 50);//下
  69. }
复制代码

宠物互动--逗宠萌物(程序有更新20170728)图21
如↑图,按键盘方向键为上-前进、下-后退、左-左转、右-右转、松开为停止

抱歉没有逗猫视频了
有个不好的消息就是小黄喵走丢了,五一放假回家的时候已经走丢1个月了,这个4月我的心情也不怎么好,猫丢了我更伤心,所以没有逗猫视频了,也不知道接下来要做些什么,想静下来学自己想学的,提高技术才能做更好玩的东西
宠物互动--逗宠萌物(程序有更新20170728)图22宠物互动--逗宠萌物(程序有更新20170728)图23

帖子其实4月份就写好了,但只放了在个人站,之后也有一些人加我好友来与我一起交流了,费点劲搭个人站做主站分享还是挺不错的,好了现在发到其它地方一起玩吧!

Android程序
开源程序地址
下载附件pet-toy.rar--
sldprt文件需solidworks2016及以上版本打开
最后感谢那些帮助过我的小伙伴(泰哥和SC),因为我没有3D打印机要找小伙伴帮忙!
祝大家玩得开心ヽ(•‿•)ノ。

想了解更多可访问我的个人站www.haoqiabin.cn



2017-07-27更新了个人站程序

程序更新:
-下位机程序修改顺时针自转和逆时针自转为绕圈左右转,新增两个方向为顺时针自转和逆时针
-上位机新增两个按钮控制顺时针自转和逆时针
-原来的圆孔轴轮子容易打滑,现在改成D轴孔再也不会打滑啦

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(32)
派大星ym
派大星ym
////
派大星ym
派大星ym
学到了学到了,争取给狗子安排上
zouzouzou
zouzouzou
好可爱!!!想要实际做一个
zouzouzou
zouzouzou
好可爱!!!好喜欢这个,,小巧可爱!!!
ys350
ys350
学习学习,谢谢分享。
20060606
20060606
适配n20电机的d轴轮子的stl文件能发一下吗?
韭菜鸡蛋
韭菜鸡蛋
BB-8的行走方式应该用这种方式
好奇吖斌
好奇吖斌
作者
回复韭菜鸡蛋
对,这个就是用BB8的行走设计
DFSkangKjBr
DFSkangKjBr
下载了两遍了,好玩。
URvj0KkE
URvj0KkE
不错,可以尝试
DFSkangKjBr
DFSkangKjBr
做一个玩玩,谢谢分享。
DFSkangKjBr
DFSkangKjBr

学习学习,谢谢分享。
SJHll
SJHll
好厉害!
小子不才
小子不才
我也做过一个,BB8,但是外壳是3D打印的,摩擦力太大,能滚动,不灵敏,哎
gada888
gada888
又看了一遍
gada888
gada888
好好看下
角斗士_aiden
角斗士_aiden
哇塞,阿斌做这个东西,好评,我也做个玩玩
caiyu268
caiyu268
建议做个可以远程视频互动玩耍的球
好奇吖斌
好奇吖斌
作者
回复caiyu268
准备买OpenMV摄像头,买回来再看看怎么搞吧
胡秩通123
胡秩通123
好呀!!!
胡秩通123
胡秩通123
我家有4只喵
好奇吖斌
好奇吖斌
作者
回复胡秩通123
赶紧做个逗喵球玩
gehhxing
gehhxing
大神,我按照你的教程做了一套,调试过程中蓝牙模块变得供电不足了,这个问题你遇到过吗?
gehhxing
gehhxing回复yoyojacky
这个我考虑过,但是电源是7.4v的,没敢往限定电压3.3-5v的hc-05上接
gehhxing
gehhxing回复yoyojacky
谢谢回复~
共3条回复,已加载2条,点击查看更多共3条回复,已加载全部