Les 18/31: Een servomotor gebruiken met Arduino SunFounder's Arduino-kit
Servomotoren zijn de werkpaarden van talloze robotica- en radiografische besturingsprojecten en bieden nauwkeurige hoekcontrole voor alles, van stuurmechanismen tot robotarmen. Deze handleiding, gebaseerd op Les 18 van de SunFounder Arduino-kitcursus, leidt je door de basisprincipes van het gebruik van een servomotor met een Arduino. Je leert hoe je de hardware aansluit en de positie van de motor bestuurt met twee verschillende methoden: een eenvoudige vegende beweging en een met een knop geregelde positie. De kennis die je hier opdoet is zeer praktisch en kan worden toegepast op een breed scala aan projecten, waaronder:- Het bouwen van een robotarm die objecten met precisie kan vastpakken en verplaatsen.
- Het maken van een radiografisch bestuurbare auto of boot met een servo voor de besturing.
- Het ontwikkelen van een zonvolger die de zon volgt om de energieopbrengst te maximaliseren.
- Het construeren van een pan- en tilt-cameramontage voor bewaking of fotografie.
- Het automatiseren van de stuurvlakken van een modelvliegtuig, zoals het roer of de rolroeren.


Hardware-overzicht
Voordat we in de code duiken, is het essentieel om de servomotor zelf te begrijpen. Zoals gedemonstreerd in de video, draait een servomotor niet continu zoals een standaard gelijkstroommotor. In plaats daarvan draait hij naar een specifieke hoekpositie, meestal tussen 0 en 180 graden. Dit maakt hem ideaal voor toepassingen die nauwkeurige beweging vereisen. De video benadrukt verschillende voorbeelden, van het besturen van een RC-auto tot het bedienen van de complexe gewrichten van een robotarm (in video op 00:06).
Servo's zijn er in verschillende maten, waarbij de fysieke grootte en het koppel de prijs en toepassing bepalen. Een kleine microservo is perfect voor lichtgewicht modellen, terwijl een grotere, krachtigere servo nodig is voor zwaardere taken, zoals het besturen van een "zeer krachtige of dikke auto" (in video op 01:59).
De meeste hobby-servo's hebben drie draden in een standaard connector. De video legt een slimme ontwerpkeuze uit: de middelste draad is altijd de voedingsdraad (VCC), meestal 5V. Dit is een veiligheidsfunctie die het apparaat beschermt tegen onjuiste polariteit als de connector achterstevoren wordt aangesloten (in video op 03:27). De andere twee draden zijn voor aarde (GND) en het besturingssignaal.
Bedradingshandleiding
Het aansluiten van de servo op je Arduino is eenvoudig. De video geeft een duidelijke demonstratie van de verbindingen (in video op 04:48). De drie pinnen op de servo-connector worden als volgt op de Arduino aangesloten:
- Signaaldraad (vaak oranje of geel): Sluit deze aan op een digitale PWM-pin op de Arduino. Het voorbeeld gebruikt pin 9.
- Voedingsdraad (vaak rood): Sluit deze aan op de 5V-pin op de Arduino.
- Aardedraad (vaak bruin of zwart): Sluit deze aan op een van de GND-pinnen op de Arduino.
In de video gebruikt de presentator male-to-male Dupont-jumperdraden om de vrouwelijke connector op de servo aan te sluiten op de pinheaders van de Arduino (in video op 05:23).
Programma 1: Servomotor besturen (Sweep)
Dit eerste programma is het klassieke "sweep"-voorbeeld. Het is ontworpen om het volledige bewegingsbereik van de servo te demonstreren door hem heen en weer te bewegen tussen 0 en 180 graden. Dit is een geweldige manier om te controleren of je bedrading correct is en om je servo in actie te zien. De video demonstreert het uploaden van deze code en het zien van de servo die heen en weer veegt (in video op 09:21).
Om de servo te besturen, bevat de code eerst de ingebouwde Servo.h-bibliotheek, die het genereren van de benodigde besturingssignalen vereenvoudigt. Vervolgens maak je een servo-object en geef je het een naam, zoals myservo. In de setup()-functie koppel je dit object aan een specifieke pin met myservo.attach(9), waarmee je de Arduino vertelt dat de signaaldraad van de servo op pin 9 is aangesloten.
De magie gebeurt in de loop()-functie, die twee for-lussen gebruikt om de servo te bewegen. De eerste lus verhoogt een positievariabele pos van 0 naar 180, waardoor de servo één graad per keer beweegt. De tweede lus doet het tegenovergestelde en verlaagt pos van 180 terug naar 0. Het cruciale deel is de delay(15) aan het einde van elke lusiteratie. Deze pauze geeft de servo voldoende tijd om fysiek naar de nieuwe positie te bewegen voordat het volgende commando wordt verzonden. Zonder deze vertraging zou de servo niet kunnen bijbenen en zou hij stoppen of trillen (in video op 12:31).
Dit voorbeeld is perfect om te leren, maar in een echte toepassing wil je de servo waarschijnlijk op een specifieke hoek instellen. Zoals in de video wordt getoond, kun je de code aanpassen door de for-lussen te vervangen door een enkel commando zoals myservo.write(90) om de servo naar 90 graden te bewegen en daar te houden (in video op 10:09).
Programma 2: Servomotor besturen (Knob)
Dit tweede programma breidt de servobesturing verder uit door een potentiometer (een knop) te introduceren voor realtime, handmatige bediening van de servopositie. Dit is een fantastische manier om te begrijpen hoe analoge invoer kan worden vertaald naar nauwkeurige fysieke beweging.
Dit programma bouwt voort op het vorige door een potentiometer toe te voegen. Een potentiometer is een variabele weerstand die fungeert als een analoge spanningsdeler. Wanneer je aan de knop draait, verandert dit de spanning op de uitgangspin. De Arduino leest deze spanning met behulp van een analoog-naar-digitaal-omzetter (ADC) op een van de analoge pinnen, en zet dit om naar een waarde tussen 0 en 1023.
De sleutel tot dit programma is de map()-functie. Deze functie schaalt een getal van het ene bereik naar het andere. In dit geval wordt het gebruikt om de ruwe waarde van de potentiometer (0 tot 1023) te vertalen naar een waarde die geschikt is voor de servo (0 tot 180 graden). De code leest de waarde van de potentiometer met analogRead(potpin), schaalt deze met map(val, 0, 1023, 0, 180), en stuurt die geschaalde waarde vervolgens naar de servo met myservo.write(val). Dit creëert een directe koppeling waarbij het draaien van de knop naar het midden de servo op 90 graden positioneert, enzovoort.
Deze manier van besturen is zeer intuïtief en vormt de basis voor veel mens-machine-interfaces, van eenvoudige afstandsbedieningen tot complexe robotcontrollers.
Live projectdemonstratie
De video biedt een live demonstratie van beide programma's in actie. Voor het sweep-programma zie je de servo-arm soepel bewegen van 0 naar 180 graden en weer terug. De presentator laat ook zien hoe het aanpassen van de stapgrootte in de for-lus (bijv. van 1 graad naar 20 graden) en de vertragingstijd het gedrag van de servo verandert, waardoor de beweging sneller maar minder vloeiend wordt (in de video op 11:19).
Voor het knop-programma laat de demonstratie zien hoe het draaien aan de potentiometer de positie van de servo direct in real-time bestuurt. Deze visuele feedback is uitstekend om de relatie tussen de analoge invoer en de fysieke uitvoer te begrijpen.
Hoofdstukken
- [00:00] Inleiding tot servomotoren
- [01:07] Toepassingen van servomotoren
- [02:57] Anatomie van een servomotor
- [04:48] De servo op de Arduino aansluiten
- [06:06] De sweep-voorbeeldcode verkennen
- [09:21] Het sweep-programma demonstreren
- [10:04] Een aangepaste servo-hoek instellen
- [11:19] Sweep-snelheid en stapgrootte aanpassen
- [13:15] Voorbeeld van een andere servomotor
/*
Lesson 18/31: Controlling servo motor (sweep)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
Servo myservo; // create Servo object to control a servo
// twelve Servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the Servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15 ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15 ms for the servo to reach the position
}
}
/*
Lesson 18/31: Controlling servo motor (knob)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#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); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Common Course Links
Common Course Files
Dingen die je misschien nodig hebt
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Hulpmiddelen en referenties
-
DocumentatieDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ExternPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Bestanden📁
Arduino-bibliotheken (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB