Моторы
В этом уроке мы рассмотрим два вида моторов: DC мотор и Сервопривод.
Сервопривод – это моторчик, который может держать заданный угол поворота. Так же есть сервы, которые могут удерживать заданную скорость, но сегодня мы не будем их рассматривать.
Нам понадобятся
- Микросервопривод
- DC мотор(я использовал FA-130 из Матрешки)
- Конденсатор на 220 мкФ
- MOSFET
- Выпрямительный диод
- Потенциометр
- Соединительные провода «Папа-Папа»
DC мотор
Для начала рассмотрим обычный моторчик. Ток, который поддерживает Arduino на своих выходах до 40 мА. Моторчик без нагрузки потребляет 80мА, а при блокировке 1600мА (для разных моторчиков потребляемый ток может варьироваться), что определенно больше максимальных 40 мА. Потому, если моторчик просто подключить к пину Arduino, то велик шанс, в лучшем случае повредить мотор или сжечь пин, в худшем – вывести из строя микроконтроллер.
Для того, чтобы подключить мотор к Arduino, придуманы различные Motor-shieldы, придуманы микросхемы, например L298, MOSFET- транзисторы. В первой части курса мы рассмотрим лишь MOSFET-транзистор.
Что такое транзистор? Транзистор – это электронная кнопка, лишь «нажимаемая» током. О нем поподробнее.
MOSFET- транзистор – это транзистор для управления большими токами, малым напряжением.
Так как вывод Vin позволяет подключать нагрузку без ограничений по величине тока, мы сможем подключить моторчик и управлять им с помощью MOSFET и Arduino.
Соберем схему, которая позволит нам посмотреть, как в зависимости от подаваемого напряжения изменяется скорость вращения мотора.
Компонент сверку мотора – это выпрямительный диод. Если ты знаком с устройством коллекторного мотора, то ты знаешь, что при его работе возникает обратный ток, который может повредить наш MOSFET. Для того чтобы этого не произошло мы и используем выпрямительный диод.
Главное — не перепутать полярность подключения диода. Иначе — будет короткое замыкание.
Теперь перейдем к коду.
Код к мотору
#define MOTOR 9
#define POT A0
void setup() {
// Обозначим пин MOTOR как выход.
pinMode(MOTOR , OUTPUT);
Serial.begin(9600);
Serial.println(«Potentiometer’s values in volts»);
}
void loop() {
//Создаем переменную, для регулирования скорости мотора
int motorSpeed = analogRead(POT)/ 4;
// Выставляем скорость мотора в соответствии с показаниями потенциометра.
analogWrite(MOTOR,motorSpeed);
//Создаем «плавающую» переменную для выведения данных в Serial Monitor.
float voltage = (analogRead(POT)/ 204.8 );
//Выводим данные в Serial monitor.
Serial.println(voltage);
//Немного ждем.
delay(1000);
}
Пояснения
Мотор подключается как аналоговый выход. То есть, питание выводится через analogWrite(MOTOR, Значение) А в зависимости от значения, MOSFET дает сигнал о подаче нужного напряжения.
Сервопривод
Отлично! С моторчиком разобрались. Теперь переходим к сервомотору. Без определенных знаний при управлении сервомотором не обойтись. Но хорошие люди уже постарались для нас и сделали библиотеку для управления сервой. Потому управлять сервомотором достаточно простая задача.
Соберем простенькую схемку, в которой серва будет поворачиваться сначала до упора в право, а потом обратно влево и так бесконечно. Где нам это пригодится, мы узнаем во Второй части нашего курса. А проявив фантазию, ты уже сейчас можешь найти применение этой схеме. Внимание на картинку.
Бочонок на схеме – это конденсатор. Конденсатор – это такая маленькая батарейка, которая очень быстро заряжается и быстро разряжается. О нем подробнее.
В нашей схеме он нужен, чтобы избежать просадки питания платы т.к. мы подключаем его к выводу 5V.
Цвета проводов на твоей серве могут отличаться. К примеру, там может быть коричневый провод вместо черного, а вместо желтого оранжевый. Не надо пугаться. Ничего не меняется. Коричневый или черный – это земля. Красный, он есть почти всегда, — питание. Желтый или оранжевый – сигнал.
Код для сервомотора
#include <Servo.h> //Подключим библиотеку для сервомотора.
Servo servo; // Создадим объект типа Servo
void setup()
{
servo.attach(13); //прикрепим серву к 13 пину.
}
void loop()
{
int ang = 0; //В эту переменную запишем угол.
//Создаем цикл со счетчиком для поворота на 180 градусов.
for(ang = 0; ang <= 180; ang++)
{
servo.write(ang);
delay(10);
}
//Создаем цикл со счетчиком для поворота обратно.
for(ang = 180; ang >=0; ang—)
{
servo.write(ang);
delay(10);
}
}
Пояснения
Servo servo Мы создаем Объект типа Servo. Объект Servo имеет свои свойства, как и другие объекты int, byte, char, например. Нам не надо создавать и описывать объект Servo т. к. он уже описан в подключаемой библиотеке. А второе, «маленькое», слово servo – это просто имя нашего сервомотора. Вы можете называть его как вам угодно, не забывая о грамотности в C++ ,конечно.
servo.attach(пин) С помощью этой команды мы прикрепляем нашу серву к 13 пину. Текст до точки – это имя, объявленное при создании объекта Servo. Параметром принимает номер пина, к которому подключена наша серва.
servo.write(угол) С помощью этой функции, мы даем команду серве повернуться на нужный угол. А для постоянного вращения «туда-сюда» мы использовали цикл for.
++ и — Это инкремент и декремент соответственно. Они нужны для более быстрой записи выражений. X++ означает то же, что и x == x+1, а x— означает то же, что и x == x-1. Вариации.
Итог
Сегодня мы научились подключать сервомотор и DC мотор к Arduino. Это пригодится нам позже. К примеру, при создании мобильного робота или Робо-руки. Но это позже.
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
Плата ArduinoArduino Uno1
Выпрямительный диод1N40071
ТранзисторMOSFET1
DC МоторFA-1301
СервоприводFS901
Соединительные провода"Папа-Папа"1
Макетная платаBreadboard-half1
Переменный резистор10 кОм1
Конденсатор220 мкФ1
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- Servo.ino (1 Кб)
- Motor_test.ino (1 Кб)