利用Nodemcu控制SG90舵机

以前的几篇文章对伺服电机做了一些基础的介绍,包括:伺服电机是如何工作的?  树莓派PWM控制舵机的两种方式 ,这次,尝试一下Nodemcu如何控制伺服电机。我们都知道伺服电机是一种用于精确控制旋转角度的电动装置。它被用于一些要求精确控制的应用场景,比如控制机械臂,像Axidraw写字机器人的抬笔机构等。伺服电机的运动角度是通过施加一个PWM信号来控制的,通常这个PWM信号的频率为50Hz,我们可以通过改变PWM信号的宽度,来控制伺服电机的旋转角度和方向。更多信息可查阅:秒懂舵机角度控制原理

声明:舵机的正式名称应该叫伺服电机,舵机只是习惯称谓。文章中都尽量使用伺服电机这个称呼。

NodeMCU的PWM引脚

NodeMCU是如何控制伺服电机的呢?这有的回到伺服电机的控制的本质:伺服电机运动的角度是施加一个PWM信号来控制的。那就需要验证Nodemcu上是否有PWM引脚

NodeMCU v0.9和NodeMCU v1.0引脚对比图

上图给出了Nodemcu v0.9 和Nodemcu v1.0两个版本的引脚对比图,左边的v0.9集成了ESP8266-12(E-12)模块,右边的v1.0集成了ESP8266-12E(E-12E)模块。哪些引脚才支持PWM信号呢?上图标有“~”正弦波的引脚均支持PWM信号,两个Nodemcu版本支持PWM信号的引脚是一样的,分别是:GPIO 00,GPIO 01,GPIO 02,GPIO 03,GPIO 04,GPIO 05,GPIO 12,GPIO 13,GPIO 14,GPIO 15,共10个引脚支持PWM信号。

NodeMCU v1.0与SG90舵机连线图

下面我尝试使用GPIO 14引脚来做测试。伺服电机SG90NodeMCU的连接图如下:

sg90连接nodemcu

NodeMCU控制SG90舵机代码

#include <Arduino.h>
#include <Servo.h>

Servo servo;

void setup ()
{
  servo.attach(14);//PWM引脚设置,与GPIO引脚号对应.
}

void loop ()
{
  // To 0°
  servo.write(0);
  delay(1000);

  // To 90°
  servo.write(90);
  delay(1000);

  // To 180°
  servo.write(180);
  delay(1000);
}

 

分享到:

标签: