⭐本案例使用MicroPython实现
✨本案例基于Thonny平台实现
开发板采用ESP32 Devkit V1
电机驱动采用L298N来实现
电机采用1:48直流减速电机
最后实现简易的停车场升降杆
以下展现电路连线图,IO13连接ENA,IO12连接INT1,IO14连接INT2,ESP32使用USB线连接电源端。(注意:电池用的是两块串联的3.7V电池,即总的7.4V锂电池)
元器件 |
ESP32 |
L298N |
IO |
GPIO13 |
ENA |
GPIO12 |
INT1 |
|
GPIO14 |
INT2 |
|
GND |
GND |
代码块一共是两段程序,一段是电机驱动程序,另一段是电机的主程序。
烧录到ESP32上直接运行主程序即可。
# 电机驱动程序
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
# 电机主程序
from dcmoter 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)
for i in range(3):
dc_motor.forward(10)
sleep(0.7)
dc_motor.stop()
sleep(1)
dc_motor.backwards(10)
sleep(0.675)
dc_motor.stop()
sleep(1)
最后通过自制好的简易停车场升降mini杆,通过代码实现了它自动升降。后期可以结合深度学习相关代码来利用摄像头拍照车牌来实现模拟自动化停车场。
参考链接:参考博客