Styr ett servo

Styr ett servo

I detta projektkapitel ska vi få en servomotor att röra sig utifrån hur vi vrider en potentio­meter. 

Servomotor

Servomotorer kan användas till mycket. I Bygg en tärning används en sådan motor för att slå en tärning. I roboten på bilden används två servomotorer per ben för att styra hur roboten ska gå (eller vinka). 

Arduino-baserad robot med två servomotorer per ben.

En servomotor är en liten motor som kan vridas ett bestämt antal grader. Servomotorer skiljer sig från varandra när det gäller hur många grader de kan vridas och hur mycket de orkar dra. Servomotorn som följer med i bokens tillhörande komponentkit orkar dra upp till 800 g och kan vridas upp till 180°.

Styrning av servomotor

I följande exempel vill vi styra hur en servomotor ska vridas med hjälp av en potentiometer. Vi kopplar servomotorn till GPIO-stift 9 och potentiometern till analog ingång nummer 0. 

Illustration gjord med komponenter från Fritzing (fritzing.org). CC BY-SA 3.0

Obs! Vi måste bryta av tre stift från stiftlisten för att kunna koppla servomotorn till kopplingsplattan (i och med att både kopplingsplattan och servomotorn har honkopplingar).

I själva sketchen börjar vi med att inkludera biblioteket för servomotorer. Till skillnad från Button-biblioteket är Servo-biblioteket förinstallerat i utvecklingsmiljön. Det räcker därför med att skriva följande kodsnutt (där vi också skapar ett nytt servoobjekt vid namn pointer).

// Include the servo library
#include <Servo.h>

// Create a new servo object
Servo pointer;  

Beroende på hur vi vrider potentiometern kommer vi att få ett värde mellan 0 och 1023 från den analoga ingången. Vi måste räkna om den skalan så att den motsvarar vridningen av servomotorn, det vill säga 0 till 180. Lyckligtvis finns det en smidig funktion vid namn map som vi kan använda för detta. Genom att anropa den kan vi anpassa skalan 0-1023 till 0-180. 

Map-funktionen anpassar skalan.

Map-funktionen används på följande sätt. 

map(värde, ursprungs-min, ursprungs-max, nytt min, nytt max);

Den färdiga sketchen ser ut på följande vis. 

ServoReadPot.ino

Senast ändrad: 2017-01-24