通过ESP32控制电机正反转并实现一款简易的停车场升降杆(MicroPython+Thonny)

  • 本案例使用MicroPython实现

  • 本案例基于Thonny平台实现

  • 开发板采用ESP32 Devkit V1

  • 电机驱动采用L298N来实现

  • 电机采用1:48直流减速电机

  • 最后实现简易的停车场升降杆

以下展现电路连线图,IO13连接ENA,IO12连接INT1,IO14连接INT2,ESP32使用USB线连接电源端。(注意:电池用的是两块串联的3.7V电池,即总的7.4V锂电池)

通过ESP32控制电机正反转并实现一款简易的停车场升降杆(MicroPython+Thonny)_第1张图片

元器件

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杆,通过代码实现了它自动升降。后期可以结合深度学习相关代码来利用摄像头拍照车牌来实现模拟自动化停车场。

参考链接:参考博客

你可能感兴趣的:(ESP32,嵌入式硬件,python)