
1. 产品简介
mini control module 是一款迷你手柄控制模块,采用I2C总线控制,具有(X,Y)两轴模拟量输出,(A、B、C、D)4路开关量控制,不占用模拟口和数字口。模块小巧精致,应用场景丰富,并且支持Mind+、MakeCode、Arduino IDE 等多种编程环境。
2. 应用场景
- **微型游戏手柄:**Mind+实时模式角色控制、小车电机转速与方向控制
- **微型操纵台:**机械臂控制、舵机转动角度控制
- **屏幕交互输入接口:**作为输入设备控制屏幕显示
3. 技术规格
- **工作电压:**3.3-5V
- **接口类型:**Gravity I2C 4PIN
- **摇杆模拟量:**2轴模拟量输出(X,Y),模拟量范围:0-1023
- **按键开关量:**4路开关量控制(A、B、C、D)
- **产品尺寸:**62mm*27mm
4. 基于MakeCode编程
本章节已经默认你会使用MakeCode编程平台。故主要介绍mini control Module本身的功能和编程方法,所以MakeCode基础使用部分不做赘述。
4.1 平台链接及程序库
- MakeCode编程平台:https://makecode.microbit.org
- mini control module库链接:https://github.com/DFRobot/pxt-DFRobot_mini_control_module
- 麦昆库链接:https://github.com/DFRobot/pxt-maqueen
- HUSKYLENS库链接:https://github.com/DFRobot/pxt-DFRobot_HuskyLens
4.2 图案切换
硬件准备
- IO扩展板 ×1
- micro:bit v2 ×1
- mini controlmodule ×1
程序功能
使用mini control module的按键控制micro:bit显示箭头图案,如:按下按键A,显示向上的箭头;按下按键B,显示向下的箭头;按下按键C,显示向右的箭头;按下按键D,显示向右的箭头。
程序截图
程序链接:https://makecode.microbit.org/_0bD49Eg5rMRr
注意:按下按键时,按键状态为1,反之为0。
效果展示
运行程序,当mini control module 初始化成功后,micro:bit点阵屏上会显示“√”。按下对应的按键,micro:bit点阵屏上就会显示对应的箭头。
注意:mini control module初始化成功后micro:bit会显示“√”,初始化失败micro:bit会显示“×”。
4.3 获取摇杆模拟值
硬件准备
- IO扩展板 ×1
- micro:bit v2 ×1
- mini controlmodule ×1
程序功能
利用串口打印工具,将摇杆(X,Y)的模拟值打印出来。
注意:如果没有串口打印工具,可以借助micro:bit点阵屏显示摇杆的模拟值。
程序截图
程序链接:https://makecode.microbit.org/_JbMW9LKhURwz
效果展示
当mini control module 初始化成功后,micro:bit点阵屏上会显示“√”,拨动摇杆,可以在串口助手就可以查看对应的模拟值。
4.4 麦昆装载机遥控手柄
硬件准备
- 麦昆装载机 ×1
- IO扩展板 ×1
- micro:bit v2 ×2
- mini controlmodule ×1
程序功能
使用无线通讯的方式,让迷你手柄的摇杆控制麦昆装载机前进、后退、左转、右转,并将摇杆Y的模拟值转换成装载机的行驶速度;按键A、B分别控制装载机车斗上翻、下翻;按键C、D控制小车的RGB灯。
程序截图
mini手柄控制端程序:https://makecode.microbit.org/_Mwvi19eMod5m
麦昆装载机端程序:https://makecode.microbit.org/_VFb2b5Hvjics
效果展示
4.5 HUSKYLENS算法切换
硬件准备
- HUSKYLENS ×1
- micro:bit v2 ×1
- mini control module ×1
程序功能
过A、B、C、D四个按键,控制HUSKYLENS的进行不同的功能切换,按键A—人脸识别;按键B—物体追踪;按键C—物体识别;按键D—标签识别;再使用摇杆控制HUSKYLENS屏幕上的箭头上下左右移动。
程序截图
程序链接:https://makecode.microbit.org/_h2vKiLXjMCEk
效果展示
4.6 舵机控制台
- 舵机 ×2
- mini control module ×1
程序功能
通过mini control module的摇杆和按键分别控制两个舵机,摇杆控制舵机1的角度,将摇杆X轴的模拟值(0-1023)映射成舵机的角度(10-170);按键控制舵机2的角度,按下按键A舵机角度增加,按下按键B舵机角度减小。
程序截图
程序链接:https://makecode.microbit.org/_Whc0qmJRcdpd
效果展示:
下载程序后使用USB给IO扩展板供电,如图所示:
5. 基于Arduino IDE编程
- mini control module 压缩文件:DFRobot_MINI_CONTROL-main.zip
5.1 如何加载库
先把上面的库文件压缩包从网站上下载下来,整个压缩包解压到Arduino IDE的libraries文件夹中。
5.2 摇杆模拟值获取
硬件准备:
- Arduino UNO ×1
- Arduino 扩展板 ×1
- mini control module ×1
程序功能:
将获取到的摇杆X、Y轴的模拟值通过串口打印出来。
程序示例:
#include "DFRobot_MINI_CONTROL.h"
DFRobot_MINI_CONTROL control;
uint16_t scanX = 0;
uint16_t scanY = 0;
//扫描mini control module上面的控制信息
void scanC(){
scanX = control.readX();
scanY = control.readY();
}
void setup() {
Serial.begin(9600); // start serial for output
//模块初始化
control.begin();
Serial.println("mini control module I2C init successful.");
}
void loop() {
scanC();
//当摇杆运动时打印摇杆 X方向的AD值
if(scanX < 480 || scanX > 530){
Serial.print("X:");
Serial.println(scanX);
}
//当摇杆运动时打印摇杆 Y方向的AD值
if(scanY < 480 || scanY > 530){
Serial.print("Y:");
Serial.println(scanY);
}
delay(100);
}
效果展示:
运行程序,打开串口,串口窗口打印出获取到的摇杆(X,Y)模拟值打印出来。
注意:当摇杆处于中间位置的时候,也会有对应的模拟值输出,样例程序中使用了if()语句将中间值进行了处理,所以当摇杆处于中间位置时没有模拟值输出。
5.3 获取按键状态值
硬件准备:
- Arduino UNO ×1
- Arduino 扩展板 ×1
- mini control module ×1
程序功能:
如果有按键按下,就将按下按键的名称(A、B、C、D)打印出来。
程序示例:
#include "DFRobot_MINI_CONTROL.h"
DFRobot_MINI_CONTROL control;
uint8_t A, B, C, D;
//扫描mini control module上面的控制信息
void scanC(){
control.readBtnABCD(&A, &B, &C, &D);
}
void setup() {
Serial.begin(9600); // start serial for output
//模块初始化
control.begin();
Serial.println("mini control module I2C init successful.");
}
void loop() {
scanC();
//当按钮B被按下
if(B == 1){
Serial.println("B=1");
}
//当按钮A被按下
if(A == 1){
Serial.println("A=1");
}
//当按钮C被按下
if(C == 1){
Serial.println("C=1");
}
//当按钮D被按下
if(D == 1){
Serial.println("D=1");
}
delay(200);
}
效果展示:
运行程序,按下按键A,打印A=1;按下按键B,打印B=1;按下按键C,打印C=1;按下按键D,打印D=1。
5.4 舵机云台控制
硬件准备:
- Arduino UNO ×1
- Arduino 扩展板 ×1
- 舵机 ×2
- mini control module ×1
程序功能:
使用mini control module的摇杆,控制云台的两个舵机,X轴的模拟值控制云台的方向,Y轴模拟值控制云台的高度。
程序示例:
#include "DFRobot_MINI_CONTROL.h"
#include <Servo.h>
DFRobot_MINI_CONTROL control;
Servo myservo1; // 定义Servo对象来控制
Servo myservo2;
int pos1 = 90; // 角度存储变量
int pos2 = 90;
uint16_t scanX = 0;
uint16_t scanY = 0;
//扫描mini control module上面的控制信息
void scanC(){
scanX = control.readX();
scanY = control.readY();
}
void setup() {
Serial.begin(9600); // start serial for output
//模块初始化
control.begin();
myservo1.attach(9); // 控制线连接数字9
myservo2.attach(10);
}
void loop() {
scanC();
pos1=map(scanX,0,1023,10,170); //将获取摇杆的X值映射成舵机的角度
myservo1.write(pos1);
pos2=map(scanY,0,1023,10,170);
myservo2.write(pos2);
delay(100);
}
效果展示:
使用摇杆的X、Y值分别控制舵机,两个舵机可以通过摇杆同时控制。
6. 基于Mind+编程
原理图
[DFR0855]mini control module原理图.pdf
常见问题
更多问题及有趣的应用,请访问论坛