首页 > 其他分享 >ESP8266_Servo

ESP8266_Servo

时间:2024-03-31 12:55:22浏览次数:19  
标签:200 ESP8266 servo 舵机 Servo my ser

Servo的使用,以SG90舵机为例

舵机控制说明 (Servo.h里时间单位都是微秒us,角度是°)

舵机通过脉冲宽度的时间来控制(PWM),频率是50Hz的(即一个周期是20ms)。(!!!脉宽是本质)

SG90舵机的控制参数范围是:0°: 0.5ms , 180°: 2.5ms

然后对于每一度,将脉宽范围除以180°即得。

servo.attach(GIO, pulse_width_min, pulse_width_max); 这里就可以设置上面的脉宽min和max(出于安全考虑,Servo的默认值是1000,2000,导致实际运行时并不是满的180°)

使用,实际就是设置脉宽:

servo.write(degree_OR_pulse_width_in_us);

当值<200时,参数为度数,根据上面除法得到每度的脉宽然后内部设置对应脉宽(范围内);

超过200后,值代表脉宽(范围内),直接写入脉宽,和servo.writeMicroseconds()一样。

注意超出范围的值将被设为最低或最大值

舵机运行的实际脉宽:可用servo.read()查看度数,servo.readMicroseconds()查看实际脉宽。

总之,使用Servo的时候,要先确定自己舵机的pwm控制参数,然后在attach的时候设置好,才能得到对应的角度。

测试代码

#include <Servo.h>

Servo my_ser;

void setup()
{
    Serial.begin(115200);
    Serial.println();Serial.println();

    my_ser.attach(2, 500, 2500); //将舵机信号连接到GPIO2, D4,设置高电平脉冲时间上下限(保证实际转动角度的参数)
    my_ser.write(0);
    delay(100);
}

//展示了脉宽变化和对应的实际脉宽
void loop()
{
    //degree change
    for (int i = 0; i < 200; i+=1) {
      my_ser.write(i);
      Serial.printf("i: %d\tdegree: %d\tpulse_width_us: %d\n", i, my_ser.read(), my_ser.readMicroseconds());
      delay(200);
    }

    //pulse width change
    for (int i = 200; i < 2600; i+=1) {
      my_ser.write(i);  //等价于my_ser.writeMicroseconds(i);
      Serial.printf("i: %d\tdegree: %d\tpulse_width_us: %d\n", i, my_ser.read(), my_ser.readMicroseconds());
      delay(200);
    }
}

用analog直接控制脉冲

analogWriteFreq(freq);:设置频率,一般50Hz

analogWriteRange(range);:设置步长,即将一个周期分成多少份,使用时的单位就是份数了

analogWrite(PIN, value);:将PIN的脉宽设为value份数。取值范围为(0, range),实际就是设置脉宽多少

#include <Servo.h>

const uint8_t servo = 2;  //舵机在GPIO2
Servo my_ser;

void setup() {
  Serial.begin(115200);
  Serial.println();

  analogWriteFreq(50);    //设置频率为50Hz,即周期20ms
  analogWriteRange(200);  //将20ms分成200份,每份0.1ms

  my_ser.attach(servo);
  
  analogWrite(servo, 5);  //初始化
  delay(500);
  analogWrite(LED_BUILTIN, 200);
  delay(200);
}

void loop() {
  for (int i = 5; i < 26; i++) {
    analogWrite(servo, i);
    Serial.printf("i: %d\tdegree: %d\tpulse_width_us: %d\n", i, my_ser.read(), my_ser.readMicroseconds());
    delay(1000);
  }
}

值得注意的是,输出始终为i: i可变 degree: 90 pulse_width_us: 1500,而其它值不变,没试my_ser.write,但是用analog就没什么必要了,且它的read都不可用了的样子,值一直不变。

参考资料

代码里的Servo.h

另外,arduino常有不代码提示的问题,我看网上说好像要把项目放在设置里那个位置才行,不过有时候又可以,我又懒得放那,就没试了。

analog:[【万物皆可PWM!使用ESP8266驱动SG90舵机!】

标签:200,ESP8266,servo,舵机,Servo,my,ser
From: https://www.cnblogs.com/faf4r/p/18106608

相关文章

  • 【NodeMcu-ESP8266】引脚使用参考指南——推荐收藏
    目录概述     一、ESP826612—E/F模组引脚图二、ESP826612-E/FNodeMCU引脚图三、ESP8266coreforArduino源码关于NodeMCU引脚设置的定义四、ESP8266-NodeMCU引脚特性及使用建议五、需要特别提醒和强调的几个具体问题参考文档概述         ......
  • ESP8266首试
    软件环境搭建安装arduino官网下载安装Software|Arduino自己找适合的版本即可。中文设置打开arduino,file->preference,里面有个编辑器语言的,依需要设置。安装开发板在工具->开发板中,默认的开发板没有esp8266,所以需要手动添加。官方项目esp8266/Arduino:ESP8266core......
  • ESP8266使用笔记
    ESP8266介绍上图所示的是ESP-01s,我目前使用的是由安信可科技公司开发的模块,搭有板载天线。可以由AP/STA/AP+STA三种工作模式。其中AP工作模式是作为WIFI的客户端存在,其他设备主动链接在AP设备上,可以接收AP设备发送的消息,也可以反过来给AP设备发送消息。STA工作模式则是以一个TC......
  • ESP8266 + L298N实现WIFI遥控小车
    参考资料:https://blog.csdn.net/m0_60790717/article/details/126914314https://blog.csdn.net/weixin_52801934/article/details/126180831 ESP8266实物和引脚图(图像来源于百度图片): L298N实物和引脚图(图像来源于百度图片): 硬件连接:L298N连接两个电机,来控制小车的两......
  • 基于arduino IDE 部署ESP32 ESP8266开发环境
    本文涉及技术:arduinoIDE环境,windows10系统软件,开发环境配置,单片机新手入门;关于arduino程序学习与相关教程,可以前往Arduino中文社区Arduino教程汇总贴arduino1.8.9arduinoIDE是一个很棒的集成开发环境,自带有开发版环境管理,函数库管理,一键编译、下载;串口调试的功能,代码格......
  • 2024.3.5 esp8266开发学习_arduino常用函数
    2024.3.5esp8266开发学习_arduino常用函数pinMode函数引脚模式选择,模式有INPUT(输入),OUTPUT(输出),INPUT_PULLUP(上拉输入,自动拉高电平)//GPIOFUNCTIONS#defineINPUT      0x00//输入#defineINPUT_PULLUP   0x02//上拉输入#defineINPUT_PULLDOWN_16......
  • arduino esp8266 舵机控制
    舵机的控制:舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:0.5ms--------------0度;1.0ms------------45度;1.5ms------------90度;2.0ms-----------135度;2.5ms-----------1......
  • stm32 esp8266测试问题原因记录
    现象:连上WIFI但发送数据失败 原因:WIFI网络延时过大,或者程序设置的等待超时时间过小解法:换个网络延时小的WIFI连,或者增加程序等待超时的时间 现象:连不上WIFI 原因:esp8266_mqtt_init()中的的延迟过长,测试4S不行,要2S解法:将4秒延时改回2S1int32_tesp8266_mqtt_init(v......
  • Arduino - ESP8266和ESP32的I2C接口使用(超全)
    简介深入讲解I2C通信协议,以及,Arduino和ESP8266微控制器通过I2C连接设备需要哪些引脚、该通信协议的优缺点以及如何使用I2C多路复用器详解Arduino/ESP8266与其他设备通信,例如OLED显示器、气压传感器等,可以使用I2C通信协议。也可以使用两外两个通信协议:SPI和UARTI2C全称是Inte......
  • esp8266 no matching function for call to 'Ticker::Ticker()'
    这个错误表明在尝试创建一个Ticker对象时,编译器找不到适合当前调用的构造函数。Ticker可能是Arduino框架中的一个类,用于处理定时事件。解决方法:确认你已经包含了正确的头文件。例如,对于ArduinoESP8266核心库,你需要包含Ticker.h#include<Ticker.h> 确认......