Arduino-opdrachten/Servo-sweep
Servo
Leerdoelen | servo, sweep |
Voorkennis | variabele, IF |
Onderdelen |
Libraries en functies | Servo |
Inleiding
Een servo gebruik je vaak voor de mechanische besturing: het stuur van een auto, het roer van een boot, de verschillende roeren van een vliegtuig. Je zet de servo dan in een bepaalde hoek, tussen 0 en 180 graden.
- de meeste servo's kunnen niet compleet ronddraaien: je kunt alleen deze hoek instellen
- je kunt een servo ombouwen zodat deze wel compleet kan ronddraaien. Dergelijke servo's worden soms gebruikt voor de beweging van robots: je combineert dan de krachtbron en de besturing.
Een servo heeft verschillende aansluitingen voor de logische aansturing en voor het vermogen van de aandrijving. Dit betekent dat je geen aparte schakeling (zoals een transistor) nodig hebt om deze vanuit een Arduino aan te sturen. Als het vermogen van de servo niet te groot is, gebruik je de 5V van de Arduino als vermogensvoeding voor de servo.
Als je de servo voedt vanuit de Arduino, dan kan de servo zich soms vreemd gedragen. De servo vraagt soms veel stroom, vooral bij het opstarten van de motor. Hierdoor daalt de voedingsspanning van de Arduino, waardoor deze zich kan resetten.
- Om dit probleem te voorkomen kun je een condensator (470uF of groter) over de voedingsdraden van de servo aan te sluiten.
- Meestal gebruik je daarvoor een elektrolytische condensator: verbindt de "+" met de rode draad, en de "-" met de bruine/zwarte draad.
Vanuit de Arduino microcontroller kun je tot 12 servo's aansturen. Bij het gebruik van meerdere servo's kun je beter een externe voeding voor de servo's gebruiken. In dat geval moet je ervoor zorgen dat de 0V van de Arduino-voeding en van de externe voeding verbonden zijn.
Servo-library
De Servo-library gebruikt bepaalde hardware-timers. Voor de Arduino Uno betekent dit dat je op pin 9 en 10 dan geen analogWrite
(PWM) kunt gebruiken. Het is daarom handig om deze pinnen voor servo's te gebruiken.
Opbouwen van de schakeling
Het aansluiten van een servo is heel eenvoudig:
- sluit de rode (middelste) draad aan op 5V;
- sluit de bruine (of zwarte) draad aan op 0V;
- sluit de gele (of oranje) draad aan op een digitale output-pin van de Arduino.
Voor het aansluiten van een servo kun je elke pin van de Arduino gebruiken die je kunt instellen voor digitale output. Je maakt geen gebruik van PWM.
Schema
Programma
#include <Servo.h>
Servo myservo; // declare servo object to control a servo
int pos = 0; // servo position
int step = 1; // step positive or negative
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
myservo.write(pos); // set servo to position 'pos'
delay(15); // wait 15ms for the servo to stabilize
pos = pos + step;
if (pos > 180) {
pos = 180;
step = -step; // reverse direction
}
if (pos < 0) {
pos = 0;
step = -step; // reverse direction
}
}
Uitleg van het programma
Voor het aansturen van de servo gebruik je de servo-library.
- Met
#include <Servo.h>
- importeer de definities van deze library in je programma. Dit is nodig als je definities (types, waarden, functies) uit die library wilt gebruiken. Servo myservo;
- maak een servo-object aan (van typeServo
) om de toestand van de servo bij te houden. Je kunt meerdere servo's aansturen vanuit de Arduino: voor elke servo heb je een apart servo-object nodig.myservo.attach(9);
- koppel het servo-object aan pin 9, en daarmee aan de servo die je via deze pin bestuurt.myservo.write(pos);
- stuur de servo naar positie "pos"; deze druk je uit in graden, tussen 0 en 180.delay(15);
- de servo heeft tijd nodig om de gewenste positie in te stellen.
De rest van het programma zorgt ervoor dat de positie steeds een stap toeneemt of afneemt. De positie blijft hierbij tussen 0 en 180 graden.
NB: deze "sweep"structuur wordt ook in andere programma's gebruikt, o.a. voor LEDs.
Vragen en opdrachten
- vergroten van de stap (andere delay?)