В этой статье мы будем подключать двигатель постоянного тока к Arduino Uno и управлять скоростью его вращения. Делать мы это будем с помощью ШИМ (широтно-импульсной модуляции, в англ. языке PWM — Pulse Width Modulation) – эта функция реализована в Arduino чтобы на основе постоянного напряжения иметь возможность получения изменяющегося напряжения.
- Общие принципы ШИМ
- Принцип работы H-моста
- Необходимые компоненты
- Работа схемы
- Исходный код программы
- Подключение моторчика к Ардуино
- Управление двигателем на Ардуино
- Как подключить моторчик к Arduino
- Скетч. Подключение мотора через транзистор
- Пояснения к коду:
- Скетч. Подключение мотора через драйвер
- Мотор с редуктором 1:48
- Технические характеристики
- Подключение к плате Arduino
- Пример использования
- Часто задаваемые вопросы
- 📽️ Видео
Видео:Уроки Arduino. Управление моторами с библиотекой GyverMotorСкачать
Общие принципы ШИМ
Метод осуществления ШИМ показан на следующем рисунке.
Если на представленном рисунке кнопка нажата, то двигатель начнет вращение и он будет вращаться до тех пор пока кнопка не будет отжата. Эта ситуация происходит если кнопка будет нажата постоянно – верхний график на представленном рисунке. Если же мы будем нажимать кнопку только в течение 8 мс из всего цикла в 10 мс, то в этом случае двигатель уже не будет в полной мере получать все напряжение батареи 9 В – в этом случае среднеквадратичная величина напряжения, получаемого двигателем, будет около 7 В. Соответственно, двигатель по сравнению с первым случаем (когда кнопка нажата постоянно) будет вращаться с меньшей скоростью. Поэтому цикл занятости (который еще называют коэффициентом заполнения ШИМ) в этом случае составит время включенного состояния/(время включенного состояния + время выключенного состояния) = 8/(8+2)=80%.
В следующих рассмотренных на рисунке случаях кнопка будет находиться в нажатом состоянии еще меньше чем в рассмотренном случае (80%). Соответственно, среднеквадратичная величина напряжения, получаемого двигателем, будет составлять еще меньшую величину, поэтому и скорость вращения двигателя также уменьшится. Это уменьшение скорости вращения двигателя вследствие уменьшения среднеквадратичной величины напряжения будет происходить до тех пор, пока получаемое двигателем напряжение не станет не достаточным для его вращения. То есть, изменяя величину цикла занятости (коэффициент заполнения ШИМ), можно управлять скоростью вращения двигателя постоянного тока.
Видео:Управление моторами с ArduinoСкачать
Принцип работы H-моста
Перед тем, как переходить непосредственно к управлению двигателем, обсудим что такое H-BRIDGE (H-мост). Собранная нами далее схема будет осуществлять две функции: управлять двигателем постоянного тока с помощью управляющих сигналов малой мощности и изменять направление вращения двигателя.
Нам известно, что для изменения направления вращения двигателя постоянного тока необходимо изменить полярность приложенного к нему питающего напряжения. И как раз для смены полярности напряжения хорошо подходит устройство, называемое H-мостом. На представленном выше рисунке мы имеем 4 выключателя. Как показано на рисунке 2 если выключатели A1 и A2 замкнуты, то ток через двигатель течет справа налево как показано на второй части рисунка 2 – то есть в этом случае двигатель будет вращаться по часовой стрелке. А если выключатели A1 и A2 разомкнуты, а B1 и B2 – замкнуты, то ток через двигатель в этом случае будет протекать слева направо как показано на второй части рисунка, то есть двигатель будет вращаться против часовой стрелки. В этом и заключается принцип работы H-моста.
Мы в качестве H-моста будем использовать специализированную микросхему L293D, которую еще называют драйвером двигателей. Эта микросхема предназначена для управления двигателями постоянного тока малой мощности (см. рисунок) и содержит в своем составе два H-моста, то есть с ее помощью можно управлять двумя двигателями. Эта микросхема часто используется для управления двигателями в различных роботах.
В следующей таблице указаны необходимые значения напряжений на выводах INPUT1 и INPUT2 микросхемы L293D для смены направления вращения двигателя.
Enable Pin | Input Pin 1 | Input Pin 2 | Motor Direction |
High | Low | High | вправо |
High | High | Low | влево |
High | Low | Low | стоп |
High | High | High | стоп |
То есть, чтобы двигатель вращался по часовой стрелке необходимо чтобы на 2A было напряжение высокого уровня (high), а на контакте 1A – напряжение низкого уровня (low). Аналогично для вращения двигателя против часовой стрелки необходимо обеспечить на 1A напряжение высокого уровня, а на 2A – низкого.
Как показано на следующем рисунке Arduino UNO имеет 6 ШИМ каналов (обозначенных на плате специальным знаком – тильдой), любой из которых мы можем использовать для получения изменяющего напряжения (на основе ШИМ). В данном проекте мы будем использовать в качестве ШИМ выхода контакт PIN3 Arduino UNO.
Видео:Тест ардуино мотор-редукторовСкачать
Необходимые компоненты
- Плата Arduino UNO (купить на AliExpress).
- Драйвер двигателей L293D (купить на AliExpress).
- Электродвигатель постоянного тока.
- Светодиод (купить на AliExpress).
- Резистор 10 кОм (2 шт.) (купить на AliExpress).
- Кнопка (2 шт.).
- Конденсатор 100 пФ (купить на AliExpress).
- Переключатель.
- Источник питания с напряжением 5 В.
Видео:Управление двигателем постоянного тока, линейным приводом. АрдуиноСкачать
Работа схемы
Схема устройства (на макетной плате) представлена на следующем рисунке.
В рассматриваемой схеме мы имеем две кнопки, у каждой из которых, естественно, будет присутствовать эффект, называемый «дребезгом контактов». Но в данном случае для нас он не будет нести никакого негативного эффекта и не будет вызывать ошибок в работе схемы.
Читайте также: Червячный редуктор 5000 нм
На нашем сайте мы уже рассматривали управление ШИМ с помощью микроконтроллера AVR ATmega и это управление было не самым простым делом – необходимо было сконфигурировать различные регистры. В отличие от этого управление ШИМ в Arduino UNO является крайне простым занятием, не требующем всего этого.
Видео:Самодельное колёсное шасси 4х4 с ардуино мотор-редукторами.Скачать
Исходный код программы
По умолчанию все необходимые заголовочные файлы подключаются автоматически самой средой ARDUINO IDE, она же конфигурирует сама и все регистры, необходимые для работы ШИМ, поэтому нам в программе уже не нужно заботиться об этих вещах. Все что нам нужно будет сделать – это определить на каком контакте мы будем использовать ШИМ.
То есть для использования ШИМ на нужном контакте нам необходимо сделать следующие вещи:
pinMode(ledPin, OUTPUT)
analogWrite(pin, value)
analogWriteResolution(neededresolutionnumber)
Сначала мы должны выбрать один из доступных 6 выходов (контактов) ШИМ. Потом необходимо установить этот контакт в режим на вывод данных.
После этого мы должны задействовать функции ШИМ на этом выходе используя функцию “ analogWrite(pin, value) ”. Здесь ‘pin’ обозначает номер контакта, на котором мы будем использовать ШИМ, в нашем случае это будет 3-й контакт.
Value в этой функции представляет собой цикл занятости (коэффициент заполнения) ШИМ, оно может принимать значения от 0 (всегда выключено) до 255 (всегда включено). Мы будем увеличивать и уменьшать это значение с помощью кнопок, присутствующих на схеме.
Плата Arduino UNO имеет максимальное разрешение (разрешающую способность) ШИМ, равную 8, что означает что value в функции analogWrite(pin, value) может принимать значения от 0 до 255. Но если в этом есть необходимость, мы можем уменьшать разрешение ШИМ используя функцию “ analogWriteResolution() ”, в скобках которой мы можем записать число в диапазоне 4-8, которое и будет определять разрешающую способность ШИМ платы Arduino UNO.
Переключатель на схеме служит для изменения направления вращения двигателя.
А теперь непосредственно сам код программы с комментариями.
Видео:Управление джостиком от ардуино мотор редукторомСкачать
Подключение моторчика к Ардуино
Подключение мотора к Ардуино ► потребуется при сборке машинки или катера. Рассмотрим различные варианты подключения коллекторного двигателя к Arduino.
Подключение мотора постоянного тока к Ардуино (коллекторного двигателя) требуется при сборке машинки или катера на микроконтроллере Arduino. Рассмотрим различные варианты подключения двигателей постоянного тока: напрямую к плате, через биполярный транзистор, а также с использованием модуля L298N. В обзоре размещены схемы подключения и коды программ для всех перечисленных вариантов.
Видео:Уроки Arduino - управление бесколлекторным моторомСкачать
Управление двигателем на Ардуино
Коллекторный моторчик может быть рассчитан на разное напряжения питания. Если двигатель работает от 3-5 Вольт, то можно моторчик подключать напрямую к плате Ардуино. Моторы для машинки с блютуз управлением, которые идут в комплекте с редукторами и колесами рассчитаны уже на 6 Вольт и более, поэтому ими следует управлять через полевой (биполярный) транзистор или через драйвер L298N.
Принцип работы и устройство мотора постоянного тока
На схеме показано устройство моторчика постоянного тока и принцип его работы. Как видите, для того, чтобы ротор двигателя начал крутиться к нему необходимо подключить питание. При смене полярности питания, ротор начнет крутиться в обратную сторону. Драйвер двигателей L298N позволяет инвертировать направление вращения мотора fa 130, поэтому его удобнее использовать в своих проектах.
Видео:ПОДКЛЮЧАЕМ ШАГОВЫЙ ДВИГАТЕЛЬ К ARDUINO [Уроки Ардуино #14]Скачать
Как подключить моторчик к Arduino
Для этого занятия нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- мотор постоянного тока (Motor DC);
- транзистор полевой/биполярный;
- драйвер двигателей L298N;
- провода «папа-папа», «папа-мама».
Перед выбором способа управления двигателем от Arduino Uno r3, уточните на какое напряжение рассчитан ваш моторчик. Если питание требуется более 5 Вольт, то следует использовать транзистор или драйвер. Распиновка транзисторов может отличаться от приведенного примера (следует уточнить распиновку для своего типа). Драйвер L298N позволит не только включать мотор, но и изменять направление вращения.
Скетч. Подключение мотора через транзистор
Подключение мотора через транзистор к Ардуино потребуется, если двигатель никак не хочет включаться от платы напрямую, то следует использовать порт 5 Вольт на микроконтроллере или внешний источник питания. Транзистор будет играть роль ключа, замыкая/размыкая электрическую цепь. Сам транзистор управляется цифровым портом. Соберите схему, как на картинке и загрузите программу.
Подключение FA-130 мотора постоянного тока — Motor DC Arduino
Пояснения к коду:
- при необходимости можно подключить два мотора FA-130 к Ардуино;
- в зависимости от характеристик, двигатель подключается к 3,3 или 5 Вольтам.
Читайте также: Редуктор для электротриммера sterwins 1200
Скетч. Подключение мотора через драйвер
Подключение мотора к Ардуино через драйвер L298N или Motor Shield L293D позволит менять направление вращения ротора. Но для использования данных модулей потребуется установить соответствующие библиотеки для Ардуино. В примере мы использовали схему подключения двигателя с помощью модуля L298N. Соберите схему, как на картинке ниже и загрузите следующий скетч с использованием.
Видео:Коллекторные моторы 12 мм. Железки АмперкиСкачать
Мотор с редуктором 1:48
В последнее время в радиолюбительских кругах набирает популярность такое направление, как робототехника. Платформа Arduino позволяет присоединиться к этому увлекательному процессу даже начинающих разработчиков, снижая порог вхождения в тему до приемлемого минимума. Роботизированные платформы с дистанционным управлением являются наиболее часто повторяемыми проектами. Думаю, что никто не отказался бы иметь под рукой послушного робота, который исправно выполняет команды своего хозяина.
Чтобы привести в движение шасси робота, разработчики, как правило, применяют моторы-редукторы. Они способны при небольших размерах обеспечивать достаточную силу тяги для реализации уверенного движения. Среди любительских легковесных роботов, фаворитом в этом направлении является мотор постоянного тока с редуктором 1:48, внешний вид которого показан на рисунке №1.
Рисунок №1 – мотор постоянного тока с редуктором 1:48
Редуктор данного мотора содержит шестерни из прочного пластика. Тем не менее, для управления массивными конструкциями использовать его не рекомендуется. Силиконовый хомут не даёт двигателю выпасть из редукторного корпуса, но он может быть отстёгнут вручную. Такой подход позволяет легко заменить двигатель на аналогичный при выходе последнего из строя.
Данный класс моторов с редуктором выпускается 4-х типов, а именно:
Прямой одноосевой мотор-редуктор;
Прямой двухосевой мотор-редуктор;
Угловой одноосевой мотор-редуктор;
Угловой двухосевой мотор-редуктор.
Рисунок №2 наглядно демонстрирует разницу их конструктивного исполнения. Вне зависимости от внешнего вида, все моторы имеют одинаковые характеристики.
Рисунок №2 – разновидности моторов с редуктором
Видео:Самодельный танк с ардуино мотор-редукторами.Скачать
Технические характеристики
Применительно к данным моторам-редукторам, можно выделить следующие технические характеристики:
Диапазон напряжений питания: 3В – 8В;
Номинальный ток потребления при напряжении 3,6В: 240 мА;
Передаточное число редуктора: 1/48;
Скорость вращения при напряжении 3,6В без нагрузки: 170 об/мин.
Крутящий момент при напряжении 6В: 800 г/см;
Габариты (для прямой модификации): 64мм х 20мм х 20мм;
Видео:Управление ШИМ мотор-редуктором на ArduinoСкачать
Подключение к плате Arduino
Как упоминалось в разделе технических характеристик, потребление данного мотора составляет 250 мА (при напряжении 3,6В). Это означает, что прямое управление с выводов Arduino здесь неуместно. А если учесть, что в большинстве проектов необходимо минимум два таких мотора, то задача становиться ещё интереснее. Первое что приходит в голову, это включение и отключение моторов с помощью полевого транзистора с логическим уровнем управления затвором, например IRL540N (рисунок №3).
Рисунок №3 – схема управления мотором при помощи полевого транзистора
Такое подключение даёт возможность включать и отключать двигатель логическим уровнем. Кроме того, можно управлять скоростью его вращения, изменяя уровень ШИМ на выводе D9 Arduino. Резистор 220 Ом ограничивает ток затвора транзистора, а резистор 100 кОм разряжает затвор, когда на выводе D9 установлен низкий логический уровень. Если его не использовать, то существует вероятность, что двигатель продолжит работать при его отключении. Диод 1N4007 защищает управляющую цепь от выброса высоковольтных импульсов самоиндукции, которые может создавать двигатель во время своей работы. Ниже приведён листинг программы, которая демонстрирует плавный разгон и торможение двигателя согласно вышеприведенной схемы.
Использование транзистора – это хорошо, но в рабочих роботизированных платформах каждый двигатель должен крутиться как вперёд, так и назад независимо друг от друга, да ещё и с разной скоростью. Поэтому данный вариант подходит только для простых проектов. Чтобы управлять двигателем полноценно, необходим мостовой драйвер. На данный момент большой популярностью пользуется драйвер L298N, который может обеспечить полноценное управление сразу двумя двигателями постоянного тока с возможностью реверса и регулировки скорости. Для того, чтобы напрямую не связываться с микросхемой драйвера, удобнее всего использовать готовый модуль с необходимой обвязкой на борту. Выглядит он так, как показано на рисунке №4.
Рисунок №4 – модуль драйвера L298N
Ниже приведён перечень выводов модуля L298N с кратким описанием каждого из них:
IN1, IN2 – эти контакты предназначены для управления Мотором №1 (А). В зависимости от логических уровней, установленных на этих контактах, двигатель будет вращаться в ту или иную сторону. Для получения вращения, логические уровни на этих контактах должны быть противоположны друг другу. Например: IN1=1, IN2=0 → двигатель вращается по часовой стрелке; IN1=0, IN2=1 → двигатель вращается против часовой стрелки.
IN2, IN3 – функционал контактов аналогичен IN1 и IN2, но только для Мотора №2 (В).
Читайте также: Редуктор 520 от 525
ENA – логическая «1» на этом выводе разрешает вращение Мотора №1 (А). Также на этот контакт можно подавать ШИМ-сигнал, что позволит управлять скоростью вращения двигателя.
ENB – функционал контакта аналогичен ENA, но только для Мотора №2 (В).
OUT1, OUT2 – колодка для подключения Мотора №1 (А).
OUT3, OUT4 – колодка для подключения Мотора №2 (В).
На рисунке №5 приведена схема включение двух двигателей при использовании модуля L298N и Arduino Nano.
Рисунок №5 – подключение моторов к Arduino через драйвер L298N
Согласно вышеприведенной схемы, драйвер L298N и Arduino Nano питаются от напряжения 7В. Этого будет достаточно, чтобы крутить два мотор-редуктора. Для возможности регулировки скорости, выводы ENA и ENB модуля L298N подключены к пинам Arduino, которые способны генерировать ШИМ-сигнал.
Ниже приведён тестовый скетч, который продемонстрирует все возможности драйвера, а именно: плавный разгон, торможение и реверс.
Видео:Редуктор своими руками для машинки, танка, робота, ардуино.Скачать
Пример использования
Опираясь на полученные в разделе №3 знания, можно собрать небольшой проект радиоуправляемой роботизированной платформы, которою будут приводить в движение два мотор-редуктора.
Так как управление платформой планируется вести по радиоканалу, необходимо иметь передатчик с пультом управления и приёмник, который будет интегрирован в робота. Наилучшим вариантом для осуществления задуманного будет использование пары радио-модулей NRF24L01. Условно, проект можно разделить на две части: создание пульта управления с передатчиком и создание шасси робота.
Создание пульта управления с передатчиком
Для передатчика актуальными командами будут следующие:
изменение скорости движения от 0 до 100%
Первые 4 пункта можно выполнить при помощи тактовых кнопок, а регулировку скорости осуществлять потенциометром. Исходя из вышеизложенного, получаем схему радиопульта, показанную на рисунке №6.
Рисунок №6 – схема радиопульта для роботизированной платформы
Ниже приведён листинг программы с подробными комментариями, который будет обрабатывать команды пользователя, отсылая их в радиоэфир. В качестве дополнения, потребуется установить библиотеку RF24. Следует заметить, что данный пульт управления довольно универсален и может быть использован в других проектах.
В главном цикле программы постоянно опрашиваются состояния кнопок и потенциометра. Полученный результат заноситься в массив, после чего он отсылается по радиоканалу, где может быть принят и расшифрован приёмником. На этом подготовка пульта радиоуправления роботом завершена и можно переходить к следующему этапу.
Создание и программирование шасси робота
Для того, чтобы собрать роботизированную платформу нам понадобятся следующие компоненты:
Arduino Nano – как основной мозг робота;
Модуль NRF24L01 – как приёмник сигналов с пульта управления;
Два мотор-редуктора для приведения робота в движение;
Модуль L298N для полноценного управления моторами;
Держатель для аккумуляторов или батареек;
Ну и конечно-же основание, на котором всё это необходимо закрепить.
На рисунке №7 показана электрическая схема будущего робота.
При монтаже электросхемы следует смотреть за тем, чтобы все выводы GND были соединены между собой. Также вывод GND модуля L298N желательно пустить отдельным проводом прямо к источнику питания, чтобы не пропускать большие токи через плату Arduino. Вместо 4-х пальчиковых батареек можно использовать два Li-Ion аккумулятора, соединённых последовательно. Такое соединение обеспечит достаточное напряжение для уверенного вращения мотор-редукторов.
Электролитический конденсатор, ёмкостью 100 мкФ в цепи питания радиомодуля обязателен. Без него NRF24L01 будет нестабильно работать или вообще не инициализируется.
Так как моторы будут зеркально развернуты по отношению друг к другу, подключать их необходимо также зеркально. Это хорошо видно на вышеприведенном рисунке, если провести ассоциацию цветов проводов с соответствующими клеммами на двигателе.
Ниже приведён скетч управления роботом с подробными комментариями.
Когда готовы схемы и программное обеспечение, можно уделить время практической сборке узлов. Чтобы легче было ориентироваться, на рисунке №8 представлен один из вариантов крепления моторов и некоторых компонентов проекта. В реальности компонентов будет больше, но здесь важна сама идея, следуя которой можно создать своего уникального робота.
Рисунок №8 – один из вариантов крепления моторов
Часто задаваемые вопросы
Что делать, если моторы при работе дают помехи, которые сказываются на нормальной работе радиомодуля NRF24L01
В таком случае рекомендуется намотать на ферритовый сердечник провода, питающие мотор-редуктор. Сам ферритовый сердечник необходимо расположить как можно ближе к двигателю.
Какое сопротивление у обмотки мотор-редуктора?
В продаже могут попадаться двигатели с разным диапазоном сопротивлений в пределах 3-6 Ом.
Какое количество оборотов в минуту может развить мотор-редуктор?
Количество оборотов в минуту зависит от напряжения питания и от сопротивления обмотки двигателя. В таблице ниже приведены некоторые практические данные, полученные опытным путём:
- Свежие записи
- Чем отличается двухтактный мотор от четырехтактного
- Сколько масла заливать в редуктор мотоблока
- Какие моторы бывают у стиральных машин
- Какие валы отсутствуют в двухвальной кпп
- Как снять стопорную шайбу с вала
📽️ Видео
Умный мотор-редуктор с энкодером и управляющим контроллером, FLASH-I2C для Arduino, Raspberry PiСкачать
NEMA17 Управление шаговым двигателем - Stepper motor with ArduinoСкачать
Мотор-редуктор для робота Ардуино . ВИДЕО ОБЗОР.Скачать
Улучшаем мотор-редукторы N20Скачать
Уроки Ардуино. Управление нагрузкой в сети переменного токаСкачать
Как подключить шаговый двигатель к ArduinoСкачать
Как сделать НАСТОЯЩИЙ сервопривод из любого мотора. Подчиненное регулирование. Робособаке быть? ЗС№5Скачать
Набор самодельных креплений для ардуино мотор-редуктора.Скачать