Курс 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. Это пригодится нам позже. Например, при создании мобильного робота или Робо-руки. Но это позже. 

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Плата Arduino Arduino Uno 1
Выпрямительный диод 1N4007 1
Транзистор MOSFET 1
DC Мотор FA-130 1
Сервопривод FS90 1
Соединительные провода "Папа-Папа" 1
Макетная плата Breadboard-half 1
Переменный резистор 10 кОм 1
Конденсатор 220 мкФ 1