При разработке различных проектов робототехники широкое распространение находят двигатели, используемые для приведения в движение каких-либо частей роботов. Но обычно контакты микроконтроллеров, которые также находят широкое применение в робототехнике по понятным причинам, не могут управлять токами, достаточными для приведения в движение электродвигателей. Поэтому для этих целей используются специализированные микросхемы драйверов двигателей.
В данной статье мы рассмотрим создание своими руками (DIY) шилда (платы расширения) для управления двигателями постоянного тока на основе платы NodeMCU ESP8266 и микросхемы драйвера двигателей L293D. Печатная плата рассматриваемого шилда изготовлена автором проекта (ссылка на оригинал приведена в конце статьи) с помощью сервиса OurPCB.
Необходимые компоненты
- NodeMCU ESP8266 (купить на AliExpress).
- Микросхема драйвера двигателей L293D (купить на AliExpress).
- Регулятор напряжения LM7805 (купить на AliExpress).
- Конденсаторы 0,1 мкФ (1 шт.), 0,33 мкФ (1 шт.) (купить на AliExpress).
- Конденсатор 10 мкФ (купить на AliExpress).
- Резистор 220 Ом (купить на AliExpress).
- Светодиод (купить на AliExpress).
- 16 Pin IC Base (16-ти контактная основа для крепления микросхемы).
- Клемма с винтовым креплением – 2 шт.
- Разъем для подключения источника постоянного тока (DC Power Jack Female).
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Схема проекта
Схема шилда драйвера двигателей на NodeMCU ESP8266 представлена на следующем рисунке. Схема нарисована с помощью редактора EasyEDA.
Схема состоит из платы NodeMCU ESP8266, микросхемы драйвера двигателей L293D, 6-контактного переключателя для включения/выключения подачи питания и регулятора напряжения LM7805 для получения стабилизированного напряжения 5V. Наш шилд (плата расширения) может управлять двумя двигателями постоянного тока (DC motors). Цифровые контакты платы NodeMCU ESP8266 D3 и D4 используются для управления левым двигателем, а ее контакты D5 и D6 – для управления правым двигателем. Также в схеме предусмотрены контакты для подключения датчиков, реле или каких либо других устройств.
Изготовление печатной платы для нашего проекта
После того как схема проекта нарисована, можно приступать к проектированию печатной платы для него. Для этого можно использовать, к примеру, редактор EasyEDA. В этом редакторе вы можете посмотреть проектируемую печатную плату со всех сторон, используя его окно ‘Layers’. Также можно посмотреть 3D модель спроектированной печатной платы. Для нашего проекта 3D модель печатной платы представлена на следующем рисунке.
Gerber файлы для изготовления печатной платы нашего шилда драйвера двигателей можно скачать по следующей ссылке.
Заказ печатной платы на сервисе OurPCB
Для этого выполните следующую последовательность шагов.
Шаг 1. Зарегистрируйтесь на сайте https://www.ourpcb.com/. После регистрации и входа в свой аккаунт нажмите на кнопку ‘Quote Now’ (заказать сейчас) на вкладке PCB Manufacturing.
Шаг 2. Вас перебросит на страницу, где вы должны заполнить такие параметры как имя, страна, телефонный номер, спецификации и Gerber файлы. При желании можно указать дополнительные параметры для изготовления печатной платы.
Шаг 3. После этого вам необходимо только подтвердить свой заказ. Далее команда сервиса OurPCB свяжется с вами по Email для уточнения параметров заказа и произведения оплаты заказа.
Разумеется, вы можете заказать изготовление печатной платы в любом сервисе, с которым привыкли работать.
Сборка конструкции шилда драйвера двигателей
Спустя несколько дней после заказа изготовления платы на сервисе OurPCB автор проекта получил изготовленную печатную плату проекта в аккуратном пакете. Внешний вид изготовленной печатной платы показан на следующем рисунке. Как видите, качество изготовления платы не вызывает нареканий.
После размещения на данной печатной плате компонентов проекта у автора получилась следующая собранная конструкция шилда драйвера двигателей.
Объяснение программы для модуля NodeMCU ESP8266
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
В нашем проекте нам необходимо разработать программу для NodeMCU ESP8266, с помощью которой можно будет одновременно управлять двумя электродвигателями постоянного тока для движения автомобиля, на котором они установлены, вперед, назад, вправо или влево.
Код программы мы начнем с задания номеров используемых контактов.
1 2 3 4 |
const int inputPin1 = D3; const int inputPin2 = D4; const int inputPin3 = D5; const int inputPin4 = D6; |
Внутри функции setup() зададим режимы работы всех используемых контактов.
1 2 3 4 5 6 7 |
void setup() { pinMode(inputPin1, OUTPUT); pinMode(inputPin2, OUTPUT); pinMode(inputPin3, OUTPUT); pinMode(inputPin4, OUTPUT); } |
Далее, внутри функции loop() мы будем одновременно управлять двумя двигателями для движения автомобиля вперед, назад, влево и вправо с двухсекундным интервалом. В следующей таблице представлены комбинации уровней напряжения на используемых контактах для движения автомобиля в необходимых направлениях.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
void loop() { //Forward digitalWrite(inputPin1, HIGH); digitalWrite(inputPin2, LOW); digitalWrite(inputPin3, HIGH); digitalWrite(inputPin4, LOW); delay(2000); //Left digitalWrite(inputPin1, LOW); digitalWrite(inputPin2, LOW); digitalWrite(inputPin3, HIGH); digitalWrite(inputPin4, LOW); delay(2000); //Right digitalWrite(inputPin1, HIGH); digitalWrite(inputPin2, LOW); digitalWrite(inputPin3, LOW); digitalWrite(inputPin4, LOW); delay(2000); //Reverse digitalWrite(inputPin1, LOW); digitalWrite(inputPin2, HIGH); digitalWrite(inputPin3, LOW); digitalWrite(inputPin4, HIGH); delay(2000); //Stop digitalWrite(inputPin1, LOW); digitalWrite(inputPin2, LOW); digitalWrite(inputPin3, LOW); digitalWrite(inputPin4, LOW); delay(2000); } |
Тестирование работы проекта
После того как сборка конструкции проекта будет закончена, вы можете загрузить программу в NodeMCU и установить микросхему L293D на нашу плату расширения. Если все работает так, как надо, то вы должны увидеть, как двигатели будут крутиться влево, вперед, вправо и в обратном направлении одновременно каждые две секунды.
Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
//Motor A const int inputPin1 = D3; const int inputPin2 = D4; //Motor B const int inputPin3 = D5; const int inputPin4 = D6; void setup() { pinMode(inputPin1, OUTPUT); pinMode(inputPin2, OUTPUT); pinMode(inputPin3, OUTPUT); pinMode(inputPin4, OUTPUT); } void loop() { //Forward digitalWrite(inputPin1, HIGH); digitalWrite(inputPin2, LOW); digitalWrite(inputPin3, HIGH); digitalWrite(inputPin4, LOW); delay(2000); //Left digitalWrite(inputPin1, LOW); digitalWrite(inputPin2, LOW); digitalWrite(inputPin3, HIGH); digitalWrite(inputPin4, LOW); delay(2000); //Right digitalWrite(inputPin1, HIGH); digitalWrite(inputPin2, LOW); digitalWrite(inputPin3, LOW); digitalWrite(inputPin4, LOW); delay(2000); //Reverse digitalWrite(inputPin1, LOW); digitalWrite(inputPin2, HIGH); digitalWrite(inputPin3, LOW); digitalWrite(inputPin4, HIGH); delay(2000); //Stop digitalWrite(inputPin1, LOW); digitalWrite(inputPin2, LOW); digitalWrite(inputPin3, LOW); digitalWrite(inputPin4, LOW); delay(2000); } |