宠物互动--逗宠萌物(程序有更新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轴孔再也不会打滑啦 沙发!6666666最喜欢这种逗小动物的了
这种操控方向,是不是和实际运动方向相反?
另外电机驱动一般会要求有两个电源,一个是逻辑供电,另一个是电机供电。这样设计是有道理的,如果用相同的供电口,当电机工作时,可能会抽取大量的电流,然后导致主控没电,就失控了。 Grey 发表于 2017-5-17 18:44
沙发!6666666最喜欢这种逗小动物的了
这种操控方向,是不是和实际运动方向相反?
调试好电机转向就不会反方向了!话说我以前用的电机驱动板都是一个电源输入的,L298N和L9110这些,尴尬了.... gehhxing 发表于 2017-6-15 01:12
大神,我按照你的教程做了一套,调试过程中蓝牙模块变得供电不足了,这个问题你遇到过吗? ...
电源供在蓝牙上,然后引出的线再给 arduino 供电.就好啦.而且电池建议充满. 电机上加个大电容就好啦 建模好碉啊{:5_148:} 好奇吖斌 发表于 2017-5-17 22:04
调试好电机转向就不会反方向了!话说我以前用的电机驱动板都是一个电源输入的,L298N和L9110这些,尴尬了 ...
不用在意细节~ yoyojacky 发表于 2017-5-18 08:14
电机上加个大电容就好啦
好,学习了! 楼主好棒!!! 舵机电机方面之前也遇到过不少坑,多个舵机瞬间启动导致板子复位,除了电容之外,最近发现一个NCP380貌似也能起到作用,还未实验{:5_161:} 尼玛,透明外壳移动看着好像滑板学的感觉 其实我一直在纠结外面那个透明的球。谢谢楼主分享 楼主好牛!学习了 楼主牛逼,向你学习 心灵手巧外加有爱心,一枚棒棒哒铲屎官:lol kevinzhang19701 发表于 2017-5-22 16:33
心灵手巧外加有爱心,一枚棒棒哒铲屎官
{:5_190:}嗯嗯,做一只玩玩吧! 如果有stl文件更好啦 yoyojacky 发表于 2017-5-29 11:24
如果有stl文件更好啦
有啊,打印件有sw源文件和stl文件的 yoyojacky 发表于 2017-5-18 08:14
电机上加个大电容就好啦
请教一下,大概需要加多大的电容呢 大神,我按照你的教程做了一套,调试过程中蓝牙模块变得供电不足了,这个问题你遇到过吗? yoyojacky 发表于 2017-6-22 19:32
电源供在蓝牙上,然后引出的线再给 arduino 供电.就好啦.而且电池建议充满.
谢谢回复~