Arduino Servomotoren

Servomotoren zijn geweldige apparaten die naar een bepaalde positie kunnen draaien.

Meestal hebben ze een servo-arm die 180 graden kan draaien. Met behulp van de Arduino kunnen we een servo vertellen om naar een bepaalde positie te gaan en hij zal daarheen gaan. Zo simpel is het!

Servomotoren werden voor het eerst gebruikt in de wereld van de afstandsbediening (RC), meestal om de besturing van RC-auto's of de kleppen op een RC-vliegtuig te besturen. Na verloop van tijd vonden ze hun toepassingen in robotica, automatisering en natuurlijk de Arduino-wereld.

Hier zullen we zien hoe een servomotor moet worden aangesloten en vervolgens hoe deze in verschillende posities kan worden gedraaid.

De eerste motor die ik zeven jaar geleden op een Arduino heb aangesloten, was een servomotor. Nostalgisch moment voorbij, weer aan het werk!

We hebben de volgende dingen nodig:

  1. Een Arduino-bord dat via USB op een computer is aangesloten
  2. Een servomotor
  3. Jumper draden

Er zijn weinig grote namen in de servomotorwereld. Hitec en Futaba zijn de toonaangevende RC-servofabrikanten. Goede plaatsen om ze te kopen zijn Servocity, Sparkfun en Hobbyking.

Dit instructable en nog veel meer is te vinden in mijn Arduino Development Cookbook dat hier beschikbaar is. : D

Stap 1: hoe ze te verbinden

Een servomotor heeft alles ingebouwd: een motor, een feedbackcircuit en vooral een motorbestuurder. Het heeft slechts één voedingslijn, één aarding en één bedieningspin nodig.

Hieronder volgen de stappen om een ​​servomotor op de Arduino aan te sluiten:

  1. De servomotor heeft een vrouwelijke connector met drie pinnen. De donkerste of zelfs zwarte is meestal de grond. Verbind dit met de Arduino GND.
  2. Sluit de stroomkabel aan die in alle standaarden rood moet zijn tot 5V op de Arduino.
  3. Verbind de resterende lijn op de servoconnector met een digitale pin op de Arduino.

Bekijk de afbeelding voor een weergave van de servo die is aangesloten op de Arduino.

Stap 2: Code

De volgende code zet een servomotor op 0 graden, wacht 1 seconde, draai hem dan naar 90, wacht nog een seconde, draai hem naar 180 en ga dan terug.

 // Voeg de Servo-bibliotheek toe 
#include // Declareer de Servo pin int servoPin = 3; // Maak een servo-object Servo Servo1; void setup () {// We moeten de servo koppelen aan het gebruikte pincode Servo1.attach (servoPin); } void loop () {// Maak servo naar 0 graden Servo1.write (0); vertraging (1000); // Maak servo naar 90 graden Servo1.write (90); vertraging (1000); // Maak servo naar 180 graden Servo1.write (180); vertraging (1000); }
Als de servomotor is aangesloten op een andere digitale pin, wijzigt u eenvoudig de waarde van servoPin in de waarde van de digitale pin die is gebruikt.

Bijlagen

  • Servo_motor.ino Downloaden

Stap 3: hoe het werkt

Servo's zijn slimme apparaten. Met slechts één invoerpin ontvangen ze de positie van de Arduino en gaan ze daarheen. Intern hebben ze een motoraandrijving en een feedbackcircuit dat ervoor zorgt dat de servo-arm de gewenste positie bereikt. Maar wat voor soort signaal ontvangen ze op de invoerpin?

Het is een blokgolf vergelijkbaar met PWM. Elke cyclus in het signaal duurt 20 milliseconden en meestal is de waarde LAAG. Aan het begin van elke cyclus is het signaal HOOG gedurende een tijd tussen 1 en 2 milliseconden. Bij 1 milliseconde staat het voor 0 graden en bij 2 milliseconden voor 180 graden. Tussendoor vertegenwoordigt het de waarde van 0–180. Dit is een zeer goede en betrouwbare methode. De afbeelding maakt het een beetje makkelijker te begrijpen.

