使用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
热门推荐
2025年连云港春节文旅活动指南:西游灯会、非遗展等你来
蛇年春节档首日票房破纪录!超30个品牌掀起电影联名潮
北海银滩新玩法:三馆一滩必打卡!
吃对了吗?吗丁啉&胃复安的正确打开方式!
秋冬游贵州:黄果树&小七孔绝美打卡!
跟着丹丹玩转贵州历史文化之旅
海军军医大学突破ESD手术局限,EFTR技术开创消化内镜治疗新纪元
ESD手术后,如何护好你的消化道?
滨州市中医医院:ESD手术创新突破
铁路网助中国东北“冷资源”变“热经济”
壬申时出生人的命运特征详解
红烧排骨,家宴C位出道!
红烧排骨这样做才好吃!
推动民族医药发展,怎么干?
张园传奇:上海历史风貌区的重生之旅
上海黄浦区9处标志性建筑:从外滩到新天地,领略最上海的建筑之美
上海张园海派石库门里年味浓 非遗、传统技艺争艳迎新春
中国航展:AI图像识别助力航天遥感新突破
春节档必看:《热辣滚烫》《飞驰人生2》《第二十条》
重庆网红历史文化街区:磁器口古镇vs民国街,哪个更值得打卡?
向涛院士:全球高科技竞争中超导技术的重要性与未来展望
泰山冬季这些经典打卡点不容错过
清明节上坟如何磕头?老祖宗留下的规矩不能丢,别到时不知所措
JAHA:强化生活方式干预对心血管危险因素的影响
2024年巴黎奥运会对城市发展的深远影响
惠普打印机蓝牙连接全攻略:从入门到精通
大唐不夜城游览时长指南:需要逛多久?
植物神经紊乱的中医养生之道:上班族如何远离疾病困扰
如何冲破植物神经紊乱的枷锁?
想确定海草位置,科学家却在追踪绿海龟,因为它比卫星更靠谱