Урок 5. Управление двигателем постоянного тока ESP32 и MicroPython.

Приветствую вас на очередном уроке по программированию ESP32 на MicroPython. Сегодня мы разберём код, который можно применить на практике. Будем вращать двигатель постоянного тока в одну сторону до срабатывания кнопки. После чего включим реверс вращения двигателя и вращать он будет до тех пор, пока не сработает вторая копка. Вместо кнопок можно использовать конечные выключатели и данный пример использовать для цикличного выполнения перемещения.


А начнём разбираться с данным примером с изменения примера из прошлого урока, где мы включали и выключали светодиод при нажатии на кнопку.

Приветствую вас на очередном уроке по программированию ESP32 на MicroPython.

Для начала давайте немного уменьшим код, а именно избавимся от постоянного написания «machine» в коде.

Для начала давайте немного уменьшим код, а именно избавимся от постоянного написания «machine» в коде.

Для этого поменяем код подключения модуля с

import machine

на

from machine import Pin

То есть получим функцию Pin из модуля machine. И сейчас в коде будет достаточно написать «Pin» вместо «machine.Pin».

То есть получим функцию Pin из модуля machine.

Прерывания на микроконтроллере ESP32 с помощью языка MycroPython.

Для использования внешнего прерывания в MycroPython используется следующая функция.

button.irq(trigger=Pin.IRQ_FALLING, handler=my_button)

button.irq(trigger=Pin.IRQ_FALLING, handler=my_button) – настраивает обработчик прерываний, который будет вызван при появлении сигнала запуска. Если контакт работает в режиме Pin.IN, то источником сигнала запуска будет служить внешнее значение контакта. Если контакт работает в режиме Pin.OUT, то источником сигнала запуска будет служить выходной буфер контакта. Но если контакт будет работать в режиме Pin.OPEN_DRAIN, то источником сигнала запуска будет служить выходной буфер (для «0») и внешнее значение контакта (для «1»).

trigger – определяет условие, при котором должно срабатывать прерывание:

  • Pin.IRQ_FALLING – прерывание на заднем фронте.
  • Pin.IRQ_RISING – прерывание на переднем фронте.

handler – функция, которую необходимо вызвать при возникновении прерывания, в моём случае это функция my_button. Функция handler должна принимать лишь один аргумент, которым должен быть экземпляр класса Pin.

В качестве примера напишем код включения встроенного светодиода при нажатии на кнопку «boot» по аналогии с примером из прошлого урока, но уже с использованием прерывания.

Прерывания на микроконтроллере ESP32 с помощью языка MycroPython.

При вызове функции my_button меняем логическое стояние контакта, к которому подключен светодиод. Тем самым включаем и выключаем его.

При нажатии на кнопку, в консоли видим информацию о номере пина, к которому подключена кнопка.

При нажатии на кнопку, в консоли видим информацию о номере пина, к которому подключена кнопка.

Если поменять trigger=Pin.IRQ_RISING и проверить, то увидим, что информация появляется, когда мы отпускам кнопку. Вот в чём различие данных условий срабатывания прерывания.

Если поменять trigger=Pin.IRQ_RISING и проверить, то увидим, что информация появляется

Также можно использовать данные условия одновременно.

trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING

Также можно использовать данные условия одновременно.

Тем самым при нажатии кнопки светодиод будет включаться, а при отпускании выключаться. Принцип работы аналогичен примеру из прошлого урока, но уже с помощью прерывания.


Управление двигателем постоянного тока с помощью ESP32 и MycroPython.

Управление двигателем постоянного тока с помощью ESP32 и MycroPython.

Давайте применим на практике полученные значения. Для этого подключим к ESP32 драйвер L298n и двигатель. Я буду использовать мотор редуктор от машинки, которую собирал и программировал на MycroPython вот в этом проекте.

Схема подключения ESP32, драйвера L298n и двигателя постоянного тока.

Схема подключения ESP32, драйвера L298n и двигателя постоянного тока.

В коде определим контакты подключения кнопок. Чтобы не использовать подтягивающие резисторы, воспользуемся подтягивающими резисторами платы ESP32. Для этого инициализируем пины с использованием Pin.PULL_UP.

Для этого инициализируем пины с использованием Pin.PULL_UP.

Инициализируем два пина для работы с драйверами.

Инициализируем два пина для работы с драйверами.

Создадим две глобальные переменные:

  • press - будет хранить флаг стояния кнопки.
  • n_pin – номер контакта кнопки (pin).

Функция my_button будет поднимать флаг нажатия кнопки и сохранять в переменной n_pin номер пина нажатой кнопки. Для того чтобы получить номер пина в виде числа, нужно взять из строки символы после четвёртого и без последнего символа строки и преобразовать в целочисленное значение.

Функция my_button будет поднимать флаг нажатия кнопки и сохранять в переменной n_pin номер пина

Создадим прерывание для каждой кнопки с вызовом функции my_button.

Создадим прерывание для каждой кнопки с вызовом функции my_button.

В бесконечном цикле будем выполнять следующие действия.

В бесконечном цикле будем выполнять следующие действия.

Сперва мы проверяем переменную press. Если кнопка была нажата, тогда выводим в монитор номер контакта нажатой кнопки и отпускаем флаг press.

Сперва мы проверяем переменную press. Если кнопка была нажата, тогда выводим в монитор номер контакта нажатой кнопки и отпускаем флаг press.

Далее проверяем, какая кнопка была нажата. Если левая кнопка, то начинаем вращать двигатель вправо и выводим в монитор надпись о направлении вращения. Если сработала правая кнопка, то меняем направление вращения и выводим в монитор надпись «Влево».

Далее проверяем, какая кнопка была нажата. Если левая кнопка, то начинаем вращать двигатель вправо и выводим в монитор надпись о направлении вращения.

В противном случае ничего не делаем.

Как видно из примера, при нажатии на кнопку в мониторе время от времени отображается несколько строчек с одним пином кнопки.

Как видно из примера, при нажатии на кнопку в мониторе время от времени отображается несколько строчек с одним пином кнопки. Это связанно с дребезгом контактов. В данном проекте это никак не повлияет на работу, а в других проектах это может стать серьёзной проблемой. Поэтому в одном из следующих уроков разберём, как можно устранить дребезг кнопки.

В следующем уроке начнём изучать работу с ШИМ.


Понравился Урок 5. Управление двигателем постоянного тока ESP32 и MicroPython? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Пример 1. Избавимся от постоянного написания «machine» в коде Пример 1. Избавимся от постоянного написания «machine» в коде.py1 Kb 73 Скачать
Пример 2. Прерывания на микроконтроллере ESP32 с помощью языка MycroPython Пример 2. Прерывания на микроконтроллере ESP32 с помощью языка MycroPython.py1 Kb 68 Скачать
Пример 3. Управление двигателем постоянного тока с помощью ESP32 и MycroPython Пример 3. Управление двигателем постоянного тока с помощью ESP32 и MycroPython.py1 Kb 62 Скачать

Комментарии

Ваше Имя*