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 驱动板)

MicroPython TPYBoard v102 驱动28BYJ-48步进电机

28BYJ-48步进电机