Servo-slave (Servo-0)

Leerdoelen

Maak kennis met een servo-motor en de aansturing daarvan via de Arduino.

Functies en libraries

Servo-library: Servo object, attach, write

Functie: map

Elektrische componenten

Servo

potmeter 10kOhm

Voorkennis

Analoge invoer (potmeter)

Inleiding

Met een servo-motor kun je een apparaat besturen, bijvoorbeeld het roer van een radiografisch bestuurbare zeilboot. Met een Arduino kun je de draaiing (hoek) van een servo instellen. In deze schakeling gebruik je een potmeter als (analoge) input. Als je de potmeter verdraait, draait de servo mee. De servo is dan de “slave” van de potmeter.

Opbouwen van de schakeling

De potmeter sluit je op dezelfde manier aan als in de eerdere potmeter-schakeling: de beide uiteinden aan 0V en 5V, de middenaansluiting aan de analoge input A0.

De servo heeft 3 aansluitingen: de zwarte of bruine draad gaat naar 0V, de rode draad naar 5V, en de gele of oranje draad is voor de besturing van de servo: deze sluit je aan op een PWM-uitgang van de Arduino - hier D6.

Als de servo een connector heeft, dan kun je deze via breadboard-draadjes aan het breadboard verbinden.

Servo-slave-1_bb.png

Uitleg van het schema

De uitgang van de potmeter is aangesloten op een analoge ingang: dit geeft een spanning tussen 0V en 5V op deze ingang.

In de Arduino zetten we deze spanning (via de analoog/digitaal-omzetter) om in een getal tussen 0 en 1023.

Met dit resultaat passen we de hoek van de servo aan.

Servo-slave-1_schema.png

#include <Servo.h>

Servo myservo;   // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;         // variable to read the value from the analog pin

void setup() {
 myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
 val = analogRead(potpin);        // read the pot-value (between 0 and 1023)
 val = map(val, 0, 1023, 0, 180); // scale it to a value between 0 and 180
 myservo.write(val);              // set the servo position to the scaled value
 delay(15);                       // wait for the servo to get there
}

Uitleg programma

De code voor dit programma vind je in de Arduino IDE onder Voorbeelden->Servo->Knob

In het programma gebruiken we de Servo-library.

Voor het aansturen van een servo moeten we een Servo-object declareren; deze noemen we myservo.

Bij de initialisatie (setup) koppelen we dit object aan pin 9.

In de loop lezen we de waarde van de potmeter (verbonden aan A0): dit geeft een waarde tussen 0 en 1023. Deze rekenen we om tot een waarde tussen 0 en 180, via de functie “map”. Die waarde gebruiken we voor het instellen van de servo. Na het instellen van de servo geven we deze even de tijd om naar de nieuwe positie te bewegen (“sleep”).

Zie:

https://www.arduino.cc/en/Reference/Servo

https://www.arduino.cc/en/Reference/Map

Vragen en opdrachten

  1. Over welke hoek beweegt de servo als je de potmeter van min naar max verdraait?
  2. Probeer de arm van de servo voorzichtig met de hand te bewegen - terwijl deze aangestuurd wordt door de Arduino. Wat gebeurt er als je deze beweegt?
  3. Verander het programma zo dat de hoek waarover de servo draait van 0 naar 90 graden loopt.
  4. Sluit een tweede servo aan op pin 10. Stuur deze op dezelfde manier aan als de eerste servo.
  5. Stuur de extra servo in tegengestelde richting: als de ene servo naar rechts beweegt, beweegt de andere naar links. (Hint: bij welke hoek moet de extra servo beginnen, en bij welke hoek moet deze eindigen?)

Antwoorden:

Extra opdracht: aansluiten van de servo op een aparte voeding.

In het voorbeeld hierboven krijgt de servo de voeding vanuit de Arduino. Als je een krachtige servo gebruikt, of als je meerdere servo’s gebruikt, kan die voeding tekort schieten. Je kunt dan een extra voeding gebruiken voor de servo, volgens het schema hiernaast.

Let op: de 0V (GND) van de Arduino en van de batterij (en van de servo) moeten met elkaar verbonden zijn! De plus (6V) van de batterij is alleen aan de servo verbonden - niet aan de Arduino.

Servo-slave-2_schema.png

We gebruiken op het breadboard de tweede reeks voedingslijnen voor de extra voeding (batterij). De 0V (GND) van beide voedingen moeten hierbij met elkaar verbonden zijn.

Servo-slave-2_bb.png

Servo-0     --