62971浏览
查看: 62971|回复: 44

[项目] 宠物互动--逗宠萌物(程序有更新20170728)

[复制链接]
话不多说,来段视频压压惊先:


做逗喵小球的故事如下↓
       相信很多人都喜欢小动物(不仅仅喜欢小动物,还要吃掉小动物,这个我开玩笑的),例如小狗或小喵什么的!现在分享一个好玩的小玩意!类似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轴孔再也不会打滑啦

Grey  中级技匠

发表于 2017-5-17 18:44:23

沙发!6666666最喜欢这种逗小动物的了

这种操控方向,是不是和实际运动方向相反?

另外电机驱动一般会要求有两个电源,一个是逻辑供电,另一个是电机供电。这样设计是有道理的,如果用相同的供电口,当电机工作时,可能会抽取大量的电流,然后导致主控没电,就失控了。
回复

使用道具 举报

好奇吖斌  高级技师
 楼主|
来自手机

发表于 2017-5-17 22:04:20

Grey 发表于 2017-5-17 18:44
沙发!6666666最喜欢这种逗小动物的了

这种操控方向,是不是和实际运动方向相反?

调试好电机转向就不会反方向了!话说我以前用的电机驱动板都是一个电源输入的,L298N和L9110这些,尴尬了....
回复

使用道具 举报

yoyojacky  初级技匠

发表于 2017-6-22 19:32:42

gehhxing 发表于 2017-6-15 01:12
大神,我按照你的教程做了一套,调试过程中蓝牙模块变得供电不足了,这个问题你遇到过吗? ...

电源供在蓝牙上,然后引出的线再给 arduino 供电.就好啦.而且电池建议充满.
回复

使用道具 举报

yoyojacky  初级技匠 来自手机

发表于 2017-5-18 08:14:15

电机上加个大电容就好啦
回复

使用道具 举报

安卓机器人  中级技神

发表于 2017-5-18 09:54:25

建模好碉啊
回复

使用道具 举报

Grey  中级技匠

发表于 2017-5-18 20:58:11

好奇吖斌 发表于 2017-5-17 22:04
调试好电机转向就不会反方向了!话说我以前用的电机驱动板都是一个电源输入的,L298N和L9110这些,尴尬了 ...

不用在意细节~
回复

使用道具 举报

好奇吖斌  高级技师
 楼主|

发表于 2017-5-18 21:02:27

yoyojacky 发表于 2017-5-18 08:14
电机上加个大电容就好啦

好,学习了!
回复

使用道具 举报

nicho  中级技匠

发表于 2017-5-19 16:19:52

楼主好棒!!!
回复

使用道具 举报

nicho  中级技匠

发表于 2017-5-19 16:26:14

舵机电机方面之前也遇到过不少坑,多个舵机瞬间启动导致板子复位,除了电容之外,最近发现一个NCP380貌似也能起到作用,还未实验
回复

使用道具 举报

Diy_IMRE  高级技师

发表于 2017-5-20 09:38:10

尼玛,透明外壳移动看着好像滑板学的感觉
回复

使用道具 举报

飞猪的小号  中级技师

发表于 2017-5-20 09:59:42

其实我一直在纠结外面那个透明的球。谢谢楼主分享
回复

使用道具 举报

AKKan  见习技师

发表于 2017-5-20 14:04:01

楼主好牛!学习了
回复

使用道具 举报

hnyzcj  版主

发表于 2017-5-20 19:11:54

楼主牛逼,向你学习
回复

使用道具 举报

kevinzhang19701  高级技匠

发表于 2017-5-22 16:33:14

心灵手巧外加有爱心,一枚棒棒哒铲屎官:lol
回复

使用道具 举报

好奇吖斌  高级技师
 楼主|

发表于 2017-5-26 19:33:31

kevinzhang19701 发表于 2017-5-22 16:33
心灵手巧外加有爱心,一枚棒棒哒铲屎官

嗯嗯,做一只玩玩吧!
回复

使用道具 举报

yoyojacky  初级技匠 来自手机

发表于 2017-5-29 11:24:04

如果有stl文件更好啦
回复

使用道具 举报

好奇吖斌  高级技师
 楼主|

发表于 2017-5-29 19:13:16

yoyojacky 发表于 2017-5-29 11:24
如果有stl文件更好啦

有啊,打印件有sw源文件和stl文件的
回复

使用道具 举报

gehhxing  见习技师

发表于 2017-6-6 23:09:53

yoyojacky 发表于 2017-5-18 08:14
电机上加个大电容就好啦

请教一下,大概需要加多大的电容呢
回复

使用道具 举报

gehhxing  见习技师 来自手机

发表于 2017-6-15 01:12:28

大神,我按照你的教程做了一套,调试过程中蓝牙模块变得供电不足了,这个问题你遇到过吗?
回复

使用道具 举报

gehhxing  见习技师

发表于 2017-6-23 08:32:19

yoyojacky 发表于 2017-6-22 19:32
电源供在蓝牙上,然后引出的线再给 arduino 供电.就好啦.而且电池建议充满.

谢谢回复~
回复

使用道具 举报

123下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail