Курс Arduino — Моторы

Моторы

В этом уроке мы рассмотрим два вида моторов: 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)

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.