Hvordan kontrollere din Servo med Arduino

November 15  by Eliza

Ved å bruke et potensiometer (eller en hvilken som helst analog sensor), er det mulig å direkte styre servo med Arduino på samme måte som du ville styre en mekanisk klo på arkaden.

The Knob skisse

Dette eksempelet viser deg hvordan du enkelt kan bruke en potentiometer å flytte servo til en bestemt grad.

Du må ha:

  • En Arduino Uno
  • En brødfjel
  • En servo
  • En 10k ohm variabel motstand
  • Jump ledninger

Servo er kablet akkurat som i Sweep eksempel, men denne gangen du trenger ekstra forbindelser til 5V og GND for potensiometeret, så du må bruke en brødfjel å gi ekstra pinner. Koble 5V og GND pinnene på Arduino til den positive (+) og negative (-) rader på breadboard.

Koble servo til breadboard ved hjelp av enten en rad av tre header pinner eller tre hopp ledninger. Koble den røde kontakten til 5V rad, svart / brun kontakten til GND rad, og hvit / gul socket til pin 9 på Arduino.

Hvordan kontrollere din Servo med Arduino

Finn en plass på breadboard for potensiometeret. Koble center pin til pin A0 på Arduino og de resterende pins til 5V på den ene siden og GND på den andre.

Hvordan kontrollere din Servo med Arduino

Etter at du har bygget kretsen, åpne skisse ved å velge Fil → Eksempler → Servo → knott. Koden for skissen er som følger:

// Kontrollere en servo posisjon ved hjelp av et potensiometer (variabel motstand)
// By Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
#include <Servo .h>
Servo myservo; // Opprette servo objekt for å styre en servo
int potpin = 0; // Analog pin brukes til å koble potensiometeret
int val; // Variabel for å lese verdien av det analoge stiften
void setup ()
{
. myservo feste (9); // Settes servo om tappen 9 til servo objektet
}
void loop ()
{
val = analogRead (potpin); // Leser verdien av
// Potensiometeret (verdi mellom
// 0 og 1023)
val = kartet (val, 0, 1023, 0, 179); // Skalerer den for å bruke den med
// Servo (verdi mellom 0 og
// 180)
. myservo skrive (val); // Setter servo posisjon i henhold
// Til skalert verdi
forsinkelse (15); // Venter på servo for å komme dit
}

Du kan merke at det er noen avvik mellom kommentarer og koden. Når det henvises til området grader for å flytte servo, nevner skissen både 0-179 og 0 til 180. Med alle Arduino tutorials, er det best å anta at de er arbeider som pågår og kan ikke alltid være nøyaktig.

Riktig Området er 0 til 179, noe som gir deg 180 verdier. Telle fra null er referert til som null indeksering og er en vanlig foreteelse i Arduino, som du kanskje har lagt merke til av dette punktet.

Etter at du har funnet skissen, trykker du på Compile-knappen for å sjekke koden. Kompilatoren skal fremheve eventuelle syntaksfeil i meldingsboksen, som lyser rødt når de blir oppdaget.

Hvis skissen kompilerer riktig, klikker du Last opp for å laste opp skisse til styret. Når det er gjort laster opp, bør servo slå som du slår potensiometeret.

Hvis det er ikke hva som skjer, bør du dobbeltsjekke ledninger:

  • Pass på at du bruker pinne 9 til å koble data (hvit / gul) linje til servo.
  • Sjekk dine forbindelser til potensiometeret og sørg for at senterbolten er koblet til Analog pin 0.
  • Kontroller tilkoblingene på breadboard. Hvis hopp ledninger eller komponenter som ikke er tilkoblet med de riktige rader i breadboard, vil de ikke fungere.

The Knob skisse sammenbrudd

I de erklæringer, er servo bibliotek, Servo.h, og en ny servo objekt navngitt. Analog inngang pin erklæres med en verdi på 0, som viser at du bruker Analog 0.

Du har kanskje lagt merke til at pinnen er nummerert som 0, ikke A0 som i andre eksempler. Enten er greit, fordi A0 er bare et alias fra 0, som A1 er på 1, og så videre. Ved hjelp av A0 er bra for klarhet, men valgfritt.

Det er en siste variabelen til å lagre verdien av lesningen, som vil bli utgang.

#include <Servo .h>
Servo myservo; // Opprette servo objekt for å styre en servo
int potpin = 0; // Analog pin brukes til å koble potensiometeret
int val; // Variabel for å lese verdien av det analoge stiften

I oppsettet, det eneste elementet å definere er myservo, som bruker pinne 9.

void setup ()
{
. myservo feste (9); // Settes servo om tappen 9 til servo objektet
}

Snarere enn å bruke to separate variabler for inngang og utgang, rett og slett bruker denne skissen ett. Først blir val brukes til å lagre den rå sensordata, en verdi fra 0 til 1023. Denne verdien blir så behandlet ved hjelp av kartfunksjonen for å skalere spekteret til den av servo: 0-179.

Denne verdien blir så skrevet til servo hjelp myservo.write. Det er også en 15 millisekunders forsinkelse for å nå det stedet. Deretter gjentar sløyfen og oppdaterer sin posisjon som er nødvendig.

void loop ()
{
val = analogRead (potpin); // Leser verdien av potensiometeret
// (Verdi mellom 0 og 1023)
val = kartet (val, 0, 1023, 0, 179); // Skalerer den for å bruke den med servo
// (Verdi mellom 0 og 180)
. myservo skrive (val); // Setter servo stillingen ifølge
// Den skalert verdi
forsinkelse (15); // Venter på servo for å komme dit
}

Med denne enkle tillegg til kretsen, er det mulig å kontrollere en servo med noen form for innspill. I dette eksempelet bruker koden en analog inngang, men med noen endringer det kan like gjerne bruke en digital inngang.