Hoe werkt de servomotor & Interface met Arduino

wilt u beweging toevoegen aan uw volgende Arduino-project zonder een motorcontroller te bouwen? Dan kunnen servomotoren het solide lanceerpunt voor u zijn.

In tegenstelling tot DC-motoren kunt u de positionering van deze motoren nauwkeurig regelen. Vertel ze waar ze moeten wijzen, en ze zullen het voor je doen.

ze zijn nuttig in veel robotprojecten, zoals voor het draaien van de voorwielen op een RC-model om te sturen of het draaien van een sensor om rond te kijken op een robotvoertuig.,

Wat is Servo?

Servo is een algemene term voor een gesloten-lusbesturingssysteem.

een gesloten-lussysteem gebruikt het feedbacksignaal om de snelheid en richting van de motor aan te passen om het gewenste resultaat te bereiken.

RC servomotor werkt op dezelfde principal. Het bevat een kleine DC motor aangesloten op de uitgang as via de tandwielen.

de uitgaande as drijft een servo-arm aan en is ook aangesloten op een potentiometer (pot).,

de potentiometer geeft positie terugkoppeling naar de servobesturingseenheid waar de huidige positie van de motor wordt vergeleken met de doelpositie.

afhankelijk van de fout corrigeert de besturingseenheid de werkelijke positie van de motor zodat deze overeenkomt met de doelpositie.

Hoe werken servomotoren?

u kunt de servomotor bedienen door een reeks pulsen naar de signaallijn te sturen. Een conventionele analoge servomotor verwacht ongeveer om de 20 milliseconden een puls te ontvangen (d.w.z., signaal moet 50Hz zijn).

De lengte van de puls bepaalt de positie van de servomotor.

  • als de puls hoog is gedurende 1ms, zal de servo hoek nul zijn.
  • als de puls 1,5 ms hoog is, dan zal de servo zich op zijn middenpositie bevinden.
  • als de puls 2ms hoog is, dan zal de servo 180 graden zijn.
  • pulsen tussen 1ms en 2ms zullen de servoas gedurende de volledige 180 graden van zijn slag bewegen.,

de duur van de pulsen kan soms variëren met verschillende merken en ze kunnen 0,5 ms zijn voor 0 graden en 2,5 ms voor 180 graden.

servomotor Pinout

servomotoren hebben meestal drie aansluitingen en zijn als volgt:

GND is een gemeenschappelijke basis voor beide de motor en logica.

5V is een positieve spanning die de servo aandrijft.

controle wordt ingevoerd voor het besturingssysteem.,

De kleur van de draden varieert tussen servomotoren, maar de rode draad is altijd 5V en GND zal ofwel zwart of bruin zijn. De stuurdraad is meestal oranje of geel.

bedrading servomotor naar Arduino UNO

laten we de servomotor aansluiten op de Arduino.

laten we bijvoorbeeld SG90 Micro servomotor gebruiken. Het draait op 4.8-6VDC (5v typisch) en kan ongeveer 180 graden draaien (90 in elke richting).

Het verbruikt ongeveer 10mA bij stationair gebruik en 100mA tot 250mA bij het verplaatsen, zodat we het kunnen aandrijven via 5-volt uitgang op de Arduino.,

Als u een servo hebt die meer dan 250mA verbruikt, overweeg dan om een aparte voeding voor uw servo te gebruiken.

sluit de rode draad aan op de 5V op de Arduino (of DC-aansluiting) en de zwarte/bruine draad op de grond. Sluit ten slotte de oranje / gele draad aan op de PWM-ingeschakelde pin 9.

Arduino Code – Sweep

voor onze eerste Arduino-schets zullen we een van de ingebouwde voorbeelden gebruiken die bij de Arduino-IDE worden geleverd.

Ga naar het submenu voorbeelden. Selecteer de Servo en laad de Sweep schets.,

upload de sketch. Je ziet meteen dat de motor in de ene richting beweegt en dan weer in de andere richting gaat.

uitleg:

Servos beheren is geen gemakkelijke taak, maar gelukkig voor ons bevat Arduino IDE al een zeer mooie bibliotheek genaamd Servo. Het bevat eenvoudige commando ‘ s, zodat u de servo snel kunt instrueren om naar een bepaalde hoek te draaien.,

als je deze commando ‘ s gaat gebruiken, moet je de Arduino IDE vertellen dat je de library gebruikt met dit commando:

#include <Servo.h>

het volgende wat we doen is de Arduino pin aangeven waarop de controle pin van de servomotor is aangesloten.

int servoPin = 9;

onder de regel maakt een servo-object aan.,

Servo servo;

u kunt op deze manier maximaal acht servo ’s definiëren, bijvoorbeeld als we twee servo’ s hadden, dan zouden we zoiets als dit kunnen schrijven:

Servo servo1;Servo servo2;

de variabele angle wordt gebruikt om de huidige hoek van de servo in graden op te slaan.

int angle = 0;

In de setup functie koppelen we het servo object aan de pin die de servo zal besturen met behulp van dit commando:

servo.attach(servoPin);

de loop functie bevat eigenlijk twee voor lussen., De eerste lus verhoogt de hoek in één richting en de tweede in de tegenovergestelde richting.

onder commando vertelt de servo om zijn positie te updaten naar de opgegeven hoek.

servo.write(angle);

problemen oplossen

soms kan uw servo zich misdragen als u besluit het direct vanuit de Arduino te draaien. De reden hiervoor is dat de servo aanzienlijke macht, vooral tijdens het opstarten trekt, en dit kan de Arduino-raad veroorzaken om terug te stellen.,

als dit gebeurt, kunt u dit meestal oplossen door een vrij grote elektrolytische condensator (470uF – 1000uF) tussen GND en 5V te plaatsen.

De condensator fungeert als een reservoir van elektriciteit, zodat wanneer de motor start, deze de lading van de condensator en de Arduino-voeding overneemt.

de langere leiding van de condensator moet worden aangesloten op 5V en de negatieve leiding op GND.,

controlerende Servo met een Potentiometer

onze volgende stap is het toevoegen van een potentiometer zodat we de positie van de servo kunnen regelen door de knop te draaien.

dit project kan zeer nuttig zijn wanneer u het draaien en kantelen van een sensor verbonden met de servo wilt regelen.

bedrading

zoals uit het bedradingsschema blijkt, hebt u een potentiometer nodig, elke waarde vanaf 10k is OK. Sluit het ene uiteinde van de pot aan op de grond, het andere uiteinde op de Arduino 5V en de wisser op analoge ingang A0.,

Arduino Code

de code om de servo de positie van de knop te laten volgen is eenvoudiger dan om het te laten vegen.

merk op dat er nu een nieuwe variabele is genaamdpotPin.

in de loop functie beginnen we met het lezen van de waarde van de analoge pin A0.

int reading = analogRead(potPin);

Dit geeft ons een waarde tussen 0 en 1023. Maar we moeten het verkleinen, omdat de servo maar 180 graden kan draaien.,

een manier om dit te doen is door de functie Arduino map() te gebruiken, die een getal opnieuw van het ene bereik naar het andere afbeeldt. Dus, onder lijn verandert de lezing om de hoek tussen 0 en 180 graden weer te geven.

int angle = map(reading, 0, 1023, 0, 180);

ten slotte gebruiken we het commando write() dat de servo vertelt zijn positie te updaten naar de hoek die door de potentiometer is geselecteerd.

servo.write(angle);

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *