Max探索者

个人简介

技术规格

零配件清单

MAX整机功能及配置总览

功能及配置总览

MAX整机功能及配置总览

重要更新!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、按 <File:arduino-sc.png>“上传”按钮将程序上传到MAX机器人。

启动MAX

1、确认左右两个电机接入了主板的电机口(如下图3和图4)。

2、为MAX安装好4节AA电池(或者锂电池)并打开电源开关(如下图5和图6)。

打开开关,我们就能看见向前奔跑的MAX啦!

开始学编程

MAX的行走路线

前情回顾:

在前面的上手指南中,我们已经对Arduino的下载和安装,程序的编译和下载有了简单的了解。

本章主要任务:

编写程序让MAX机器人的行驶路线为正方形。

本章学习内容:
  1. 程序主要分几个部分;
  2. 函数的定义;
  3. setup()函数和loop()函数;
  4. 注释的使用;
  5. 延时函数的使用;

点击下载本章教程的详细内容:MAX的行走路线

MAX的炫彩RGB灯

前情回顾:

在上个章节里,学习了注释的使用、函数的定义、setup()函数和loop()函数、以及延时函数的使用。

本章主要任务:

让MAX在行驶过程中,循环点亮4个RGB灯。

本章学习内容:
  1. 变量的定义;
  2. for循环语句的使用;
  3. RGB灯控制函数的使用;

点击下载本章教程的详细内容:MAX的炫彩RGB灯

使用按键点亮RGB灯

前情回顾:

在上个章节里,我们了解了什么是变量,如何使用for循环语句和RGB灯控制函数。

本章主要任务:

实现按一次按键,点亮MAX背上的1个RGB灯。

本章学习内容:
  1. 按键的原理;
  2. 如何使用if语句;
  3. “==”和“=”的区别;

点击下载本章教程的详细内容:使用按键点亮RGB灯

超声波测距

前情回顾:

在上个章节里,学习MAX的按键,if语句的使用。

本章主要任务:

使用超声波测距,用串口打印出距离数值。

本章学习内容:
  1. 介绍超声波测距的原理;
  2. 超声波测距函数的使用;
  3. 学习使用串口打印的函数;
  4. Serial.print()和Serial.println()的区别;

点击下载本章教程的详细内容:超声波测距

音效播放

前情回顾:

在上个章节里,学习了用超声波测距,并用串口打印出数值。

本章主要任务:

MAX在行驶的过程中,循环播放1到8号的音效和8号到1号音效。

本章学习内容:
  1. 内置音效的介绍;
  2. 播放音效函数的使用;
  3. while和do...while...语句的使用;

点击下载本章教程的详细内容:音效播放

七音符音乐小车

前情回顾:

在上个章节里,我们学习了音效函数的使用、16种内置音效和while、do...while...循环语句。

本章主要任务:

在110~40cm之间每个隔10cm播放一个音效,依次播放1~7号音效。

本章学习内容:
  1. 学习if...else if...else判断语句;
  2. 学习逻辑运算符;

点击下载本章教程的详细内容:七音符音乐小车

避障机器人

前情回顾:

在上个章节里,我们学习了逻辑运算符、if...else if...else的用法。利用了超声波测距的原理实现了七音符音乐小车的功能

本章主要任务:

当MAX遇到障碍物时,实现向右、向左、原地掉头等避障功能,同时RGBled灯会分别亮蓝色、紫红色等颜色。

本章学习内容:
  1. 随机函数random()的使用;
  2. myMax.swerve函数的使用;
  3. 学习switch...case语句;
  4. if、if...else if、switch...case语句的区别;

点击下载本章教程的详细内容:避障机器人

行走的表情包

前情回顾:

在上个章节里,我们学习了switch...case语句、random随机函数和myMax.swreve函数的使用

本章主要任务:

MAX在行驶的过程中随机显示不一样的表情。

本章学习内容:
  1. RGB表情板的介绍;
  2. myMax.showFace函数的使用;
  3. myMax.backward函数的使用;

点击下载本章教程的详细内容:行走的表情包

自定义表情板

前情回顾:

在上个章节里,我们学习了RGB表情板内置了23种表情和怎么使用myMax.showFace、myMax.backward函数

本章主要任务:

自己定义表情的图案和颜色。

本章学习内容:
  1. 学习表情板自定义的方法;
  2. 学习数组的用法;
  3. myMax.cusomFace函数的使用;

点击下载本章教程的详细内容:自定义表情板

MAX的小眼睛——光敏传感器

前情回顾:

在上个章节里,我们学习了用数组自定义表情板。

本章主要任务:

使用光敏传感器来控制MAX背面的两颗RGB灯亮,同时在串口监视器里查看左右两侧光敏的亮度值。

本章学习内容:
  1. 学习光敏传感器的原理;
  2. 学习怎么样用光敏传感器来控制RGB灯发光;

点击下载本章教程的详细内容:MAX的小眼睛——光敏传感器

追光机器人

前情回顾:

在上个章节里,我们学习了光敏传感器的原理以及怎样使用光敏传感器控制RGB灯发光。

本章主要任务:

做一个追光机器人,让MAX随着光线强的一方行驶。

本章学习内容:

如何设置光敏传感器的参数。

点击下载本章教程的详细内容:追光机器人

巡线机器人

前情回顾:

在上个章节里,我们学习了让MAX随着光线强的一方行驶的追光机器人。

本章主要任务:

做一个巡线机器人,使用巡线传感器,让MAX跟着黑线行走。

本章学习内容:
  1. 学习巡线传感器的使用方法及原理;
  2. 巡线灯的函数使用;
  3. 巡线传感器函数的使用;

点击下载本章教程的详细内容:巡线机器人

蓝牙控制机器人

前情回顾:

在上个章节里,我们学习了巡线传感器和巡线灯函数的使用。

本章主要任务:

做一个蓝牙控制机器人,通过GoBLE软件(IOS版本)控制MAX前进,后退,左右转弯,原地旋转,停止等功能。

本章学习内容:
  1. 学习GoBLE软件的使用方法;
  2. 学习如何在代码中设置GoBLE;
  3. 学习GoBLE.available()串口函数;

点击下载本章教程的详细内容:蓝牙控制机器人 点击下载GoBLE库文件:GOBLE库文件 点击下载红外库文件:红外库文件

声控机器人

前情回顾:

在上个章节里,我们学习了如何使用GoBLE软件控制MAX的行走方式。

本章主要任务:

学习用声音传感器的原理及函数的使用,并用声音控制MAX前进、后退、右转、停止。

本章学习内容:
  1. 学习声音传感器的原理;
  2. 学习什么是子函数;
  3. 学习如何自定义子函数;
  4. 学习如何使用声音传感器的函数;

点击下载本章教程的详细内容:声控机器人

按键的拓展——功能切换

前情回顾:

在上个章节里,我们学习了声音传感器的原理及其函数的使用。

本章主要任务:

学习时间函数,利用按键切换追光、蓝牙控制、巡线灯功能。

本章学习内容:
  1. 学习什么是时间函数;
  2. 学习怎么用按键切换功能;

点击下载本章教程的详细内容:按键的拓展——功能切换

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.有时可能会遇见同一段程序,以前能执行,后面重新下载后不能正常执行;这种情况下可能是电池没有电了,需要更换新的电池了。

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png DFRobot商城购买链接