设为首页收藏本站

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

Eric_X 发表于 2016-7-12 17:29:49 | 显示全部楼层 [复制链接]
9 2576
本帖最后由 Eric_X 于 2016-11-17 23:41 编辑


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



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

1.jpg

2.两个直流电机~
2.jpg

3.Romeo BLE mini控制器和一组螺丝~ 3.jpg

4.十字型螺丝刀一枚~

4.jpg

5.电池盒一枚和4节7号电池~
5.jpg

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

9.jpg

完成图:
6.jpg 7.jpg 8.jpg

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

10.jpg 11.jpg

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

12.jpg

注意不要与插销搞混:
13.jpg

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

14.jpg

旋转插销夹紧两个电机至完全固定:
15.jpg 16.jpg

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

21_1.jpg

控制板的电源线接口如图:
885944497.jpg
30.jpg

第六步:组装电池盒并连至控制板;
23.jpg

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

17.jpg

装上轮子并使用垫圈和螺丝拧紧:
注意:旋转轮子确保轮子转动不受阻挡!
18.jpg

两边轮子都装好就基本上完成啦:
25.jpg

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



二、调试
在调试上我们需要使用以下材料:
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下载安装
2.PNG

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

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

1.PNG

找到Arduino安装目录,找到libraries文件夹,将上述三个文件夹复制到这个文件夹下:
2.PNG

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

3.PNG
如此,两个库文件即安装完成。

第二步:下载示例程序,用Arduino IDE打开,如下:
/* -----蓝牙两轮小车控制程序
  1. //------2016.6.29 by LL
  2. //------适用于Romeo BLE mini 控制器
  3. //http://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,并选择正确的端口号,调试并下载程序。

5.png

4.PNG



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

26.jpg

下载好程序并给小车通电后,打开手机蓝牙,点击红色搜索按钮,搜索单片机的蓝牙信号,如下所示:
28.jpg

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

29.jpg

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

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




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






GoBle-master.rar

9.85 KB, 下载次数: 18, 下载积分: 创造力 -1

ROMEO_M.rar

1.61 KB, 下载次数: 16, 下载积分: 创造力 -1

Code_V0.1.rar

1.19 KB, 下载次数: 29, 下载积分: 创造力 -1

风火轮组装说明书.pdf

1.75 MB, 下载次数: 4, 下载积分: 创造力 -1

发表于 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
上传项目出错
回复 支持 1 反对 0

使用道具 举报

发表于 2016-7-13 12:25:00 | 显示全部楼层
这是极简平衡车么
回复 支持 反对

使用道具 举报

发表于 2016-7-14 11:46:49 | 显示全部楼层
dsweiliang 发表于 2016-7-13 12:25
这是极简平衡车么

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

使用道具 举报

发表于 2016-7-15 17:52:51 | 显示全部楼层
套件有销售了吗?
回复 支持 反对

使用道具 举报

发表于 2016-7-18 16:27:29 | 显示全部楼层
本帖最后由 FBI-C 于 2016-7-18 16:28 编辑
drink 发表于 2016-7-15 17:52
套件有销售了吗?

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

使用道具 举报

发表于 2016-7-25 13:13:21 | 显示全部楼层
极简设计,确实很吊
回复 支持 反对

使用道具 举报

发表于 2016-7-26 08:08:05 | 显示全部楼层
这不属于平衡车吧~~
回复 支持 反对

使用道具 举报

发表于 2016-7-27 17:50:17 | 显示全部楼层
好玩儿,就喜欢这种,小巧的
回复 支持 反对

使用道具 举报

发表于 2016-7-28 08:41:30 | 显示全部楼层
不错,不错,可以试试!多谢楼主
回复 支持 反对

使用道具 举报

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

本版积分规则 允许回帖同步到新浪微博  

  • 初级技师
  • 303
  • 4

推荐阅读

精华导读




公司简介| 联系我们| 加入我们| 微博| 优酷| 英文网站| DF创客社区 ( 沪ICP备09038501号-4  
友情链接| 硬创邦| 花生壳社区| 模友之吧| 云汉电子社区| 创客星球| 电子发烧友社区| 电子工程网| 与非网|

上海智位机器人有限公司  沪ICP备09038501号-4   

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表