好奇吖斌 发表于 2017-5-17 16:01:10

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

{:5_183:}话不多说,来段视频压压惊先:
https://v.youku.com/v_show/id_XMjcxMTQ4NjIzMg==

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




小球3D建模效果图:
一边学习Solidworks一边建模,断断续续地画,大概画了一个多月吧,建完模后又修改了好多遍才满意。
零件清单:
材料名称数量
8CM直径亚力克球1(建议多买几个备用)
N20减速电机4mm出轴(转速大约300RPM/6V)2
7.4V小锂电池602540(SM接口)1
两路电机驱动板drv88331
塑料牛眼轮3
Arduino Nano(不焊排针)1
HC05或06蓝牙模块1
橡胶圈2
杜邦线、28号硅胶线、热缩管、扎带若干
M2*8螺丝+M2螺母14
3D打印件
按stl文件说明打印(轮子多打印几个备用

↓橡胶圈是买这种橡胶圈车轮拆下来的,尺寸大概是外径28mm、内径25mm、线径3mm。

       想自己做的自己到网上购买上面说的电子零件,在这里说说做小球时走过的坑!用DF活动的现金券在DF商店买了Bluno Nano、3.7v锂电、HR8833微型电机驱动板结果发现没一个能用上,原来那个集成蓝牙功能的Bluno Nano是个不通用的蓝牙,蓝牙软件必须用官方提供的app,不支持密码配对,自己弄好的蓝牙遥控app用不了;HR8833驱动板需要两个5V或以上的电源输入才能工作,我还以为一个是电源输入,另外一个可以输出电源的,折腾了我快一个多星期才搞懂了,真是每块板子都有它不工作的脾气啊!!!希望DFRobot能完善一下这些电子零件和模块,做个通用的蓝牙Nano板,电机驱动板也做得更人性化易用;3.7v电池电机启动瞬间会把电压拉低,导致蓝牙自动断开然后小球会失控,一直滚停不下来,所以改用7.4v锂电就没有问题了。

接线图:接线很简单,就是一个蓝牙小车的接线方式组装零件
static/image/hrline/1.gif第一个版本内部尺寸小了,两边的牛眼轮距离外壳有个空隙

第二个版本修改建模尺寸后让别人重新打印




小球程序:/*
*   日期:2017-07-24
*   功能:逗宠萌物程序
*   版本:v1.1
*/

#define IN1 4 // 4 5 右轮
#define IN2 5
#define IN3 6 // 6 7 左轮
#define IN4 7


#define SPINACW '6' //逆时针转编码
#define SPINCW '5' //顺时针转编码
#define RIGHT '4'//右转编码
#define LEFT '3' //左转编码
#define BACK '2'//后退编码
#define GO '1'//前进编码
#define STOP '0'//停止编码

int PWM_Speed;//PWM量输出

void setup() {
Serial.begin(9600);//设置蓝牙波特率
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
initCar();
PWM_Speed=200;
}

void loop() {
if(Serial.available()>0){
      char ch = Serial.read();
      if(ch == GO){
         //前进
         go();
         Serial.print("GO\n");
      }else if(ch == BACK){
         //后退
         back();
         Serial.print("BACK\n");
      }else if(ch == LEFT){
         //左转
         turnLeft();
         Serial.print("turnLeft\n");
      }else if(ch == RIGHT){
      //右转
      turnRight();
      Serial.print("turnRight\n");
      }else if(ch == STOP){
      //停止
      stopCar();
      Serial.print("stop\n");
      }else if(ch == SPINCW){
      //顺时针转编码
      spinCW();
      Serial.print("spinCW\n");
      }else if(ch == SPINACW){
      //逆时针自转
      spinACW();
      Serial.print("spinACW\n");
      }
    }
}

void initCar(){
//默认全是低电平,停止状态
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}


//左转
void turnLeft(){
analogWrite(IN1,PWM_Speed);
digitalWrite(IN2,LOW);      //右轮前进
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);      //左轮后退
}


//右转
void turnRight(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);      //右轮后退
digitalWrite(IN3,LOW);
analogWrite(IN4,PWM_Speed);//左轮前进
}

//前进
void go(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);         //右轮前进
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);         //左轮前进
}


//后退
void back(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);      //右轮后退
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);      //左轮后退
}


// 顺时针自转
void spinCW()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);       //右轮后退
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);      //左轮前进
}

// 逆时针自转
void spinACW()
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);      //右轮前进
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);       //左轮后退
}

// 默认停止
void stopCar(){
initCar();
}
感觉小球程序用PWM控制好像会好点蓝牙模块先不要安装,先烧录程序,通过Arduino IDE串口发送字符测试电机转向,方向不对就修改子函数下的digitalWrite(INX,HIGH或者LOW);测试好再装蓝牙模块
蓝牙模块设置参考:蓝牙HC05模块探究-设置AT指令
蓝牙模块设置好后再组装到Arduino板子上,我比较喜欢用杜邦线与蓝牙模块连接,不焊死,方便拆下来用到别的地方#define AT 2//en接2号引脚
#define LED 13
void setup()
{
      pinMode(LED,OUTPUT);
      pinMode(AT,OUTPUT);
      digitalWrite(AT,HIGH);
      Serial.begin(38400);//这里应该和你的模块通信波特率一致
      delay(100);
      Serial.println("AT");
      delay(100);
      Serial.println("AT+NAME=Arduino");//命名模块名
      delay(100);
      Serial.println("AT+ROLE=0");//设置主从模式:0从机,1主机
      delay(100);
      Serial.println("AT+PSWD=1234");//设置配对密码,如1234
      delay(100);
      Serial.println("AT+UART=9600,0,0");//设置波特率9600,停止位1,校验位无
      delay(100);
      Serial.println("AT+RMAAD");//清空配对列表
}
void loop()
{
      digitalWrite(LED, HIGH);
      delay(500);
      digitalWrite(LED, LOW);
      delay(500);
}

组装完成

用扎带把电池固定

完成


我在GitHub上找到了一个android开源的蓝牙遥控App把源码修改成自己想要的,我不会iOS,所以就没有iOS苹果手机的App啦。
遥控App演示:

自定义编码默认值为:前进 1、后退 2、左转 3、右转 4、停止 0
滑动虚拟摇杆上-前进、下-后退、左-左转、右-右转、松开为停止;也可以作为其它蓝牙小车的遥控app。
小球演示:

Processing上位机程序我做完小球和安卓程序觉得还不够好玩,电脑也可以利用起来的,于是看了两天Processing的资料写出了个电脑蓝牙遥控小球的程序
使用方法:到Processing官网下载IDE安装,先让蓝牙模块连接电脑获取串口(设备管理器上查看),例如COM3(不同电脑可能不一样)修改下面String arduinoPort = "COM3";再运行程序import processing.serial.*;//加载Serial库
Serial port;//创建端口

char stop = '0';//停止编码
char up = '1';//前进编码
char down = '2';//后退编码
char left = '3';//左转编码
char right = '4';//右转编码
char CW = '5';//顺时针编码
char ACW= '6';//逆时针编码

void setup() {
size(680, 480, P3D);
//String arduinoPort = Serial.list(); // 方法1,自动获取活动串口
String arduinoPort = "COM3";       // 方法2,直接填入端口号
port = new Serial(this, arduinoPort, 9600);//初始化端口(指定端口和波特率)把'端口名称'改成Arduino连接的端口,类似COM3
}

void draw() {
//文字
text("up", 326, 156);
text("down", 316, 335);
text("left", 230, 240);
text("right", 420, 240);
//按下键盘方向键从端口发送数据
if (keyPressed && (key == CODED)) {
    if (keyCode == UP) {
      port.write(up);
      fill(0);
      rect(315, 165, 50, 50);//上
   
    } else if (keyCode == DOWN) {
      port.write(down);
      fill(0);
      rect(315, 265, 50, 50);//下
      
    } else if (keyCode == LEFT) {
      port.write(left);
      fill(0);
      rect(265, 215, 50, 50);//左
      
    } else if (keyCode == RIGHT) {
      port.write(right);
      fill(0);
      rect(365, 215, 50, 50);//右
      
    }
} else {
    stop();
}

//普通键盘编码事件
//按键a为小球逆时针旋转,按键d为小球顺时针旋转
if(keyPressed){
    if (key == 'a'){
      port.write(ACW);//逆时针自转
    }else if (key == 'd'){
      port.write(CW);//顺时针自转
    }
}else{
    stop();
}
}

//默认停止
void stop(){
port.write(stop);
    fill(255, 255, 255);
    rect(315, 165, 50, 50);//上
    rect(265, 215, 50, 50);//左
    rect(365, 215, 50, 50);//右
    rect(315, 265, 50, 50);//下
}
如↑图,按键盘方向键为上-前进、下-后退、左-左转、右-右转、松开为停止https://v.youku.com/v_show/id_XMjcxOTY2MDg1Ng==.html
抱歉没有逗猫视频了
有个不好的消息就是小黄喵走丢了,五一放假回家的时候已经走丢1个月了,这个4月我的心情也不怎么好,猫丢了我更伤心,所以没有逗猫视频了,也不知道接下来要做些什么,想静下来学自己想学的,提高技术才能做更好玩的东西
https://v.youku.com/v_show/id_XMjczNzY3Mjg2MA==
帖子其实4月份就写好了,但只放了在个人站,之后也有一些人加我好友来与我一起交流了,费点劲搭个人站做主站分享还是挺不错的,好了现在发到其它地方一起玩吧!

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

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


static/image/hrline/5.gifstatic/image/hrline/5.gif
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

建模好碉啊{:5_148:}

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貌似也能起到作用,还未实验{:5_161:}

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
心灵手巧外加有爱心,一枚棒棒哒铲屎官

{:5_190:}嗯嗯,做一只玩玩吧!

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 供电.就好啦.而且电池建议充满.

谢谢回复~
页: [1] 2 3
查看完整版本: 宠物互动--逗宠萌物(程序有更新20170728)