라즈베리 파이 28BYJ-48 스테퍼 모터 ULN2003 드라이버

이 튜토리얼은 ULN2003 드라이버를 사용하여 Raspberry Pi로 28BYJ-48 스테퍼 모터를 제어하는 방법을 안내합니다. 자세히 알아볼 내용은 다음과 같습니다:

라즈베리 파이 ULN2003 28BYJ-48 스테퍼 모터

Hardware Preparation

1×Raspberry Pi 4 Model B Amazon
1×28BYJ-48 stepper motor + ULN2003 Driver Module 쿠팡 | Amazon
1×5V Power Adapter Amazon
1×DC Power Jack 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(추천) Screw Terminal Block Shield for Raspberry Pi 쿠팡 | Amazon
1×(추천) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B Amazon
1×(추천) Plastic Case and Cooling Fan for Raspberry Pi 4B Amazon
1×(추천) HDMI Touch Screen Monitor for Raspberry Pi Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

28BYJ-48 스테퍼 모터에 대하여

스테퍼 모터는 위치 제어에 이상적입니다. 이 모터는 완전한 회전을 일련의 동일한 "스텝"으로 분할합니다. 이러한 모터는 프린터, 3D 프린터, CNC 기계 및 산업 자동화 응용 분야에서 자주 사용됩니다.

스텝 모터에 대한 지식을 얻는 비용 효율적인 방법 중 하나는 28BYJ-48 스텝 모터를 활용하는 것입니다. 이러한 모터는 일반적으로 ULN2003 기반 드라이버 보드와 함께 제공되어 사용하기 매우 쉽습니다.

데이터 시트에 따르면, 28BYJ-48 모터가 풀 스텝 모드에 있을 때 각 스텝은 11.25° 회전에 해당합니다. 따라서 한 바퀴(360°/11.25° = 32)는 32 스텝입니다.

게다가, 모터는 1/64 감속 기어 세트를 가지고 있습니다. 이는 32 x 64 = 2048 단계를 의미합니다. 각 단계는 360°/2048 = 0.1758°에 해당합니다.

결론: 모터가 풀 스텝 모드에서 2048 스텝으로 설정되면, 한 바퀴 회전합니다.

ULN2003 드라이버를 사용하는 28BYJ-48 스테핑 모터 핀아웃

28BYJ-48 스텝 모터는 5개의 핀이 있습니다. 이 핀들의 구체적인 사항에 대해 걱정할 필요는 없습니다. ULN2003 모터 드라이버 커넥터에 꽂기만 하면 됩니다.

28BYJ-48 스테퍼 모터

ULN2003 스테퍼 모터 드라이버 모듈에 대하여

ULN2003은 스테퍼 모터용으로 널리 사용되는 모터 드라이버 모듈입니다.

  • 4개의 LED가 있어 4개의 제어 입력 라인의 활동을 나타내며, 스텝 실행 시 훌륭한 시각적 효과를 제공합니다.
  • 또한, 스텝 모터에 전원 공급을 차단할 수 있는 ON/OFF 점퍼가 함께 제공됩니다.

ULN2003 핀아웃

ULN2003 스테퍼 모터 드라이버 핀아웃

ULN2003 모듈은 6개의 핀과 암 커넥터를 가지고 있습니다.

  • IN1 핀: 모터를 구동하는 데 사용되며 Raspberry Pi의 출력 핀에 연결해야 합니다.
  • IN2 핀: 모터를 구동하는 데 사용되며 Raspberry Pi의 출력 핀에 연결해야 합니다.
  • IN3 핀: 모터를 구동하는 데 사용되며 Raspberry Pi의 출력 핀에 연결해야 합니다.
  • IN4 핀: 모터를 구동하는 데 사용되며 Raspberry Pi의 출력 핀에 연결해야 합니다.
  • GND 핀: 공통 접지 핀으로, Raspberry Pi와 외부 전원 공급 장치의 GND에 모두 연결해야 합니다.
  • VDD 핀: 모터에 전력을 공급하며 외부 전원 공급 장치에 연결해야 합니다.
  • 모터 커넥터: 모터를 연결하는 부분입니다.

※ NOTE THAT:

  • 외부 전원 공급 장치의 전압은 스텝 모터의 전압과 일치해야 합니다. 예를 들어, 스텝 모터가 12V DC를 필요로 한다면, 12V 전원 공급 장치를 사용해야 합니다. 28BYJ-48 스텝 모터의 경우, 5V DC가 필요하므로 5V 전원 공급 장치를 사용해야 합니다.
  • 그러나 스텝 모터가 5V 전원 공급을 필요로 하더라도 VDD 핀을 Raspberry Pi의 5V 핀에 연결하지 마십시오. 대신 스텝 모터가 많은 전력을 소모하기 때문에 외부 5V 전원 공급 장치에 연결해야 합니다.

Wiring Diagram

라즈베리 파이 스텝 모터 ULN2003 드라이버 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

배선 구성을 간단하고 체계적으로 만들기 위해, Raspberry Pi용 스크루 터미널 블록 실드 사용을 권장합니다. 이 실드는 아래와 같이 더욱 안정적이고 관리하기 쉬운 연결을 제공합니다:

Raspberry Pi Screw Terminal Block Shield

스테퍼 모터의 전선 색상에 주의를 기울일 필요는 없습니다. 28BYJ-48 스테퍼 모터의 수 커넥터를 ULN2003 드라이버의 암 커넥터에 연결하기만 하면 됩니다.

스테퍼 모터를 제어하는 프로그래밍 방법

스텝 모터를 제어하는 세 가지 방법이 있습니다:

  • 풀스텝
  • 하프스텝
  • 마이크로스텝

기본적인 응용 프로그램의 경우, 전진 방식(full-step method)을 사용할 수 있습니다. 세 가지 방법의 세부 사항은 이 튜토리얼의 마지막 섹션에서 논의될 것입니다.

라즈베리 파이 코드

Detailed Instructions

  • Raspberry Pi에 Raspbian 혹은 그 외의 Raspberry Pi 호환 운영 체제를 설치했는지 확인하세요.
  • Raspberry Pi가 PC와 동일한 로컬 네트워크에 연결되어 있는지 확인하세요.
  • 라이브러리를 설치해야 할 경우, Raspberry Pi가 인터넷에 연결되어 있는지 확인하세요.
  • Raspberry Pi를 처음 사용하는 경우, Raspberry Pi 설정 방법을 참조하세요.
  • Linux와 macOS에서는 기본 SSH 클라이언트를 사용하고 Windows에서는 PuTTY를 사용하여 PC를 Raspberry Pi에 SSH로 연결하세요. PC에서 Raspberry Pi로 SSH 연결 방법을 참조하세요.
  • RPi.GPIO 라이브러리가 설치되어 있는지 확인하세요. 설치되어 있지 않다면, 다음 명령을 사용하여 설치하세요.
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Python 스크립트 파일 stepper_uln2003.py을 생성하고 다음 코드를 추가하세요.
# 이 Raspberry Pi 코드는 newbiely.kr 에서 개발되었습니다 # 이 Raspberry Pi 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. # 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: # https://newbiely.kr/tutorials/raspberry-pi/raspberry-pi-28byj-48-stepper-motor-uln2003-driver import RPi.GPIO as GPIO import time # Define GPIO pins for ULN2003 driver IN1 = 23 IN2 = 24 IN3 = 25 IN4 = 8 # Set GPIO mode and configure pins GPIO.setmode(GPIO.BCM) GPIO.setup(IN1, GPIO.OUT) GPIO.setup(IN2, GPIO.OUT) GPIO.setup(IN3, GPIO.OUT) GPIO.setup(IN4, GPIO.OUT) # Define constants DEG_PER_STEP = 1.8 STEPS_PER_REVOLUTION = int(360 / DEG_PER_STEP) # Define sequence for 28BYJ-48 stepper motor seq = [ [1, 0, 0, 1], [1, 0, 0, 0], [1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 1, 0], [0, 0, 1, 0], [0, 0, 1, 1], [0, 0, 0, 1] ] # Function to rotate the stepper motor one step def step(delay, step_sequence): for i in range(4): GPIO.output(IN1, step_sequence[i][0]) GPIO.output(IN2, step_sequence[i][1]) GPIO.output(IN3, step_sequence[i][2]) GPIO.output(IN4, step_sequence[i][3]) time.sleep(delay) # Function to move the stepper motor one step forward def step_forward(delay, steps): for _ in range(steps): step(delay, seq[0]) step(delay, seq[1]) step(delay, seq[2]) step(delay, seq[3]) # Function to move the stepper motor one step backward def step_backward(delay, steps): for _ in range(steps): step(delay, seq[3]) step(delay, seq[2]) step(delay, seq[1]) step(delay, seq[0]) try: # Set the delay between steps delay = 0.005 while True: # Rotate one revolution forward (clockwise) step_forward(delay, STEPS_PER_REVOLUTION) # Pause for 2 seconds time.sleep(2) # Rotate one revolution backward (anticlockwise) step_backward(delay, STEPS_PER_REVOLUTION) # Pause for 2 seconds time.sleep(2) except KeyboardInterrupt: print("\nExiting the script.") finally: # Clean up GPIO settings GPIO.cleanup()
  • 파일을 저장하고 터미널에서 다음 명령을 실행하여 Python 스크립트를 실행합니다:
python3 stepper_uln2003.py
  • 모터의 회전을 확인하세요.
  • 시계 방향으로 한 바퀴, 반시계 방향으로 두 바퀴, 그리고 시계 방향으로 두 바퀴 회전해야 합니다.

코드에서 delay 변수의 값을 변경하여 스테퍼 모터의 속도를 변경할 수 있습니다.

스크립트는 터미널에서 Ctrl + C를 누를 때까지 무한 루프로 계속 실행됩니다.

추가 지식

스테퍼 모터 이동 시 진동 발생

스텝 모터가 움직이는 동안 흔들린다고 걱정하지 마십시오. 이것은 스텝 모터의 특성입니다. 마이크로 스테핑 제어 기술을 사용하여 진동을 줄일 수 있습니다.

또한, 스테퍼 모터는 적절히 관리될 경우 악기와 같은 음악적 음을 만들어낼 수 있는 특징을 가지고 있습니다. 이에 대한 예시는 Hackster.io의 이 링크에서 찾을 수 있습니다.

스테퍼 모터 제어 방법

  • 풀 스텝: 움직임의 단위는 한 걸음이며, 이는 스테퍼 모터의 데이터 시트 또는 매뉴얼에 표시된 각도의 값에 해당합니다.
  • 하프 스텝: 각 풀 스텝은 두 개의 더 작은 스텝으로 나눠집니다. 움직임의 단위는 풀 스텝의 절반입니다. 이 방법은 모터가 두 배의 해상도로 움직이도록 합니다.
  • 마이크로 스텝: 각 풀 스텝은 여러 개의 더 작은 스텝으로 나눠집니다. 움직임의 단위는 풀 스텝의 일부입니다. 비율은 1/4, 1/8, 1/16, 1/32 또는 그 이상이 될 수 있습니다. 이 방법은 모터가 더 높은 해상도로, 저속에서 더 부드러운 동작을 하도록 합니다. 나누는 수가 클수록 해상도가 높아지고 동작이 부드러워집니다.

모터의 데이터시트에 1.8도/스텝으로 명시되어 있다면:

  • 풀 스텝: 모터는 스텝당 1.8도씩 이동할 수 있으며, 한 바퀴에 200 스텝이 필요합니다.
  • 하프 스텝: 모터는 스텝당 0.9도씩 이동할 수 있으며, 한 바퀴에 400 스텝이 필요합니다.
  • 마이크로 스텝: 모터는 스텝당 0.45, 0.225, 0.1125, 0.05625도씩 이동할 수 있으며, 한 바퀴에 800, 1600, 3200, 6400... 스텝이 필요합니다.

위의 코드는 풀스텝 제어 기술을 사용했습니다.

공진 문제

이것은 더 경험이 많은 사용자들을 위한 것입니다. 초보자들은 걱정할 필요가 없습니다. 이는 모터의 자연 주파수와 동일한 스텝 속도에서 다양한 속도로 발생할 수 있습니다. 모터에서 나는 소리가 눈에 띄게 변하거나 진동이 증가할 수 있습니다. 실제 응용에서는 개발자들이 이를 고려해야 합니다.

Video Tutorial

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.