精华内容
下载资源
问答
  • Arduino 多功能扩展板学习资料。 包含配套程序和原理图。 程序包括但不限于: 1.HelloWorld实验 2.LED闪烁 3.广告灯程序 4.按键实验 5.按键控制LED实验 6.电位器实验 7.电位器调LED亮度 8.二路PWM调光(呼吸灯) 9....
  • 这是一套arduino 9合一扩展板的使用说明,文档内将扩展板常用功能简单的描述了引脚,并用实例代码做了演示
  • 电机扩展板作为Arduino平台最为流行的扩展板之一具有连接便利,功能丰富的特点。很朋友们喜欢用这款电机扩展板驱动机器人或智能小车的电机。本页将向您介绍如何使用Arduino Uno开发板通过AFMotor电机

    原文地址:http://www.taichi-maker.com/homepage/reference-index/motor-reference-index/arduino-motor-shield/

    Arduino AFMotor 电机扩展板详解

    Arduino AFMotor 电机扩展板概述

    电机扩展板作为Arduino平台最为流行的扩展板之一具有连接便利,功能丰富的特点。很多朋友们喜欢用这款电机扩展板驱动机器人或智能小车的电机。本页将向您介绍如何使用Arduino Uno开发板通过AFMotor电机扩展板来控制通用模型直流电机28BYJ-48步进电机以及舵机(伺服电机)。如果您希望学习如何使用Arduino Uno通过CNC扩展板来控制NEMA步进电机,请点击这里进入该页面

    扩展板外观

    在这里插入图片描述

    Arduino AFMotor 电机扩展板正面
    在这里插入图片描述
    Arduino AFMotor电机扩展板背面
    在这里插入图片描述
    Arduino AFMotor电机扩展板侧面

    AFMOTOR电机扩展板主要功能特点

    • 可最多驱动4个模型直流电机
    • 可最多驱动2个28BYJ-48步进电机
    • 可最多驱动2个舵机(伺服电机)
    • 板载两块L293D芯片负责电机驱动的核心工作
    • 可配合Arduino Uno/Mega开发板使用(本页面主要针对Uno开发板进行讲解)

    端口介绍

    电机扩展板各个端口情况请见下图
    在这里插入图片描述
    Arduino AFMotor 电机扩展板


    外接电源供电

    如下图所示,AFMotor电机扩展板上配有外接电源接口。该接口所连接的直流电源可以为电机和Arduino开发板供电。
    在这里插入图片描述
    Arduino-AFMotor电机扩展板外接电源接口

    使用AFMotor电机扩展板驱动电机时,首要考虑的问题就是如何为扩展板供电。如果电源输出功率达不到驱动电机的要求,那么电机是无法正常工作的。在考虑如何选择电源时,我们需要重点关注两个方面 ,一个是电源电压,一个是电源电流。

    注意:外接电源极性千万不要接反,否则会对扩展板造成损坏!

    外接电源电压要求

    AFMotor扩展板中起关键作用的芯片是L293D。该芯片所允许的直流电源电压范围是4.5V ~25V。因此AFMotor扩展板外接电源接口允许我们连接的电源也是4.5V ~25V。请注意:这是一个很宽泛的电压指标。具体我们应该连接的电源电压有多大,这是由被驱动的电机工作电压来决定的。

    在购买电机时,卖家应该为您提供电机技术参数信息。这其中就有电机的工作电压这一参数。比如您所驱动的电机工作电压是+5V,那么您在使用AFMotor扩展板驱动该电机时,可以使用+5V的直流电源连接到外接电源接口上。但遗憾的是,不是所有卖家都能给您提供电机的技术参数,甚至有些卖家提供的参数是错的。这就需要您自己“猜”电机工作电压了。

    这个“猜”电压的操作实在是无奈之举。如下图所示,假如您所购买的电机是这种通用的直流模型电机,那么可以试着使用+5V电压为该电机供电。
    在这里插入图片描述
    130直流电机
    在这里插入图片描述
    模型直流电机

    在电机工作中,要特别注意电机是否有异常发热的现象。就是说您在用手轻轻触碰电机时,不能感到烫手。一旦发现电机太热,那么请更换电机。千万不要明明知道电机很烫,还让它持续工作,这很容易产生危险。

    另外对于工作电压低于4.5V的直流电机,我不建议您使用AFMotor驱动板来驱动这些电机的。

    外接电源电流要求

    与上面提到的电源电压要求相同,外接电源的电流要求也是由被驱动的电机来决定的。通常我们使用AFMotor电机扩展板所驱动的电机就是普通的模型电机(如以上电源讲解中的图片所示)。对于这一类型的电机,它们的工作电流大约是500mA左右,因此我们只要为扩展板配一个500 mA~1000 mA的外接电源就足够了。请注意,假如您所驱动的电机工作电流超过500mA,那么就要考虑为扩展板上的L293D加装芯片了。

    在本页教程中,我们给您举了三个示例。它们分别是驱动直流模型电机、驱动28BYJ-48步进电机以及驱动舵机(伺服电机)。这里没有驱动NEMA17步进电机的讲解。可能有的朋友会认为这是因为AFMotor电机扩展板不能用于驱动NEMA17步进电机。

    其实不然。AFMotor电机扩展板是可以用于驱动NEMA17步进电机。但前提条件是要为扩展板上的L293D芯片配备散热装置。否则扩展板就会因为过热而停止工作,严重的还有可能烧毁L293D芯片。这是为什么呢?

    由于大多数NEMA17步进电机的工作电流是在1000mA左右。如果让L293D芯片输出如此高的电流,芯片会产生很严重的发热现象。因此要想用AFMotor扩展板驱动NEMA17步进电机,就必须要为L293D芯片上加装散热片。然而通常我们买来的AFMotor电机扩展板是没有配备散热装置的。这是因为AFMotor电机扩展板主要就是驱动普通的直流模型电机,很少有人会用它来驱动NEMA17步进电机。所以也就无需为L293D芯片配备散热装置了。

    对于驱动NEMA17步进电机来说,通常我们使用的是Arduino CNC 步进电机扩展板。假如您想了解更多的这方面信息,请点击这里进入该页面


    安装AFMotor电机库

    使用AFMotor电机扩展板驱动电机以前,需要先将AFMotor库安装到Arduino IDE中。如果您不知道如何进行操作,请点击这里进入Arduino IDE安装库的说明页面

    在这里我们向您推荐两个电机程序库。一个是必须安装的,一个是可按您需要选择安装的。

    必装的库是AFMotor库。这个库是AFMotor扩展板的开发团队Adafruit专门为该扩展板编写的。它的优点是非常简单易用,但是功能相对单一。假如您只是驱动直流模型电机,那么这个AFMotor库就足够了。

    但是如果您还想用AFMotor扩展板驱动28BYJ-48步进电机的话,AFMotor库虽然也可以实现这一功能,但是它的功能太简单了。所以我们建议您使用AccelStepper库来控制步进电机。请注意:AccelStepper库本身不能配合AFMotor电机扩展板工作。只有安装了AFMotor库以后,AccelStepper库在AFMotor库的配合下才能用于AFMotor电机扩展板驱动步进电机。这也就是说,无论您是否使用AccelStepper库,都要首先安装AFMotor库。

    以下是这两个库的下载链接:

    下载 AFMotor库
    下载 AccelStepper库


    连接电机引线

    如下图所示,在AFMotor电机扩展板的两侧共有4个直流电机端口,每一个端口都有独立的编号,即:M1,M2,M3,M4。每一个电机端口都是由两个接线端子所构成。
    在这里插入图片描述
    AFMotor电机扩展板电机端口

    这些端子上的螺丝可以起到紧固电机引线的作用。如下图所示,通过顺时针旋转螺丝,插入端子的引线将会被固定住。相反,逆时针旋转螺丝可以松开端子中的引线。
    在这里插入图片描述
    螺丝刀拧紧AFMotor扩展板接口中的电机连接线


    驱动直流电机电路

    AFMotor电机扩展板最多可以驱动4个直流电机。以下我们将给您介绍两种电机扩展板的使用方法。第一种是在您开发项目时的使用方法,第二种是项目开发完毕后,您在使用扩展板驱动电机工作时的方法。这两种方法最大的区别在于:开发时的Arduino开发板是通过USB数据线连接在电脑上的。但是在工作时开发板是不连接电脑的。

    项目开发时AFMOTOR电机扩展板使用方法

    首先介绍的是在项目开发时AFMotor电机扩展板的使用方法。请看下图展示的电路连接说明。
    在这里插入图片描述
    AFMotor电机扩展板驱动直流电机(开发过程)

    在开发时,Arduino的电源是由电脑通过USB线提供的。但由于电机运行所需的电源功率远远超过Arduino能提供的电源功率,因此Arduino是无法为电机供电的。要想让电机获得充足的电源供应,我们就需要在扩展板的外接电源端口接上直流电源来为电机供电。在这种情况下,扩展板上的跳线一定要移除。否则可能会损坏Arduino开发板以及电机扩展板!请务必注意!

    另外,当扩展板上的跳线没有安置插针时,如果我们不给扩展板外接电源,而只是将Arduino开发板连接在电脑USB端口上。这时,当您把本页的示例程序上传给Arduino以后,您有可能看到电机在没有外接电源的情况下也可以运动,但是动力很弱。这是因为此时驱动电机的电能是来自于Arduino开发板的。由于Arduino开发板输出的电能远远无法满足电机正常运行的要求,所以您虽然看到电机也在动,但是动起来很没有力气。要想让电机以正常的方式运行,还是需要您给扩展板连接外接直流电源的,这样电机才有充足的动力来运行。

    工作运行时AFMOTOR电机扩展板使用方法

    一般在正常工作状态下,Arduino开发板是不会与电脑通过数据线进行连接的。这时我们就要通过AFMotor电机扩展板上外接电源端口同时为扩展板和Arduino供电。如下图所示:
    在这里插入图片描述
    AFMotor电机扩展板驱动直流电机(工作阶段)

    注意:当使用外接电源同时为Arduino和电机扩展板供电时,扩展板上的跳线必须安置在插针上。否则Arduino是无法工作的。

    扩展板跳线的作用

    在以上两种工作方式里,我们对电机扩展板上的跳线采取了不同的操作方法。该跳线的作用是控制Arduino开发板是否通过外接电源来供电。当跳线移除的时候,外接电源不会为Arduino开发板供电。相反当跳线安置在插针上,外接电源将会为Arduino供电。

    因此在程序开发过程中,当Arduino与电脑通过USB线连接时,我们需要将跳线从插针上移除。假如我们不移除该跳线,Arduino会有两路供电。而这两路电源同时工作会产生问题,严重的可能会造成开发板以及扩展板的损坏。

    关于直流电机引线

    可能有些朋友会感到好奇,直流电机有两根引线,这两根引线在连接到AFMotor扩展板电机端口时有没有顺序呢?这个问题的答案是“既有顺序也无顺序”。

    如果您只是单纯的想要让电机转起来,那么这两根引线连接到扩展板端口上是没有顺序的。但如果您发现电机旋转的方向与您所期待的相反,您可以将这两根电机引线从扩展板上断开,然后交换顺序再接到扩展板端子上,这时您会看到电机旋转的方向就反过来了。


    AFMotor电机扩展板驱动直流电机示例程序

    示例程序

    以下示例程序为演示如何使用Arduino Uno开发板通过AFMotor电机扩展板 驱动4个直流电机。
    如需查看此示例程序演示视频,请点击这里

    AFMotor电机扩展板驱动4个直流电机示例程序

    /*
    AFMotor电机扩展板驱动4个直流电机示例程序
    By 太极创客(http://www.taichi-maker.com)
    2019-02-27
     
    本示例程序旨在演示如何使用Arduino Uno开发板通过AFMotor电机扩展板
    驱动4个直流电机。
     
    如需获得更多关于本示例程序的电路连接以及AFMotor电机扩展板的资料信息,
    请参考太极创客网站,并在首页搜索栏中搜索关键字:AFMotor。
    */
     
    #include <AFMotor.h> // 本程序中使用AFMotor库
     
    AF_DCMotor motor1(1); // 这4条语句的作用是建立4个直流电机对象,它们的名称分别是:motor1/2/3/4.
    AF_DCMotor motor2(2); // 这四条语句括号中的数字代表各个电机对象所连接在AFMotor扩展板的电机端口号码。
    AF_DCMotor motor3(3); // AF_DCMotor motor1(1); 代表motor1对象连接在AFMotor扩展板的M1端口上。
    AF_DCMotor motor4(4); // AFMotor电机扩展板最多可以驱动4个直流电机,最少可以驱动1个直流电机。
     
    void setup() {
      motor1.setSpeed(200); // 这4条语句的作用是通过setSpped库函数设置电机运行速度。
      motor2.setSpeed(200); // setSpped库函数中的参数是运行速度参数。
      motor3.setSpeed(200); // 运行速度参数允许范围是0~255。
      motor4.setSpeed(200); // 速度参数越大,运转速度越快。参数为0时电机停止转动。
     
      motor1.run(RELEASE); // 这4条语句的作用是让4个电机在启动时停止转动
      motor2.run(RELEASE); // run库函数允许使用的关键字参数有RELEASE、FORWARD、BACKWARD
      motor3.run(RELEASE); // 使用关键字RELEASE作为参数使用时,run库函数将会让扩展板停止提供电机运转动力
      motor4.run(RELEASE); // 电机旋转一旦失去动力就会自然的停止转动。
    }
     
    void loop() {
      motor1.run(FORWARD); // 这4条语句的作用是利用run库函数控制4个电机"正向"旋转。
      motor2.run(FORWARD); // 这里所谓的“正向”旋转只是一种说法,假如您发现电机旋转方向和您所要的“正向”不一致。
      motor3.run(FORWARD); // 您可以将电机的两个引线从扩展板上断开,然后交换顺序再接到扩展板接口上
      motor4.run(FORWARD); // 这时您会看到同样使用FORWARD关键字作为run库函数的参数,电机的旋转方向却反过来了。
      
      for (int i=0; i<=255; i++) {   // 这里使用for循环语句控制4个电机速度由停止逐步加速,最终电机运转达到最大速度。
        motor1.setSpeed(i);          // 在for循环语句的作用下,setSpeed库函数的速度参数i由0逐渐增大,最终达到255。
        motor2.setSpeed(i);          // 因此电机运行速度也是由停止逐渐加速,最终达到最大速度。
        motor3.setSpeed(i);          // 对于一些模型电机来说,当速度参数小于一定数值以后就不能转动了。也就是说,也许您的电机
        motor4.setSpeed(i);          // 在速度参数在小于某一个速度参数数值的时候就无法转动了。这属于正常现象。
        delay(10);                   // 具体这个最小值是多少,对于不同的电机来说是不同的。有的可能是50也有的可能是100。
     }                               // 换句话说,很可能您的某一个直流电机在速度参数小于50的情况下就无法转动了。
                                     // 也可能您的另一个直流电机在参数100以下的情况下就无法转动了。
                                     
      for (int i=255; i>=0; i--) {   // 这里使用for循环语句控制4个电机由最大旋转速度逐步减速最终停止旋转。
        motor1.setSpeed(i);          // 这一系列语句的操作与上一段for循环语句类似。唯一区别是上一段for循环控制速度参数i由0涨到255
        motor2.setSpeed(i);          // 而这一段语句控制速度参数i由255减小到0。同样您可能会发现当速度参数没有减小到零的时候,电机就已经
        motor3.setSpeed(i);          // 停止旋转了。这其中的原因在上一段for循环语句中已经介绍了。不在这里赘述了。
        motor4.setSpeed(i); 
        delay(10);
     }
      
      motor1.run(BACKWARD); // 这4条语句的作用是利用run库函数控制4个电机"反向"旋转。
      motor2.run(BACKWARD); // 同样的,这里所谓的“反向”旋转也只是一种说法。这部分程序内容 
      motor3.run(BACKWARD); // 与本程序33-36行中的内容十分类似。唯一区别就是使用了“BACKWARD”
      motor4.run(BACKWARD); // 关键字参数来通过库函数run控制电机“反向”旋转。
      
      for (int i=0; i<=255; i++) {   // 利用for循环语句控制速度参数i由小到大
        motor1.setSpeed(i);          // 电机也会以“反向”旋转的方式由停止逐步达到最大速度
        motor2.setSpeed(i); 
        motor3.setSpeed(i); 
        motor4.setSpeed(i); 
        delay(10);
     }
     
      for (int i=255; i>=0; i--) {   // 利用for循环语句控制速度参数i由大到小
        motor1.setSpeed(i);          // 电机也会以“反向”旋转的方式由最大速度逐步减小到停止
        motor2.setSpeed(i); 
        motor3.setSpeed(i); 
        motor4.setSpeed(i); 
        delay(10);
     }
      
      motor1.run(RELEASE);   // 这四条语句作用是使用关键字RELEASE作为run函数的参数。
      motor2.run(RELEASE);   // 在这种情况下,AFMotor扩展板将会停止为电机旋转提供动力。
      motor3.run(RELEASE);   // 电机也就会自然的停止转动。
      motor4.run(RELEASE);   // 本段程序后面的delay(1000)的作用就是让4个电机保持无旋转动力状态1秒钟
      
      delay(1000);
    }
    

    驱动28BYJ-48步进电机电路

    AFMotor电机扩展板最多可以驱动2个28BYJ-48步进电机。以下我们将给您介绍两种电机扩展板的使用方法。第一种是在您开发项目时的使用方法,第二种是项目开发完毕后,您在使用扩展板驱动电机工作时的方法。这两种方法最大的区别在于:开发时的Arduino开发板是通过USB数据线连接在电脑上的。但是在工作时开发板是不连接电脑的。

    项目开发时AFMOTOR电机扩展板使用方法

    首先介绍的是在项目开发时AFMotor电机扩展板的使用方法。请看下图展示的电路连接说明。
    在这里插入图片描述
    AFMotord电机扩展板驱动28BYJ-48步进电机(开发时电路连接)

    与驱动直流电机的原理相同,在使用AFMotor扩展板开发步进电机项目时,扩展板上的跳线也一定要移除!请务必注意!

    工作运行时AFMOTOR电机扩展板使用方法

    一般在正常工作状态下,Arduino开发板是不会与电脑连接的。这时我们就要通过AFMotor电机扩展板上外接电源端口为扩展板和Arduino同时供电。在这种情况下的电路连接如下图所示:
    在这里插入图片描述
    AFMotord电机扩展板驱动28BYJ-48步进电机(工作时电路连接)


    驱动28BYJ-48步进电机示例程序

    示例程序1

    本示例程序旨在演示如何使用Arduino Uno开发板通过AFMotor电机扩展板以及AFMotor库来驱动2个28BYJ-48步进电机。
    如需查看此示例程序演示视频,请点击这里

    AFMotor电机扩展板驱动2个28BYJ-48步进电机示例程序-1

    /*
    AFMotor电机扩展板驱动2个28BYJ-48步进电机示例程序-1
    By 太极创客(http://www.taichi-maker.com)
    2019-03-01
     
    本示例程序旨在演示如何使用Arduino Uno开发板通过AFMotor电机扩展板以及AFMotor库来驱动2个28BYJ-48步进电机。
     
    如需获得更多关于本示例程序的电路连接以及AFMotor电机扩展板的资料信息,
    请参考太极创客网站(http://www.taichi-maker.com),并在首页搜索栏中搜索关键字:AFMotor。
     
    AFMotor库虽然可以用于驱动步进电机,但是它的功能太简单了。所以我们建议您使用AccelStepper库来控制28BYJ-48步进电机。
    关于如何使用AccelStepper库控制步进电机的相关参考资料,请您前往太极创客网站(http://www.taichi-maker.com),并且在首页
    的搜索栏中输入关键字“AFMotor”就可以找到我站专门介绍AFMotor电机扩展板的页面。在该页面里除了有如何使用AccelStepper库
    控制AFMotor电机扩展板的资料,还有很多其它资料信息帮助您学习使用Arduino控制AFMotor电机扩展板。
    */
    #include <AFMotor.h> // 本程序中使用AFMotor库
     
    AF_Stepper motor1(2048, 1);  // 这2条语句的作用是建立2个步进电机对象,它们的名称分别是:motor1/2。
    AF_Stepper motor2(2048, 2);  // 对象名称后面括号中的两个参数分别代表了步进电机旋转一周的步数以及
                                  // 步进电机连接在扩展板上的端口号。如AF_Stepper motor1(2048, 1)语句中
                                  // 参数2048代表motor1旋转一周需要走2048步。假如您的电机旋转一周需要32步,
                                  // 那么请在第一个参数位置输入32这一数字参数。
                                  // 括号中第二个参数1代表motor1连接在M1和M2端口。
                                  // 对于motor2对象,它括号中的参数2代表该电机连接在M3和M4端口。
     
    void setup() {
      Serial.begin(9600);         //启动串口通讯
      
      motor1.setSpeed(10);        // 这2条语句的作用是通过setSpped库函数设置电机运行速度。
      motor2.setSpeed(10);        // setSpped库函数中的参数是运行速度参数。
                                  // 速度参数越大,运转速度越快。参数为0时电机停止转动。
    }
     
    /*
    以下的loop函数中有4段程序语句。它们的内容十分类似,主要语句都是是通过step库函数来控制
    步进电机的运行模式。step库函数一共有3个参数。如loop函数的第二行语句:motor1.step(2048, FORWARD, SINGLE)。
    括号中的第一个参数是控制电机走的步数,这里的参数2048就是让电机走2048步。
    接下来的关键字参数"FORWARD"作用是控制电机旋转方向。"FORWARD"是控制电机"正转",
    这里也可以使用关键字"BACKWARD"让电机"反转"。
    最后一个关键字参数是用于控制步进电机运转模式的。这里可选的关键字参数有:
    SINGLE - 全步进模式(单线圈)。电机每走一步,扩展板只给一相线圈供电。
    DOUBLE - 全步进模式(双线圈)。电机每走一步,扩展板会同时给两相线圈供电。
             此模式运行的电机比SINGLE模式下的扭矩要更大,但是电机耗电也会更多。
    INTERLEAVE - 半步进模式。这种模式是SINGLE和DOUBLE的混合。电机每走一步,扩展板对线圈供电方式
                 在一相和两相之间交替切换。举例来说,电机走第一步时,只有一相线圈通电。
                 走第二步时,会有两相线圈供电,然后又是一相,再两相......这样交替通电。
                 这种控制模式的优点是电机运行更流畅,但是缺点是运行速度大打折扣。
    MICROSTEP - 微步进模式。此模式下的电机运行更光滑,但缺点是扭矩会打折扣。    
    */
     
    void loop() {
      Serial.println("Single Mode");        //串口监视器输出当前运行模式为“Single”
      motor1.step(2048, FORWARD, SINGLE);    //步进电机以SINGLE模式"正转"2048步
      motor1.step(2048, BACKWARD, SINGLE);   //步进电机以SINGLE模式"反转"2048步
     
      Serial.println("Double Mode");        //串口监视器输出当前运行模式为“Double”
      motor2.step(2048, FORWARD, DOUBLE);    //步进电机以DOUBLE模式"正转"2048步
      motor2.step(2048, BACKWARD, DOUBLE);   //步进电机以DOUBLE模式"反转"2048步
     
      Serial.println("Interleave Mode");        //串口监视器输出当前运行模式为“Interleave”
      motor1.step(2048, FORWARD, INTERLEAVE);    //步进电机以INTERLEAVE模式"正转"2048步
      motor1.step(2048, BACKWARD, INTERLEAVE);   //步进电机以INTERLEAVE模式"反转"2048步
     
      Serial.println("Micrsostep Mode");         //串口监视器输出当前运行模式为“Micrsostep”
      motor2.step(2048, FORWARD, MICROSTEP);      //步进电机以MICROSTEP模式"正转"2048步
      motor2.step(2048, BACKWARD, MICROSTEP);     //步进电机以MICROSTEP模式"反转"2048步
    }
    
    

    示例程序2

    无法复制本示例程序?

    本示例程序旨在演示如何使用Arduino Uno开发板通过AFMotor电机扩展板以及AccelStepper库驱动2个28BYJ-48步进电机。由于本程序主要目的是演示AFMotor电机扩展板使用方法,因此本程序仅仅是让28BYJ-48步进电机在AFMotor的控制下匀速旋转。 对于AccelStepper库的丰富功能,本程序没有做出很完整的演示。AccelStepper库的功能远远超过本示例程序所演示的内容。 如果您希望了解AccelStepper库的详细使用方法,请点击这里进入本站的AccelStepper库页
    如需查看此示例程序演示视频,请点击这里

    AFMotor电机扩展板通过AccelStepper库驱动2个28BYJ-48步进电机示例程序

    /*
    AFMotor电机扩展板通过AccelStepper库驱动2个28BYJ-48步进电机示例程序
    By 太极创客(http://www.taichi-maker.com)
    2019-02-27
     
    本示例程序旨在演示如何使用Arduino Uno开发板通过AFMotor电机扩展板以及AccelStepper库驱动2个28BYJ-48步进电机。
     
    由于本程序主要目的是演示AFMotor电机扩展板使用方法,因此本程序仅仅是让28BYJ-48步进电机在AFMotor的控制下匀速旋转。
    对于AccelStepper库的丰富功能,本程序没有做出很完整的演示。AccelStepper库的功能远远超过本示例程序所演示的内容。
    如果您希望了解AccelStepper库的详细使用方法,请参考太极创客网站的AccelStepper库介绍页面。网址:
    http://www.taichi-maker.com/homepage/reference-index/arduino-library-index/accelstepper-library/
     
    如需获得更多关于本示例程序的电路连接以及AFMotor电机扩展板的资料信息,
    请参考太极创客网站,并在首页搜索栏中搜索关键字:AFMotor。
    */
    #include <AFMotor.h>       // 本程序将用到AFMotor库
    #include <AccelStepper.h>  // 本程序将用到AccelStepper库
     
    AF_Stepper motor1(2048, 1);  // 这2条语句的作用是建立2个步进电机对象,它们的名称分别是:motor1/2。
    AF_Stepper motor2(2048, 2);  // 对象名称后面括号中的两个参数分别代表了步进电机旋转一周的步数以及
                                  // 步进电机连接在扩展板上的端口号。如AF_Stepper motor1(2048, 1)语句中
                                  // 参数2048代表motor1旋转一周需要走2048步。假如您的电机旋转一周需要32步,
                                  // 那么请在第一个参数位置输入32这一数字参数。
                                  // 括号中第二个参数1代表motor1连接在M1和M2端口。
                                  // 对于motor2对象,它括号中的参数2代表motor2连接在M3和M4端口。
    /*
    以下4个函数(forwardstep1/backwardstep1/forwardstep2/backwardstep2)
    都仅有一条调用AFMotor库函数onestep的语句。 如函数名称所示,onestep库函数可以让电机运行1步。
    onestep库函数有两个参数,参数1用于控制运行方向。参数2用于控制步进电机运行模式。对于第2个参数,还可以
    使用DOUBLE,INTERLEAVE,MICROSTEP。在本程序末尾部分有这些参数所对应的运行模式详细说明。
    */
    void forwardstep1() {                
      motor1.onestep(FORWARD, SINGLE);    
    }                                     
    void backwardstep1() {  
      motor1.onestep(BACKWARD, SINGLE);
    }
    void forwardstep2() {  
      motor2.onestep(FORWARD, SINGLE);
    }
    void backwardstep2() {  
      motor2.onestep(BACKWARD, SINGLE);
    }
     
    /*
    以下2条语句的作用是建立2个步进电机对象,它们的名称分别是:stepper1、stepper2。
    步进电机对象名称后的括号里有两个参数。这两个参数是步进电机“正转1步”和“反转1步”
    的函数名称。
     
    我们来看一个例子:AccelStepper stepper1(forwardstep1, backwardstep1)
    该程序语句括号中第1个参数是motor1电机正转1步的函数名称forwardstep1。
    第2个参数是motor1电机反转1步的函数名称backwardstep1。
    有了这两个函数名称,AccelStepper库就可以建立stepper1对象控制步进电机motor1了。
    同理,stepper2是用来控制motor2的AccelStepper库对象。
    */
     
    AccelStepper stepper1(forwardstep1, backwardstep1); 
    AccelStepper stepper2(forwardstep2, backwardstep2); 
     
    void setup(){        
       stepper1.setMaxSpeed(500);	
       stepper1.setSpeed(300);	
       stepper2.setMaxSpeed(500); 
       stepper2.setSpeed(300);  
    }
     
    void loop(){  
       stepper1.runSpeed();
       stepper2.runSpeed();
    }
     
    /*
    AFMotor的onestep库函数运行模式说明:
     
    SINGLE - 全步进模式(单线圈)。电机每走一步,扩展板只给一相线圈供电。
    DOUBLE - 全步进模式(双线圈)。电机每走一步,扩展板会同时给两相线圈供电。
             此模式运行的电机比SINGLE模式下的扭矩要更大,但是电机耗电也会更多。
    INTERLEAVE - 半步进模式。这种模式是SINGLE和DOUBLE的混合。电机每走一步,扩展板对线圈供电方式
                 在一相和两相之间交替切换。举例来说,电机走第一步时,只有一相线圈通电。
                 走第二步时,会有两相线圈供电,然后又是一相,再两相......这样交替通电。
                 这种控制模式的优点是电机运行更流畅,但是缺点是运行速度大打折扣。
    MICROSTEP - 微步进模式。此模式下的电机运行更光滑,但缺点是扭矩会打折扣。   
    */
    

    示例程序3

    以下示例程序旨在演示如何使用AccelStepper库配合AFMotor电机扩展板以及AccelStepper库的丰富功能。由于此程序大量使用AccelStepper库的程序内容,如果想要完全理解这段程序,需要您首先了解AccelStepper库的使用方法。太极创客网站中有专门介绍AccelStepper库的讲解,您可以点击这里进入该页面

    Arduino通过AFMotor电机扩展板以及AccelStepper库控制28BYJ-48步进电机示例程序-2

    Arduino

    /*
      Arduino通过AFMotor电机扩展板以及AccelStepper库控制28BYJ-48步进电机示例程序-2
      by 太极创客(www.taichi-maker.com)
      2019-03-01
      
      本程序旨在演示AccelStepper库的丰富功能以及如何使用AccelStepper库配合AFMotor电机扩展板。
      您可以通过Arduino IDE的串口监视器输入电机控制指令从而控制步进电机。
      
      注意:使用此示例程序时应将串口监视器设置为“没有结束符”。
        
     * 电机指令列表
     * 'o' 利用currentPosition获取当前电机输出轴位置并通过串口监视器输出该信息
     * 'v' 利用moveTo函数使电机运行到用户指定坐标位置,moveTo函数不会“block”程序。
     *     例:v1024 - 将电机moveTo到1024位置
     * 'm' 利用move函数使电机运行相应步数。move函数不会“block”程序。
     *     例:m1024 - 使电机运行1024步 
     * 'r' 利用runToNewPosition函数让电机运行到用户指定坐标位置。runToNewPosition函数功能
     *     与moveTo函数功能基本相同。唯一区别是runToNewPosition函数将“block”程序运行。
     *     即电机没有到达目标位置前,Arduino将不会继续执行后续程序内容。
     *     这一点很像Arduino官方Stepper库中的step函数。
     *     例:r1024 - 将电机runToNewPosition到1024位置。Arduino在电机达到1024位置前将停止
     *     其它程序任务的执行。
     * 's' 利用setCurrentPosition函数设置当前位置为用户指定位置值。
     *     例:s0 - 设置当前位置为0
     * 'a' 利用setAcceleration函数设置加速度 
     *     例:a100 - 设置电机运行的加速度为100 
     * 'x' 利用setMaxSpeed函数设置最大速度 
     *     例:x500 - 设置电机运行的最大速度为500 
     * 'd' 用户通过此指令可指定哪一个电机进行工作  
     *     例:d1 一号电机工作,d2 二号电机工作, d0 两个电机同时工作
     
      如需获得更多关于本示例程序的电路连接以及AFMotor电机扩展板的资料信息,
      请参考太极创客网站,并在首页搜索栏中搜索关键字:AFMotor。
     
      如果您希望了解AccelStepper库的详细使用方法,请参考太极创客网站的AccelStepper库介绍页面。网址:
      http://www.taichi-maker.com/homepage/reference-index/arduino-library-index/accelstepper-library/  
    */
    #include <AccelStepper.h>
    #include <AFMotor.h>
     
    #define stepperSpeed 300
     
    AF_Stepper motor1(2048, 1);
    AF_Stepper motor2(2048, 2);
     
    char cmd;        //电机指令字符
    int data;        //电机指令参数
    int stepperNum;  //控制电机编号
     
    void forwardstep1() {  
      motor1.onestep(FORWARD, DOUBLE);
    }
    void backwardstep1() {  
      motor1.onestep(BACKWARD, DOUBLE);
    }
     
    void forwardstep2() {  
      motor2.onestep(FORWARD, DOUBLE);
    }
    void backwardstep2() {  
      motor2.onestep(BACKWARD, DOUBLE);
    }
     
    AccelStepper stepper1(forwardstep1, backwardstep1); // use functions to step
    AccelStepper stepper2(forwardstep2, backwardstep2); // use functions to step
    void setup(){    
       stepper1.setMaxSpeed(stepperSpeed);	
       stepper1.setAcceleration(100.0);  // 1号电机加速度50.0
       stepper2.setMaxSpeed(stepperSpeed); 
       stepper2.setAcceleration(100.0);  // 2号电机加速度50.0 
     
      Serial.begin(9600);
      Serial.println(F("++++++++++++++++++++++++++++++++++"));     
      Serial.println(F("+Taichi-Maker AFMotor Shield Demo+"));   
      Serial.println(F("+     www.taichi-maker.com       +"));  
      Serial.println(F("++++++++++++++++++++++++++++++++++"));  
      Serial.println(F(""));  
      Serial.println(F("Please input motor command:"));    
    }
     
    void loop(){  
     if (Serial.available()) {     // 检查串口缓存是否有数据等待传输 
        cmd = Serial.read();        // 获取电机指令中指令信息    
        Serial.print(F("cmd = "));
        Serial.print(cmd);    
        Serial.print(F(" , ")); 
        
        data = Serial.parseInt();   // 获取电机指令中参数信息  
        Serial.print(F("data = "));
        Serial.print(data);   
        Serial.println(F(""));    
        
        runUsrCmd();
      }
     
      stepper1.run();
      stepper2.run();
    }
     
    void runUsrCmd(){
      switch(cmd){ 
        case 'o': //利用currentPosition获取当前电机输出轴位置并通过串口监视器输出该信息
        
          Serial.print(F("stepper1 Position: ")); 
          Serial.println(stepper1.currentPosition());   
          Serial.print(F("stepper2 Position: ")); 
          Serial.println(stepper2.currentPosition()); 
          Serial.print(F("Current Running Motor: "));  
          
          if (stepperNum == 1 || stepperNum == 2 ) {
            Serial.print(F("Motor# ")); 
            Serial.println(stepperNum); 
          } else if (stepperNum == 0 ) {
            Serial.println(F("Both Motors")); 
          }
          break;    
               
        case 'v': //利用moveTo函数使电机运行到用户指定坐标位置,moveTo函数不会“block”程序。
           
          if (stepperNum == 1){
            Serial.print(F("Motor1 'moveTo' "));  Serial.println(data); 
            stepper1.moveTo(data); 
          } else if (stepperNum == 2){
            Serial.print(F("Motor2 'moveTo' "));  Serial.println(data); 
            stepper2.moveTo(data); 
          }else if (stepperNum == 0){
            Serial.print(F("Both Motors 'moveTo' "));  Serial.println(data); 
            stepper1.moveTo(data);
            stepper2.moveTo(data); 
          } 
          break;
          
        case 'm':   // 利用move函数使电机运行相应步数。move函数不会“block”程序。
          
          if (stepperNum == 1){
            Serial.print(F("Motor1 'move'  "));  Serial.println(data); 
            stepper1.move(data); 
          } else if (stepperNum == 2){
            Serial.print(F("Motor2 'move'  "));  Serial.println(data);
            stepper2.move(data); 
          }else if (stepperNum == 0){
            Serial.print(F("Both Motors 'move'  "));  Serial.println(data);
            stepper1.move(data);
            stepper2.move(data); 
          } 
          break;
     
        case 'r':  //利用runToNewPosition函数让电机运行到用户指定位置值。  
          if (stepperNum == 1){
            Serial.print(F("Motor1 'runToNewPosition' "));
            Serial.println(data);
            stepper1.runToNewPosition(data);  
          } else if (stepperNum == 2){
            Serial.print(F("Motor2 'runToNewPosition' "));
            Serial.println(data);
            stepper2.runToNewPosition(data);  
          }else if (stepperNum == 0){
            Serial.print(F("Both Motors 'runToNewPosition' "));
            Serial.println(data);
            stepper1.runToNewPosition(data); 
            stepper2.runToNewPosition(data);   
          }      
          break;   
          
        case 's':   //利用setCurrentPosition函数设置当前位置为用户指定位置值。
          if (stepperNum == 1){
            Serial.print(F("Set stepper1 Current Position to "));
            Serial.println(data);
            stepper1.setCurrentPosition(data); 
          } else if (stepperNum == 2){
            Serial.print(F("Set stepper2 Current Position to "));
            Serial.println(data);
            stepper2.setCurrentPosition(data);
          }else if (stepperNum == 0){
            stepper1.moveTo(data);
            Serial.print(F("Set both steppers' Current Position to "));
            Serial.println(data);
            stepper1.setCurrentPosition(data);
            stepper2.setCurrentPosition(data);
          }         
          break;
     
        case 'a':  //利用setAcceleration函数设置加速度 
          if (stepperNum == 1){
            Serial.print(F("Motor1 'setAcceleration' "));
            Serial.println(data);
            stepper1.setAcceleration(data);  
          } else if (stepperNum == 2){
            Serial.print(F("Motor2 'setAcceleration' "));
            Serial.println(data);
            stepper2.setAcceleration(data);  
          }else if (stepperNum == 0){
            Serial.print(F("Both Motors 'setAcceleration' "));
            Serial.println(data);
            stepper1.setAcceleration(data); 
            stepper2.setAcceleration(data); 
          }      
          break;   
     
        case 'x':  //利用setMaxSpeed函数设置最大速度   
          if (stepperNum == 1){
            Serial.print(F("Motor1 'setMaxSpeed' "));
            Serial.println(data);
            stepper1.setMaxSpeed(data); 
          } else if (stepperNum == 2){
            Serial.print(F("Motor2 'setMaxSpeed' "));
            Serial.println(data);
            stepper2.setMaxSpeed(data); 
          }else if (stepperNum == 0){
            Serial.print(F("Both Motors 'setMaxSpeed' "));
            Serial.println(data);
            stepper1.setMaxSpeed(data); 
            stepper2.setMaxSpeed(data); 
          } 
          break;  
     
        case 'd':  //用户通过此指令可指定哪一个电机进行工作  
          if ( data == 1 || data == 2 ){
            stepperNum = data;
            Serial.print(F("Running Motor "));  Serial.println(stepperNum); 
          } else if (data == 0 ){
            stepperNum = data;
            Serial.println(F("Running Both Motors "));  
          } else {
            Serial.print(F("Motor Number Wrong.")); 
          }
          break;
                         
        default:  // 未知指令
          Serial.println(F("Unknown Command"));
      }
    }
    

    驱动舵机(伺服电机)电路连接

    AFMotor扩展板驱动舵机实际上就是通过Arduino的9号和10号引脚来驱动舵机。10号引脚对应的是扩展板上的servo1端口,9号引脚对应的是servo2端口。

    如果您希望更多的了解如何使用Arduino驱动舵机,请点击这里进入舵机资料页面
    在这里插入图片描述
    Arduino AFMotor扩展板驱动舵机(伺服电机)电路连接说明


    驱动舵机(伺服电机)示例程序

    AFMotor电机扩展板驱动2个舵机示例程序

    Arduino

    /*
    AFMotor电机扩展板驱动2个舵机示例程序
    By 太极创客(http://www.taichi-maker.com)
    2019-03-02
     
    本示例程序旨在演示如何使用Arduino Uno开发板通过AFMotor电机扩展板
    驱动2个舵机。AFMotor扩展板驱动舵机实际上就是通过Arduino的9号和10号
    引脚来驱动舵机。10号引脚对应的是扩展板上的servo1端口,9号引脚对应的
    是servo2端口。
     
    如需获得更多关于本示例程序的电路连接以及AFMotor电机扩展板的资料信息,
    请参考太极创客网站,并在首页搜索栏中搜索关键字:AFMotor。
     
    如果您希望更多的了解如何使用Arduino驱动舵机,请参阅太极创客网站的舵机资料。
    http://www.taichi-maker.com/homepage/reference-index/circuit-reference-index/#servo
    */
     
    #include <Servo.h>
     
    Servo servo1;   //建立舵机对象servo1
    Servo servo2;   //建立舵机对象servo2
     
    int pos = 0;    
    void setup() {
      servo1.attach(10);    //servo1对象接在扩展板servo1端口。
                            //servo1端口是由Arduino的10号引脚来控制的。
      servo2.attach(9);     //servo2对象接在扩展板servo2端口。
                            //servo2端口是由Arduino的9号引脚来控制的。 
    }
     
    void loop() {
      //以下程序将控制servo1输出轴左右旋转180度
      for (pos = 0; pos <= 180; pos += 1) { 
        servo1.write(pos);              
        delay(15);                       
      }
      for (pos = 180; pos >= 0; pos -= 1) { 
        servo1.write(pos);    
        delay(15);       
      }
      
      //以下程序将控制servo2输出轴左右旋转180度
      for (pos = 0; pos <= 180; pos += 1) { 
        servo2.write(pos);              
        delay(15);                       
      }
      for (pos = 180; pos >= 0; pos -= 1) { 
        servo2.write(pos);    
        delay(15);       
      }  
    }
    

    其它AFMotor扩展板相关资料

    模拟输入输出引脚

    Arduino开发板的模拟输入输出引脚(A0~A5)没有被AFMotor扩展板所占用。如下图右下角黑色文字和箭头指示,模拟输入输出引脚被AFMotor扩展板延申至板上以便使用。模拟引脚旁的另外两排引脚分别是Arduino的+5V引脚,和接地引脚。它们的具体位置也用黑色文字在下图中进行了标注。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fjMm0etm-1617322916720)(C:%5CUsers%5CAdministrator%5CPictures%5Ctypora%5CArduino-AFMotor-shield.png)]Arduino 电机扩展板 端口说明

    遗憾的是,市场上销售的AFMotor扩展板并没有为模拟引脚以及旁边的+5V和GND引脚焊接插针。如果您需要使用这些引脚的话,需要自己焊接插针。

    未占用引脚

    Arduino引脚2 和引脚13都没有被AFMotor电机扩展板所占用。如果您手中有AFMotor扩展板,您可以在扩展板的正面靠近2号引脚的位置找到一个没有焊接插针的预留孔。这个预留孔就是用于焊接额外插针以便于您使用引脚2的。与上面所提到的模拟引脚一样,引脚2预留孔也没有预先焊好插针。如果要用到此引脚,需要您自行焊接插针。

    引脚13虽然没有被AFMotor扩展板占用,但是扩展板上没有将该引脚引出。使用引脚13需要您自行焊接额外引线才能使用。

    AFMOTOR电机扩展板电路

    在这里插入图片描述

    AFMOTOR电机扩展板电路资料

    百度网盘下载:https://pan.baidu.com/s/1zNbOb2hMowRBCPY095myyw (提取码:16p4)

    展开全文
  • Stablizer Shield 是一款Arduino 扩展板,搭载全球首款高精度6轴姿态传感器,以及单片集成的高电压、高电流双路全桥式电机驱动芯片L298P。另外还有标准的XBee接口,可连接蓝牙、WiFi等通信模块。可用于开发自平衡...
  • 这次新增 4 路计数器, 我自己用来做电机PID调速控制用的 这次 Adruino 的代码也开源了, 买到硬件自己把代码...gitee 开源地址 :https://gitee.com/yfyun/arduino-nano-expanding-board 用了 精易模块 , 自己到论坛下载
  • Arduino CNC电机扩展板详解(A4988驱动42步进电机) 概述 电机步进模式设置 外接直流电源 用于控制电机的Arduino引脚 驱动1个NEMA步进电机(42步进电机)电路连接 驱动1个NEMA步进电机(42步进电机...

    原文地址:http://www.taichi-maker.com/homepage/reference-index/motor-reference-index/arduino-cnc-shield/

    Arduino CNC电机扩展板详解(A4988驱动42步进电机)


    Arduino CNC 电机扩展板概述

    CNC是计算机数字控制(Computerized Numerical Control )的英文缩写。顾名思义,Arduino CNC电机扩展板常用于驱动3D打印机、机械臂或机器人系统中的NEMA17电机(俗称42步进电机)。假如您想要用Arduino扩展板来驱动直流电机28BYJ-48步进电机,我们推荐您使用AFMotor电机扩展板

    CNC扩展板可以支持A4988、DRV8825等步进电机驱动板。本教程页面主要介绍如何使用A4988驱动板来配合CNC扩展板使用。

    学习使用Arduino CNC扩展板需要以下预备知识。您可通过点击以下链接进入太极创客团队为您制作的教程页面:

    NEMA步进电机
    A4988电机驱动板
    AccelStepper库

    当您完成了以上的预备知识学习后我们就可以开始学习使用CNC驱动板了。首先,我们来看一看CNC电机扩展板的外观。
    在这里插入图片描述

    Arduino CNC 电机扩展板(正面)
    在这里插入图片描述A
    rduino-CNC电机扩展板背面

    当我们将A4988安装到 CNC扩展板以后并且将其安装到Arduino Uno开发板上,它就变成了下图这副模样。
    在这里插入图片描述
    Arduino CNC 电机扩展板外观

    上图中CNC电机扩展板装配有3个A4988驱动板。具体安装多少个A4988是根据您需要驱动步进电机数量来决定的。一台步进电机需要一个A4988。比如您需要驱动1个步进电机,那么只需要安装一个A4988就够了。

    安装A4988驱动板的时候请注意驱动板安装方向不要搞反。如下图所示:

    1
    Arduino-CNC-安装A4988模块正确方法


    电机步进模式设置

    如下图所示,CNC扩展板的步进模式设置插针是用来设置电机步进模式的。通过向插针安装跳线帽,我们可以改变电机的步进模式。
    在这里插入图片描述
    Arduino-CNC-电机扩展板步进设置插针

    每一个A4988接口上都有三组步进设置插针。这三组插针旁的电路板上印刷有M0/M1/M2。通过安置跳线帽,我们可以设置电机的步进模式。如下图所示,在Z端口上的M0无跳线/M1有跳线/M2无跳线。对应查找表格即可看到,当前Z端口上A4988驱动模式为1/4步进。
    在这里插入图片描述
    Arduino-CNC-电机扩展板步进设置说明

    注:与单独使用A4988电机模块不同的是,我们只能使用CNC扩展板上的“步进设置跳线”来控制电机的步进模式。


    外接直流电源

    Arduino CNC电机扩展板上配有外接直流电源接口。该接口允许接入的电压范围是12V~36V。具体应该连接多大的电源电压是根据被驱动的电机工作电压所决定的。如果您使用的电机是NEMA17步进电机(42步进电机),通常该电机的工作电压是12伏特,那么您可以为扩展板配一个12伏特的外接电源。另外请注意:千万不要将电源的正负极接反,否则可能会对电路板造成损坏。
    在这里插入图片描述
    Arduino-CNC-扩展板外接电源接口

    如下图所示,我们可以用小改锥顺时针旋转外接电源接口上的螺钉来固定电源引线。若想移除引线,只要逆时针旋转螺钉就可以了。
    在这里插入图片描述
    Arduino-CNC-扩展板外接电源连接方法

    请注意:CNC扩展板的外接电源是无法为Arduino开发板供电的。因此在使用CNC扩展板时,您需要为Arduino单独提供一个电源。假如您不知道如何来为Arduino提供电源的话,可以点击这里了解几种常用的为Arduino供电方法


    用于控制电机的Arduino引脚

    使用Arduino驱动CNC扩展板需要了解各引脚的具体控制功能。在以下说明图中,我们将Arduino各个引脚与CNC扩展板上印刷的标识文字一一对应,另外在下图后面还用文字对引脚功能进行说明。这些都是为了便于您参考使用。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hsj3vraw-1617269177935)(C:%5CUsers%5CAdministrator%5CPictures%5Ctypora%5CArduino-CNC-Shield-Pin-Layout.jpg)]Arduino-CNC-电机扩展板引脚说明

    Arduino引脚 8 ———————– CNC 扩展板 EN ( 所有电机驱动板使能引脚/低电平有效 )
    Arduino引脚 5 ———————– CNC 扩展板 X.DIR ( X端口方向控制引脚)
    Arduino引脚 2 ———————– CNC 扩展板 X.STEP ( X端口步进控制引脚)
    Arduino引脚 6 ———————– CNC 扩展板 Y.DIR ( Y端口方向控制引脚)
    Arduino引脚 3 ———————– CNC 扩展板 Y.STEP ( Y端口步进控制引脚)
    Arduino引脚 7 ———————– CNC 扩展板 Z.DIR ( Z端口方向控制引脚)
    Arduino引脚 4 ———————– CNC 扩展板 Z.STEP ( Z端口步进控制引脚)
    Arduino引脚 13 ———————– CNC 扩展板 A.DIR ( A端口方向控制引脚)
    Arduino引脚 12 ———————– CNC 扩展板 A.STEP ( A端口步进控制引脚)
    **请注意:
    \1. 以上列表仅列出了用于控制电机的Arduino引脚。有关其它引脚介绍,请参考本教程页面的其它引脚说明部分。
    \2. 要使用CNC扩展板的A端口来控制步进电机,您必须先对扩展板进行额外设置。如果您想了解这一知识内容的具体信息,请参考本教程页面的使用端口A驱动电机部分。

    **


    Arduino CNC扩展板驱动1个NEMA步进电机(42步进电机)电路连接

    在这里插入图片描述
    Arduino-CNC-电机扩展板驱动步进电机电路连接-1


    Arduino CNC扩展板驱动1个NEMA步进电机(42步进电机)示例程序

    本示例程序旨在演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动NEMA17步进电机(42步进电机)。本示例程序将用到AccelStepper库,如果您对该库不太了解,请点击这里进入我们制作的AccelStepper库教程页面

    Arduino CNC电机扩展板驱动NEMA17步进电机示例程序-1

    Arduino

    /*
    Arduino CNC电机扩展板驱动NEMA17步进电机示例程序-1
    By 太极创客(http://www.taichi-maker.com)
    2019-03-10
     
    本示例程序旨在演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动NEMA17步进电机(42步进电机)。
     
    如需获得更多关于本示例程序的电路连接以及CNC电机扩展板的资料信息,
    请参考太极创客网站(http://www.taichi-maker.com),并在首页搜索栏中搜索关键字:CNC扩展板
    */
    #include <AccelStepper.h>  //本示例程序使用AccelStepper库
     
    // 定义电机控制用常量
     
    // A4988连接Arduino引脚号
    const int xdirPin = 5;     // 方向控制引脚
    const int xstepPin = 2;    // 步进控制引脚
    const int xenablePin = 8;  // 使能控制引脚
     
    const int moveSteps = 200;    //运行步数
     
    AccelStepper stepper1(1,xstepPin,xdirPin);//建立步进电机对象
     
    void setup() {
      
      pinMode(xstepPin,OUTPUT);     // Arduino控制A4988步进引脚为输出模式
      pinMode(xdirPin,OUTPUT);      // Arduino控制A4988方向引脚为输出模式
      pinMode(xenablePin,OUTPUT);   // Arduino控制A4988使能引脚为输出模式
      digitalWrite(xenablePin,LOW); // 将使能控制引脚设置为低电平从而让
                                    // 电机驱动板进入工作状态
     
      stepper1.setMaxSpeed(300.0);     // 设置电机最大速度300 
      stepper1.setAcceleration(20.0);  // 设置电机加速度20.0  
    }
     
    void loop() {
      // 控制步进电机往复运动
      if ( stepper1.currentPosition() == 0 ){ 
        stepper1.moveTo(moveSteps);              
      } else if ( stepper1.currentPosition() == moveSteps  ){
        stepper1.moveTo(0);            
      }         
      
      stepper1.run();   // 1号电机运行
     
    }
    

    Arduino CNC扩展板驱动3个NEMA步进电机(42步进电机)电路连接

    在这里插入图片描述
    Arduino-CNC-电机扩展板驱动步进电机电路连接-1


    Arduino CNC扩展板驱动3个NEMA步进电机(42步进电机)示例程序

    本示例程序旨在演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动3个NEMA17步进电机(42步进电机)。本示例程序将用到AccelStepper库,如果您对该库不太了解,请点击这里进入我们制作的AccelStepper库教程页面

    Arduino CNC电机扩展板驱动3个NEMA17步进电机示例程序

    Arduino

    
    /*
    Arduino CNC电机扩展板驱动3个NEMA17步进电机示例程序
    By 太极创客(http://www.taichi-maker.com)
    2019-03-10
     
    本示例程序旨在演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动3个NEMA17步进电机。
     
    如需获得更多关于本示例程序的电路连接以及CNC电机扩展板的资料信息,
    请参考太极创客网站(http://www.taichi-maker.com),并在首页搜索栏中搜索关键字:CNC扩展板
    */
    #include <AccelStepper.h>  //本示例程序使用AccelStepper库
     
    // 定义电机控制用常量
    const int enablePin = 8;  // 使能控制引脚
     
    const int xdirPin = 5;     // x方向控制引脚
    const int xstepPin = 2;    // x步进控制引脚
    const int ydirPin = 6;     // y方向控制引脚
    const int ystepPin = 3;    // y步进控制引脚
    const int zdirPin = 7;     // z方向控制引脚
    const int zstepPin = 4;    // z步进控制引脚
     
    const int moveSteps = 200;    //测试电机运行使用的运行步数
     
    AccelStepper stepper1(1,xstepPin,xdirPin);//建立步进电机对象1
    AccelStepper stepper2(1,ystepPin,ydirPin);//建立步进电机对象2
    AccelStepper stepper3(1,zstepPin,zdirPin);//建立步进电机对象3
     
    void setup() {
      
      pinMode(xstepPin,OUTPUT);     // Arduino控制A4988x步进引脚为输出模式
      pinMode(xdirPin,OUTPUT);      // Arduino控制A4988x方向引脚为输出模式
      pinMode(ystepPin,OUTPUT);     // Arduino控制A4988y步进引脚为输出模式
      pinMode(ydirPin,OUTPUT);      // Arduino控制A4988y方向引脚为输出模式
      pinMode(zstepPin,OUTPUT);     // Arduino控制A4988z步进引脚为输出模式
      pinMode(zdirPin,OUTPUT);      // Arduino控制A4988z方向引脚为输出模式
      
      pinMode(enablePin,OUTPUT);   // Arduino控制A4988使能引脚为输出模式
      digitalWrite(enablePin,LOW); // 将使能控制引脚设置为低电平从而让
                                   // 电机驱动板进入工作状态
                                    
      stepper1.setMaxSpeed(300.0);     // 设置电机最大速度300 
      stepper1.setAcceleration(20.0);  // 设置电机加速度20.0  
      stepper2.setMaxSpeed(300.0);     // 设置电机最大速度300 
      stepper2.setAcceleration(20.0);  // 设置电机加速度20.0 
      stepper3.setMaxSpeed(300.0);     // 设置电机最大速度300 
      stepper3.setAcceleration(20.0);  // 设置电机加速度20.0 
    }
     
    void loop() {
      // 控制步进电机1往复运动
      if ( stepper1.currentPosition() == 0 ){ 
        stepper1.moveTo(moveSteps);              
      } else if ( stepper1.currentPosition() == moveSteps  ){
        stepper1.moveTo(0);            
      }  
      
      // 控制步进电机2往复运动
      if ( stepper2.currentPosition() == 0 ){ 
        stepper2.moveTo(moveSteps/2);              
      } else if ( stepper2.currentPosition() == moveSteps/2  ){
        stepper2.moveTo(0);            
      }    
              
      // 控制步进电机3往复运动
      if ( stepper3.currentPosition() == 0 ){ 
        stepper3.moveTo(moveSteps/4);              
      } else if ( stepper3.currentPosition() == moveSteps/4  ){
        stepper3.moveTo(0);            
      }     
      
      stepper1.run();   // 1号电机运行
      stepper2.run();   // 2号电机运行
      stepper3.run();   // 3号电机运行
     
    }
    

    使用端口A驱动电机

    在这里插入图片描述
    Arduino-CNC-扩展板端口A的A4988驱动板

    端口A的两种工作模式

    CNC扩展板的端口A比其它三个端口的功能要更丰富一些。但是使用端口A以前,我们必须先进行一些设置工作,因此很多朋友对如何使用该端口有些不知所措。接下来我将为您解释如何使用和设置CNC扩展板的端口A来控制步进电机。

    端口A有两种工作模式。第一种模式是复制X、Y、Z中任意一个端口上的电机运行情况(以下简称复制模式)。第二种模式是独立模式

    所谓复制模式就是端口A所接的电机完全复制其它端口上的电机运行状态。比如我们将端口A设置为复制端口X,那么端口A电机的运行状况将是完全复制端口X上的电机运行状况。注:在复制模式下,端口A电机不受Arduino开发板的程序控制而只是单纯的复制端口X电机运行。

    除了复制模式外,端口A也可以独立模式来控制电机。这时端口A上的电机才会根据Arduino的程序控制运行。注意:在独立模式下,端口A上安装的A4988驱动板的step引脚是由Arduino的D12引脚所控制。dir引脚是由Arduino的D13引脚所控制。

    设置端口A的工作模式

    以上两种模式的设置是通过扩展板上专门用于设置端口A工作模式的一系列插针来完成的。(如下图所示)
    在这里插入图片描述

    Arduino-CNC-扩展板端口A设置插针

    您可以使用跳线帽来设置端口A的工作模式(如下图所示)
    在这里插入图片描述
    Arduino-CNC-扩展板端口A设置说明


    驱动4个NEMA步进电机(42步进电机)电路连接

    在这里插入图片描述
    CNC扩展板驱动4个步进电机(A端口电机独立运行)


    驱动4个NEMA步进电机(42步进电机)示例程序

    注:以下示例程序演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动4个NEMA17步进电机(42步进电机)。此示例中端口A电机工作模式为独立模式
    本示例程序将用到AccelStepper库,如果您对该库不太了解,请点击这里进入我们制作的AccelStepper库教程页面

    Arduino CNC电机扩展板驱动4个NEMA17步进电机示例程序

    Arduino

    /*
    Arduino CNC电机扩展板驱动4个NEMA17步进电机示例程序
    By 太极创客(http://www.taichi-maker.com)
    2019-03-10
     
    本示例程序旨在演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动4个NEMA17步进电机。
     
    如需获得更多关于本示例程序的电路连接以及CNC电机扩展板的资料信息,
    请参考太极创客网站(http://www.taichi-maker.com),并在首页搜索栏中搜索关键字:CNC扩展板
    */
    #include <AccelStepper.h>  //本示例程序使用AccelStepper库
     
    // 定义电机控制用常量
    const int enablePin = 8;  // 使能控制引脚
     
    const int xdirPin = 5;     // x方向控制引脚
    const int xstepPin = 2;    // x步进控制引脚
    const int ydirPin = 6;     // y方向控制引脚
    const int ystepPin = 3;    // y步进控制引脚
    const int zdirPin = 7;     // z方向控制引脚
    const int zstepPin = 4;    // z步进控制引脚
    const int adirPin = 13;     // a方向控制引脚
    const int astepPin = 12;    // a步进控制引脚
     
    const int moveSteps = 200;    //测试电机运行使用的运行步数
     
    AccelStepper stepper1(1,xstepPin,xdirPin);//建立步进电机对象1
    AccelStepper stepper2(1,ystepPin,ydirPin);//建立步进电机对象2
    AccelStepper stepper3(1,zstepPin,zdirPin);//建立步进电机对象3
    AccelStepper stepper4(1,astepPin,adirPin);//建立步进电机对象4
     
    void setup() {
      
      pinMode(xstepPin,OUTPUT);     // Arduino控制A4988x步进引脚为输出模式
      pinMode(xdirPin,OUTPUT);      // Arduino控制A4988x方向引脚为输出模式
      pinMode(ystepPin,OUTPUT);     // Arduino控制A4988y步进引脚为输出模式
      pinMode(ydirPin,OUTPUT);      // Arduino控制A4988y方向引脚为输出模式
      pinMode(zstepPin,OUTPUT);     // Arduino控制A4988z步进引脚为输出模式
      pinMode(zdirPin,OUTPUT);      // Arduino控制A4988z方向引脚为输出模式
      pinMode(astepPin,OUTPUT);     // Arduino控制A4988a步进引脚为输出模式
      pinMode(adirPin,OUTPUT);      // Arduino控制A4988a方向引脚为输出模式  
      
      pinMode(enablePin,OUTPUT);   // Arduino控制A4988使能引脚为输出模式
      digitalWrite(enablePin,LOW); // 将使能控制引脚设置为低电平从而让
                                   // 电机驱动板进入工作状态
                                    
      stepper1.setMaxSpeed(300.0);     // 设置电机最大速度300 
      stepper1.setAcceleration(20.0);  // 设置电机加速度20.0  
      stepper2.setMaxSpeed(300.0);     // 设置电机最大速度300 
      stepper2.setAcceleration(20.0);  // 设置电机加速度20.0 
      stepper3.setMaxSpeed(300.0);     // 设置电机最大速度300 
      stepper3.setAcceleration(20.0);  // 设置电机加速度20.0 
      stepper4.setMaxSpeed(300.0);     // 设置电机最大速度300 
      stepper4.setAcceleration(20.0);  // 设置电机加速度20.0   
    }
     
    void loop() {
      // 控制步进电机1往复运动
      if ( stepper1.currentPosition() == 0 ){ 
        stepper1.moveTo(moveSteps);              
      } else if ( stepper1.currentPosition() == moveSteps  ){
        stepper1.moveTo(0);            
      }  
      
      // 控制步进电机2往复运动
      if ( stepper2.currentPosition() == 0 ){ 
        stepper2.moveTo(moveSteps/2);              
      } else if ( stepper2.currentPosition() == moveSteps/2  ){
        stepper2.moveTo(0);            
      }    
              
      // 控制步进电机3往复运动
      if ( stepper3.currentPosition() == 0 ){ 
        stepper3.moveTo(moveSteps/4);              
      } else if ( stepper3.currentPosition() == moveSteps/4  ){
        stepper3.moveTo(0);            
      }     
     
      // 控制步进电机4往复运动
      if ( stepper4.currentPosition() == 0 ){ 
        stepper4.moveTo(moveSteps/8);              
      } else if ( stepper4.currentPosition() == moveSteps/8  ){
        stepper4.moveTo(0);            
      }
        
      stepper1.run();   // 1号电机运行
      stepper2.run();   // 2号电机运行
      stepper3.run();   // 3号电机运行
      stepper4.run();   // 3号电机运行
    }
    

    其它CNC扩展板的引脚功能介绍

    除了以上我所介绍的控制电机用引脚以外,CNC扩展板上还有另外2组引脚插针。如下图所示,这2组引脚插针分别是:

    – 步进电机控制插针
    – 其他引脚插针
    在这里插入图片描述
    CNC电机扩展板引脚

    步进电机控制插针

    如下图所示,步进电机控制插针共有两排。
    在这里插入图片描述
    电机控制引脚(备用)

    在插针旁印有各个引脚的名称标识。每行插针标识都使用”/”作为分割。”/”左侧的文字是图中蓝色插针的引脚标识。”/”右侧的文字是图中黄色插针的引脚标识。(如下图所示)
    在这里插入图片描述
    电机控制引脚标识说明

    上图中蓝色方框的引脚名称对应的是蓝色引脚插针,黄色方框中的引脚名称对应的是黄色引脚插针。这些引脚的作用是便于我们使用Arduino开发板以外的开发板来控制CNC扩展板。比如您可以使用树莓派或者ESP8266-NodeMCU等开发板通过这些备用引脚来控制CNC扩展板。

    以下是这组引脚的功能。

    EN: 所有电机驱动板使能引脚/低电平有效。(此引脚与各端口上的A4988 EN引脚联通)
    GND:接地
    X.STEP: X端口步进控制引脚
    X.DIR: X端口方向控制引脚
    Y.STEP: Y端口步进控制引脚
    Y.DIR: Y端口方向控制引脚
    Z.STEP: Z端口步进控制引脚
    Z.DIR: Z端口方向控制引脚
    A.STEP: A端口步进控制引脚
    A.DIR: A端口方向控制引脚
    5V: 所有电机驱动板供电引脚(此引脚与各端口上的A4988 VDD引脚联通)
    请注意,当使用非Arduino开发板来控制CNC扩展板时,请不要忘记为这里的5V引脚提供电源。这一操作的目的是为了确保各个A4988端口上的驱动板有电源供应

    其它引脚插针

    如下图所示,CNC扩展板上还配有两排很长的引脚插针。
    在这里插入图片描述
    CNC扩展板其它引脚

    这两排引脚中,一排是黑色的而另一排是白色的。其中黑色的引脚全都是GND引脚。白色引脚插针旁的文字标识是这些引脚的名称。它们与Arduino的引脚是联通的。这些引脚与Arduino引脚的联通关系可通过以下列表查询。

    CNC 扩展板 Z+ 引脚 ———————– Arduino引脚 11
    CNC 扩展板 Z- 引脚 ———————– Arduino引脚 11
    CNC 扩展板 Y+ 引脚 ———————– Arduino引脚 10
    CNC 扩展板 Y- 引脚 ———————– Arduino引脚 10
    CNC 扩展板 X+ 引脚 ———————– Arduino引脚 9
    CNC 扩展板 X- 引脚 ———————– Arduino引脚 9
    CNC 扩展板 SpnEN 引脚 ———————– Arduino引脚 12
    CNC 扩展板 SpnDir引脚 ———————– Arduino引脚 13
    CNC 扩展板 CoolEn引脚 ———————– Arduino引脚 A3
    CNC 扩展板 Abort 引脚 ———————– Arduino引脚 A0
    CNC 扩展板 Hold 引脚 ———————– Arduino引脚 A1
    CNC 扩展板 Resume引脚 ———————– Arduino引脚 A2
    CNC 扩展板 E-STOP引脚 ———————– Arduino引脚 Reset

    以上引脚的名称看起来十分奇怪,事实上这些名字是来自CNC扩展板的最初设计。最早CNC扩展板主要用于驱动小型数控机床。上面列表中的引脚在机床中各自承担不同的作用。比如X+/X-这两个引脚用于工件台X向限位,再比如CoolEn用于冷却液的开关控制。因此这些引脚才会有了这些”奇奇怪怪”的名字。不过如今CNC扩展板的应用已经远远超越了数控车床而成为了3D打印机,机器人等项目的热门选择。但是这些引脚的名字还是保留了下来。

    由于CNC扩展板完全将Arduino开发板覆盖住了,假如我们的项目中除了要控制步进电机还需要Arduino来进行其它工作。您可通过上面列表中的对应关系来找到Arduino引脚并加以利用。比如我们想要让Arduino驱动一个LED点亮和熄灭,这时就可以使用CNC扩展板的 SpnEN 引脚来控制LED。在写程序的时候,只要使用Arduino引脚12就可以控制这个LED了。原因是SpnEN引脚与引脚12是联通的。用程序来控制Arduino引脚12就等同于用程序控制SpnEN 引脚。

    展开全文
  • 在本篇文章中,我们将制作一款两轮遥控机器人小车,使用的组件包含nRF24L01模块、Arduino UNO和Funduino操纵杆扩展板组成的控制部分,Arduino nano开发板以及和一个用于控制直流电机的L298N电机驱动器。 nRF24L01和L...

    在本篇文章中,我们将制作一款两轮遥控机器人小车,使用的组件包含nRF24L01模块、Arduino UNO和Funduino操纵杆扩展板组成的控制部分,Arduino nano开发板以及和一个用于控制直流电机的L298N电机驱动器。

    nRF24L01和L298N电机驱动器为机器人小车提供动力,并且以arduino nano为大脑。此外,为了控制这款车,我们使用Arduino UNO和Funduino操纵杆模块。

    nRF24L01射频收发器芯片

    nRF24L01是一款真正快速、低成本的RF收发器芯片。它的工作频率为2.4GHz,速率高达2Mbps,功耗极低,这意味着一节5号电池可以为其供电多年。它的工作电压范围为1.9至3.6V,峰值RX / TX电流小于14mA。

    在这里插入图片描述

    增强型ShockBurst硬件协议加速器还可以卸载应用微控制器的时间关键协议功能,实现与低成本第三方微控制器的高级和强大无线连接。

    更多内容请访问以下链接:https://www.yiboard.com/thread-1253-1-1.html


    欢迎扫码关注微信公众号:yi-board
    在这里插入图片描述

    展开全文
  • arduino扩展板从种类来说大致可以分为三类: 1.传感器扩展板 举例:DFRduino IO 传感器扩展板 V7.1 IO传感器扩展板V7.1 DFRobot IO传感器扩展板系列的优势:为初学者省去繁琐的面包板接线和故障排除,专注实现自己...

    arduino扩展板从种类来说大致可以分为三类:

    1.传感器扩展板
    举例:DFRduino IO 传感器扩展板 V7.1
    传感器扩展板

    IO传感器扩展板V7.1
    DFRobot IO传感器扩展板系列的优势:为初学者省去繁琐的面包板接线和故障排除,专注实现自己的创意想法。
    把Arduino的端口扩展成3P接口,直插3P传感器模块。14个数字口(6个PWM口),6个模拟口。
    丰富的通信和存储模块接口。中部直插Xbee封装的蓝牙、WIFI和Xbee通信模块。旁边设置了普通蓝牙模块、APC和SD卡的扩展接口。
    外部电源扩展,为你的Arduino作品提供持久续航。扩展板角落接线柱为主控器和扩展板供电,中部接线柱为数字口上的舵机供电。
    5.5V的时候提供3.3V的供电。
    DFRduino IO传感器扩展板技术规格
    兼容Arduino UNO,MGEA, DUE
    3.3V/5V切换
    具备I2C接口
    支持XBEE,APC220通信模块和SD卡读写

    2.网络扩展板
    举例:以太网络扩展板-W5200 (Arduino兼容)
    网络扩展板

    以太网扩展板
    如何让你的Arduino设备上网?Arduino网络扩展板是最好的选择。只要将这款W5200网络扩展板插到你的UNO或者Mega主板上,接上RJ45网线,然后烧好代码,即可将Arduino设备轻松连接到网络。板载MicroSD卡接口,可在一些复杂应用上做大容量数据存储,如存储Web网页数据等。
    W5200芯片是一种采用全硬件TCP/ IP协议栈的嵌入式以太网控制器,它能使嵌入式系统通过SPI(串行外设接口)接口轻松地连接到网络。W5200特别适合那些需要使用MCU来实现互联网功能的客户,而这就需要单片机系统具有完整的TCP/ IP协议栈和10/100Mbps以太网网络层(MAC)和物理层(PHY)。
    W5200是由已经通过市场考验的全硬件TCP/ IP协议栈、及以太网网络层和物理层的整合而成。其全硬件的TCP/ IP协议栈全程支持TCP、UDP、IPv4、ICMP、ARP、IGMP和PPPoE协议,而且已经连续多年在各种实际应用中得以证明。W5200使用32KB缓存作为其数据通信内存。通过使用W5200,用户只需通过使用一个简单的socket程序就能实现以太网的应用,而不再需要处理一个复杂的以太网控制器了。
    SPI(串行外设接口) 提供了轻松与外部MCU连接的接口。W5200支持高达80MHZ的SPI接口间通信。为了降低系统功率的消耗,W5200提供了网络唤醒和休眠模式。
    W5200收到原始以太网数据包形式的magic packet时将被唤醒。

    以太网络扩展板-W5200 (Arduino兼容)技术规格
    支持硬件TCP/IP协议: TCP、UDP、ICMP、IPv4、ARP、IGMP、PPPoE和以太网支持8个独立的端口(sockets)支持休眠及网络唤醒
    支持高速SPI总线(SPI模式0,3)
    内部32K字节TX/RX缓存内嵌10/100Mbps以太网物理层
    支持自动应答 (全双工/半双工模式、10/100-based)
    支持自动极性变换(MDI/MDIX)
    支持ADSL连接(与PAP/CHAP验证模式下,支持PPPOE协议)
    3.3V工作电压,I/O口可承受5V电压
    多种指示灯信号输出(全双工/半双工模式、网络连接和网络速度)

    3.原型扩展板
    举例:FireBeetle原型扩展板
    原型扩展板

    原型扩展板
    DFRobot FireBeetle萤火虫系列是专为物联网设计的低功耗微控制器。该系列产品,定位于低功耗物联网,旨在方便、快速的搭建物联网硬件平台。FireBeetle系列有三个大类,分别是Board(主板)、Covers(扩展)、Accessories(配件)。
    这是FireBeetle兼容的原型扩展板,板上有14×7个通用2.54mm间距焊接孔,标准面包板间距,独立的VCC、3.3V、GND焊接口,可以作为焊接任意电子元件的载体。在接口上,兼容FireBeetle系列,是叠加电路原型的绝佳选择。
    FireBeetle原型扩展板特性
    Firebeetle系列兼容,即插即用
    性价比高
    小尺寸,方便安装
    以上三类扩展板是目前运用最广泛最多的arduino扩展板,如果想了解更多扩展板用途和使用方法请关注DFRobot创客商城。

    展开全文
  • arduino扩展板简介_Arduino简介

    千次阅读 2020-08-25 08:36:52
    arduino扩展板简介Arduino is a groundbreaking technology in the amateur electronics ecosystem. Arduino是业余电子生态系统中的一项突破性技术。 By groundbreaking I don’t mean it introduced a new ...
  • 之前买了一个ESP8266的扩展板,吃灰了好久,最近想把他利用起来。上淘宝店铺找了好久资料,感觉写的都不太清楚,所以总结归纳出了以下信息。
  • Arduino Ethernet W5100扩展板是继承WIZnet W5100网络芯片的扩展板
  • Arduino扩展板通常具有和Arduino开发板一样的引脚位置,可以堆叠接插到Arduino上,进而实现特定功能的扩展。在面包板上接插元件固然方便,但你需要有一定的电子知识来搭建各种电路。而使用扩展板可以一定程度的简化...
  • arduino】RosBot电机扩展板介绍

    千次阅读 2017-11-28 18:21:47
     RosBot是一款专为软件KittenBlock(基于Scratch3.0)设计的主板,它有很强大的功能:基于Arduino UNO主板,载2个双H桥电机驱动,完美升级搭载树莓派2,树莓派3B+,和Intel UP Board单板计算机。  ...
  • arduino扩展板的使用by Chris Aquino 克里斯·阿基诺(Chris Aquino) 如何使用Arduino和React为烧烤构建仪表板 (How to build a dashboard for your grill using Arduino and React) “When should I use React?” ...
  • arduino多功能垃圾桶

    2021-04-22 22:04:53
    面包:面包是由于板子上有很小插孔,专为电子电路的无焊接实验设计制造的。由于各种电子元器件可根据需要随意插入或拔出,免去了焊接,节省了电路的组装时间,而且元件可以重复使用,所以非常适合电子调试和...
  • Arduino 2.4寸触摸屏LCD扩展板教程

    千次阅读 2020-04-25 07:24:44
    Arduino 2.4寸触摸屏扩展板功能 屏幕在电子项目中的作用非常重要。屏幕可以是非常简单的类型,例如7段或字符LCD或更高级的模型,如OLED和TFT LCD。 2.4寸TFT液晶屏是最广泛使用的图形屏幕之一。以下是其...
  • 1602 Arduino LCD键盘扩展板功能 在电子项目中显示信息一直是最引人注目的问题。有多种方式可以显示数据。这些液晶屏可以很简单,例如7段或LED,或者它们可以更加迷人,例如LCD。使用LCD一直是最流行的信息显示...
  • 今天给大家介绍一款热卖arduino扩展板,不管是电商平台还是arduino爱好者圈子,这款兼容arduino扩展板从不让人失望。 这款扩展板就是兼容Arduino的 IO传感器扩展板V7.1。一经问世就获得千万arduino爱好者的喜爱,...
  • Kilomux 是一个 Arduino UNO 扩展板,它使用路复用器和 74HC595 IC 扩展输入和输出的数量,并允许通过 USB 或硬件进行 MIDI 通信。 Kilomux Arduino 库现在有一个存储库! 它有 16 个数字输出(暂时没有 PWM)...
  • 大家对掌控编程,用的比较的都是图形化编程的方式,比如 mPython、Mind+ 等。但是,既然掌控是基于 ESP32 芯片的,所以我们也可以用 Arduino 软件对其编程。所以,有时间的话,我准备给大家分享一系列用 ...
  • 产品简介 新版Bluno Nano通讯距离更远,实测结果可达50米。虽然它的体积微小,但是通讯功能依旧强大! DFRobot在UNO上集成了蓝牙4.0成为Bluno。...想象一下用Arduino或者IOS结合Arduino开发一款可穿戴的移动设备,比
  • 这次, Patrick Lima和我决定我们想使用Arduino开发板扩展Raspberry Pi的端口,以便我们可以访问更多功能和端口并为设备添加一层保护。 有许多方法可以使用此设置,例如,构建跟随太阳的太阳能电池,家庭气象站,...
  • 掌控集成了 ESP32 高性能双核芯片,具备 WiFi 和蓝牙连接功能,同时在板子上又配置了丰富的传感器,最重要的是它是专门为国内编程教学而设计的,符合国内课堂使用的情况,再加上价格便宜,所以越来越的做 STEAM ...
  • 准备通过arduino做1-3个小项目来扒开arduino的内衣,看到我真正想要的东西。...1.1 L293 motor shield扩展板 *1 驱动芯片:L293B 逻辑工作电压:5V DC 电机驱动电压:7-12V DC 最大驱动电流:1...
  • arduino教程-01. Arduino 的说明

    千次阅读 多人点赞 2018-12-22 10:19:19
    目录1.1 课程说明1.2 器材1.3 UNO电路:UNO参数1.4 详细内容:1.5 载LED闪烁实验程序...认识Arduino控制的各个部分, 1.2 器材 名称 数量 规格 Arduino uno控制 1 R3 1.3 UNO电路: UNO参数 ...
  • 本节书摘来自异步社区《动手玩转Arduino》一书中的第2章,第2.1节,作者【澳】John Boxall,译者 翁恺,更章节内容可以访问云栖社区“异步社区”公众号查看。 第2章 探索Arduino板和IDE 本章我们将研究Arduino板和...
  • 常用Arduino板介绍

    千次阅读 2021-02-02 15:31:29
    Arduino Nano是一款基于ATMega328P(Arduino Nano 3.x)的小型、完整且易于实验的。它只缺少一个直流电源插座,并且可以使用Mini-B USB电缆而不是标准的。 技术参数: 微控制器 ATmega328 电源支持 3.35 -...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,427
精华内容 970
关键字:

arduino多功能扩展板