Содержание

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

← Метеостанция | Оглавление | Тестер батареек →

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

Прочтите перед выполнением

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

Принципиальная схема

Схема на макетке

Обратите внимание

Скетч

p170_servo.ino
// управлять сервоприводами (англ. 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);
}

Пояснения к коду

Вопросы для проверки себя

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

Задания для самостоятельного решения

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

← Метеостанция | Оглавление | Тестер батареек →