Arduino. Эксперимент 17. Пантограф

В этом эксперименте мы вращаем сервопривод на угол, задаваемый потенциометром. Прочтите перед выполнением:

 

-   Конденсатор.

 

СПИСОК ДЕТАЛЕЙ ДЛЯ ЭКСПЕРИМЕНТА

 

-   1 плата Arduino Uno;

-   1 беспаечная макетная плата;

-   1 сервопривод;

-   1 конденсатор емкостью 220 мкФ;

-   1 потенциометр;

-   11 проводов «папа-папа».

 

ПРИНЦИПИАЛЬНАЯ СХЕМА

 

 

СХЕМА НА МАКЕТНОЙ ПЛАТЕ

 

 

ОБРАТИТЕ ВНИМАНИЕ

  • Конденсатор в данной схеме нам нужен для того, чтобы при включении сервопривода избежать просадки питания платы.
  • Не забывайте про то, что нужно соблюдать полярность элетролитического конденсатора. Короткая ножка (со стороны белой полосы на корпусе) — «минус».
  • Вы можете соединить провод сервопривода с макетной платой проводами «папа-папа»: коричневый это земля, красный — питание, оранжевый — сигнал.
  • В данном эксперименте мы подключаем питние сервопривода к 5V-выходу Arduino. С одним сервоприводом плата справится, но если в каком-либо проекте вам нужно больше сервоприводов, используйте специальные платы-драйвера с отдельным источником питания для сервоприводов.

 

СКЕТЧ

 

скачать скетч для Arduino IDE
// управлять сервоприводами (англ. servo motor) самостоятельно
// не так то просто, но в стандартной библиотеке уже всё
// заготовлено, что делает задачу тривиальной
#include <Servo.h>
 
#define POT_MAX_ANGLE 270.0 // макс. угол поворота потенциометра
 
// объявляем объект типа Servo с именем myServo. Ранее мы
// использовали int, boolean, float, а теперь точно также
// используем тип Servo, предоставляемый библиотекой. В случае
// Serial мы использовали объект сразу же: он уже был создан
// для нас, но в случае с Servo, мы должны сделать это явно.
// Ведь в нашем проекте могут быть одновременно несколько
// приводов, и нам понадобится различать их по именам
Servo myServo;
 
void setup()
{
 // прикрепляем (англ. attach) нашу серву к 9-му пину. Явный
 // вызов pinMode не нужен: функция attach сделает всё за нас
 myServo.attach(9);
}
 
void loop()
{
 int val = analogRead(A0);
 // на основе сигнала понимаем реальный угол поворота движка.
 // Используем вещественные числа в расчётах, но полученный
 // результат округляем обратно до целого числа
 int angle = int(val / 1024.0 * POT_MAX_ANGLE);
 // обычная серва не сможет повторить угол потенциометра на
 // всём диапазоне углов. Она умеет вставать в углы от 0° до
 // 180°. Ограничиваем угол соответствующе
 angle = constrain(angle, 0, 180);
 // и, наконец, подаём серве команду встать в указанный угол
 myServo.write(angle);
}

 

ПОЯСНЕНИЯ К КОДУ

  • В данном эксперименте мы также имеем дело с объектом, на этот раз он нужен для простого управления сервоприводом. Как отмечено в комментариях, в отличие от объекта Serial, объекты типа Servo нам нужно явно создать: Servo myServo, предварительно подключив библиотеку <Servo.h>.
  • Далее мы используем два метода для работы с ним:
    • myServo.attach(pin) — сначала «подключаем» серву к порту, с которым физически соединен его сигнальный провод. pinMode() не нужна, метод attach() займется этим.
    • myServo.write(angle) — задаем угол, т.е. позицию, которую должен принять вал сервопривода. Обычно это 0—180°.
  • myServo здесь это имя объекта, идентификатор, который мы придумываем так же, как названия переменных. Например, если вы хотите управлять двумя захватами, у вас могут быть объекты leftGrip и rightGrip.
  • Мы использовали функцию int() для явного преобразования числа с плавающей точкой в целочисленное значение. Она принимает в качестве параметра значение любого типа, а возвращает целое число. Когда в одном выражении мы имеем дело с различными типами данных, нужно позаботиться о том, чтобы не получить непредсказуемый ошибочный результат.

 

ВОПРОСЫ ДЛЯ ПРОВЕРКИ СЕБЯ

  1. Зачем нужен конденсатор при включении в схему сервопривода?
  2. Каким образом библиотека <Servo.h> позволяет нам работать с сервоприводом?
  3. Зачем мы ограничиваем область допустимых значений для angle?
  4. Как быть уверенным в том, что в переменную типа int после вычислений попадет корректное значение?

 

ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО РЕШЕНИЯ

  1. Измените программу так, чтобы по мере поворота ручки потенциометра, сервопривод последовательно занимал 8 положений: 45, 135, 87, 0, 65, 90, 180, 150°.
  2. Предположим, что сервопривод управляет шторкой, и нам нужно поддерживать постоянное количество света в помещении. Создайте такой механизм.

 

С оригиналом статьи вы можете ознакомиться на сайте Amperka.ru


ЭКСПЕРИМЕНТ 16 | ОГЛАВЛЕНИЕ | ЭКСПЕРИМЕНТ 18

Категория: Простые эксперименты | Добавил: Decay_Dance (15.03.2016)
Просмотров: 1891 | Теги: электрические схемы, основы схемотехники, основы робототехники, электричество, микроконтроллеры, простые эксперименты, Arduino | Рейтинг: 0.0/0