Arduino количество оборотов двигателя
Двигатель постоянного тока (DC Motor)
Поработаем с двигателем постоянного тока, который обычно входит в состав стартового набора с пропеллером.
Двигатели весьма часто применяются в Arduino-проектах. Они приводят в действие колеса, крутят пропеллеры, вращают манипуляторы промышленного робота и перемещают каретку 3D-принтера.
Каждый начинающий робототехник сталкивается с проблемой подключения двигателя к микроконтроллеру. У мотора всего два вывода, и кажется, что двигатель можно подключить к цифровым выводам Arduino, а затем включать и выключать по программе. Но не тут-то было. Даже небольшой двигатель, часто используемый в разного рода игрушках, для своей работы требует ток силой от 200 мА до 1 Ампера. А цифровой выход Arduino может дать нам только 20мА. Большинству мощных двигателей требуется напряжение более 5 Вольт, привычных для Arduino. Распространены двигатели на 12, на 24 и на 48 Вольт. Другими словами, Arduino очень слаба для прямого управления двигателями. Нужен какой-то мощный посредник!
Самый простой посредник — это транзистор. Подойдут и полевые транзисторы, и биполярные, работающие в режиме ключа.
Управляем через транзистор 2N2222/P2N2222
Для сборки схемы понадобятся транзистор 2N2222 (как вариант P2N2222, BC547, 2N3904, N2222A, TIP120), диод 1N4001 (как вариант 1N4148, 1N4007).
Собираем по схеме. Будьте внимательные при соединении транзистора и диода, соблюдайте их стороны.
Скетч. Возможно, питания от USB будет недостаточно для работы мотора, используйте питание от сети.
В Serial Monitor нужно ввести значение от 0 до 255, чтобы задать скорость мотора. В моём случае мотор начинал нормально вращаться от значения 30 и выше.
Есть урок с использованием транзистора IRF530N.
Драйвер L293D
Существует множество готовых микросхем, которые позволяют управлять разными типами двигателей. Мы рассмотри драйвер L293D.
Микросхема представляет собой два H-моста, а значит можно управлять сразу двумя двигателями. Каждый мост снабжён четырьмя защитными диодами и защитой от перегрева. Максимальный ток, который может передать L293D на двигатель — 1.2А. Рабочий ток — 600мА. Максимальное напряжение — 36 В.
Микросхема L293D имеет DIP-корпус с 16-ю выводами. Схема выводов ниже. Отсчёт выводов ведётся против часовой стрелки и начинается от выемки в корпусе микросхемы.
+V — питание микросхема, 5В;
+Vmotor — питание двигателей, до 36В;
0V — земля;
En1, En2 — выводы включения/выключения H-мостов;
In1, In2 — управляющие выводы первого H-моста;
Out1, Out2 — выводы для подключения первого двигателя;
In3, In4 — управляющие выводы второго H-моста;
Out3, Out4 — выводы для подключения второго двигателя.
Выводы En1 и En2 служат для отключения или включения мостов. Если мы подаём 0 на En, соответствующий мост полностью выключается и двигатель перестаёт вращаться. Эти сигналы пригодятся нам для управления тягой двигателя при помощи ШИМ-сигнала.
Схема подключения двух двигателей:
Подключим один двигатель по схеме.
Скетч для вращения двигателя, меняя направление каждую секунду. Функция analogWrite() с помощью ШИМ-сигнала управляет мощностью двигателя. Мы командуем драйверу вращать двигатель с максимальной скоростью, что соответствует ШИМ-сигналу — 255. Здесь следует отметить, что уменьшение ШИМ-сигнала в два раза не даст в два раза меньшую скорость. Скорость и тяга двигателей постоянного тока зависят от входного напряжения нелинейно.
Усложним программу. Будем кроме направления менять ещё и мощность.
Вот что получится в итоге. Сначала мотор вращается с небольшой скоростью, затем выходит на максимальные обороты, и повторяет всё в обратном направлении. На видео используется двигатель постоянного тока CH1 с колесом. Такие часто применяют в учебных роботах.
Как подключить электродвигатель к Arduino
Как известно, электродвигатели бывают трёх основных типов: коллекторные, шаговые и сервоприводы. В данной статье мы рассмотрим подключение коллекторного электродвигателя к Arduino с помощью драйвера двигателей на основе микросхемы L9110S или аналогичной.
Для проекта нам понадобятся:
- коллекторный электродвигатель постоянного тока или аналогичный;
- драйвер двигателя L9110S, или шилд на микросхеме L293D или аналогичный;
- шаговый двигатель 28BYJ-48 с драйвером ULN2003 или аналогичный;
- Arduino UNO или иная совместимая плата;
- соединительные провода (например, вот такой набор);
- макетная плата;
- персональный компьютер со средой разработки Arduino IDE.
1 Что такое драйвер двигателей и для чего он нужен
Максимальный ток на выводах Arduino слаб (около 50 мА) для такой мощной нагрузки как электромотор (десятки и сотни миллиампер). Поэтому напрямую к выводам Arduino подключать электродвигатель нельзя: есть риск сжечь вывод, к которому подключён двигатель. Для безопасного подключения электродвигателей разных типов к Arduino необходим самодельный или промышленно изготовленный т.н. драйвер двигателей. Драйверы двигателей бывают разные, для их работы часто используются микросхемы типа HG788, L9110S, L293D, L298N и другие. Драйверы двигателей имеют выводы подачи питания, выводы для подключения электродвигателей, а также управляющие выводы.
Различные варианты исполнения драйверов двигателей
В данной статье мы будем использовать драйвер для управления двигателями, сделанный на основе микросхемы L9110S. Обычно выпускаются платы, которые поддерживают подключение нескольких двигателей. Но для демонстрации мы обойдёмся одним.
2 Схема подключения коллекторного двигателяи драйвера двигателей к Arduino
Самые простые электродвигатели – коллекторные двигатели. У таких моторов всего два управляющих контакта. В зависимости от полярности приложенного к ним напряжения меняется направление вращения вала двигателя, а величина приложенного напряжения изменяет скорость вращения.
Давайте подключим двигатель по приложенной схеме. Питание драйвера двигателя – 5 В от Arduino, для управления скоростью вращения ротора мотора управляющие контакты подключаем к выводам Ардуино, поддерживающим ШИМ (широтно-импульсную модуляцию).
Схема подключения коллекторного двигателя к Arduino с помощью драйвера двигателей
Должно получиться что-то подобное:
Двигатель подключён к драйверу двигателей и Arduino
3 Скетч для управления коллекторным двигателем
Напишем скетч для управления коллекторным двигателем. Объявим две константы для ножек, управляющих двигателем, и одну переменную для хранения значения скорости. Будем передавать в последовательный порт значения переменной Speed и менять таким образом скорость (значением переменной) и направление вращения двигателя (знаком числа).
Загрузим скетч в память Arduino. Запустим его. Вал двигателя не вращается. Чтобы задать скорость вращения, нужно передать в последовательный порт значение от 0 до 255. Направление вращения определяется знаком числа.
Подключимся с помощью любой терминалки к порту, передадим число «100» – двигатель начнёт вращаться со средней скоростью. Если подадим «минус 100», то он начнёт вращаться с той же скоростью в противоположном направлении.
Управление электромотором с помощью драйвера двигателей и Arduino
А вот так выглядит подключение подключение коллекторного двигателя к Arduino в динамике:
4 Управление шаговым двигателем с помощью Arduino
Шаговый двигатель позволяет вращать ротор на определённый угол. Это бывает полезно, когда необходимо задать положение какому-либо механизму или его узлу. Шагом двигателя называется минимальный угол, на который можно повернуть ротор двигателя. Угол поворота и направление движения задаются в управляющей программе. Существует большое разнообазие шаговых двигателей. Рассмотрим работу с ними на примере двигателя 28BYJ-48 с драйвером ULN2003.
Шаговый двигатель с контроллером —>
Шаговый двигатель с контроллером
Характеристики двигателя 28BYJ-48:
Характеристика | Значение |
---|---|
Количество фаз | 4 |
Напряжение питания | от 5 до 12 В |
Число шагов | 64 |
Размер шага | 5,625° |
Скорость вращения | 15 об./сек |
Крутящий момент | 450 г/см |
Модуль с микросхемой драйвера для управления шаговым двигателем выглядит так:
Модуль с драйвером ULN2003
На входы IN1…IN4 подаются управляющие сигналы от Arduino. Используем любые 4 цифровых пина, например, D8…D11. На вход питания необходимо подать постоянное напряжение от 5 до 12 В. Двигателю желательно обеспечить отдельное питание. Но в данном случае, т.к. не планируется использовать двигатель на постоянной основе, можно подать питание и от Arduino. Перемычка «Вкл/выкл» просто разрывает «плюс» питания, подаваемого на драйвер. В «боевом» изделии сюда можно, например, коммутировать питание с помощью реле, когда это необходимо, чтобы снизить потребление всего изделия. Итак, схема подключения будет такой:
Схема подключения шагового двигателя с драйвером ULN2003 к Arduino
Соберём всё по схеме.
Подключение шагового двигателя 28BYJ-48 к Arduino
Для Arduino «из коробки» существует готовая библиотека для управления шаговыми двигателями. Она называется Stepper. Можно посмотреть готовые примеры в среде разработки для Arduino: File Examples Stepper. Они позволяют управлять шаговым двигателем, изменяя скорость и направление движения, поворачивать ротор на заданный угол. Как говорится – бери и пользуйся. Но давайте попробуем разобраться с принципом работы шагового двигателя самостоятельно, не применяя никаких библиотек.
Двигатель 28BYJ-48 имеет 4 фазы. Это означает, что у него имеются 4 электромагнитные катушки, которые под действием электрического тока притягивают сердечник. Если напряжение подавать на катушки поочерёдно, это заставит сердечник вращаться. Рисунок иллюстрирует данный принцип.
Схема работы шагового двигателя
Здесь на (1) напряжение подано на катушки A и D, на (2) – на A и B, (3) – B и С, (4) – C и D. Далее цикл повторяется. И таким образом ротор двигателя вращается по кругу.
Напишем самый простой скетч для уравления шаговым двигателем. В нём просто будем вращать двигатель с постоянной скоростью в одном направлении, используя только что описанный принцип.
Простейший скетч управления шаговым двигателем (разворачивается)
Как можно догадаться, задержка del определяет скорость вращения двигателя. Уменьшая или увеличивая её можно ускорять или замедлять двигатель.
Если загрузить этот скетч, то увидим, что шаговый двигатель вращается против часовой стрелки. Соответственно, можно вынести цикл вращения в одну сторону в отдельную функцию rotateCounterClockwise(). И сделать аналогичную функцию вращения в противоположную сторону rotateClockwise(), в которой фазы будут следовать в обратном порядке. Также вынесем в отдельные функции каждую из 4-х фаз чтобы избежать дублирования одинакового кода в нескольких местах программы. Теперь скетч выглядит несколько интереснее:
Скетч управления шаговым двигателем (разворачивается)
Если мы загрузим скетч и проверим, поворачивается ли ротор двигателя на целый оборот, если один раз вызвать функцию rotateClockwise(), то обнаружим, что нет. Для совершения полного оборота функцию необходимо вызвать несколько раз. Соответственно, хорошо бы добавить в качестве аргумента функции число, которое будет показывать количество раз, которые она должна выполняться.
Финальный скетч управления шаговым двигателем (разворачивается)
Вот теперь совсем другое дело! Мы можем управлять скоростью шагового двигателя, задавая задержку после каждой фазы. Мы можем менять направление движения ротора двигателя. И, наконец, мы умеем поворачивать ротор на некоторый угол. Осталось только определить, какое число необходимо передавать в функции поворота rotateClockwise() и rotateCounterClockwise(), чтобы ротор шагового двигателя 1 раз провернулся на 360° вокруг своей оси. Собственно, дальнейшие наработки – вопрос фантазии или необходимости.
Двигатель постоянного тока. Датчики. Ардуино
Привет! Мы уже рассматривали работу шагового двигателя и сервопривода. Остался еще один тип двигателя, который необходимо описать. Это двигатель постоянного тока. Сегодня поговорим о нем.
Если вы пропустили или уже забыли предыдущие обзоры двигателей, пожалуйста, посмотрите их здесь.
Чтобы выполнить этот урок нам понадобятся.
- Ардуино UNO
- Макетная плата
- Перемычки
- Двигетель
- Кабель USB
Двигатель постоянного тока
Википедия говорит, что Электродвигатель постоянного тока (ДПТ) — это электрическая машина постоянного тока, преобразующая электрическую энергию постоянного тока в механическую энергию.
То есть, из электричества мы получаем механическое движение.
Схема электродвигателя
При подаче напряжения ток проходит сквозь обмотку возбуждения. У смежных полюсов возникает противоположная полярность, в результате образуется магнитное поле.
На якорь двигателя через коллектор подаётся постоянный ток, на который со стороны магнитного поля статора действует электромагнитная индукция.
В результате создаётся вращающий момент, поворачивающий ротор на 90 электрических градусов. После этого щёточно-коллекторный узел коммутирует обмотки ротора, чтобы вращение продолжалось.
Достоинства и недостатки
Достоинства:
- простота устройства и управления
- практически линейные механическая и регулировочная характеристики двигателя
- легко регулировать частоту вращени
- хорошие пусковые свойства (большой пусковой момент)
- компактнее других двигателей (если использовать сильные постоянные магниты в статоре)
Недостатки :
- дороговизна изготовления
- для питания электродвигателя от сети переменного тока необходимо использовать выпрямительные устройства
- необходимость профилактического обслуживания
- ограниченный срок службы из-за износа коллектора
Программа и схема
Сегодня попробуем собрать простейшую схему, не будем использовать драйверы и микросхемы, чтобы управлять мотором. А просто подключим моторчик к Ардуино, чтобы включать и выключать его. Поскольку наш мотор работает от 5+ вольт, то дополнительное питание так же не потребуется. А включать мотор из скетча будем так же, как и светодиоды. Используя простую команду digitalWrite()
Принципиальная схема подключения мотора
Раскручиваем и останавливаем электродвигатель
Полный текст программы
Заключение
Сегодня мы рассмотрели еще один вид двигателя — двигатель постоянного тока. В результате, собрали простейшую схему и написали элементарный скетч для управления мотором. Более того, в следующий раз рассмотрим разные схемы подключения мотора и более интересные программы для управления.
КОД ПРОГРАММЫ К УРОКУ 12. ARDUINO И ЭЛЕКТРОДВИГАТЕЛЬ
КОД ПРОГРАММЫ К УРОКУ 12. ARDUINO И ЭЛЕКТРОДВИГАТЕЛЬ
/*
*
* Набор для экспериментов ArduinoKit
* Код программы для опыта №12: sketch 12
*
* Крутись мотор
*
* Написано для сайта http://arduinokit.ru
*
*
* Помощь сообщества Arduino.
* Посетите сайт http://www.arduino.cc
*
*
*
* КРУТИСЬ МОТОР. ARDUINO И ЭЛЕКТРОДВИГАТЕЛЬ.
*
* Использование транзистора для управления скоростью мотора.
* Мы также покажем вам, как вводить данные через последовательный порт
* (см функцию serialSpeed() ниже).
*
* Двигатели одна из многочисленных вещей из нашей повседневной жизни,
* и Arduino может ими управлять. Мы будем использовать Широтно
* Импульсную Модуляцию (PWM) для управления скоростью двигателя.
*
* Порты Arduino способны выдержать работу нескольких светодиодов
* (до 40 мА), но они не достаточно мощны, чтобы справиться с нагрузкой
* от двигателя и других прожорливых потребителей энергии. Двигатель
* идущий в наборе потребляет приблизительно от 50 до 100 mA, а это
* значительно больше чем может дать Arduino. Поэтому мы будем
* использовать транзистор, который выполнит главную работу.
* Транзистор будет выполнять роль «твердотельного выключателя», мы
* «дадим» ему ток маленькой величины, а будет коммутировать, гораздо
* больший ток. Транзистор 2N2222 может коммутировать ток до 200 мА.
*
* Вы можете управлять транзистором с помощью функции digitalWrite()
* («включать» и «выключать»), а с помощью функцию analogWrite()
* изменять скорость вращения двигателя, для этого Arduino использует
* Широтно Импульсную Модуляцию (PWM), подавая импульсы напряжения
* изменяя их ширину от 0% до 100%.
*
* Имейте в виду, для уменьшения скорости, вы уменьшаете ее с помощью
* ШИМ (делая паузы «СТОП» длиннее). Если в начале, длительность паузы
* будет 50% и более, двигатель, просто не сможет раскрутиться,
* поэтому при старте необходимо немного добавить скорости.
*
* Подсоединяем оборудование:
*
* Транзистор:
*
* У транзистора имеются три вывода. Если повернуть его скошенной
* стороной (с надписями) к себе, а выводами вниз, то назначения
* выводов будут следующими (слева на пр.): КОЛЛЕКТОР, БАЗА, ЭМИТЕР.
*
* Подсоедините минусовой вывод мотора к КОЛЛЕКТОРУ транзистора.
* Подсоедините БАЗУ через резистор 330 Ом к цифровому порту 9.
*Подсоедините ЭМИТЕР к GND (минусовой шине).
*
* Мотор:
*
* Вы уже должны были подсоединить минусовой вывод мотора к
*КОЛЛЕКТОРУ транзистора.
*
* В данном опыте не имеет большого значения как подсоединять плюс
* или минус двигателя, если их перепутать двигатель просто будет
* крутиться в обратном направлении, это будет иметь значение если
* двигатель установлен в машинке, и вместо того, чтобы ехать вперед,
* она поедет назад.
*
* Оставшийся вывод мотора подсоедините к +5 Вольт.
*
* Полупроводниковый диод:
*
* Полупроводниковый диод пропускает электрический ток только в
* одном направлении и блокирует его прохождение в другом.
*
* Когда двигатель вращается, и резко отключается, магнитное поле
* внутри него падает, в результате создается всплеск напряжения.
* Это может привести к повреждению транзистора. Чтобы этого не
* случилось, мы и будем использовать диод, который не пропустит
* этот всплеск через себя.
*
* На импортных диодах, почти всегда, КАТОД, отмечен полоской —
* кольцом, расположенным, как раз у этого вывода.
*
* Подключите один вывод диода (КАТОД) к +5 Вольт, а другой
* вывод (АНОД) к минусовому контакту на двигателе.
*
* В данном опыте не имеет большого значения плюс или минус
* двигателя, если их перепутать двигатель просто будет крутиться в
* обратном направлении, это будет иметь значение если двигатель
* установлен в машинке, и вместо того, чтобы ехать вперед, она
* поедет назад.
*
*
* Комментарий к программе написан
* 23 ноября 2014
* специально для http://arduinokit.ru
// Будем управлять двигателем используя цифровой порт 9 (pin 9).
// Это должен быть любой ШИМ порт Arduino
const int motorPin = 9;
void setup()
<
// Установим порт мотора как выходной:
// Активируем «Монитор порта»:
Serial.begin(9600);
>
void loop()
<
// Здесь мы использовали комментарии для отключения некоторых
// примеров. Чтобы испробовать другой пример, раскомментируйте
// одну из следующих строк и закомментируйте другие. См функции,
// для того чтобы узнать что они делают и как работают.
// motorOnThenOff();
// motorOnThenOffWithSpeed();
// motorAcceleration();
serialSpeed();
>
// Попробуйте разные значения.
void motorOnThenOff()
<
int onTime = 3000; // миллисекунд для вращения мотора
int offTime = 3000; // миллисекунд для простаивания мотора
digitalWrite(motorPin, HIGH); // включить мотор — максимальная скорость
delay(onTime); // задержка, для продолжения вращения
digitalWrite(motorPin, LOW); // выключить мотор
delay(offTime); // задержка, для простаивания мотора
>
// Функция «motorOnThenOffWithSpeed» переключает работу мотора между
// двумя скоростями. Пробуйте разные значения, если интересно.
void motorOnThenOffWithSpeed()
<
int Speed1 = 200; // скорость «Speed1» 0 (остановка), 255 (полный ход)
int Time1 = 3000; // время «Time1» в миллисекундах
int Speed2 = 50; // скорость «Speed2» 0 (остановка), 255 (полный ход)
int Time2 = 3000; // время «Time2» в миллисекундах
analogWrite(motorPin, Speed1); // включаем мотор на скорости «Speed1»
delay(Time1); // продолжаем вращение заданное время
analogWrite(motorPin, Speed2); // включаем мотор на скорость «Speed2»
delay(Time2); // продолжаем, заданное время «Time2»
>
// Функция «motorAcceleration» раскручивает двигатель от нуля до
// максимума, и обратно до полной остановки.
void motorAcceleration()
<
int speed;
int delayTime = 20; // пауза в миллисекундах
// будем раскручивать мотор, увеличивая скорости от 0 до 255 с паузой в
// 20 миллисекунд меду каждым шагом (1, пауза, 2, пауза, 3, пауза и.т.д)
for(speed = 0; speed = 0; speed—)
<
analogWrite(motorPin,speed); // установка новой скорости
delay(delayTime); // пауза «delayTime», т.е 20 миллисекунд
>
>
// Следующая функция позволит вам изменять скорость прямо в окне
// «Монитора порта». Для этого откройте Монитор порта, используя
// значок увеличительного стекла в Arduino IDE, в правом верхнем
// углу окна. Затем введите желаемую скорость в специальном месте
// для ввода текста «Type a speed (0-255) into the box above,», в
// верхней части окна, и нажмите кнопку «Send» (отправить) или
// «return» (возврат). Двигатель будет работать на заданной вами
// скорости. Допустимый диапазон от 0 до 255.
void serialSpeed()
<
int speed;
Serial.println(«Type a speed (0-255) into the box above,»);
// Т.к. с русским языком в «мониторе порта» существуют некоторые
// сложности, надписи будут на английском.
Serial.println(«then click [send] or press [return]»);
Serial.println(); // Распечатать пустую строку
// In order to type out the above message only once,
// we’ll run the rest of this function in an infinite loop:
// Для того, чтобы вывести сообщение (выше) лишь один раз,
// Мы будем запускать остальную часть этой функции в
// бесконечном цикле:
// Вывод запроса данных осуществляется лишь раз, после этого
// Функция будет проверять правильность ввода данных по кругу, пока
// данные не изменятся.
while(true)
<
// Сначала мы проверяем, доступны ли входные данные:
while (Serial.available() > 0)
<
// Если данные есть, выполняем parseInt() для считывания цифр:
// Поскольку analogWrite() работает с числами от 0 до 255,
// мы обязательно должны быть уверенны, что число входит в
// заданный диапазон. Для этого воспользуемся функцией «constrain».
// об этой функции мы говорили в опыте №6 «Arduino и Фоторезистор»:
speed = constrain(speed, 0, 255);
// Напечатать сообщение для того, чтобы вы знали что число
// было получено: