2019-4-29 21:01:18 [显示全部楼层]
7252浏览
查看: 7252|回复: 0

[ESP32系列教程] 用ESP32和MicroPython来控制电机

[复制链接]
本帖最后由 gada888 于 2019-4-29 21:05 编辑

MicroPython是Python的精简版,但保留了python的基本特色。是学习python的工具之一。本项目是DC 电机正反转各一次。烧录软件用的是uPyCraft。软件用法见本人另一个帖子使用ESP32 和 micropython点亮RGB LED
用ESP32和MicroPython来控制电机图1
本案例用了ESP32 和 L298N电机驱动。以及一个直流电机。6V的。电机正负极直接要连一个104电容的。本人偷了个懒,没用电容。
用ESP32和MicroPython来控制电机图2
这是连线图。IO13连ENA。IO12连INT1.IO14连INT2.ESP32是用USB线连了电脑。图上没画USB线。需要注意。电池用的DFRobot的7.4V锂电池。
用ESP32和MicroPython来控制电机图3
图上不是两节电池,是4节1.5V电池。
用ESP32和MicroPython来控制电机图4
一共2段程序,一个是电机驱动库,另一个是电机主程序。
用ESP32和MicroPython来控制电机图5
# 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


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail