Arduino Uno+步进电机28BYJ-48+ULN2003 实现简单的正反转demo
Posted Love丶伊卡洛斯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino Uno+步进电机28BYJ-48+ULN2003 实现简单的正反转demo相关的知识,希望对你有一定的参考价值。
前言
本文是根据STM32F103+步进电机28BYJ-48+ULN2003 实现简单的正反转demo这篇文章的拓展,针对此文章的程序进行了Arduino Uno版本的粗略适配,具体细节可以参考这篇文章。
源码参考:
步进电机28BYJ-48的驱动程序(stm32f103c8t6)
STM32F103+步进电机28BYJ-48+ULN2003 实现简单的正反转demo
开发板:Arduino Uno Rev3 创客主板
开发环境(编写烧写):Arduino IDE(官网:https://www.arduino.cc/en/software)配合官方USB下载线进行烧写。
语言:Arduino 语言(类C语言)
官方文档:https://www.arduino.cc/reference/en/
功能介绍
正转半圈,延时3秒,反转半圈,延时3秒。
参考图
Arduino Uno Rev3 原理图
接线
8-11 接 IN1-IN4
效果图
接上下载线供电(顺便烧录程序),图片进行过处理,不是实际效果。
核心代码
28BYJ-48_ULN2003_apply_demo.ino
unsigned int forward[4] = {0x03,0x06,0x0c,0x09}; // 正转
unsigned int reverse[4]= {0x03,0x09,0x0c,0x06}; // 反转
int IO_array[4] = {8, 9, 10, 11};
int flag = 0;
void SetMotor(unsigned int InputData)
{
if(InputData == 0x03)
{
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
else if(InputData == 0x06)
{
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
}
else if(InputData == 0x09)
{
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
}
else if(InputData == 0x0c)
{
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
}
else if(InputData == 0x00)
{
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
}
/*
功能:转1/64圈
步距角5.625 360/5.625=64 减速比1/64
故64*64个脉冲转一圈
n 圈数
_direction 方向 1正转 非1反转
delay_ms delay_ms >= 2
*/
void motor_circle(int n, int _direction, int delay_ms)
{
int i, j;
for(i = 0; i < n * 8; i++)
{
for(j = 0; j < 4; j++)
{
if(1 == _direction)
{
SetMotor(0x00);
SetMotor(forward[j]);
}
else
{
SetMotor(0x00);
SetMotor(reverse[j]);
}
delay(delay_ms > 2 ? delay_ms : 2);
}
}
}
void setup() {
// put your setup code here, to run once:
int i = 0;
for( i = 0 ; i < 4 ; i++ )
{
pinMode(IO_array[i], OUTPUT);
}
}
void loop() {
// put your main code here, to run repeatedly:
if(flag)
{
// 电机正转半圈
motor_circle(32, 1, 2);
flag = 0;
}
else
{
// 电机反转半圈
motor_circle(32, 0, 2);
flag = 1;
}
delay(3000);
}
补充
编译上传
日志信息
编译中… 速度不是很快
上传成功0.0
以上是关于Arduino Uno+步进电机28BYJ-48+ULN2003 实现简单的正反转demo的主要内容,如果未能解决你的问题,请参考以下文章
Arduino Stepper库驱动28BYJ-48步进电机测试程序
Proteus仿真Arduino UNO利用Stepper库实现uln2003驱动步进电机转动
Ardunio使用ULN2003驱动28BYJ-48步进电机
ESP8266 驱动步进电机(28BYJ-48电机 ULN2003 驱动板)