概述
- 项目名称:乐高蓝牙遥控小车
- 目的:通过mCookieLEGOShield,使用mCookie控制NXT接口的电机和传感器制作一个遥控小车。
- 也可以支持蓝牙APP遥控
- 难度:中级
- 耗时:5小时
材料清单
模块清单
|
其他材料
部件 |
数量 |
功能
|
NXT接口电机 |
2 |
驱动车轮
|
NXT连接线 |
2 |
连接电机与底板
|
LEGO积木结构件 |
若干 |
搭建小车结构
|
Micro-USB数据线 |
1 |
下载程序
|
7.4v锂电池 |
1 |
供电
|
|
实验原理
- 机器人小车种类比较多,如循迹,壁障,蓝牙遥控小车,电脑鼠等,不同功能需要采用不同传感器。
- 但是其行走控制方式基本是一样的,无非就是前后左右四个方向运动。
- 本次我们主要使用两轮驱动的结构,通过控制两个轮子的旋转方向,实现前进后退,旋转等功能,当然还要加上辅助轮,这样才能保持平衡。
- 该小车结构简单,主要包括三个方面:车轮、车身、控制系统。
- 1)车轮采用两个NXT接口电机。
- 2)车身采用乐高积木堆叠而成。
- 3)整个控制系统包括四个部分:
程序下载
程序烧写
- 用数据线连接MCookie-CoreUSB/zh准备上传程序。
- 注意:最好不要将所有模块堆叠在乐高底板之后再上传程序
- 打开Arduino IDE for Microduino,环境,(搭建参考:AVR核心:Getting started/zh)
- 点击【工具】,确认板卡(Microduino/MCookie-Core USB)处理器(USB)选择无误,并选中对应端口号(COMX)
- 点击【文件】->【打开】,浏览到项目程序地址,点击“LEGO_Bluetooth_Car.ino”程序打开
- 几项都无误后,点击"→"按钮下载程序到开发板上
拼装过程
- Step1:
- 利用电机固定座将两个作为动力的N20减速电机固定在结构-A1上
- 将车轮、轮胎、联轴器组装后与固定后的N20减速电机进行装配
|
|
- Step2:
- 将结构-A2垂直插入结构-A1两边的凹进结构
- 用两个结构-A4将辅助轮从底部固定在结构-A3上
- 再如图示将结构-A3和结构-B1从上到下依次准备好
|
|
- Step3:
- 将结构-B2和结构-C1分别用于两侧面固定
|
|
- Step5:
- 用两个结构-C3将辅助轮从底部固定在结构-C2上
- 将结构-C2拼接在正侧面
|
|
- Step6:
- 将结构-D2拼接在后侧面,可利用天线背面贴纸将天线贴在任意位置
- 将结构-D1作为顶面盖住,安装到此完成
|
|
操作说明
蓝牙遥控指南
- 首先下载蓝牙遥控APP(Android):mTank.zip
- 确定手机版本号是Android 4.3以上,确定当前蓝牙功能已打开
- 搜索到名为“Microduino”的蓝牙设备进行连接
- 接下来就可以通过APP进行遥控了
疑难解答/FAQ
- Q:乐高蓝牙小车的电机怎么接?
- A:两个电机分别接在电机接口S3、S4上即可(可以通过修改程序修改)。
- Q:我的手机支持蓝牙遥控吗?
- A:只要是Android 4.3以上,都可以支持。
|
- 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[2], 1000, 2000, -255, 255);
if(speedTurn < 0){
speedLeft += speedTurn;
}
else{
speedRight -= speedTurn;
}
refreshSpeed();
break;
// default:
// break;
}
}
delay(10);
}
void refreshSpeed(){
m.motor_setFixedDrive(mCookieLEGO::M3, speedLeft);
m.motor_setFixedDrive(mCookieLEGO::M4, speedRight);
Serial.print("Left: ");
Serial.print(speedLeft);
Serial.print(" Right: ");
Serial.println(speedRight);
}