Arduino - Servo Motor

In deze handleiding leert u hoe u een servo motor gebruikt met Arduino. We behandelen in detail:

Hardware Benodigd

1×Arduino Uno R3
1×USB 2.0 kabel type A/B
1×Servomotor
1×Jumper kabels
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno
1×(Aanbevolen) Behuizing voor Arduino Uno
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over Servo Motor

De servo motor is een component die zijn as (meestal tussen 0° en 180°) kan draaien. Deze wordt gebruikt om de hoekpositie van een object nauwkeurig te regelen.

Pinout

De servo motor die in dit voorbeeld wordt gebruikt, heeft drie pinnen:

  • VCC-pin: (meestal rood) moet verbonden worden met VCC (5V)
  • GND-pin: (meestal zwart of bruin) moet verbonden worden met GND (0V)
  • Signaalpin: (meestal geel of oranje) ontvangt het PWM-besturingssignaal van een Arduino-pin.
Servo Motor Pinout

Hoe Het Werkt

Deze sectie is gewijd aan diepgaande kennis. Maak u GEEN zorgen als u het niet begrijpt. Sla deze sectie over als deze u overweldigt en kom op een andere dag terug. Lees verder met de volgende secties.

Nadat de VCC en GND pinnen respectievelijk op 5V en 0V zijn aangesloten, kunnen we de servo motor besturen door een juiste PWM-signaal op de signaalpin te genereren.

De hoek wordt bepaald door de breedte van het PWM-signaal.

De datasheet van de servo motor geeft de volgende parameters aan:

  • Periode van PWM (PERIOD)
  • Minimale pulsbreedte (WIDTH_MIN)
  • Maximale pulsbreedte (WIDTH_MAX)

Deze parameters zijn vastgelegd in de Arduino Servo-bibliotheek. U hoeft de waarden van deze parameters niet te kennen.

De hoek wordt bepaald als volgt:

  • Als de pulsbreedte van PWM = WIDTH_MIN, draait de servo motor naar 0°.
  • Als de pulsbreedte van PWM = WIDTH_MAX, draait de servo motor naar 180°.
  • Als de pulsbreedte tussen WIDTH_MIN en WIDTH_MAX ligt, draait de servo motor proportioneel naar een hoek tussen 0° en 180°.
Hoe Servo Motor Werkt

Arduino - Servo Motor

Sommige Arduino-pinnen kunnen geprogrammeerd worden om een PWM-signaal te genereren. Door de signaalpin van de servo te verbinden met een Arduino-pin en daar een PWM-signaal op te genereren, kan de servo motor worden bestuurd.

Dankzij de Arduino Servo bibliotheek is het besturen van een servo motor heel eenvoudig. U hoeft zelfs niet te weten hoe een servo motor precies werkt, noch hoe u PWM moet genereren. U hoeft alleen te leren hoe u de bibliotheek gebruikt.

Bedradingsschema

U komt misschien bedradingsschema’s tegen waarin de VCC-pin van een servo motor direct verbonden wordt met de 5V-pin van de Arduino, zoals hieronder getoond. Hoewel dit soms werkt, wordt het sterk afgeraden omdat het risico bestaat uw Arduino te beschadigen.

Arduino Servo Motor Bedradingsschema

This image is created using Fritzing. Click to enlarge image

Om uw Arduino te beschermen raden wij aan een externe voeding te gebruiken voor de servo motor. Onderstaand bedradingsschema laat zien hoe u de servo motor kunt aansluiten op een externe voeding.

Arduino servo motor externe voeding bedrading

This image is created using Fritzing. Click to enlarge image

Zorg ervoor dat u de GND van de externe voeding verbindt met de GND van de Arduino. Dit is een cruciale stap voor een correcte werking.

Hoe Programmeert U Voor Servo Motor

  • Voeg de bibliotheek toe:
#include <Servo.h>
  • Declareer een Servo-object:
Servo myServo;

Wilt u meer servo motoren besturen, declareer dan meerdere Servo-objecten:

Servo myServo1; Servo myServo2;
  • Stel de control pin in van de Arduino die verbonden is met de signaalpin van de servo motor. Bijvoorbeeld pin 9:
myServo.attach(9);
  • Tenslotte, draai de servo motor naar de gewenste hoek. Bijvoorbeeld 90°:
myServo.write(90);

Arduino Code

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-servo-motor */ #include <Servo.h> Servo servo; // maak servo object aan om een servo te besturen void setup() { servo.attach(9); // verbind servo op pin 9 met het object servo.write(0); // draai servo meteen langzaam naar 0 graden } void loop() { for (int pos = 0; pos <= 180; pos += 1) { // draai langzaam van 0 naar 180 graden, per graad // in stappen van 1 graad servo.write(pos); // stuur servo naar positie in variabele 'pos' delay(10); // wacht 10 ms voor de servo om positie te bereiken } for (int pos = 180; pos >= 0; pos -= 1) { // draai van 180 naar 0 graden, per graad servo.write(pos); // stuur servo naar positie in variabele 'pos' delay(10); // wacht 10 ms voor de servo om positie te bereiken } }

Snelle Stappen

  • Verbind Arduino met PC via USB-kabel
  • Open de Arduino IDE, selecteer het juiste board en poort
  • Kopieer de bovenstaande code en open deze met de Arduino IDE
  • Klik op de Upload knop in de Arduino IDE om de code naar Arduino te sturen
Arduino IDE - Hoe code uploaden
  • Zie het resultaat: De servo motor draait langzaam van 0 naar 180° en daarna weer langzaam terug naar 0°

Code Uitleg

Lees de regel-voor-regel uitleg in de commentaar regels van de code!

Hoe De Snelheid Van De Servo Motor Te Controleren

Met behulp van de functies map() en millis() kunnen we de snelheid van de servo motor soepel en niet-blokkerend regelen.

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-servo-motor */ #include <Servo.h> Servo myServo; unsigned long MOVING_TIME = 3000; // beweegtijd is 3 seconden unsigned long moveStartTime; int startAngle = 30; // 30° int stopAngle = 90; // 90° void setup() { myServo.attach(9); moveStartTime = millis(); // begin met bewegen // TODO: andere code } void loop() { unsigned long progress = millis() - moveStartTime; if (progress <= MOVING_TIME) { long angle = map(progress, 0, MOVING_TIME, startAngle, stopAngle); myServo.write(angle); } // TODO: andere code }

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Daag uzelf uit

Gebruik de servo motor voor een van de volgende projecten:

Aanvullende Kennis

  • De Servo bibliotheek ondersteunt tot 12 motoren op Arduino UNO en 48 op de Arduino Mega.
  • De voeding vanuit de 5V pin van Arduino is mogelijk NIET voldoende voor servo motoren in de volgende gevallen:
    • Het gebruik van een servo motor met hoog koppel die een zware last kan dragen.
    • Het gebruik van meerdere servo motoren.

    In deze gevallen is het aanbevolen een extra stroomvoorziening te gebruiken voor de servo motoren.

    Arduino Servo Motor Extra Voeding

    This image is created using Fritzing. Click to enlarge image

    Zoals u ziet in bovenstaand schema, is de VCC pin van de servo motor NIET verbonden met de 5V pin van de Arduino, maar met de positieve aansluiting van een extra stroombron.

    Let op:

    • Verbind de positieve aansluiting van de extra voeding NIET met de 5V pin van Arduino.
    • Verbind altijd de negatieve aansluiting van de extra voeding met de GND pin van Arduino.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!