ESP32 - MicroPython을 사용하여 스테퍼 모터 제어
18826 단어 스테퍼 모터전자 공작micropython모터 제어ESP32
소개
스테핑 모터를 사용하고 싶어서 구입했습니다.
Arduino 스케치로 제어하는 기사는 많이 있지만,
MicroPython으로 제어하는 것이 없었기 때문에,
소개하겠습니다.
작업환경
ESP32의 MicroPython 환경 구축은 이전에 설명했습니다.
- [비망록] ESP32-VSCode-microPython으로 개발 환경 구축
참조하십시오.
장비
부품명
설명
비고
ESP32-WROOM-32 개발 보드
5V
스테퍼 모터
모형: 28BYJ-48, 12V 구동
구매처 아마존
ULN2003 스테퍼 모터 구동 테스트 모듈 보드
모터 구동을 위한 보드
모터와 세트 구매
DC 어댑터 12V
모터가 12V 구동을 위해
구매처 아마존
점퍼 케이블
10개 정도
연결
부품명
설명
비고
ESP32-PIN25
테스트 모듈 보드 - IN1
-
ESP32-PIN26
테스트 모듈 보드 - IN2
-
ESP32-PIN27
테스트 모듈 보드 - IN3
-
ESP32-PIN13
테스트 모듈 보드 - IN4
-
AC 어댑터 - GND
테스트 모듈 보드 - GND
ESP32-GND
AC 어댑터 - 12V
테스트 모듈 보드 - 12V
테스트 모듈 보드 - 모터 커넥터
스테퍼 모터
-
코드 작성
Arduino - Stepper 라이브러리을 기반으로 MicroPython으로 이식합니다.
이 라이브러리를 기반으로 한 것은
부품명
설명
비고
ESP32-PIN25
테스트 모듈 보드 - IN1
-
ESP32-PIN26
테스트 모듈 보드 - IN2
-
ESP32-PIN27
테스트 모듈 보드 - IN3
-
ESP32-PIN13
테스트 모듈 보드 - IN4
-
AC 어댑터 - GND
테스트 모듈 보드 - GND
ESP32-GND
AC 어댑터 - 12V
테스트 모듈 보드 - 12V
테스트 모듈 보드 - 모터 커넥터
스테퍼 모터
-
코드 작성
Arduino - Stepper 라이브러리을 기반으로 MicroPython으로 이식합니다.
이 라이브러리를 기반으로 한 것은
됩니다.
또, 본가와의 차이는 이하가 됩니다.
스테퍼 모터를 제어하는 코드
다음은 스테핑 모터를 제어하는 클래스입니다.
stepper.py
import time
from machine import Pin
class Stepper():
def __init__(self, number_of_steps,
motor_pin_1, motor_pin_2, motor_pin_3, motor_pin_4):
self.step_number = 0 # which step the motor is on
self.direction = 0 # motor direction
self.last_step_time = 0 # time stamp in us of the last step taken
self.number_of_steps = number_of_steps # total number of steps for this motor
# setup the pins on the microcontroller:
self.motor_pin_1 = Pin(motor_pin_1, Pin.OUT)
self.motor_pin_2 = Pin(motor_pin_2, Pin.OUT)
self.motor_pin_3 = Pin(motor_pin_3, Pin.OUT)
self.motor_pin_4 = Pin(motor_pin_4, Pin.OUT)
# pin_count is used by the stepMotor() method:
self.pin_count = 4
self.set_speed()
return
def set_speed(self, what_speed=10):
''' Sets the speed in revs per minute
'''
self.step_delay = 60 * 1000 * 1000 // self.number_of_steps // what_speed
return
def step(self, steps_to_move, auto_stop=True):
''' Moves the motor steps_to_move steps. If the number is negative,
the motor moves in the reverse direction.
'''
steps_left = abs(steps_to_move) # how many steps to take
# determine direction based on whether steps_to_mode is + or -:
self.direction = 1 if steps_to_move > 0 else 0
# decrement the number of steps, moving one step each time:
while steps_left > 0:
now = time.ticks_us()
# move only if the appropriate delay has passed:
if time.ticks_diff(now, self.last_step_time) >= self.step_delay:
# get the timeStamp of when you stepped:
self.last_step_time = now
# increment or decrement the step number,
# depending on direction:
if self.direction == 1:
self.step_number += 1
if self.step_number == self.number_of_steps:
self.step_number = 0
else:
if self.step_number == 0:
self.step_number = self.number_of_steps
self.step_number -= 1
# decrement the steps left:
steps_left -= 1
# step the motor to step number 0, 1, 2, 3
self._step_motor(self.step_number % 4)
if auto_stop:
self.stop()
return
def _step_motor(self, this_step):
''' Moves the motor forward or backwards.
if (this->pin_count == 4) {
'''
# 1010
if this_step == 0:
self.motor_pin_1.value(True)
self.motor_pin_2.value(False)
self.motor_pin_3.value(True)
self.motor_pin_4.value(False)
# 0110
elif this_step == 1:
self.motor_pin_1.value(False)
self.motor_pin_2.value(True)
self.motor_pin_3.value(True)
self.motor_pin_4.value(False)
# 0101
elif this_step == 2:
self.motor_pin_1.value(False)
self.motor_pin_2.value(True)
self.motor_pin_3.value(False)
self.motor_pin_4.value(True)
# 1001
elif this_step == 3:
self.motor_pin_1.value(True)
self.motor_pin_2.value(False)
self.motor_pin_3.value(False)
self.motor_pin_4.value(True)
return
def stop(self):
self.motor_pin_1.value(False)
self.motor_pin_2.value(False)
self.motor_pin_3.value(False)
self.motor_pin_4.value(False)
return
사용법
사용을 위한 준비
>> from stepper import Stepper
>> MOTOR_STEPS = (2048)
>> PIN_MOTOR_1 = (25)
>> PIN_MOTOR_2 = (26)
>> PIN_MOTOR_3 = (27)
>> PIN_MOTOR_4 = (13)
>> my_motor = Stepper(MOTOR_STEPS, PIN_MOTOR_1,
PIN_MOTOR_3, PIN_MOTOR_2, PIN_MOTOR_4)
>> my_motor.set_speed(10)
회전하다
my_moter.step(512)
# =>ステッピングモータが90度、時計回りに回転
my_moter.step(2048)
# =>ステッピングモータが360度、時計回りに回転
my_moter.step(-512)
# =>ステッピングモータが90度、反時計回りに回転
사이고에게
참고
Reference
이 문제에 관하여(ESP32 - MicroPython을 사용하여 스테퍼 모터 제어), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kotaproj/items/cd37c971f03fb02c97ce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)