Потенциометр и сервопривод

Крутилка на A0 задаёт угол, сервопривод на D9 его отрабатывает. analogRead даёт 0…1023, map переводит в градусы, а длину импульса считает библиотека Servo.

Программа

// Потенциометр крутит сервопривод.
//
// Потенциометр — делитель напряжения: крайние выводы на +5 В и землю, средний
// на A0. analogRead возвращает 0…1023 — это НЕ вольты, а доля от опорного
// напряжения, и map переводит её в углы 0…180.
//
// Сервопривод угол «понимает» не по напряжению, а по длине импульса на сигнальном
// проводе. Считает её библиотека Servo — поэтому write(градусы), а не analogWrite.
#include <Servo.h>

const int POT = A0;
const int SIG = 9;

Servo arm;
int shown = -1;

void setup() {
  arm.attach(SIG);
  Serial.begin(9600);
}

void loop() {
  int raw = analogRead(POT);            // 0…1023
  int deg = map(raw, 0, 1023, 0, 180);  // 0…180°
  arm.write(deg);

  if (deg != shown) {                   // печатаем только когда угол сменился
    shown = deg;
    Serial.print("A0=");
    Serial.print(raw);
    Serial.print("  угол=");
    Serial.println(deg);
  }
  delay(20);                            // серве нужно время доехать
}

Схема примера появится, когда загрузится страница: её собирает и считает движок цепей.

← Ко всем примерам