个人简介
- **姓名:**MAX
- **年龄:**8岁
- **性别:**男孩
- **家族:**探索者家族
- **性格:**活泼、开朗、好动
- **爱好:**探险、编程、音乐
- **喜欢的颜色:**红色、橙色、蓝色
- **装备:**铝合金机身、Arduino内核主板、单总线接口、带补光巡线传感器、超声波光敏二合一传感器、声音传感器、彩色表情面板、高品质音效模块、蓝牙通信、RGB灯×4。
- **可扩展装备:**金属舵机、金属顶盖、数字口传感器、模拟口传感器......
- **技能:**巡线机器人、避障机器人、光控机器人、声控机器人、竞赛机器人、跳舞机器人、灭火机器人、 Scratch图形化编程、ArduinoIDE编程......
- **个性签名:**探索机器人的奥秘!
- 重要更新:MAX全新支持Scratch图形化编程,基于Scratch3.0的mind+平台,请点击链接下载最新版本:http://mindplus.cc
技术规格
- **工作电压 :**3.7V至6V(4节5号干电池或3.7V锂电池)
- **包装尺寸 :**长230mm×宽180mm×高135mm
- **组装好的尺寸:**长170mm×宽143mm×高110mm
- **接口类型 :**B型USB口
- **持续使用时间:**大于2小时(因电池类型、测试环境等因素,实际使用时间可能有出入)
- **通信方式 :**USB、蓝牙4.0
- **处理器 :**ATMEGA328P
- **开发平台 :**ArduinoIDE mind+
零配件清单
功能及配置总览
重要更新!Scratch图形化编程
重要更新:MAX全新支持Scratch图形化编程,基于Scratch3.0的mind+平台
点击链接,火速下载mind+最新版本:https://mindplus.cc
教程在本网页后面,请往下翻。
上手指南
第一步:参考说明书组装MAX
中文版说明书
点击下载:中文版安装说明书PDF版本
英文版说明书
点击下载:英文版安装说明书PDF版本
视频教程
点击观看:开箱安装视频教程
组装好的MAX:
第二步:玩MAX出厂内置4种程序
到下方的出厂固件中下载MAX的出厂程序
连线示意图:
操作示例图:
超声波避障
使用方法:
①确认连线都已正确连接
②然后装上四节5号电池
③打开电源开关,主板RGB灯显示红色转动
④将MAX放在地上,MAX如果遇到前方30cm左右有障碍物,就会转弯往另外一边行驶
点击观看:视频演示
红外巡线
红外巡线:
红外巡线使用步骤:
使用方法:
①拿出附带的巡线地图,平铺在地板上
②打开电源开关,按一次功能按键,主板顶部灯显示绿色转动
③然后把MAX放到黑线上,MAX就会跟着黑线行驶
点击观看:视频演示
光敏追光
光敏:
光敏追光使用步骤:
使用方法:
①打开电源,按两次功能按键,RGB灯显示蓝色转动,就是切换到了光敏追光模式
②打开手机的手电筒功能,对着超声波旁边的光敏传感器照射,MAX就会跟着光线强的一方行驶
点击观看:视频演示
蓝牙遥控
蓝牙控制使用步骤goble
扫描二维码下载goble
使用方法:
①在苹果应用商店搜索或者扫描旁边的二维码下载“走你”蓝牙遥控程序
②打开电源,按三次功能按键,主板4个RGB灯显示4种颜色,就会切换到蓝牙模式
③将手机靠近MAX,蓝牙将会自动连接,连接成功后,MAX的主板LINK灯会亮,软件里面的蓝牙标识会变成绿色
④操作右侧的方向按键,MAX就会前后左右行驶了
点击观看:视频演示
第三步:准备学编程
编程前的准备工作
当我们打开MAX的电源开关,通过按功能按键切换,就可以实现巡线、避障、追光、蓝牙控制等功能....那这些神奇的功能是怎样实现的呢?从现在开始,我们就会逐一为你讲解机器人的程序控制。在学习开始之前,我们需要做一些准备工作。
请准备好以下工具
1、组装好的探索者MAX机器人一台,如下图。
探索者MAX
2、PC电脑一台及A-B型USB数据线一条,如下图。
PC电脑和USB数据线
下载和安装Arduino IDE软件
1.下载Arduino IDE
打开网页输入网址Arduino IDE
进入到页面后,找到如下图所示部分。
Windows用户:点击下载Windows(ZIP file)
Mac,Linux用户:选择相应的系统。
下载完成后,解压文件:
把整个Arduino 1.6.12文件夹放到你电脑熟悉的位置,便于你之后查找。打开Arduino 1.6.12文件夹,就是如下图的看到内容。
2.安装驱动
把USB一端插到MAX的主板上,另一端连到电脑。连接成功后,MAX板的红色电源指示灯ON亮起。然后,打开控制面板,选择设备管理器如下图。
找到其它设备>Arduino-xx,右击选择更新驱动程序软件。如下图
在弹出的对话框中选择下面一项 -->手动查找并安装驱动程序软件。如下图
打开到Arduino IDE安装位置,就是上面那个解压文件的位置,选择搜索路径到drivers(如下图),点击下一步。
选择始终安装此驱动程序软件(如图1),出现图2,说明驱动安装成功。
始终安装此驱动程序
已安装
这时查看设备管理器端口会显示一个串口号(如下图)。
显示串口号
3、更改界面语言
打开Arudino IDE,就会出现Arduino IDE的编辑界面(如下图),
更改语言编辑界面
一开始是英文的界面,如果你不习惯英文界面我们可以选择菜单栏File Preferences(如下图)。
更改语言编辑界面
然后选择Editor language简体中文(如下图),点击OK。再次重新打开Arduino IDE就是中文界面了。
更改成简体中文
下载及安装MAX运行库
1、点击下载库文件
2、将下载好的运行库解压后拷贝至ArduinoIDE安装包内的libraries文件夹内。
认识ArduinoIDE
Arduino IDE是Arduino产品的软件编辑环境。简单的说就是用来写代码,下载代码的地方。任何的Arduino产品都需要下载代码后才能运作。我们所搭建的硬件电路是辅助代码来完成的,两者是缺一不可的。如同人通过大脑来控制肢体活动是一个道理。如果代码就是大脑的话,外围硬件就是肢体,肢体的活动取决于大脑,所以硬件实现取决于代码。
arduino编辑界面
Arduino IDE需要用到的已经在上图标示出来了,上图大部分的白色区域就是代码的编辑区,用来输入代码的。注意,输入代码时,要切换到英文输入法的模式。下面黑色的区域是消息提示区,会显示编译或者下载是否通过。
让MAX动起来
在上个章节里,我们准备好了MAX机器人、WINDOWS电脑、USB数据线、下载和安装好了ArduinoIDE,以及简单的熟悉了ArduinoIDE的界面和操作方法。那接下来我们就上传一个简单的程序来进一步的学习ArduinoIDE的编译和下载程序到MAX,让MAX跑起来。
打开ArduinoIDE设置开发板和串口
1、点击图标,会打开如下图默认界面:
2、在下载程序之前,我们要先告诉Arduino IDE板子型号以及相应的串口。
Arduino包括多种版本的主控器,其中比较常见的是Uno、Leonardo以及Mega系列的控制器。在板子一栏,你需要根据自己选择的主控硬件的固件类型来选择板卡。(样例中选用Uno为MAX的控制器) 工具 > 开发板 > Arduino Uno。
3、工具 > 端口 > xx,这里的xx应选择和你的电脑设备管理器中看到的是一致。
编译并下载程序
1、将下面的代码输入到ArudinoIDE中(程序编写必须使用英文输入法,注意大小写)。
#include <DFRobot_MAX.h>
DFRobot_MAX myMax;
void setup() {
myMax.begin();
}
void loop() {
myMax.forward (150,150);
}
2、点击“验证”按钮编译程序下方会提示:编译完成(如下图1)。(如果有错误,程序将无法通过编译并提示错误(如下图2)。)
3、用USB线将MAX和电脑连接,如下图。
4、按 “上传”按钮将程序上传到MAX机器人。
启动MAX
1、确认左右两个电机接入了主板的电机口(如下图3和图4)。
2、为MAX安装好4节AA电池(或者锂电池)并打开电源开关(如下图5和图6)。
打开开关,我们就能看见向前奔跑的MAX啦!
开始学编程
MAX的行走路线
前情回顾: |
---|
在前面的上手指南中,我们已经对Arduino的下载和安装,程序的编译和下载有了简单的了解。
本章主要任务: |
---|
编写程序让MAX机器人的行驶路线为正方形。
本章学习内容: |
---|
- 程序主要分几个部分;
- 函数的定义;
- setup()函数和loop()函数;
- 注释的使用;
- 延时函数的使用;
点击下载本章教程的详细内容:MAX的行走路线
MAX的炫彩RGB灯
前情回顾: |
---|
在上个章节里,学习了注释的使用、函数的定义、setup()函数和loop()函数、以及延时函数的使用。
本章主要任务: |
---|
让MAX在行驶过程中,循环点亮4个RGB灯。
本章学习内容: |
---|
- 变量的定义;
- for循环语句的使用;
- RGB灯控制函数的使用;
点击下载本章教程的详细内容:MAX的炫彩RGB灯
使用按键点亮RGB灯
前情回顾: |
---|
在上个章节里,我们了解了什么是变量,如何使用for循环语句和RGB灯控制函数。
本章主要任务: |
---|
实现按一次按键,点亮MAX背上的1个RGB灯。
本章学习内容: |
---|
- 按键的原理;
- 如何使用if语句;
- “==”和“=”的区别;
点击下载本章教程的详细内容:使用按键点亮RGB灯
超声波测距
前情回顾: |
---|
在上个章节里,学习MAX的按键,if语句的使用。
本章主要任务: |
---|
使用超声波测距,用串口打印出距离数值。
本章学习内容: |
---|
- 介绍超声波测距的原理;
- 超声波测距函数的使用;
- 学习使用串口打印的函数;
- Serial.print()和Serial.println()的区别;
点击下载本章教程的详细内容:超声波测距
音效播放
前情回顾: |
---|
在上个章节里,学习了用超声波测距,并用串口打印出数值。
本章主要任务: |
---|
MAX在行驶的过程中,循环播放1到8号的音效和8号到1号音效。
本章学习内容: |
---|
- 内置音效的介绍;
- 播放音效函数的使用;
- while和do...while...语句的使用;
点击下载本章教程的详细内容:音效播放
七音符音乐小车
前情回顾: |
---|
在上个章节里,我们学习了音效函数的使用、16种内置音效和while、do...while...循环语句。
本章主要任务: |
---|
在110~40cm之间每个隔10cm播放一个音效,依次播放1~7号音效。
本章学习内容: |
---|
- 学习if...else if...else判断语句;
- 学习逻辑运算符;
点击下载本章教程的详细内容:七音符音乐小车
避障机器人
前情回顾: |
---|
在上个章节里,我们学习了逻辑运算符、if...else if...else的用法。利用了超声波测距的原理实现了七音符音乐小车的功能
本章主要任务: |
---|
当MAX遇到障碍物时,实现向右、向左、原地掉头等避障功能,同时RGBled灯会分别亮蓝色、紫红色等颜色。
本章学习内容: |
---|
- 随机函数random()的使用;
- myMax.swerve函数的使用;
- 学习switch...case语句;
- if、if...else if、switch...case语句的区别;
点击下载本章教程的详细内容:避障机器人
行走的表情包
前情回顾: |
---|
在上个章节里,我们学习了switch...case语句、random随机函数和myMax.swreve函数的使用
本章主要任务: |
---|
MAX在行驶的过程中随机显示不一样的表情。
本章学习内容: |
---|
- RGB表情板的介绍;
- myMax.showFace函数的使用;
- myMax.backward函数的使用;
点击下载本章教程的详细内容:行走的表情包
自定义表情板
前情回顾: |
---|
在上个章节里,我们学习了RGB表情板内置了23种表情和怎么使用myMax.showFace、myMax.backward函数
本章主要任务: |
---|
自己定义表情的图案和颜色。
本章学习内容: |
---|
- 学习表情板自定义的方法;
- 学习数组的用法;
- myMax.cusomFace函数的使用;
点击下载本章教程的详细内容:自定义表情板
MAX的小眼睛——光敏传感器
前情回顾: |
---|
在上个章节里,我们学习了用数组自定义表情板。
本章主要任务: |
---|
使用光敏传感器来控制MAX背面的两颗RGB灯亮,同时在串口监视器里查看左右两侧光敏的亮度值。
本章学习内容: |
---|
- 学习光敏传感器的原理;
- 学习怎么样用光敏传感器来控制RGB灯发光;
点击下载本章教程的详细内容:MAX的小眼睛——光敏传感器
追光机器人
前情回顾: |
---|
在上个章节里,我们学习了光敏传感器的原理以及怎样使用光敏传感器控制RGB灯发光。
本章主要任务: |
---|
做一个追光机器人,让MAX随着光线强的一方行驶。
本章学习内容: |
---|
如何设置光敏传感器的参数。
点击下载本章教程的详细内容:追光机器人
巡线机器人
前情回顾: |
---|
在上个章节里,我们学习了让MAX随着光线强的一方行驶的追光机器人。
本章主要任务: |
做一个巡线机器人,使用巡线传感器,让MAX跟着黑线行走。
本章学习内容: |
---|
- 学习巡线传感器的使用方法及原理;
- 巡线灯的函数使用;
- 巡线传感器函数的使用;
点击下载本章教程的详细内容:巡线机器人
蓝牙控制机器人
前情回顾: |
---|
在上个章节里,我们学习了巡线传感器和巡线灯函数的使用。
本章主要任务: |
---|
做一个蓝牙控制机器人,通过GoBLE软件(IOS版本)控制MAX前进,后退,左右转弯,原地旋转,停止等功能。
本章学习内容: |
---|
- 学习GoBLE软件的使用方法;
- 学习如何在代码中设置GoBLE;
- 学习GoBLE.available()串口函数;
点击下载本章教程的详细内容:蓝牙控制机器人
点击下载GoBLE库文件:GOBLE库文件
点击下载红外库文件:红外库文件
声控机器人
前情回顾: |
---|
在上个章节里,我们学习了如何使用GoBLE软件控制MAX的行走方式。
本章主要任务: |
---|
学习用声音传感器的原理及函数的使用,并用声音控制MAX前进、后退、右转、停止。
本章学习内容: |
---|
- 学习声音传感器的原理;
- 学习什么是子函数;
- 学习如何自定义子函数;
- 学习如何使用声音传感器的函数;
点击下载本章教程的详细内容:声控机器人
按键的拓展——功能切换
前情回顾: |
---|
在上个章节里,我们学习了声音传感器的原理及其函数的使用。
本章主要任务: |
---|
学习时间函数,利用按键切换追光、蓝牙控制、巡线灯功能。
本章学习内容: |
---|
- 学习什么是时间函数;
- 学习怎么用按键切换功能;
点击下载本章教程的详细内容:按键的拓展——功能切换
MAX趣味应用编程
超声波音乐机器人
/*
* @程序功能:超声波音乐小车
* @实验现象:MAX在行驶的过程中,根据前方障碍物的不同距离,会发出不同的音调。就像在弹奏音乐一样
* @author [liulihua](lihua.liu@dfrobot.com)
* @version V1.0
* @date 2017-11-22
*/
#include <DFRobot_MAX.h>
DFRobot_MAX myMax;
int u; //用于存放超声波距离值
int a[7]={1,1,1,1,1,1,1}; //用于给音乐播放做播放标志
void setup() {
myMax.begin(); //初始化MAX系统
myMax.forward(70,70); //程序开始就让MAX前进
}
void loop() {
u=myMax.distanceValue(); //读取超声波距离值
if(u < 120 && u > 100 && a[0] == 1 ){ //如果距离在1.2米到1米之间,播放1号音效,并且标志置0,其余置1
myMax.playSound(1);
a[0]=0; a[1]=1; a[2]=1; a[3]=1; a[4]=1; a[5]=1; a[6]=1;
}
if(u < 100 && u > 90 && a[1] == 1 ){ //如果距离在1米到0.9米之间,播放2号音效,并且标志置0.其余置1
myMax.playSound(2);
a[0]=1; a[1]=0; a[2]=1; a[3]=1; a[4]=1; a[5]=1; a[6]=1;
}
if(u < 90 && u > 80 && a[2] == 1 ){ //如果距离在0.9米到0.8米之间,播放3号音效,并且标志置0.其余置1
myMax.playSound(3);
a[0]=1; a[1]=1; a[2]=0; a[3]=1; a[4]=1; a[5]=1; a[6]=1;
}
if(u < 80 && u > 70 && a[3] == 1 ){ //后面和前面的方式一致
myMax.playSound(4);
a[0]=1; a[1]=1; a[2]=1; a[3]=0; a[4]=1; a[5]=1; a[6]=1;
}
if(u < 70 && u > 60 && a[4]== 1 ){
myMax.playSound(5);
a[0]=1; a[1]=1; a[2]=1; a[3]=1; a[4]=0; a[5]=1; a[6]=1;
}
if(u < 60 && u > 50 && a[5]== 1 ){
myMax.playSound(6);
a[0]=1; a[1]=1; a[2]=1; a[3]=1; a[4]=1; a[5]=0; a[6]=1;
}
if(u < 50 && a[6]== 1 ){
myMax.playSound(7);
a[0]=1; a[1]=1; a[2]=1; a[3]=1; a[4]=1; a[5]=1; a[6]=0;
}
}
点击观看:视频演示
声光密码锁机器人
/*
* @程序功能:声光密码小车(如击掌两次,然后照亮左侧光敏,再照亮右侧光敏解锁)
* @实验现象:利用声音传感器和两个光线传感器组成的密码小车
* @只有输入正确的密码,小车才启动.可以有多重密码组合。
* @author [liulihua](lihua.liu@dfrobot.com)
* @version V1.0
* @date 2017-11-22
*/
#include <DFRobot_MAX.h>
DFRobot_MAX myMax;
void MicVal(int num) //声音传感器检测的函数
{
int micVal;
int a=0;
do{
delay(1); //消除误差
micVal=myMax.micValue();
a= a + micVal;
}while(a < (num * 600) || a == -1 );
Serial.println("a=");
Serial.println(a);
myMax.rgbLed(0, 255, 0, 0);
return;
}
void LightL() //左侧光敏检测的函数
{
//int lightR;
int lightL;
do{
lightL=myMax.lightValue(1);
//lightR=myMax.lightValue(0);
}while(lightL>70 || lightL < 2);
Serial.println("lightL=");
Serial.println(lightL);
myMax.rgbLed(2, 0, 255, 0);
return;
}
void LightR() //右侧光敏检测的函数
{
int lightR;
do{
//lightL=myMax.lightValue(1);
lightR=myMax.lightValue(0);
}while(lightR>70 || lightR < 2);
Serial.println("lightR=");
Serial.println(lightR);
myMax.rgbLed(1, 0, 0, 255);
return;
}
void Motor() //电机驱动的函数
{
myMax.forward(120,120);
myMax.playSound(12);
myMax.rgbLed(3, 0, 255, 255);
}
void setup() {
myMax.begin();
Serial.begin(9600); //调试数据的时候用到,平时不用
}
void loop() { //要更改密码,只需要更改三个传感器的顺序和数量
MicVal(1); //调用声音传感器的函数,有击掌声音的时候,才退出函数
LightR(); //调用右侧光线传感器的函数,有光照的时候,才退出函数
LightL(); //调用左侧光线传感器的函数,有光照的时候,才退出函数
MicVal(2); //调用声音传感器的函数,有2次击掌声音的时候,才退出函数
Motor(); //调用电机驱动的函数,驱动小车前进,并亮灯和发出音效
}
点击观看:视频演示
自动避险的火车
/*
* @程序功能:自动避险的火车
* @实验现象:MAX在巡线的时候,可以及时判断前方是否有障碍物。如果在50cm内有障碍物,就发出音效,并原地打转或者掉头继续巡线,或者改变线路。
* @author [liulihua](lihua.liu@dfrobot.com)
* @version V1.0
* @date 2017-11-22
*/
#include <DFRobot_MAX.h> //载入MAX库
DFRobot_MAX myMax;
int l,r,c,u; //定义变量,l表示左巡线传感器,r右巡线传感器,c中间传感器 u超声波距离
int i=1; //用于是否播放音效的标志
void setup() {
myMax.begin(); //初始化MAX系统
// Serial.begin(9600);
myMax.forward(70,70); //程序开始就让MAX前进
}
void loop() {
l=myMax.lineValue(2); //读取左侧巡线传感器的值
c=myMax.lineValue(1); //读取中间巡线传感器的值
r=myMax.lineValue(0); //读取右侧巡线传感器的值
u=myMax.distanceValue(); //读取超声波距离
//Serial.println(u);
if(u > 50){ //判断障碍物距离是否小于50cm,小于的话,就执行巡线功能
i = 1; //这个标志置1,用于重启避障模式的音效播放
if(l==1 && c==1 && r==1){ //如果三个巡线传感器都在黑色上的话,就慢速前进。
myMax.forward(70,70);
}else{
if( l==0 && c==1 && r==0){ //否则,就判断中间传感器是否在黑线上,左右在白线上
myMax.forward(70,70); //是的话,就直线前进
}else{
if((l==0 && c==1 && r==1)||(l==0 && c==0 && r==1)){ //否则的话,就判断右侧两个传感器是否在黑线上或者右侧一个在黑线上,从而判断小车左偏了。
myMax.forward(150,70); //是的话,就让小车右转
if(l==0 && c==0 && r==0){ //如果小车速度过快,冲出去了,前面没有检测到的话
myMax.forward(130,70); //依然继续让小车右转 从而避免误判断。
}
}else{
if((l==1 && c==0 && r==0)||(l==1 && c==1 && r==0)){ //否则的话,再通过巡线传感器判断小车是否往右偏了
myMax.forward(70,150); //是右偏的话,小车左转
if(l==0 && c==0 && r==0){ //如果小车速度过快,冲出去了,前面没有检测到的话
myMax.forward(70,150); //依然继续让小车左转 从而避免误判断。
}
}
}
}
}
}
else{ //如果距离小于50cm的话,执行避障模式
if(i==1){ //先判断标志是否为1
i=0; //再把标志置零,从而避免多次调用音效
myMax.playSound(12); //发出音效
}
myMax.forward(0,130); //如果有障碍物就让小车左转
}
}
点击观看:视频演示
蓝牙遥控机器人
点击下载蓝牙GOBLE库文件GOBLE库文件 。如何安装库?
/*
* @程序功能:使用IOS版本的GOBLE(中文名称:走你)蓝牙遥控程序遥控MAX前进,后退,左右转弯
* @实验现象:打开走你软件,并且苹果设备打开蓝牙,靠近MAX,会自动连接上蓝牙,连接成功后MAX的LINK灯会亮起来,这时候,按下右边的上键
* MAX前进,就可以开始遥控MAX了。
* @author [liulihua](lihua.liu@dfrobot.com)
* @version V1.0
* @date 2017-11-22
*/
#include <DFRobot_MAX.h>
#include <GoBLE.h>
DFRobot_MAX myMax;
int up,down,left,right; //定义四个按键
void setup() {
myMax.begin();
Serial.begin(115200);
}
void loop()
{
if (Goble.available()) //如果判断接收到的蓝牙数据为有效数据的话,就将接收到的数据赋值给各个按键变量
up = Goble.readSwitchUp();
down = Goble.readSwitchDown();
left = Goble.readSwitchLeft();
right = Goble.readSwitchRight();
if (up == LOW) //如果上键被按下的话,MAX前进
myMax.forward(100,100);
else if(down == LOW) //否则的话,看下键是否被按下,按下的话,就后退
myMax.backward(100, 100);
else if(left == LOW) //否则,判断左键是否按下,按下的话,就左转
myMax.forward(100,200);
else if(right == LOW) //否则,判断右键是否按下,是的话,就右转
myMax.forward(200,100);
}
点击观看:视频演示
在圈圈内急着打转的机器人
/*
*程序功能:在规定区域行驶的机器人
*实验现象:用黑色胶带在白纸上贴一个大圆圈,MAX只在白纸内或者黑线内行驶,不会出界。遇到黑色线条,就会转弯或者掉头行驶。
* @author [liulihua](lihua.liu@dfrobot.com)
* @version V1.0
* @date 2017-11-10
*/
#include <DFRobot_MAX.h>
DFRobot_MAX myMax;
int L; //定义左侧巡线传感器
int R; //定义右侧巡线传感器
int M; //定义中间的巡线传感器
int D; //定义变量用于存放随机数
void setup() {
myMax.begin(); //初始化MAX系统
myMax.forward(70,70); //程序开始就让MAX前进。
}
void loop() {
L=myMax.lineValue(0); //读取左侧巡线传感器的值
R=myMax.lineValue(1); //读取右侧巡线传感器的值
M=myMax.lineValue(2); //读取中间巡线传感器的值
if(L > 0||R > 0||M > 0){ //如果三个传感器当中,有一个传感器检测到黑线,就执行下面的动作
myMax.playSound(8); //播放音效
myMax.backward(70,70); //MAX后退1秒钟
delay(1000);
D=random (0,10); //生成一个0到10的随机数
if(D<5){ //如果生成的随机数小于5的话,就执行下面的动作
myMax.backward(0,70); //让MAX左转后退1秒
delay(1000);
}
else
{
myMax.backward(70,0); //如果大于5的随机数就左转后退1秒钟
delay(1000);
}
}
myMax.forward(70,70); //MAX继续前进
}
点击观看:视频演示
另外一种量尺寸的乐谱车
/*
*程序功能:乐谱小车
*实验现象:根据超声波检测到的不同的距离,播放不同的乐谱。
* @author [liulihua](lihua.liu@dfrobot.com)
* @version V1.0
* @date 2017-11-21
*/
#include <DFRobot_MAX.h>
DFRobot_MAX myMax;
int u;
void setup() {
myMax.begin(); //初始化MAX系统
delay(150);
//Serial.begin(9600);
myMax.forward(70,70); //程序开始就让MAX前进
}
void loop() {
u=myMax.distanceValue(); //读取超声波距离值
//Serial.println(u);
switch(u){
case 30:myMax.playSound(7);delay(20);break; //如果检测到距离为30cm,就播放对应的音乐,这句为播放7号乐谱。
case 50:myMax.playSound(6);delay(20);break;
case 70:myMax.playSound(5);delay(20);break;
case 90:myMax.playSound(4);delay(20);break;
case 110:myMax.playSound(3);delay(20);break;
case 130:myMax.playSound(2);delay(20);break;
case 150:myMax.playSound(1);delay(20);break; //一共播放7种乐谱
}
}
声控MAX小车
/*
* @程序功能:声控小车
* @实验现象:利用拍掌来控制小车前进和后退,击掌一次就前进,再次击掌就后退,如此循环
* @author [liulihua](lihua.liu@dfrobot.com)
* @version V1.0
* @date 2017-11-30
*/
#include <DFRobot_MAX.h>
DFRobot_MAX myMax;
int i=1; //定义标志,用于判断是让小车前进还是后退
void MicVal() //声音传感器检测的函数
{
int micVal;
do{
delayMicroseconds(10); //消除误差
micVal=myMax.micValue();
}while( micVal < 700 || micVal == -1 ); //如果声音小于700的话或者为-1的话,就为误判断
i=!i;
return;
}
void setup() {
myMax.begin();
Serial.begin(9600);
}
void loop() {
MicVal(); //调用声音传感器的函数,有击掌声音的时候,才退出函数
if(i==0){ //如果标志为1的话,MAX前进,表情板显示蓝色笑脸
myMax.forward(150,150);
myMax.showFace(8, 5);
}
else{
myMax.backward(150,150); //否则MAX后退,表情板显示绿色问号
myMax.showFace(7, 3);
}
}
点击观看:视频演示
带醉鬼MAX回家
/*
* @程序功能:带醉鬼MAX回家
* @实验现象:MAX喝酒喝醉了,左偏右偏的乱跑,做出各种稀奇古怪的表情,发出各种嗷嗷怪叫。
* MAX的超声波眼睛还是不迷糊的,看到障碍物了会往一边走,看着东倒西歪的MAX,你确定能把醉鬼MAX带回家?
* @author [liulihua](lihua.liu@dfrobot.com)
* @version V1.0
* @date 2017-11-30
*/
#include <DFRobot_MAX.h> //载入MAX库
DFRobot_MAX myMax;
int u; // u超声波距离
int r; // r存放随机数
long timeMode=0; //存放系统运行时间
void setup() {
myMax.begin(); //初始化MAX系统
}
void loop(){
u=myMax.distanceValue(); //读取超声波距离
if(u > 40){ //判断前方有无障碍物
if(millis()-1000 > timeMode) //系统时间每1秒钟触发一次
{
timeMode=millis();
r=random (1, 10); //生成一个随机数
if(r<6){ //如果随机数小于6的话,就左转
myMax.forward(75,150);
myMax.showFace(1,2); //表情板显示1号表情,2号颜色
}else{ //否则的话,就右转
myMax.forward(150,75);
myMax.showFace(3,6); //表情板显示3号表情,6号颜色
}
}
}
else //如果距离小于40cm,前方有障碍物的话
{
r=random (1, 10); //重新生成一个随机数
if(r<6) //如果随机数小于6,就左偏
{
myMax.forward(0,150);
myMax.playSound(14);
myMax.showFace(6,4);
delay(850);
}
else //如果随机数大于等于6,就右偏
{
myMax.forward(150,0);
myMax.playSound(15);
myMax.showFace(5,7);
delay(850);
}
}
}
点击观看:视频演示
红外遥控机器人
/*
* @程序功能:红外控制(使用DFR0107红外套件,并将红外传感器接入DP1端口)
* @实验现象:根据匹配不同的红外编码,让小车前进、后退、左转、右转、停止等操作。可以使用任何的红外遥控器,先在串口打印窗口查看对应按键的编码,然后来使用。
* @author [liulihua](lihua.liu@dfrobot.com)
* @version V1.0
* @date 2017-12-1
*/
#include <DFRobot_MAX.h> //载入MAX库
#include <IRremote.h> //载入红外库
DFRobot_MAX myMax;
IRrecv irrecv(DP1); //定义红外接收端口为DP1
unsigned long IRVal; //用于存放红外编码
void setup() {
myMax.begin();
Serial.begin(9600);
irrecv.enableIRIn(); // 开始红外接收
}
void loop() {
IRrecv irrecv(DP1);
decode_results results;
IRVal=results.value; //将红外编码赋值给变量IRVal
if (irrecv.decode(&results)) { //如果红外编码为有效值,就打印出编码
Serial.println(IRVal);
irrecv.resume();
}
switch (IRVal) //根据不同的编码值让MAX执行不同的动作
{
case 16613503: myMax.forward(150,150); break; //按VOL+ 小车前进
case 16617583: myMax.backward(150,150);break; //按VOL- 小车后退
case 16589023: myMax.forward(70,150); break; //按左键 小车左转
case 16605343: myMax.forward(150,70); break; //按右键 小车右转
case 16580863: myMax.forward(0,0); break; //按关机键,小车停止
}
}
点击观看:视频演示
Mind+(基于Scratch3.0)实例编程
MAX的行走路线
学习目标:掌握MAX的电机控制基本方法
程序效果展示:让MAX的行驶路线为正方形
Mind+ 图形化程序截图
流水灯
学习目标:掌握RGB灯的控制方法
程序效果展示:显示蓝色的流水灯
Mind+ 图形化程序截图
声控开关
学习目标:掌握声音传感器的基本控制方法
程序效果展示:当声音的值>200,点亮RGB灯5s
Mind+ 图形化程序截图
超声波测距
学习目标:掌握超声波的基本用法
程序效果展示:用超声波测与障碍物的距离值,然后利用串口显示出来
Mind+ 图形化程序截图
避障机器人
学习目标:掌握超声波的基本用法
程序效果展示:当距离障碍物<=45cm时,左转。当距离障碍物<=15cm时,后退在右转。
Mind+ 图形化程序截图
音效播放
学习目标:学习MAX本身的16种音效
程序效果展示:播放MAX的所有音效。
Mind+ 图形化程序截图
炫彩表情板
学习目标:学习使用内置的表情
程序效果展示:炫彩表情板,每隔一秒显示不一样的表情。
Mind+ 图形化程序截图
自定义表情板
学习目标:掌握自定义表情和表情颜色
程序效果展示:炫彩表情板,每隔一秒显示不一样的表情。
Mind+ 图形化程序截图
追光小车
学习目标:掌握光敏传感器的使用
程序效果展示:利用光敏传感器控制MAX向左运行,向右运行。
Mind+ 图形化程序截图
恢复出厂程序
Mind+中集成了一键恢复出厂程序功能:
操作方法:
1、2、切换“上传模式”下的“手动编辑”,鼠标右键单击空白处。
3、选择“max恢复出厂设置”,此时代码区会自动填充好出厂代码。
4、点击“上传到设备”,上传成功之后就恢复了出厂程序。
注意:之后如果想对max进行图形编程,切换到“自动生成”
MAX专用函数集
MAX库文件
功能说明:必须载入的,每次使用MAX编程必须使用这两条语句
#include <DFRobot_MAX.h>
DFRobot_MAX myMax;
例: #include <DFRobot_MAX.h> //载入MAX驱动库
DFRobot_MAX myMax; //载入MAX驱动函数
void setup() {
myMax.begin();
}
void loop() {
}
初始化MAX系统
功能说明:用于初始化MAX的程序,每次使用MAX编程必须在setup里写上这条代码
函数原型:myMax.begin();
例: void setup() {
myMax.begin(); //初始化MAX
Serial.begin(9600); //初始化串口
}
小车前进
功能说明:控制小车左轮和右轮前进,左右轮可设置速度
参数:
left speed:左轮速度,数值为0~255
right speed:右轮速度,数值为0~255
返回值:无
函数原型:myMax.forward(leftSpeed,rightSpeed);
例: myMax.forward(100,150); //让MAX左轮100,右轮150的速度前进
小车后退
功能说明:控制小车左轮和右轮后退,左右轮可设置速度
参数:
left speed:左轮速度,数值为0~255
right speed:右轮速度,数值为0~255
返回值:无
函数原型:myMax.backward(leftSpeed,rightSpeed);
例: myMax.backward(100,150); //MAX左轮100,右轮150的速度后退
播放音效
功能说明:播放内置的16种音效
参数:
数据类型:int
数值范围:1~16,分别代码16种不同的音效
返回值:�
函数原型:myMax.playSound(i);
例: myMax.playSound(5); //播放序号为5的音效,音效为乐谱suo
表情板图案显示
功能说明:显示表情板内置的表情
参数:
i:取值范围为0~22 ,int类型 分别代表23种不同的图案
color:取值范围为1~7,int类型,代表7种颜色
函数原型:myMax.showFace(i,color);
例: myMax.showFace(2,3); //设置表情板用黄色显示序号2的表情图案
清除表情板图案
功能说明:清除表情板显示的图案
参数:无
返回值:�
函数原型:myMax.clearScreen();
例: myMax.showFace(2,3);//设置表情板显示图案
myMax.clearScreen();//清除图案
自定义表情板图案显示
功能说明:显示自定义的表情图案
参数:
myFace:自定义显示表情的数组名,static int8_t类型。
color: 取值范围1~7,int类型,代表7种颜色。
返回值:�
函数原型:myMax.customFace(myFace,color);
例: static int8_t myFace[129]{ //自定义表情板点阵显示
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0
0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0, //1
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //2
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //3
0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0, //4
0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0, //5
0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0, //6
0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0, //7
};
myMax.showFace(myFace,3);//用黄色显示自定义图案。
读取超声波的距离
读取超声波传感器的值,单位cm
参 数:无
返回值: int,距离值,单位cm
函数原型:myMax.distanceValue();
例: int a;
a=myMax.distanceValue(); //读取超声波的距离值,并赋值给变量a
读取声音传感器的值
功能说明:读取声音传感器的数值
参数:无
返回值:int 0~1024,声音越大,值越大。
函数原型:myMax.micValue();
例: int a;
a=myMax.micValue();//读取声音传感器的值,并赋值给变量a
读取三个巡线传感器的值
功能说明:读取三个巡线传感器的值;
参数:i:为巡线头的序号,0为右侧巡线传感器,1为中间传感器,2为左侧传感器;
返回值:0或者1;黑色线条返回1,传感器指示灯亮。白色返回0,传感器指示灯灭;
函数原型:myMax.lineValue(i);
例: int l,c,r;
l=myMax.lineValue(2); //读取左侧巡线传感器的值
c=myMax.lineValue(1); //读取中间巡线传感器的值
r=myMax.lineValue(0); //读取右侧巡线传感器的值
数字口DP
功能说明:数字端口,一共3个数字口,分别为DP1、DP2、DP3;所占用的引脚分别为10、9、8
DP1、DP2、DP3
例: void setup{
pinMode(DP1, INPUT); //设置DP1为输入引脚
}
void loop() {
val = digitalRead(DP1); // 读取DP1口的值,并将它赋值给val
}
模拟口AP
功能说明:模拟端口,一共3个模拟口,分别为AP1、AP2、AP3;所占用的引脚分别为A7、A6、A5
AP1、AP2、AP3
例: void loop() {
int val = 0;
val=analogRead(AP1); //读取输入模拟端口AP1,并将值赋给val
Serial.println(val); //串口打印出模拟量的数值
}
舵机口SP
功能说明:舵机专用端口,独立供电,一共3个舵机专用口,分别为SP1、SP2、SP3;所占用的引脚分别为18、14、11
SP1、SP2、SP3
例: myMax.servoControl(SP1, 90) //舵机控制函数
//上面的程序表示,舵机接在SP1口,舵机角度置90度
如果还想了解舵机其他好用的函数,可以点击后面的连接,里面会有相关介绍的。:servo
巡线灯
功能说明:两种状态,亮或者灭,对应的参数是0或1
参数:0或者1
返回值:�
函数原型:myMax.lineLED(i)
例: myMax.lineLED(1);//点亮巡线灯
myMax.lineLED(0);//熄灭巡线灯
板载RGB灯
功能说明:控制板载的四个RGB灯
参数:
num:RGB灯的序号,为0~3号
r:红色值 取值范围uint8 0~255
g:绿色值 取值范围uint8 0~255
b:蓝色值 取值范围uint8 0~255
返回值:�
函数原型:myMax.rgbLed(uint8_t num, uint8_t r, uint8_t g, uint8_t b)
例: myMax.rgbLed(2, 160, 32, 240);
//上面的程序表示,让2号RGB灯按照红色160,绿色32,蓝色240的参数混色,经过混色后显示的颜色为紫色。
板载按键
功能说明:获取板载按键的按下状态
参数:无
返回值:0或者1,0表示按键按下,1表示按键未按下
函数原型:myMax.buttonValue()
例: int a;
a=myMax.buttonValue();
//上面的程序表示,获取按键的状态,并保存在变量a
舵机控制
功能说明:控制舵机的角度
参数:
io:舵机接入的IO口,取值为:SP1,SP2,SP3 ;
angle:舵机的转动角度,取值范围为0~180度;
返回值:�
函数原型:myMax.servoControl(uint8_t io, uint8_t angle)
例: myMax.servoControl(SP1, 90)
//上面的程序表示,舵机接在SP1口,舵机角度置90度
电机控制
功能说明:控制电机的运动方式;
参数:
direction_l为左侧电机的运动方式,speed_l为左侧电机的运动速度;
direction_r为右侧电机的运动方式,speed_r为右侧电机的运动速度;
speed_l和speed_r取值范围:0~255
返回值:无
函数原型:myMax.swerve(uint8_t direction_l, uint8_t speed_l, uint8_t direction_r, uint8_t speed_r)
例: myMax.swerve(ADVANCE_L, 140, RETREAT_R, 140);
//左侧电机前进,左侧电机运动速度140;右侧电机后退,右轮电机运动速度140
电机停止
功能说明:控制驱动电机停止转动;
参数:无 返回值:�
函数原型:myMax.stopMotor()
例: myMax.stopMotor(); //控制两侧电机停止转动
光线传感器
功能说明:读取光线传感器的值
参数:0或者1,0表示左侧光线传感器,参数1表示右侧光线传感器
返回值:int 0~1024
函数原型:myMax.lightValue(uint8_t num)
例: int a,b;
a = myMax.lightValue(0) //读取左侧光线传感器的值,并赋值给a
b = myMax.lightValue(1) //读取右侧光线传感器的值,并赋值给b
MAX表情板图案及颜色列表
MAX表情板图案列表
表情显示函数使用方法:
myMax.showFace(表情序号0-22,颜色序号1-7);
例如:myMax.showFace(22,3);//用黄色显示22号表情
表情板颜色列表
1:红色
2:绿色
3:黄色
4:蓝色
5:紫色
6:青色
7:白色
例如:要用蓝色显示12号表情,程序这样写:myMax.showFace(12,4);
MAX内置音效列表
音效调用方法:myMax.playSound(i); 其中i表示音效的序号,从1号~16号
音效列表:
1:乐谱do
2:乐谱re
3:乐谱mi
4:乐谱fa
5:乐谱suo
6:乐谱la
7:乐谱xi
8:乐谱高音节do
9:刹车声
10:回弹的声音
11:两次子弹的声音
12:拖长音的回声
13:哟嚯
14:俏皮的结束音
15:喔噢
16:机器人说话
如要使用15号的“喔噢”音效:myMax.playSound(15);
恢复MAX出厂固件
mind+恢复方法:
ArduinoID恢复方法:
如下图操作,打开arduino软件→文件→示例→DFRobot_MAX→MAXdemo,点击MAXdemo,然后将程序上传至MAX;这样就恢复了出厂设置
MAX运行库及出厂固件下载地址:https://github.com/DFRobot/DFRobot_MAX
常见问题
***Q1.***在上传的时候,总是出现上传项目错误?
A.一般在上传项目的时候,应该是处于掉电的情况下上传;如果已经关闭电源开关,上传项目还是出错,这时应该检查串口是否连接好。
Q2. 蓝牙控制的串口波特率一定要设置成115200吗?
A. 是的,因为手机蓝牙的波特率默认设置为115200。
***Q3.***出厂程序中的16号音效播放失败?
A.出厂程序中只有15种音效,没有8号高音节do的音效。
***Q4.***为什么在巡线转弯的时候,MAX会偏离到地图外?
A.与MAX相关的所有巡线程序都是在电量充足的情况下测试的;如果MAX在巡线的过程中会出现偏离的状态,说明电量不够,导致轮子的转速不够,这时候需要调节两轮的转速 / 更换电池来实现功能。
***Q5.***4节电池能用多长时间呢?
A.亲测,用新的电池一直做巡线运动,能不停的跑两个小时左右。
***Q6.***连接电机的时候,有左右区分吗?
A.有的,将MAX背对自己。左侧电机连接M1接口,右侧电机连接M2接口。如果电机接反了,MAX前进会变成后退。
***Q7.***为什么重新下载程序后,不能正常执行功能?
A.有时可能会遇见同一段程序,以前能执行,后面重新下载后不能正常执行;这种情况下可能是电池没有电了,需要更换新的电池了。
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。