Raspberry Pi

스텝모터 드라이버 제어

ULN2003 보드와 스텝모터를 Python으로 단계 제어합니다.

스텝모터 드라이버 제어 회로 커버 이미지

ULN2003 보드와 스텝모터를 Python으로 단계 제어합니다. 이 글은 Raspberry Pi GPIO 기준으로 부품을 연결하고, 왜 그 핀을 쓰는지, 어떤 순서로 테스트하면 좋은지까지 함께 정리합니다.

초보 프로젝트에서 가장 흔한 실수는 코드를 먼저 올리고 회로를 나중에 보는 것입니다. 반대로 전원, GND, 신호 핀을 먼저 확인하면 같은 예제를 다른 센서나 출력 장치로 바꿔도 훨씬 덜 헤맵니다.

스텝모터 드라이버 제어 회로도

프로젝트 개요

  • 보드: Raspberry Pi GPIO
  • 주제: Stepper Driver
  • 사용 핀: GPIO17-GPIO22
  • 전원 기준: 3.3V
  • 준비 부품: 28BYJ-48, ULN2003

이 예제의 목표는 Stepper Driver를 단순히 연결하는 데서 끝나지 않습니다. 입력과 출력의 흐름을 나누어 보고, 센서 값이 코드에서 어떤 판단으로 바뀌는지 이해하는 것이 핵심입니다. 작은 회로라도 이 구조가 익숙해지면 자동문, 알림기, 데이터 로거, 무선 센서 같은 더 큰 프로젝트로 자연스럽게 확장할 수 있습니다.

회로 연결 기준

먼저 Raspberry Pi GPIO의 GND와 부품의 GND를 공통으로 연결합니다. 그다음 3.3V 전원 핀을 확인하고, 마지막에 GPIO17-GPIO22 신호선을 연결합니다. GND가 빠지면 신호가 흔들리거나 값이 계속 이상하게 보일 수 있습니다.

Raspberry Pi GPIO는 3.3V 기준이며 5V 입력을 직접 넣으면 보드가 손상될 수 있습니다. 모터, 릴레이, 긴 배선은 트랜지스터, 드라이버, 레벨 시프터를 먼저 고려하세요.

배선할 때는 색을 정해두면 좋습니다. 빨간색은 전원, 검정색은 GND, 노란색이나 파란색은 신호선으로 정하면 나중에 사진만 봐도 어느 선이 무엇인지 구분하기 쉽습니다. 브레드보드 전원 레일을 쓸 때는 좌우 레일이 끊겨 있는 제품도 있으니 멀티미터나 간단한 LED 테스트로 확인하세요.

조립 순서

  1. 보드를 USB에 연결하지 않은 상태에서 부품 위치를 먼저 잡습니다.
  2. GND를 부품 GND와 연결하고, 전원선이 맞는지 다시 봅니다.
  3. GPIO17-GPIO22 신호선을 연결합니다.
  4. 전류가 큰 부품이면 외부 전원과 드라이버 모듈을 먼저 준비합니다.
  5. USB 전원을 연결한 뒤 가장 단순한 테스트 코드로 값이 바뀌는지 확인합니다.
  6. 정상 동작을 확인한 뒤에만 본문 프로젝트 코드로 확장합니다.

이 순서를 지키면 문제가 생겼을 때 원인을 좁히기 쉽습니다. 예를 들어 LED가 켜지지 않는다면 극성, 저항, 핀 번호, GND 순서로 보면 되고, 센서 값이 이상하다면 전원 전압, 풀업 저항, 라이브러리, 샘플링 간격을 차례로 보면 됩니다.

코드 흐름

Python에서 gpiozero나 RPi.GPIO로 핀을 열고, 센서 값을 읽거나 출력 핀을 바꿉니다. 서비스로 오래 돌릴 때는 예외 처리와 안전 종료를 넣습니다.

코드는 처음부터 길게 쓰지 않는 것이 좋습니다. 첫 단계에서는 핀 하나를 켜거나 센서 값 하나를 출력하는 수준으로 시작하세요. 그 값이 확인되면 조건문을 넣고, 마지막에 표시 장치나 알림 장치를 붙이는 방식이 안정적입니다.

1. 핀과 라이브러리를 준비한다
2. 센서 또는 입력 값을 읽는다
3. 기준값과 비교한다
4. LED, 부저, 모터, 화면 같은 출력 장치를 바꾼다
5. 시리얼 출력이나 로그로 동작을 확인한다

Raspberry Pi에서는 운영체제가 함께 동작하므로 스크립트를 자동 실행할지, 터미널에서 수동 실행할지도 정해야 합니다. GPIO를 쓰는 Python 파일은 종료 시 핀을 정리하는 코드까지 넣는 편이 좋습니다.

자주 생기는 문제

  • 값이 전혀 바뀌지 않으면 GND 공통 연결과 핀 번호를 먼저 확인합니다.
  • LED나 부저가 너무 약하면 저항값, 전원 전압, 부품 극성을 확인합니다.
  • 모터나 릴레이가 불안정하면 보드 전원에서 직접 공급하지 말고 외부 전원과 드라이버를 사용합니다.
  • 센서 값이 흔들리면 여러 번 읽어 평균을 내거나 임계값에 여유를 둡니다.
  • I2C나 SPI 장치가 보이지 않으면 주소, 배선, 전원 전압, 라이브러리를 차례로 확인합니다.

문제가 생겼을 때는 회로 전체를 다시 뜯기보다 한 단계씩 줄이는 편이 빠릅니다. 출력 장치만 따로 테스트하고, 센서만 따로 테스트한 뒤 다시 합치면 어느 부분에서 실패하는지 보입니다.

확장 아이디어

  • 값을 LED 색상이나 부저 패턴으로 바꾸기
  • LCD, OLED, 웹 페이지, LED 매트릭스에 상태 표시하기
  • 기준값을 버튼이나 가변저항으로 조절하기
  • 여러 센서 값을 합쳐 자동화 조건 만들기
  • CSV, SD카드, MQTT, 라디오 통신으로 기록하거나 보내기

이 프로젝트는 단독 예제로도 쓸 수 있지만, 다른 프로젝트의 일부로 넣었을 때 더 재미있습니다. 예를 들어 Stepper Driver를 알림 장치와 묶으면 생활 자동화가 되고, 디스플레이와 묶으면 관찰 장치가 됩니다.

안전 메모

USB 전원만으로 작은 LED나 센서를 실험하는 것은 비교적 안전하지만, 모터, 펌프, 릴레이, 긴 LED 스트립은 전류가 훨씬 많이 필요합니다. 이런 부품은 보드 핀에 직접 연결하지 말고 드라이버 모듈과 별도 전원을 사용하세요.

특히 Raspberry Pi GPIO에는 5V를 직접 넣지 마세요. micro:bit도 큰 부하를 직접 구동하기보다 확장 보드나 드라이버를 사용하는 편이 안전합니다. Arduino도 핀당 전류 한계를 넘기면 보드가 손상될 수 있으므로 출력 부품에는 저항과 드라이버를 먼저 생각해야 합니다.

정리

스텝모터 드라이버 제어 프로젝트는 Raspberry Pi에서 Stepper Driver를 다루는 기본 예제입니다. 전원, GND, 신호 핀을 분리해서 생각하고 작은 테스트부터 성공시키면, 같은 구조를 다른 센서와 출력 장치에도 반복해서 적용할 수 있습니다.