使用ESP32控制28BYJ-48步进电机进行多种操作
创作时间:
作者:
@小白创作中心
使用ESP32控制28BYJ-48步进电机进行多种操作
引用
CSDN
1.
https://m.blog.csdn.net/Y_xianlin/article/details/141679578
本文将介绍如何使用Arduino ESP32-S开发板控制28BYJ-48步进电机,实现多种操作。通过详细讲解硬件接线和软件编程,帮助读者掌握步进电机的控制方法。
硬件准备
- Arduino ESP32-S开发板
- 28BYJ-48步进电机
- ULN2003驱动板
硬件连接
模块引脚 | Arduino ESP32 引脚 |
|---|---|
IN1 | GPIO 18 |
IN2 | GPIO 19 |
IN3 | GPIO 21 |
IN4 | GPIO 22 |
VCC | 5V |
GND | GND |
软件实现
代码说明
本项目不使用额外库,代码虽然多,但是实现简单,可以封装成一个自用库进行外部调用。电机速度为全局变量,可以改写成局部变量并写进函数,这样调用更灵活。28BYJ-48 电机旋转一圈是2048步。
主要功能函数
rotateClockwise(int steps):顺时针旋转指定步数。rotateCounterClockwise(int steps):逆时针旋转指定步数(注意步进顺序的反向)。rotateAngle(float degrees):旋转指定角度(正数表示顺时针,负数表示逆时针)。
完整代码
// 定义连接到ULN2003的ESP32引脚
const int pin1 = 18; // IN1接ESP32的GPIO18
const int pin2 = 19; // IN2接ESP32的GPIO19
const int pin3 = 21; // IN3接ESP32的GPIO21
const int pin4 = 22; // IN4接ESP32的GPIO22
// 步进电机的步数
const int stepsPerRevolution = 2048; // 28BYJ-48步进电机通常为2048步
// 旋转速度(延迟时间,单位:毫秒)
int rotationSpeed = 2; // 设置全局变量旋转速度
// 初始化电机控制引脚
void setup() {
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
Serial.begin(115200);
Serial.println("步进电机控制初始化完成");
}
// 步进电机控制函数
void stepMotor(int step) {
switch (step) {
case 0: // 0011
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, HIGH);
break;
case 1: // 0110
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
case 2: // 1100
digitalWrite(pin1, HIGH);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
case 3: // 1001
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
}
// 顺时针旋转指定步数
void rotateClockwise(int steps) {
for (int i = 0; i < steps; i++) {
stepMotor(i % 4);
delay(rotationSpeed); // 使用全局变量控制旋转速度
}
}
// 逆时针旋转指定步数
void rotateCounterClockwise(int steps) {
for (int i = 0; i < steps; i++) {
stepMotor((3 - (i % 4))); // 反向控制顺序
delay(rotationSpeed); // 使用全局变量控制旋转速度
}
}
// 旋转指定角度(正数表示顺时针,负数表示逆时针)
void rotateAngle(float degrees) {
int steps = (int)(stepsPerRevolution * degrees / 360.0);
if (steps > 0) {
rotateClockwise(steps);
} else if (steps < 0) {
rotateCounterClockwise(-steps);
}
}
// 主循环
void loop() {
Serial.println("步进电机顺时针旋转一整圈...");
rotateClockwise(stepsPerRevolution);
delay(1000);
Serial.println("步进电机逆时针旋转一整圈...");
rotateCounterClockwise(stepsPerRevolution);
delay(1000);
Serial.println("步进电机旋转25度...");
rotateAngle(25);
delay(1000);
}
开发环境
- Arduino IDE
- ESP32 Dev Module
代码辅助
- ChatGPT-4o
热门推荐
乒乓球,不止是竞技!18句文案让你爱上这项运动的魅力与乐趣!
沙溢《奔跑吧》展“猜词艺术”,幽默演绎茶马古道文化
奔跑吧泪崩现场:白鹿哽咽说“对不起”,李晨等人泪流满面
2024年综艺观察:文化旅综崛起,情感观察持续走红
《自然·代谢》:二甲双胍又开新通路
饮食运动加药物,科学管理高尿酸血症
材料专利:科技创新与应用的未来
崇文中方治脱发:传统智慧与现代科技的完美融合
2024年吸入制剂应用领域:从COPD到哮喘,拓展神经系统、心脑血管...
情感突破与文化传承:《奔跑吧》开启综艺新模式
黄子弘凡加盟《奔跑吧》,以幽默感赢得观众喜爱
《奔跑吧》以创新和阵容优势稳固收视前三,《极限挑战》跌出前十
周深加盟《奔跑吧》,茶马古道篇收官收视破1.93%
老牌综艺<奔跑吧>收视遇冷,嘉宾缺席创新乏力成主因
癌性水肿的六大成因与四大护理要点
一文详解腹水回输治疗:原理、操作与临床效果
冬季取暖神器,温度计的秘密武器
电子温度计使用指南:告别温度焦虑
小型气象站里的黑科技温度计
水银温度计的前世今生:从发明到淘汰
巧用白萝卜皮:三种腌制法让营养翻倍
别扔白萝卜皮!营养价值高还能做美食
白萝卜皮也能这样吃:酸甜香辣五香三种腌制法
这样吃最健康:专家推荐的饮食调理方案
中医四季养生:冬季4款滋补汤品助力健康过冬
枸杞保健获科学证实,四种食用方法详解
1岁半宝宝每日三餐这样吃:7天营养食谱详解
《奔跑吧》最新季:白鹿范丞丞亲密互动引讨论,李晨回归助收视夺冠
《奔跑吧》迎来新锐力量,张真源连挑李晨苏炳添
《奔跑吧12》:电影级制作升级,文化输出获好评