Välj en sida

Att styra positionen på ett servo är i grunden väldigt likt att styra ljusstyrkan på en lysdiod. Kopplingen är därför mycket lik den som vi använde i projekt 004. Precis som då är den totala resistansen på vridmotståndet inte så viktigt så länge det är på mellan 1KΩ och 100 KΩ.

Koppling

För vårt projekt behöver du göra följande koppling.

Arduino-projekt 005 – Servo

Beskrivning

Ett servo förväntar sig en puls-bredds-modulerad (PWM) signal precis som vi använde för att styra lysdioden i projekt 002 och 004, men servon har lite större krav på signalen och för att lösa detta finns det färdig kod tillgänlig så att vi inte själva behöver lösa det varje gång vi ska styra ett servo. Det första vi gör i vår kod är därför att inkludera denna färdiga kod och skapar sedan ett objekt som representerar servot. Ett objekt är i princip en variabel men som även har olika funktioner kopplad till sig som gör att man kan utföra olika operationer på datan som variabeln innehåller. I det här exemplet använder vi funktionen attach() för att berätta vilken utgång som servot är inkopplat till och write() för att sätta position på servot. Positionen anges som en vinkel mellan 0 och 180 grader. Detta innebär att vi måste skala om värdet vi läser av från vridmotståndet precis som i projekt 004.

Koden

// Hämta in kod-biblioteket för styrning av servomotorer
#include <Servo.h>

// Skapa ett servo-objekt för att kontrollera servomotorn.
Servo mitt_servo;

// Reservera minne för variabler att lagra data i
int varde_in;
int vinkel;

void setup() {
  // Berätta vilken utgång som ditt servo är inkopplat på.
  mitt_servo.attach(2);
  // Ställ om pinne A0 till att vara en ingång.
  pinMode(A0, INPUT);
}

void loop() {
  // Läs av vridmotståndets position. Detta ger ett värde mellan 0 och 1023.
  varde_in = analogRead(A0);
  // Skala om värdet så att det är mellan 0 och 180.
  vinkel = map(varde_in, 0, 1023, 0, 180);
  // Sätt servomotorns position
  mitt_servo.write(vinkel);
  // Vänta lite så att servot hinner flytta sig till rätt position
  delay(15);
}