Vergeet niet dat het gebruik van de Servo-bibliotheek automatisch de PWM-functionaliteit op PWM-pinnen 9 en 10 op de Arduino UNO en vergelijkbare kaarten uitschakelt.

Code-uitsplitsing

De code declareert eenvoudig het servo-object en initialiseert vervolgens de servo met behulp van de functie servo.attach () . We mogen niet vergeten de servobibliotheek op te nemen. In de lus () stellen we de servo in op 0 graden, wachten, stellen hem vervolgens in op 90 en later op 180 graden.

Stap 4: Meer dingen over servo's

Servo's bedienen is eenvoudig en hier zijn nog een paar trucs die we kunnen gebruiken:

Controle van de exacte pulstijd

Arduino heeft een ingebouwde functie servo.write (graden) die de bediening van servo's vereenvoudigt. Niet alle servo's respecteren echter dezelfde timings voor alle posities. Gewoonlijk betekent 1 milliseconde 0 graden, 1, 5 milliseconden betekent 90 graden en natuurlijk betekent 2 milliseconden 180 graden. Sommige servo's hebben een kleiner of groter bereik.

Voor een betere controle kunnen we de servo.writeMicroseconds (us) -functie gebruiken, die het exacte aantal microseconden als parameter neemt. Onthoud dat 1 milliseconde gelijk is aan 1.000 microseconden.

Meer servo's

Om meer dan één servo te gebruiken, moeten we meerdere servo-objecten declareren, verschillende pinnen aan elk bevestigen en elke servo afzonderlijk adresseren. Eerst moeten we de servo-objecten declareren - zoveel als we nodig hebben:

 // Maak servo-objecten Servo Servo1, Servo2, Servo3; 

Vervolgens moeten we elk object op één servomotor bevestigen. Onthoud dat elke servomotor een individuele pin gebruikt:

 Servo1.attach (servoPin1); Servo2.attach (servoPin2); Servo3.attach (servoPin3); 

Uiteindelijk hoeven we alleen elk servo-object afzonderlijk aan te pakken:

 Servo1.write (0); // Stel Servo 1 in op 0 graden Servo2.write (90); // Stel Servo 2 in op 90 graden 

Wat betreft de verbinding, de aarding van de servo's gaat naar GND op de Arduino, de servo-voeding naar 5V of VIN (afhankelijk van de stroominvoer), en uiteindelijk moet elke signaallijn worden aangesloten op een andere digitale pin. In tegenstelling tot wat vaak wordt gedacht, hoeven servo's niet te worden bestuurd door PWM-pinnen - elke digitale pin werkt.

Continu roterende servo's

Er is een speciaal soort servo's die worden aangeduid als servo's met continue rotatie . Terwijl een normale servo afhankelijk van het ingangssignaal naar een specifieke positie gaat, draait een servo met continue rotatie ofwel met de klok mee of tegen de klok in met een snelheid die evenredig is met het signaal. De Servo1.write (0) -functie zorgt er bijvoorbeeld voor dat de servomotor op volle snelheid tegen de klok in draait. De Servo1.write (90) -functie stopt de motor en Servo1.write (180) draait de motor op volle snelheid met de klok mee.

Er zijn meerdere toepassingen voor dergelijke servo's; ze zijn echter erg traag. Als u een magnetron bouwt en een motor nodig heeft om het voedsel om te draaien, is dit uw keuze. Maar wees voorzichtig, magnetrons zijn gevaarlijk!

Stap 5: Bekijk meer

Meer onderwerpen met betrekking tot motoren zoals brushless, transistordrivers of motortoerentalregeling vindt u in mijn Arduino Development Cookbook, hier beschikbaar. : D

Verwante Artikelen