乐高遥控小车

来自Microduino Wikipedia
Cai_Niao讨论 | 贡献2016年4月25日 (一) 06:21的版本
跳转至: 导航搜索
Language English


原理

通过手机端的mTank软件发送指令,叠加在mCookie的蓝牙模块接收并解析指令 通过IIC通讯,mCookie控制LEGOShield,完成对NXT接口电机和传感器的控制

设备

模块 数量 功能
MCookie-CoreUSB/zh 1 核心板
MCookie-LEGOShield/zh 1 乐高底板
MCookie-BT/zh 1 蓝牙模块


概述

  • 项目名称:乐高蓝牙遥控小车
  • 目的:通过mCookieLEGOShield,使用mCookie控制NXT接口的电机和传感器制作一个遥控小车。
  • 也可以支持蓝牙APP遥控
  • 难度:中级
  • 耗时:5小时

材料清单

模块清单

模块 数量 功能
MCookie-CoreUSB/zh 1 核心模块
MCookie-BT/zh 1 通讯模块
MCookie-LEGOShield/zh 1 乐高驱动底板

其他材料

部件 数量 功能
机器小车机架 1 车体
螺丝 8 固定
螺母 8 固定
Micro-USB数据线 1 下载程序
47mm车轮+电机固定座 2 车轮
N20直流减速电机 2 驱动车轮
3.7v锂电池 1 供电

实验原理

  • 机器人小车种类比较多,如循迹,壁障,蓝牙遥控小车,电脑鼠等,不同功能需要采用不同传感器。
  • 但是其行走控制方式基本是一样的,无非就是前后左右四个方向运动。
  • 本次我们主要使用两轮驱动的结构,通过控制两个轮子的旋转方向,实现前进后退,旋转等功能,当然还要加上辅助轮,这样才能保持平衡。
  • 该小车结构简单,主要包括三个方面:车轮、车身、控制系统。
    • 1)车轮采用两个减速电机,扭力大,可PWM调速,控制简单。
    • 2)车身采用木板,大小:8cm*8cm*8cm。
    • 3)整个控制系统包括四个部分:
  • 中央处理器
    • 采用Microduino-Core/zh作为核心,就像电脑的CPU,人的大脑,有一定思维能力,能够处理复杂事件。
  • 无线通讯
    • Joypad模式下采用Microduino-Module nRF/zh无线通讯方案,通讯速度响应快,控制范围:空阔地域大约50米。
    • 蓝牙模式下采用Microduino-Module BLE/zh无线通讯方案,配合手机APP直接控制,控制范围:空阔地域大约20米。
  • 电机控制
  • 供电系统

程序下载

程序烧写

  • Microduino-Core/zhMicroduino-USBTTL/zh堆叠在一起。
    • 用数据线连接其中的Microduino-USBTTL/zh准备上传程序。
    • 注意:最好不要将所有模块堆叠在一起之后再上传程序
  • 打开Arduino IDE for Microduino,环境,(搭建参考:AVR核心:Getting started/zh
  • 点击【工具】,确认板卡(Microduino-Core)处理器(Atmega328P@16M,5V)选择无误,并选中对应端口号(COMX)
  • 点击【文件】->【打开】,浏览到项目程序地址,点击“Robot_Microduino.ino”程序打开
  • 几项都无误后,点击"→"按钮下载程序到开发板上

拼装过程

  • Step1:
  • 利用电机固定座将两个作为动力的N20减速电机固定在结构-A1
  • 车轮轮胎联轴器组装后与固定后的N20减速电机进行装配


  • Step2:
  • 结构-A2垂直插入结构-A1两边的凹进结构
  • 用两个结构-A4辅助轮从底部固定在结构-A3
  • 再如图示将结构-A3结构-B1从上到下依次准备好


  • Step3:
  • 结构-B2结构-C1分别用于两侧面固定


  • Step5:
  • 用两个结构-C3辅助轮从底部固定在结构-C2
  • 结构-C2拼接在正侧面


  • Step6:
  • 结构-D2拼接在后侧面,可利用天线背面贴纸将天线贴在任意位置
  • 结构-D1作为顶面盖住,安装到此完成

操作说明

  • 如果堆叠nRF模块开机,默认会进入Joypad遥控模式,否则进入蓝牙模式

Joypad遥控指南


蓝牙遥控指南

  • 首先下载蓝牙遥控APP(Android):mTank.zip
  • 确定手机版本号是Android 4.3以上,确定当前蓝牙功能已打开
  • 搜索到名为“Microduino”的蓝牙设备进行连接
  • 接下来就可以通过APP进行遥控了

代码说明

  • 在“user_def.h”文件是我们的配置文件
  • 以下代码可以配置nRF模式下通道,需要保证和Joypad遥控器一致
  • Joypad的nRF模式通道配置可参考:nRF模式通道配置
#define NRF_CHANNEL 70  //nRF通道


  • 以下代码可以配置油门和转向对应通道
  • 对应通道说明可参考:通道/操作说明
#define CHANNEL_THROTTLE  2 //油门通道
#define CHANNEL_STEERING  1 //转向通道


  • 以下代码可以修正两轮的转速比例
    • 值得范围是-1到1之间
    • 设置成-1,是最大转速比反转
    • 设置成1,是最大转速比正转,
    • 如果小车不能走直线,应该将较慢的一边轮子的转速比例值降低
#define motor_fixL 1  //速度修正 -1到1之间
#define motor_fixR 1  //速度修正 -1到1之间

疑难解答/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以上,都可以支持。



程序说明

#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);
}