08. Styr ett servo

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

Koppling

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

Beskrivning

Ett servo förväntar sig en puls-bredds-modulerad (PWM) signal precis som vi använde för att styra lysdioden i dimmer-projektet, 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 dimmer-projektet så gör vi det med map()-funktionen.

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;

// Skapa variabler för att lagra det inlästa och omskalade värdet.
int varde_in;
int vinkel;

void setup() {
  // Berätta vilken utgång som ditt servo är inkopplat på.
  mitt_servo.attach(2);
  // Sätt 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 (20 ms) så att servot hinner flytta sig till rätt position.
  delay(20);
}

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *