Start Elkretssimulator


Styra Servo

Styrsignal till servo

Det viktiga för att styra ett servo är att känna till att styrsignalen är en pulsbreddsmodulerad signal enligt. Vi kan antingen skapa denna signal själva eller så kan vi använda ett bibliotek likt servo.h, som gör jobbet åt oss.



Följande kan också vara bra att ha till hands för att komma upp på rälsen hur ett exempel skall kopplas in.

Kontakter och signaler



Beroende på vilket servo du har tillgängligt så kopplar du alltså enligt ovan. Titta på kabelns färger och se om det matchar någon av dessa typer. Ur servot går 3 kablar. Det finns lite olika varianter på temat eftersom alla tillverkare vill göra på sitt egna sätt. Har man tur finns där en svart (minus) och röd (plus), det är isåfall spänning och 5 volt borde fungera. Den som blir över (vit, orange, gul eller svart) är styrsignal. Ifall det finns 2 svarta är den svarta i mitten minus och den andra svarta styrsignal. Styrsignalen är som tidigare nämnt en pulsbreddsmodulerad signal.

Strömmen in till servot - om det är ett litet servo - kan kopplas till 5V och GND på arduino eller liknande kort. Styrsignalen kör vi sedan in i digital ut nr 9 (t.ex). Denna digitala in/ut -gång går att ställa in så att den skickar ut en pulsbreddsmodulerad signal, vilket ju är exakt vad vi vill åt (eller rättare sagt vad det servo -bibliotek vi använder nedan vill åt)

Potentiometer styra med

Förutom att plugga in servot med hänsyn till det servo som finns tillgängligt så behövs en potentiometer. Vi kan sedan prova att styra servots utslag med denna potentiometer. Potentiometern kopplas som en spänningsdelare enligt nedan.

Uppkoppling

Exakt hur du kopplar upp beror lite på mikrokontoller du har. På en arduino uno bör det se ut såhär.



För mig ser det ut såhär.



Kod

Det är faktiskt busenkelt styra servo om vi inkluderar ett bibliotek som heter Servo.h. Det finns knappt något att förklara här. Det finns dock 2 saker att känna till. Dels är invärdet från den analoga signalen 0-1023 på pinne A0 (eller den pinne du använder för potentiometern). Samtidigt skickar vi in en vinkel i funktionen myservo och denna vinkel är från 0 till 180 grader. Vi måste alltså konvertera 0-1023 till 0-180.

Vi kan göra såhär:

vinkel = analog_signal * 180 / 1023

Det finns också en inbyggd funktion för att linjärt projicera en värdemängd på en annan, dvs vi kan åstadkomma samma sak med funktionen map

vinkel = map(analog_signal, 0, 1023, 0, 180);

Observera att när du testar detta så är det inte säkert att ditt servo fixar att röra sig 180 grader. Det kan vara mer eller mindre beroende på servo.

#include <Servo.h>

#define SERVO_PIN 9
#define POT_PIN 1

Servo myservo;  // skapar myservo -objekt

int analog_signal;
int vinkel;

void setup() 
{
  myservo.attach(SERVO_PIN);
}

void loop() 
{
  analog_signal = analogRead(POT_PIN);
  vinkel = map(analog_signal, 0, 1023, 0, 180);
  myservo.write(vinkel);     // vrid servo vinkel
  delay(20);   // ge servot chansen flytta sig
}


Lite allt möjligt om hobbyservon och hur de fungerar hittar du här.