Микроконтроллер ESP32 представляет собой довольно универсальную платформу, позволяющую не только обеспечивать беспроводную связь по WiFi и Bluetooth, но и управлять периферийными устройствами. В этом примере мы расскажем, как управлять двигателем постоянного тока, используя ESP32 и Arduino IDE.

Мы будем использовать интегральную схему ULN2803A для питания двигателя постоянного тока, поскольку мы не можем напрямую подключить цифровой вывод ESP32 к двигателю.
Принимая во внимание, что цифровые линии ввода/вывода ESP32 могут выдавать максимальный ток только 40 мА, мы не можем напрямую использовать их для управления двигателем постоянного тока. Вместо этого мы собираемся использовать интегральную схему ULN2803A, чтобы фактически подавать ток на двигатель, в то время как ESP32 просто будет контролировать, работает ли двигатель, или он остановлен. Схему подключения для управления двигателем постоянного тока от ESP32 с использованием ULN2803A можно увидеть далее на рисунке.

Если говорить упрощенно, то ULN2803A будет действовать как переключатель, который будет включать и отключать цепь подключения двигателя к заземлению (GND), в зависимости от состояния входного контакта, помеченного как In 1. Таким образом, когда линия GPIO ESP32 имеет высокое логическое значение (VCC), ULN2803A подключит двигатель к GND, и, таким образом, двигатель будет включен. Когда GPIO имеет низкое цифровое значение (GND), тогда двигатель будет отключен от GND, и, таким образом, он будет остановлен.
Кроме того, ULN2803A может управляться входами 3,3 В и обеспечивать более высокое напряжение, что позволяет нам управлять двигателем 5 В постоянного тока с помощью ESP32.
Код для этого проекта будет очень простым, поскольку нам нужно только контролировать состояние (высокое или низкое) цифрового вывода ESP32.
Итак, начнем с объявления в качестве глобальной переменной номера контакта, который будет подключен к двигателю постоянного тока. В нашем случае мы будем использовать GPIO 13. Обратите внимание, что для платы Beetle ESP32, которая используется здесь, это соответствует выводу, помеченному как D7.
int motorPin = 13;После этого нам нужно инициализировать линию как выход в функции настройки Arduino. Для этого нам просто нужно вызвать функцию pinMode. Эта функция получает в качестве первого аргумента номер контакта, а в качестве второго аргумента – константу, указывающую режим работы. Итак, мы передадим в качестве первого аргумента значение вывода, хранящееся в нашей ранее объявленной глобальной переменной, а в качестве второго аргумента – постоянную OUTPUT.
void setup() {
pinMode(motorPin, OUTPUT);
}
Мы напишем остальную часть нашего кода в бесконечном цикле Arduino. Сначала мы включим двигатель, подождем несколько секунд, выключим его, подождем еще несколько секунд, а затем повторим.
Таким образом, чтобы включить двигатель, нам просто нужно установить высокое значение цифрового вывода ESP32, чтобы двигатель работал на полной скорости. Мы можем установить цифровой уровень контакта с помощью функции digitalWrite. Эта функция получает в качестве первого аргумента номер контакта, а в качестве второго аргумента – константу, указывающую цифровой уровень, на который должен быть установлен контакт. Опять же, мы будем использовать нашу глобальную переменную, которая содержит номер контакта, и передадим ее в качестве первого аргумента функции digitalWrite. В качестве второго аргумента мы передадим константу HIGH.
digitalWrite(motorPin, HIGH);После этого мы подождем 10 секунд, поэтому мотор останется на некоторое время вращаться. Чтобы ввести задержку в нашу программу, нам просто нужно вызвать функцию задержки delay, передавая в качестве ввода число ожидания в миллисекундах.
delay(10000);После этого мы теперь выключим двигатель и подождем еще 10 секунд. Мы снова будем использовать функцию digitalWrite, но на этот раз мы передадим постоянную LOW в качестве второго параметра.
digitalWrite(motorPin, LOW);
delay(10000);
Окончательный полный код можно увидеть далее. Обратите внимание, что поскольку мы пишем нашу логику включения/выключения в бесконечном цикле Arduino, эта часть программы будет постоянно повторяться.
int motorPin = 13;
void setup() {
pinMode(motorPin, OUTPUT);
}
void loop() {
digitalWrite(motorPin, HIGH);
delay(10000);
digitalWrite(motorPin, LOW);
delay(10000);
}
Чтобы проверить код, просто скомпилируйте его и загрузите в свое устройство после завершения подключения всех электрических соединений схемы. После завершения процедуры загрузки кода двигатель должен начать движение, а затем остановиться с интервалом в 10 секунд, и так будет повторяться, пока питание не будет отключено.
© digitrode.ru