|
|
(未显示同一用户的6个中间版本) |
第5行: |
第5行: |
| | | |
| | | |
− | ==原理==
| |
− | 通过手机端的mTank软件发送指令,叠加在mCookie的蓝牙模块接收并解析指令
| |
− | 通过IIC通讯,mCookie控制LEGOShield,完成对NXT接口电机和传感器的控制
| |
− |
| |
− | ==设备==
| |
− | {|class="wikitable"
| |
− | |-
| |
− | |模块||数量||功能
| |
− | |-
| |
− | |[[MCookie-CoreUSB/zh]]||1||核心板
| |
− | |-
| |
− | |[[MCookie-LEGOShield/zh]]||1||乐高底板
| |
− | |-
| |
− | |[[MCookie-BT/zh]]||1||蓝牙模块
| |
− | |}
| |
− |
| |
− |
| |
− | {| style="width: 1000px;"
| |
− | |-
| |
− | |
| |
| ==概述== | | ==概述== |
| *项目名称:乐高蓝牙遥控小车 | | *项目名称:乐高蓝牙遥控小车 |
第37行: |
第17行: |
| |width="33%" valign="top" align="left"| | | |width="33%" valign="top" align="left"| |
| | | |
− | ===模块清单 (Joypad模式)=== | + | ===模块清单 === |
− | {|class="wikitable"
| |
− | |-
| |
− | |模块||数量||功能
| |
− | |-
| |
− | |[[Microduino-Core/zh]]||2||核心模块
| |
− | |-
| |
− | |[[Microduino-USBTTL/zh]]||1||下载模块
| |
− | |-
| |
− | |[[Microduino-Module nRF/zh]]||2||通讯模块
| |
− | |-
| |
− | |[[Microduino-Module TFT/zh]]||1||显示模块
| |
− | |-
| |
− | |[[Microduino-Shield Joypad/zh]]||1||遥控底板
| |
− | |-
| |
− | |[[Microduino-Shield Robot/zh]]||1||驱动底板
| |
− | |}
| |
− | | |
− | |width="33%" valign="top" align="left"|
| |
− | | |
− | ===模块清单 (蓝牙模式)===
| |
| {|class="wikitable" | | {|class="wikitable" |
| |- | | |- |
| |模块||数量||功能 | | |模块||数量||功能 |
| |- | | |- |
− | |[[Microduino-Core/zh]]||1||核心模块 | + | |[[MCookie-CoreUSB/zh]]||1||核心模块 |
| |- | | |- |
− | |[[Microduino-USBTTL/zh]]||1||下载模块 | + | |[[MCookie-BT/zh]]||1||通讯模块 |
| |- | | |- |
− | |[[Microduino-Module BLE/zh]]||1||通讯模块 | + | |[[MCookie-LEGOShield/zh]]||1||乐高驱动底板 |
− | |-
| |
− | |[[Microduino-Shield Robot/zh]]||1||驱动底板
| |
| |} | | |} |
| | | |
第78行: |
第36行: |
| |部件||数量||功能 | | |部件||数量||功能 |
| |- | | |- |
− | |机器小车机架||1||车体 | + | |NXT接口电机||2||驱动车轮 |
| |- | | |- |
− | |螺丝||8||固定 | + | |NXT连接线||2||连接电机与底板 |
| |- | | |- |
− | |螺母||8||固定 | + | |LEGO积木结构件||若干||搭建小车结构 |
| |- | | |- |
| |Micro-USB数据线||1||下载程序 | | |Micro-USB数据线||1||下载程序 |
| |- | | |- |
− | |47mm车轮+电机固定座||2||车轮 | + | |7.4v锂电池||1||供电 |
− | |-
| |
− | |N20直流减速电机||2||驱动车轮
| |
− | |-
| |
− | |3.7v锂电池||1||供电
| |
| |} | | |} |
| |} | | |} |
第102行: |
第56行: |
| *本次我们主要使用两轮驱动的结构,通过控制两个轮子的旋转方向,实现前进后退,旋转等功能,当然还要加上辅助轮,这样才能保持平衡。 | | *本次我们主要使用两轮驱动的结构,通过控制两个轮子的旋转方向,实现前进后退,旋转等功能,当然还要加上辅助轮,这样才能保持平衡。 |
| *该小车结构简单,主要包括三个方面:车轮、车身、控制系统。 | | *该小车结构简单,主要包括三个方面:车轮、车身、控制系统。 |
− | **1)车轮采用两个减速电机,扭力大,可PWM调速,控制简单。 | + | **1)车轮采用两个NXT接口电机。 |
− | **2)车身采用木板,大小:8cm*8cm*8cm。 | + | **2)车身采用乐高积木堆叠而成。 |
| **3)整个控制系统包括四个部分: | | **3)整个控制系统包括四个部分: |
| | | |
| *中央处理器 | | *中央处理器 |
− | **采用'''[[Microduino-Core/zh]]'''作为核心,就像电脑的CPU,人的大脑,有一定思维能力,能够处理复杂事件。 | + | **采用'''[[MCookie-CoreUSB/zh]]'''作为核心,就像电脑的CPU,人的大脑,有一定思维能力,能够处理复杂事件。 |
| *无线通讯 | | *无线通讯 |
− | **Joypad模式下采用'''[[Microduino-Module nRF/zh]]'''无线通讯方案,通讯速度响应快,控制范围:空阔地域大约50米。 | + | **采用'''[[MCookie-BT/zh]]'''无线通讯方案,配合手机APP直接控制,控制范围:空阔地域大约20米。 |
− | **蓝牙模式下采用'''[[Microduino-Module BLE/zh]]'''无线通讯方案,配合手机APP直接控制,控制范围:空阔地域大约20米。
| |
| *电机控制 | | *电机控制 |
− | **采用'''[[Microduino-Shield Robot/zh]]'''上自带的一组直流电机驱动单元,一个单元能够驱动两个电机。 | + | **采用'''[[MCookie-LEGOShield/zh]]'''上自带的一组直流电机驱动单元,一个单元能够驱动两个电机,电机接口兼容乐高NXT接口。 |
| *供电系统 | | *供电系统 |
− | **采用'''[[Microduino-Shield Robot/zh]]'''上自带的单节锂电池管理单元,管理充放电功能。 | + | **采用'''[[MCookie-LEGOShield/zh]]'''上自带的锂电池管理单元,驱动电机以及MCU。 |
| | | |
| ==程序下载== | | ==程序下载== |
− | *Cube 机器人代码:'''[https://github.com/Microduino/Robot_Microduino Robot_Microduino]''' | + | *乐高遥控小车代码:'''[xxxxx]''' |
| | | |
| ==程序烧写== | | ==程序烧写== |
− | *将'''[[Microduino-Core/zh]]'''、'''[[Microduino-USBTTL/zh]]'''堆叠在一起。 | + | *用数据线连接'''[[MCookie-CoreUSB/zh]]'''准备上传程序。 |
− | **用数据线连接其中的'''[[Microduino-USBTTL/zh]]'''准备上传程序。
| + | **注意:最好不要将所有模块堆叠在乐高底板之后再上传程序 |
− | **注意:最好不要将所有模块堆叠在一起之后再上传程序 | |
| *打开Arduino IDE for Microduino,环境,(搭建参考:'''[[AVR核心:Getting started/zh]]''') | | *打开Arduino IDE for Microduino,环境,(搭建参考:'''[[AVR核心:Getting started/zh]]''') |
− | *点击'''【工具】''',确认'''板卡(Microduino-Core)处理器(Atmega328P@16M,5V)'''选择无误,并选中对应'''端口号(COMX)''' | + | *点击'''【工具】''',确认'''板卡(Microduino/MCookie-Core USB)处理器(USB)'''选择无误,并选中对应'''端口号(COMX)''' |
− | *点击'''【文件】'''->'''【打开】''',浏览到项目程序地址,点击'''“Robot_Microduino.ino”'''程序打开 | + | *点击'''【文件】'''->'''【打开】''',浏览到项目程序地址,点击'''“LEGO_Bluetooth_Car.ino”'''程序打开 |
| *几项都无误后,点击'''"→"'''按钮下载程序到开发板上 | | *几项都无误后,点击'''"→"'''按钮下载程序到开发板上 |
| | | |
第179行: |
第131行: |
| | | |
| *'''Step4''': | | *'''Step4''': |
− | *将以下模块堆叠在'''[[Microduino-Shield Robot/zh]]'''底板上 | + | *将以下模块堆叠在'''[[MCookie-LEGOShield/zh]]'''底板上 |
− | **核心模块:'''[[Microduino-Core/zh]]'''模块 | + | **核心模块:'''[[MCookie-CoreUSB/zh]]'''模块 |
− | **通讯模块: | + | **通讯模块:''"[[MCookie-BT/zh]]'''模块 |
− | ***Joypad模式下,通讯模块为'''[[Microduino-Module nRF/zh]]'''('''注意先安装天线''')
| + | *将'''电池'''连接在'''[[MCookie-LEGOShield/zh]]'''底板的'''电池接口''' |
− | ***蓝牙模式下,通讯模块为'''[[Microduino-Module BLE/zh]]'''
| + | *将两个'''NXT电机'''通过""NXT连接线""分别连在'''[[MCookie-LEGOShield/zh]]'''底板的'''电机接口S3和S4'''上 |
− | *将'''电池'''连接在'''[[Microduino-Shield Robot/zh]]'''底板的'''电池接口''' | |
− | *将两个'''N20减速电机'''分别连在'''[[Microduino-Shield Robot/zh]]'''底板的'''电机接口A.A/A.B'''上 | |
− | *使用螺丝将'''[[Microduino-Shield Robot/zh]]'''底板固定在'''结构-B1'''上
| |
| | | |
| |width="50%" valign="top" align="left"| | | |width="50%" valign="top" align="left"| |
第223行: |
第172行: |
| | | |
| ==操作说明== | | ==操作说明== |
− | *'''如果堆叠nRF模块开机,默认会进入Joypad遥控模式,否则进入蓝牙模式'''
| |
− |
| |
− | ===Joypad遥控指南===
| |
− | *搭建过程可参考以下页面:'''[https://www.microduino.cn/wiki/index.php/Microduino-Joypad_Getting_start/zh Joypad使用指南]'''
| |
− |
| |
− | *'''Joypad通讯模式配置'''*
| |
− | *模式配置可参考以下页面:'''[https://www.microduino.cn/wiki/index.php/Microduino-Joypad_Getting_start/zh#.E9.80.9A.E8.AE.AF.E6.A8.A1.E5.BC.8F 通讯模式配置]'''
| |
− | **当我们使用'''[[Microduino-Module nRF/zh]]'''作为'''通讯模块'''时,Joypad对应选择'''nRF模式'''即可
| |
− |
| |
− | *'''Joypad电池使用说明'''*
| |
− | *特别要注意的是电池使用说明:'''[https://www.microduino.cn/wiki/index.php/Microduino-Joypad_Getting_start/zh#Step-3_.E7.94.B5.E6.B1.A0.E9.80.9A.E7.94.B5 电池使用说明]'''
| |
− |
| |
− |
| |
| ===蓝牙遥控指南=== | | ===蓝牙遥控指南=== |
| *首先下载蓝牙遥控APP(Android):'''[[File:MTank.rar|mTank.zip]]''' | | *首先下载蓝牙遥控APP(Android):'''[[File:MTank.rar|mTank.zip]]''' |
第241行: |
第177行: |
| *搜索到名为'''“Microduino”'''的蓝牙设备进行连接 | | *搜索到名为'''“Microduino”'''的蓝牙设备进行连接 |
| *接下来就可以通过APP进行遥控了 | | *接下来就可以通过APP进行遥控了 |
− |
| |
− | ==代码说明==
| |
− | *在“user_def.h”文件是我们的配置文件
| |
− | *以下代码可以配置nRF模式下通道,需要保证和Joypad遥控器一致
| |
− | *Joypad的nRF模式通道配置可参考:[https://www.microduino.cn/wiki/index.php/Microduino-Joypad_Getting_start/zh#nRF.E6.A8.A1.E5.BC.8F.E9.80.9A.E9.81.93.E9.85.8D.E7.BD.AE nRF模式通道配置]
| |
− | <source lang = "cpp">
| |
− | #define NRF_CHANNEL 70 //nRF通道
| |
− | </source>
| |
| | | |
− |
| |
− | *以下代码可以配置油门和转向对应通道
| |
− | *对应通道说明可参考:[https://www.microduino.cn/wiki/index.php/Microduino-Joypad_Getting_start/zh#Step-5_.E9.80.9A.E9.81.93.2F.E6.93.8D.E4.BD.9C.E8.AF.B4.E6.98.8E 通道/操作说明]
| |
− | <source lang = "cpp">
| |
− | #define CHANNEL_THROTTLE 2 //油门通道
| |
− | #define CHANNEL_STEERING 1 //转向通道
| |
− | </source>
| |
− |
| |
− |
| |
− | *以下代码可以修正两轮的转速比例
| |
− | **值得范围是-1到1之间
| |
− | **设置成-1,是最大转速比反转
| |
− | **设置成1,是最大转速比正转,
| |
− | **如果小车不能走直线,应该将较慢的一边轮子的转速比例值降低
| |
− | <source lang = "cpp">
| |
− | #define motor_fixL 1 //速度修正 -1到1之间
| |
− | #define motor_fixR 1 //速度修正 -1到1之间
| |
− | </source>
| |
| | | |
| ==疑难解答/FAQ== | | ==疑难解答/FAQ== |
− | *Q:'''CUBE小车如何选择Joypad模式和蓝牙模式?'''
| |
− | **A:不用手动选择,如果堆叠nRF模块开机,默认会进入Joypad遥控模式,否则进入蓝牙模式。
| |
| | | |
− | *Q:'''CUBE小车支持哪些电池?''' | + | *Q:'''乐高蓝牙小车支持哪些电池?''' |
− | **A:CUBE支持3.7v 1S锂电池。 | + | **A:乐高蓝牙小车支持7.4v 2S锂电池。 |
| | | |
− | *Q:'''CUBE小车的电机怎么接?''' | + | *Q:'''乐高蓝牙小车的电机怎么接?''' |
− | **A:两个电机分别接在电机接口A.A/A.B上即可。 | + | **A:两个电机分别接在电机接口S3、S4上即可(可以通过修改程序修改)。 |
| | | |
| *Q:'''我的手机支持蓝牙遥控吗?''' | | *Q:'''我的手机支持蓝牙遥控吗?''' |
第284行: |
第192行: |
| | | |
| |} | | |} |
− |
| |
− |
| |
− | ==程序说明==
| |
− |
| |
− | <source lang=cpp>
| |
− | #include <mCookieLEGO.h>
| |
− | #include <Microduino_Protocol_HardSer.h>
| |
− | #include "Wire.h"
| |
− |
| |
− |
| |
− | uint16_t Data[8];
| |
− | int speedLeft = 0;
| |
− | int speedRight = 0;
| |
− | Protocol ProtocolB(&Serial1, TYPE_NUM);
| |
− | mCookieLEGO m;
| |
− |
| |
− | void setup(){
| |
− | Wire.begin();
| |
− | Serial.begin(9600);
| |
− |
| |
− | ProtocolB.begin(9600); //9600/19200/38400
| |
− | m.configSensorType(mCookieLEGO::S1, mCookieLEGO::SENSOR_ULTRA);
| |
− | m.configConnection(0xFFFF);
| |
− | }
| |
− | uint8_t dis;
| |
− |
| |
− | void loop(){
| |
− | int sta = ProtocolB.parse(Data, MODE_WHILE);
| |
− | if (sta != P_NONE) {
| |
− | switch (sta) {
| |
− | case P_FINE:
| |
− | speedLeft = map(Data[1], 1000, 2000, -255, 255);
| |
− | speedRight = speedLeft;
| |
− | int speedTurn = map(Data[4], 1000, 2000, -255, 255);
| |
− | if(speedTurn < 0){
| |
− | speedLeft += speedTurn;
| |
− | }
| |
− | else{
| |
− | speedRight -= speedTurn;
| |
− | }
| |
− | break;
| |
− | // default:
| |
− | // break;
| |
− | }
| |
− | }
| |
− | refreshSpeed();
| |
− | delay(10);
| |
− | }
| |
− |
| |
− | void refreshSpeed{
| |
− | m.motor_setFixedDrive(mCookieLEGO::M3, speedLeft);
| |
− | m.motor_setFixedDrive(mCookieLEGO::M4, speedRight);
| |
− | }
| |
− |
| |
− |
| |
− | </source>
| |