本帖最后由 gada888 于 2019-4-29 21:05 编辑
MicroPython是Python的精简版,但保留了python的基本特色。是学习python的工具之一。本项目是DC 电机正反转各一次。烧录软件用的是uPyCraft。软件用法见本人另一个帖子使用ESP32 和 micropython点亮RGB LED
本案例用了ESP32 和 L298N电机驱动。以及一个直流电机。6V的。电机正负极直接要连一个104电容的。本人偷了个懒,没用电容。
这是连线图。IO13连ENA。IO12连INT1.IO14连INT2.ESP32是用USB线连了电脑。图上没画USB线。需要注意。电池用的DFRobot的7.4V锂电池。
图上不是两节电池,是4节1.5V电池。
一共2段程序,一个是电机驱动库,另一个是电机主程序。
# made by gada888
from dcmotor import DCMotor
from machine import Pin, PWM
from time import sleep
frequency = 15000
pin1 = Pin(12, Pin.OUT)
pin2 = Pin(14, Pin.OUT)
enable = PWM(Pin(13), frequency)
dc_motor = DCMotor(pin1, pin2, enable)
dc_motor.forward(50)
sleep(2)
dc_motor.stop()
sleep(1)
dc_motor.backwards(100)
sleep(2)
dc_motor.forward(10)
sleep(5)
dc_motor.stop() # made by gada888
class DCMotor:
def __init__(self, pin1, pin2, enable_pin, min_duty=750, max_duty=1023):
self.pin1 = pin1
self.pin2= pin2
self.enable_pin = enable_pin
self.min_duty = min_duty
self.max_duty = max_duty
def forward(self, speed):
self.speed = speed
self.enable_pin.duty(self.duty_cycle(self.speed))
self.pin1.value(1)
self.pin2.value(0)
def backwards(self, speed):
self.speed = speed
self.enable_pin.duty(self.duty_cycle(self.speed))
self.pin1.value(0)
self.pin2.value(1)
def stop(self):
self.enable_pin.duty(0)
self.pin1.value(0)
self.pin2.value(0)
def duty_cycle(self, speed):
if self.speed <= 0 or self.speed > 100:
duty_cycle = 0
else:
duty_cycle = int (self.min_duty + (self.max_duty - self.min_duty)*((self.speed - 1)/(100-1)))
return duty_cycle
|
|
|
|
|
|