“乐高遥控小车”的版本间的差异
(→程序说明) |
|||
第87行: | 第87行: | ||
− | + | {| style="width: 1000px;" | |
− | * | + | |- |
− | <source lang="cpp"> | + | | |
− | #define | + | ==概述== |
+ | *项目名称:开源电驱机器小车CUBE | ||
+ | *目的:做一个Cube机器人小车 | ||
+ | **可以使用Joypad遥控 | ||
+ | **也可以支持蓝牙APP遥控 | ||
+ | *难度:中级 | ||
+ | *耗时:2小时 | ||
+ | *制作者:@老潘 | ||
+ | |||
+ | ==材料清单== | ||
+ | {| border="0" cellpadding="10" width="100%" | ||
+ | |- | ||
+ | |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" | ||
+ | |- | ||
+ | |模块||数量||功能 | ||
+ | |- | ||
+ | |[[Microduino-Core/zh]]||1||核心模块 | ||
+ | |- | ||
+ | |[[Microduino-USBTTL/zh]]||1||下载模块 | ||
+ | |- | ||
+ | |[[Microduino-Module BLE/zh]]||1||通讯模块 | ||
+ | |- | ||
+ | |[[Microduino-Shield Robot/zh]]||1||驱动底板 | ||
+ | |} | ||
+ | |||
+ | |width="33%" valign="top" align="left"| | ||
+ | |||
+ | ===其他材料=== | ||
+ | {|class="wikitable" | ||
+ | |- | ||
+ | |部件||数量||功能 | ||
+ | |- | ||
+ | |机器小车机架||1||车体 | ||
+ | |- | ||
+ | |螺丝||8||固定 | ||
+ | |- | ||
+ | |螺母||8||固定 | ||
+ | |- | ||
+ | |Micro-USB数据线||1||下载程序 | ||
+ | |- | ||
+ | |47mm车轮+电机固定座||2||车轮 | ||
+ | |- | ||
+ | |N20直流减速电机||2||驱动车轮 | ||
+ | |- | ||
+ | |3.7v锂电池||1||供电 | ||
+ | |} | ||
+ | |} | ||
+ | |||
+ | [[File:Boxz物料.jpg||900px|center]] | ||
+ | |||
+ | ==实验原理== | ||
+ | *机器人小车种类比较多,如循迹,壁障,蓝牙遥控小车,电脑鼠等,不同功能需要采用不同传感器。 | ||
+ | *但是其行走控制方式基本是一样的,无非就是前后左右四个方向运动。 | ||
+ | |||
+ | *本次我们主要使用两轮驱动的结构,通过控制两个轮子的旋转方向,实现前进后退,旋转等功能,当然还要加上辅助轮,这样才能保持平衡。 | ||
+ | *该小车结构简单,主要包括三个方面:车轮、车身、控制系统。 | ||
+ | **1)车轮采用两个减速电机,扭力大,可PWM调速,控制简单。 | ||
+ | **2)车身采用木板,大小:8cm*8cm*8cm。 | ||
+ | **3)整个控制系统包括四个部分: | ||
+ | |||
+ | *中央处理器 | ||
+ | **采用'''[[Microduino-Core/zh]]'''作为核心,就像电脑的CPU,人的大脑,有一定思维能力,能够处理复杂事件。 | ||
+ | *无线通讯 | ||
+ | **Joypad模式下采用'''[[Microduino-Module nRF/zh]]'''无线通讯方案,通讯速度响应快,控制范围:空阔地域大约50米。 | ||
+ | **蓝牙模式下采用'''[[Microduino-Module BLE/zh]]'''无线通讯方案,配合手机APP直接控制,控制范围:空阔地域大约20米。 | ||
+ | *电机控制 | ||
+ | **采用'''[[Microduino-Shield Robot/zh]]'''上自带的一组直流电机驱动单元,一个单元能够驱动两个电机。 | ||
+ | *供电系统 | ||
+ | **采用'''[[Microduino-Shield Robot/zh]]'''上自带的单节锂电池管理单元,管理充放电功能。 | ||
+ | |||
+ | ==程序下载== | ||
+ | *Cube 机器人代码:'''[https://github.com/Microduino/Robot_Microduino Robot_Microduino]''' | ||
+ | |||
+ | ==程序烧写== | ||
+ | *将'''[[Microduino-Core/zh]]'''、'''[[Microduino-USBTTL/zh]]'''堆叠在一起。 | ||
+ | **用数据线连接其中的'''[[Microduino-USBTTL/zh]]'''准备上传程序。 | ||
+ | **注意:最好不要将所有模块堆叠在一起之后再上传程序 | ||
+ | *打开Arduino IDE for Microduino,环境,(搭建参考:'''[[AVR核心:Getting started/zh]]''') | ||
+ | *点击'''【工具】''',确认'''板卡(Microduino-Core)处理器(Atmega328P@16M,5V)'''选择无误,并选中对应'''端口号(COMX)''' | ||
+ | *点击'''【文件】'''->'''【打开】''',浏览到项目程序地址,点击'''“Robot_Microduino.ino”'''程序打开 | ||
+ | *几项都无误后,点击'''"→"'''按钮下载程序到开发板上 | ||
+ | |||
+ | ==拼装过程== | ||
+ | {| border="0" cellpadding="10" width="100%" | ||
+ | |- | ||
+ | |width="50%" valign="top" align="left"| | ||
+ | |||
+ | *'''Step1''': | ||
+ | *利用'''电机固定座'''将两个作为动力的'''N20减速电机'''固定在'''结构-A1'''上 | ||
+ | *将'''车轮'''、'''轮胎'''、'''联轴器'''组装后与固定后的'''N20减速电机'''进行装配 | ||
+ | |||
+ | |||
+ | |width="50%" valign="top" align="left"| | ||
+ | |||
+ | [[File:Cubestep1.jpg||535px|center]] | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| border="0" cellpadding="10" width="100%" | ||
+ | |- | ||
+ | |width="50%" valign="top" align="left"| | ||
+ | |||
+ | *'''Step2''': | ||
+ | *将'''结构-A2'''垂直插入'''结构-A1'''两边的凹进结构 | ||
+ | *用两个'''结构-A4'''将'''辅助轮'''从底部固定在'''结构-A3'''上 | ||
+ | *再如图示将'''结构-A3'''和'''结构-B1'''从上到下依次准备好 | ||
+ | |||
+ | |||
+ | |width="50%" valign="top" align="left"| | ||
+ | |||
+ | [[File:Cubestep2.jpg||535px|center]] | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| border="0" cellpadding="10" width="100%" | ||
+ | |- | ||
+ | |width="50%" valign="top" align="left"| | ||
+ | |||
+ | *'''Step3''': | ||
+ | *将'''结构-B2'''和'''结构-C1'''分别用于两侧面固定 | ||
+ | |||
+ | |width="50%" valign="top" align="left"| | ||
+ | |||
+ | [[File:Cubestep3.jpg||535px|center]] | ||
+ | |||
+ | |} | ||
+ | |||
+ | |||
+ | {| border="0" cellpadding="10" width="100%" | ||
+ | |- | ||
+ | |width="50%" valign="top" align="left"| | ||
+ | |||
+ | *'''Step4''': | ||
+ | *将以下模块堆叠在'''[[Microduino-Shield Robot/zh]]'''底板上 | ||
+ | **核心模块:'''[[Microduino-Core/zh]]'''模块 | ||
+ | **通讯模块: | ||
+ | ***Joypad模式下,通讯模块为'''[[Microduino-Module nRF/zh]]'''('''注意先安装天线''') | ||
+ | ***蓝牙模式下,通讯模块为'''[[Microduino-Module BLE/zh]]''' | ||
+ | *将'''电池'''连接在'''[[Microduino-Shield Robot/zh]]'''底板的'''电池接口''' | ||
+ | *将两个'''N20减速电机'''分别连在'''[[Microduino-Shield Robot/zh]]'''底板的'''电机接口A.A/A.B'''上 | ||
+ | *使用螺丝将'''[[Microduino-Shield Robot/zh]]'''底板固定在'''结构-B1'''上 | ||
+ | |||
+ | |width="50%" valign="top" align="left"| | ||
+ | |||
+ | [[File:Cubestep4.jpg||535px|center]] | ||
+ | |||
+ | |} | ||
+ | |||
+ | {| border="0" cellpadding="10" width="100%" | ||
+ | |- | ||
+ | |width="50%" valign="top" align="left"| | ||
+ | |||
+ | *'''Step5''': | ||
+ | *用两个'''结构-C3'''将'''辅助轮'''从底部固定在'''结构-C2'''上 | ||
+ | *将'''结构-C2'''拼接在正侧面 | ||
+ | |||
+ | |width="50%" valign="top" align="left"| | ||
+ | |||
+ | [[File:Cubestep5.jpg||535px|center]] | ||
+ | |||
+ | |} | ||
+ | |||
+ | |||
+ | {| border="0" cellpadding="10" width="100%" | ||
+ | |- | ||
+ | |width="50%" valign="top" align="left"| | ||
+ | *'''Step6''': | ||
+ | *将'''结构-D2'''拼接在后侧面,可利用天线背面贴纸将天线贴在任意位置 | ||
+ | *将'''结构-D1'''作为顶面盖住,安装到此完成 | ||
+ | |||
+ | |width="50%" valign="top" align="left"| | ||
+ | |||
+ | [[File:Cubestep6.jpg||535px|center]] | ||
+ | |||
+ | |} | ||
+ | |||
+ | ==操作说明== | ||
+ | *'''如果堆叠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]]''' | ||
+ | *确定手机版本号是Android 4.3以上,确定当前蓝牙功能已打开 | ||
+ | *搜索到名为'''“Microduino”'''的蓝牙设备进行连接 | ||
+ | *接下来就可以通过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> | </source> | ||
− | |||
− | |||
− | |||
− | |||
− | #define | + | |
+ | *以下代码可以配置油门和转向对应通道 | ||
+ | *对应通道说明可参考:[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> | </source> | ||
− | * | + | |
− | + | *以下代码可以修正两轮的转速比例 | |
− | + | **值得范围是-1到1之间 | |
− | + | **设置成-1,是最大转速比反转 | |
− | * | + | **设置成1,是最大转速比正转, |
− | + | **如果小车不能走直线,应该将较慢的一边轮子的转速比例值降低 | |
− | + | <source lang = "cpp"> | |
− | + | #define motor_fixL 1 //速度修正 -1到1之间 | |
− | * | + | #define motor_fixR 1 //速度修正 -1到1之间 |
− | <source lang="cpp"> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</source> | </source> | ||
− | == | + | ==疑难解答/FAQ== |
− | * | + | *Q:'''CUBE小车如何选择Joypad模式和蓝牙模式?''' |
− | + | **A:不用手动选择,如果堆叠nRF模块开机,默认会进入Joypad遥控模式,否则进入蓝牙模式。 | |
− | + | ||
+ | *Q:'''CUBE小车支持哪些电池?''' | ||
+ | **A:CUBE支持3.7v 1S锂电池。 | ||
− | + | *Q:'''CUBE小车的电机怎么接?''' | |
− | * | + | **A:两个电机分别接在电机接口A.A/A.B上即可。 |
− | |||
− | |||
− | |||
− | * | ||
− | |||
− | |||
− | |||
− | + | *Q:'''我的手机支持蓝牙遥控吗?''' | |
− | * | + | **A:只要是Android 4.3以上,都可以支持。 |
− | |||
− | |||
− | |||
− | * | ||
− | |||
− | * | ||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} |
2016年4月25日 (一) 06:16的版本
Language | English |
---|
目录目的通过mCookieLEGOShield,使mCookie可以控制NXT接口的电机和传感器。 原理通过手机端的mTank软件发送指令,叠加在mCookie的蓝牙模块接收并解析指令 通过IIC通讯,mCookie控制LEGOShield,完成对NXT接口电机和传感器的控制 设备
准备
程序说明#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);
}
|