22862浏览
查看: 22862|回复: 12

[教程] 风火轮机器人の组装及上手介绍~

[复制链接]

号外!号外!风火轮机器人套件正式上线啦,可猛戳下面的链接:
https://www.dfrobot.com.cn/goods-1344.html



今天带来的是风火轮机器人的组装及上手教程哦!在没有指导的情况下组装这个机器人还是比较困难的,大家可以参考我今天的介绍~
一、组装
首先我们需要准备的材料有:
1.用于组装本体的模型~

风火轮机器人の组装及上手介绍~图1

2.两个直流电机~
风火轮机器人の组装及上手介绍~图2

3.Romeo BLE mini控制器和一组螺丝~风火轮机器人の组装及上手介绍~图3

4.十字型螺丝刀一枚~

风火轮机器人の组装及上手介绍~图4

5.电池盒一枚和4节7号电池~
风火轮机器人の组装及上手介绍~图5

接下来就动手组装:
第一步:组装内壳;
从模板上取下如下四块板子并组装,如下所示:

风火轮机器人の组装及上手介绍~图6

完成图:
风火轮机器人の组装及上手介绍~图7风火轮机器人の组装及上手介绍~图8风火轮机器人の组装及上手介绍~图9

第二步:组装控制板支撑板;
如下图所示:

风火轮机器人の组装及上手介绍~图10风火轮机器人の组装及上手介绍~图11

第三步:组装电池盒支撑板;
如下图所示:

风火轮机器人の组装及上手介绍~图12

注意不要与插销搞混:
风火轮机器人の组装及上手介绍~图13

第四步:组装电机并固定;
将两个电机装进内壳并把电机轴固定在合适位置,插入插销,如下:

风火轮机器人の组装及上手介绍~图14

旋转插销夹紧两个电机至完全固定:
风火轮机器人の组装及上手介绍~图15风火轮机器人の组装及上手介绍~图16

第五步:组装控制板并与电机连线;
使用螺丝固定控制板在支撑板上并连接电机的电源线:

风火轮机器人の组装及上手介绍~图17

控制板的电源线接口如图:
风火轮机器人の组装及上手介绍~图32
风火轮机器人の组装及上手介绍~图30

第六步:组装电池盒并连至控制板;
风火轮机器人の组装及上手介绍~图18

第七步:组装轮子;
先组装两个垫片:

风火轮机器人の组装及上手介绍~图19

装上轮子并使用垫圈和螺丝拧紧:
注意:旋转轮子确保轮子转动不受阻挡!
风火轮机器人の组装及上手介绍~图20

两边轮子都装好就基本上完成啦:
风火轮机器人の组装及上手介绍~图21

正式的组装说明书已经上线啦!可以戳帖子最后的链接下载~



二、调试
在调试上我们需要使用以下材料:
1.手机端APP:“走你”/“GoBLE”
(目前仅支持iOS系统,即iPhone/iPad,可在App Store中免费下载)
下载地址:https://itunes.apple.com/cn/app/ ... qi/id950937437?mt=8
2.Arduino IDE
官网下载地址:https://www.arduino.cc/en/Main/Software/

选择Windows installer下载安装
风火轮机器人の组装及上手介绍~图31

第一步:安装GoBLE和Romeo.m库文件
因为在示例程序中需要调用已有的库函数,所以我们需要首先在Arduino的库中添加GoBLE(手机蓝牙通信App)和Romeo BLE mini板子的库文件。
库文件下载地址:
GoBLE 库函数;
Remeo 库函数;

GoBLE库文件安装方法:
首先打开下载文件并解压,找到library文件夹并打开,复制其中三个文件夹:

风火轮机器人の组装及上手介绍~图22

找到Arduino安装目录,找到libraries文件夹,将上述三个文件夹复制到这个文件夹下:
风火轮机器人の组装及上手介绍~图23

Remeo库文件安装方法:
打开下载文件并解压,直接复制在Arduino安装目录下libraries文件夹下:

风火轮机器人の组装及上手介绍~图24
如此,两个库文件即安装完成。

第二步:下载示例程序,用Arduino IDE打开,如下:
/* -----蓝牙两轮小车控制程序
  1. //------2016.6.29 by LL
  2. //------适用于Romeo BLE mini 控制器
  3. //https://www.dfrobot.com.cn/goods-1182.html
  4. #include "GoBLE.h"
  5. #include <Romeo_m.h>
  6. #define LED 13
  7. int joystickX, joystickY;   
  8. int buttonState[7];
  9. unsigned int led_count;
  10. void setup() {
  11.   Romeo_m.Initialise();
  12.   Goble.begin();
  13.   pinMode(LED,OUTPUT);
  14. }
  15. void loop() {
  16.   
  17. if (Goble.available())
  18. {
  19.       readGoBle();
  20.       motorContrl();
  21.   }
  22.   delayLedBlink();//delay 10ms and led blink
  23. }
  24. //读取GoBle所有按键摇杆值
  25. void readGoBle()
  26. {
  27.     // read joystick value when there's valid command from bluetooth
  28.     joystickX = Goble.readJoystickX();
  29.     joystickY = Goble.readJoystickY();
  30.     // read button state when there's valid command from bluetooth
  31.     buttonState[SWITCH_UP]     = Goble.readSwitchUp();
  32.     buttonState[SWITCH_DOWN]   = Goble.readSwitchDown();
  33.     buttonState[SWITCH_LEFT]   = Goble.readSwitchLeft();
  34.     buttonState[SWITCH_RIGHT]  = Goble.readSwitchRight();
  35.     buttonState[SWITCH_SELECT] = Goble.readSwitchSelect();
  36.     buttonState[SWITCH_START]  = Goble.readSwitchStart();
  37. }
  38. //根据GoBle按键值进行小车运动控制
  39. //摇杆左右为转大弯,按键左右为原地转弯
  40. void motorContrl()
  41. {
  42.     if ((buttonState[SWITCH_UP] == PRESSED)||((joystickX>128)&&(joystickY>=64)&&(joystickY<=192)))
  43.     {
  44.       Romeo_m.motorControl(Reverse,200,Forward,200);//前进
  45.       return;//结束子函数
  46.     }
  47.   
  48.     if ((buttonState[SWITCH_DOWN] == PRESSED)||((joystickX<128)&&(joystickY>=64)&&(joystickY<=192)))
  49.    {
  50.      Romeo_m.motorControl(Forward,150,Reverse,150);//后退
  51.      return;//结束子函数
  52.    }
  53.    
  54.     if(buttonState[SWITCH_LEFT] == PRESSED)
  55.     {
  56.         Romeo_m.motorControl(Forward,100,Forward,100);//左转
  57.         return;//结束子函数
  58.     }
  59.    
  60.     if((joystickY<128 )&&(joystickX>=64 )&&( joystickX<=192) )
  61.    {
  62.      
  63.        Romeo_m.motorControl_M1(Reverse,80);//左转大弯
  64.        Romeo_m.motorControl_M2(Forward,200);
  65.       
  66.         return;//结束子函数
  67.    }
  68.    
  69.     if( buttonState[SWITCH_RIGHT] == PRESSED)
  70.     {
  71.         Romeo_m.motorControl(Reverse,100,Reverse,100);//右转
  72.         return;//结束子函数
  73.     }
  74.    
  75.     if((joystickY>128)&&(joystickX>=64)&&(joystickX<=192))
  76.     {
  77.       
  78.         Romeo_m.motorControl_M2(Forward,80); //右转大弯
  79.         Romeo_m.motorControl_M1(Reverse,200);
  80.   
  81.         return;//结束子函数
  82.     }
  83.    
  84.     Romeo_m.motorStop();//没有按键按下则停止
  85. }
  86. //led blink函数,每次执行延时10ms,100次时执行一次电平反向
  87. void delayLedBlink()
  88. {
  89.     delay(10);
  90.     led_count++;
  91.     if(led_count>100)
  92.     {   
  93.       digitalWrite(LED,!digitalRead(LED));
  94.       led_count=0;
  95.     }
  96. }
复制代码


程序简要解析:
  1. #include "GoBLE.h"
  2. #include <Romeo_m.h>
复制代码
这段调用两个头文件,以便直接调用其中的库函数;定义LED灯引脚。
  1. void setup() {
  2.   Romeo_m.Initialise();
  3.   Goble.begin();
  4.   pinMode(LED,OUTPUT);
  5. }
复制代码
程序初始化;
  1. void loop() {
  2.   if (Goble.available())
  3.   {
  4.     readGoBle();
  5.     motorContrl();
  6.   }
  7.   delayLedBlink();//delay 10ms and led blink
  8. }
复制代码
程序主体分两个函数,一是主要用于读取GoBLE中按键摇杆值的函数readGoBle(),另一个是进行小车控制的函数motorContrl(),并且添加了一个控制Led灯延时闪烁的程序;
  1. void readGoBle()
  2. {
  3.   // read joystick value when there's valid command from bluetooth
  4.   joystickX = Goble.readJoystickX();
  5.   joystickY = Goble.readJoystickY();
  6.   // read button state when there's valid command from bluetooth
  7.   buttonState[SWITCH_UP] = Goble.readSwitchUp();
  8.   buttonState[SWITCH_DOWN] = Goble.readSwitchDown();
  9.   buttonState[SWITCH_LEFT] = Goble.readSwitchLeft();
  10.   buttonState[SWITCH_RIGHT] = Goble.readSwitchRight();
  11.   buttonState[SWITCH_SELECT] = Goble.readSwitchSelect();
  12.   buttonState[SWITCH_START] = Goble.readSwitchStart();
  13. }
复制代码
readGoBle()中库函数Goble.readJoystickX()和Goble.readJoystickY()分别读取摇杆的X轴和Y轴的值,Goble.readSwitchXXXX()则分别读取按键值。
  1. void motorContrl()
  2. {
  3.   if ((buttonState[SWITCH_UP] == PRESSED)||((joystickX>128)&&(joystickY>=64)&&(joystickY<=192)))
  4.   {
  5.     Romeo_m.motorControl(Reverse,200,Forward,200);//前进
  6.     return;//结束子函数
  7.   }
  8.   if ((buttonState[SWITCH_DOWN] == PRESSED)||((joystickX<128)&&(joystickY>=64)&&(joystickY<=192)))
  9.   {
  10.     Romeo_m.motorControl(Forward,150,Reverse,150);//后退
  11.     return;//结束子函数
  12.   }
  13.   if(buttonState[SWITCH_LEFT] == PRESSED)
  14.   {
  15.     Romeo_m.motorControl(Forward,100,Forward,100);//左转
  16.     return;//结束子函数
  17.   }
  18.   if((joystickY<128 )&&(joystickX>=64 )&&( joystickX<=192) )
  19.   {
  20.     Romeo_m.motorControl_M1(Reverse,80);//左转大弯
  21.     Romeo_m.motorControl_M2(Forward,200);
  22.     return;//结束子函数
  23.   }
  24.   if( buttonState[SWITCH_RIGHT] == PRESSED)
  25.   {
  26.     Romeo_m.motorControl(Reverse,100,Reverse,100);//右转
  27.     return;//结束子函数
  28.   }
  29.   if((joystickY>128)&&(joystickX>=64)&&(joystickX<=192))
  30.   {
  31.     Romeo_m.motorControl_M2(Forward,80); //右转大弯
  32.     Romeo_m.motorControl_M1(Reverse,200);
  33.     return;//结束子函数
  34.   }
复制代码
motorContrl()中主要是根据按键和摇杆的状态值控制小车进行相应的运动;


其中控制小车运动的库函数的格式如下:
Romeo_m.motorControl(a,b,c,d); 其中a和c为方向值,分别对应Forward和Reverse,亦即前进和后退,c和d分别为两个电机的速度大小,数值越高,转速越快;
Remeo_m.motorControl_Mx(a,b); 其中x为电机值,分别为1和2,a是方向值,对应Forward和Reverse,b是转速值。



注意:控制小车前进时两个电机的转动方向相反,为什么?答案就在于我们的电机安装方向相反,所以要让两个轮子转动方向相同,则两个电机的转动方向应该相反。

  1. void delayLedBlink()
  2. {
  3.   delay(10);
  4.   led_count++;
  5.   if(led_count>100)
  6.   {
  7.     digitalWrite(LED,!digitalRead(LED));
  8.     led_count=0;
  9.   }
复制代码
这个函数用于延时,并且控制LED闪烁。

第三步,打开Arduino下载程序。
在工具栏中选择开发板型号为Arduino/Genuino Uno,并选择正确的端口号,调试并下载程序。

风火轮机器人の组装及上手介绍~图25

风火轮机器人の组装及上手介绍~图26



第四步:打开手机App进行调试
首先打开手机App GoBLE(“中文版为‘走你’”),如下所示:

风火轮机器人の组装及上手介绍~图27

下载好程序并给小车通电后,打开手机蓝牙,点击红色搜索按钮,搜索单片机的蓝牙信号,如下所示:
风火轮机器人の组装及上手介绍~图29

点击正确型号的单片机蓝牙并连接,连接成功后搜索按钮会变成绿色,如下:

风火轮机器人の组装及上手介绍~图28

此时就可以通过虚拟按键和摇杆控制小车啦。分别试试各个按键和摇杆看看它们的作用吧~

v0.1版本功能特性
1、电机驱动
2、手机蓝牙控制
V0.2版本
1、优化运动控制(起步停止匀加速匀减速)
2、增加避障功能




号外!号外!风火轮机器人套件正式上线啦,可猛戳下面的链接:
https://www.dfrobot.com.cn/goods-1344.html






GoBle-master.rar

9.85 KB, 下载次数: 229

ROMEO_M.rar

1.61 KB, 下载次数: 198

Code_V0.1.rar

1.19 KB, 下载次数: 249

风火轮组装说明书.pdf

1.75 MB, 下载次数: 211

bonnie_loulou  学徒

发表于 2016-8-8 21:34:46

请教:将程序上传时,提示上传项目出错,信息如下:

可能是什么原因呀?

项目使用了 4,960 字节,占用了 (15%) 程序存储空间。最大为 32,256 字节。
全局变量使用了428字节,(20%)的动态内存,余留1,620字节局部变量。最大为2,048字节。
C:\Program Files\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\louhl\AppData\Local\Temp\build3329dcf4596b554ca79ebbd930833f56.tmp/car.ino.hex:i
上传项目出错
回复

使用道具 举报

dsweiliang  初级技神

发表于 2016-7-13 12:25:00

这是极简平衡车么
回复

使用道具 举报

Eric_X  初级技师
 楼主|

发表于 2016-7-14 11:46:49

dsweiliang 发表于 2016-7-13 12:25
这是极简平衡车么

算是吧XD,加上电池后重心保持在轮轴下,但是启动会有加速度会导致小车前进不稳,所以后面会考虑线性增速启动。
回复

使用道具 举报

drink  中级技师

发表于 2016-7-15 17:52:51

套件有销售了吗?
回复

使用道具 举报

FBI-C  中级技师

发表于 2016-7-18 16:27:29

本帖最后由 FBI-C 于 2016-7-18 16:28 编辑
drink 发表于 2016-7-15 17:52
套件有销售了吗?

套件有的,现正在筹备官网上线,线下已经开始销售了,有购买需求的,请联系我们。
回复

使用道具 举报

lauren  高级技师

发表于 2016-7-25 13:13:21

极简设计,确实很吊
回复

使用道具 举报

凌风清羽  中级技匠

发表于 2016-7-26 08:08:05

这不属于平衡车吧~~
回复

使用道具 举报

yoyojacky  初级技匠

发表于 2016-7-27 17:50:17

好玩儿,就喜欢这种,小巧的
回复

使用道具 举报

hejie13250  见习技师

发表于 2016-7-28 08:41:30

不错,不错,可以试试!多谢楼主
回复

使用道具 举报

DFSkangKjBr  中级技师

发表于 2019-9-4 08:54:59

学习学习,谢谢分享。
回复

使用道具 举报

小企鹅  初级技匠

发表于 2022-3-17 18:19:12

厉害厉害
回复

使用道具 举报

小企鹅  初级技匠

发表于 2022-3-17 18:20:16

6666666666
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail