Programarea arduino - biblioteca servo

Servo bibliotecă - bibliotecă pentru lucrul cu servo

Așa cum ne amintim, un servo este un motor cu motor, cu feedback. datorită căruia este posibilă rotirea arborelui de ieșire la un unghi strict definit.
Masinile standard de directie se rotesc de la 0 la 180 de grade (si servo rotatie constanta - asa-numita servo continua de rotatie.), Putin mai tarziu vom arata cum un servo conventional poate fi remodelat intr-o astfel de stare.

Notă:
În Arduino IDE 0017, biblioteca Servo suportă până la 12 servlete (până la 48 pe Mega), iar în IDE 0016 și mai devreme funcționează numai pe 9 și 10 pini!

! Vă rugăm să rețineți:
La alte placi decât Mega, folosirea bibliotecii dezactivează posibilitatea de a folosi analogWrite () (PWM) pe pinii 9 și 10 (indiferent dacă serverele sunt conectate sau nu la aceste pinii). Pe cardurile Mega pot fi utilizate până la 12 servere fără a afecta funcționalitatea PWM, dar folosind 12 - 23 servo-uri se dezactivează PWM pe pinii 11 și 12.

conexiune
Circuitul servo este foarte simplu - are trei fire:

Programarea arduino - biblioteca servo

- sol (maro / negru),
- sursa de alimentare +5 volți (roșu),
- semnal (portocaliu / galben / alb).
Semnalul de comandă poate fi alimentat direct de la piciorul MK, dar sursa de alimentare (mai ales dacă sunt implicate mai mult de unul sau două servomotoare) trebuie furnizată de la o sursă de alimentare externă (adică nu de la + 5V Arduino). În acest caz, trebuie să vă amintiți să conectați solul Arduino / CraftDuino cu minusul sursei externe de alimentare.

Luați în considerare funcțiile oferite de bibliotecă.

uint8_t atașați (int pin);
uint8_t atașați (int pin, int min, int max);

Descriere:
Specificați pinul la care este conectat cablul servo-control.

Notă:
Versiunile lui Arduino IDE 0016 și cele mai tinere permit conectarea numai la 9 și 10 pini.


Opțiuni:
(servo este un obiect Servo)
pin - numărul portului la care este conectat servo - ul

min (opțional) - lățimea impulsului în microsecunde pentru a seta poziția arborelui servo la 0 grade (implicit 544)

max (opțional) - lățimea impulsului în microsecunde, care stabilește poziția arborelui servo la 180 de grade (implicit este 2400)


void write (valoarea int);

Descriere:
Setați unghiul de rotație al servomotorului în grade.
În cazul servo rotației permanente:
0 - rotație la viteză maximă într-o direcție,
180 - rotație la viteză maximă în cealaltă direcție,
90 - nu există rotație.


Opțiuni:
unghiul unghiului pentru rotație: de la 0 la 180


void writeMicroseconds (valoare int);


Opțiuni:
uS este lățimea pulsului în microsecunde (int)

Descriere:
Citește unghiul de rotire "curent" al servo-ului (valoarea trecută în ultima scriere a apelului ()).


Valoarea returnata:
Returnează o valoare de tip int - un unghi de la 0 la 180 de grade.

Descriere:
Determinați dacă există legare la servere prin pin.


Valoarea returnata:
Returnează adevărat dacă există o obligație la pin-y și false altfel.

Descriere:
Deconectarea pinului din biblioteca Servo. Dacă toate variabilele Servo sunt dezactivate - pinii 9 și 10 pot fi utilizați pentru ieșirea PWM prin analogWrite ().


Valoarea returnata:
nr.

Să luăm în considerare un exemplu de lucrare de bibliotecă pe exemplul de Sweep, care rotește servo-ul de la 0 la 180 de grade și înapoi (pe măsură ce mătură).
Fișier - Exemple - Servo - Sweep


Există și alte biblioteci:
SoftwareServo - www.arduino.cc/playground/ComponentLib/Servo - convenabil cu același nume de funcții cu biblioteca sistemului servo
- nu limitează numărul de servere la cel de-al 8-lea, dar necesită o metodă
SoftwareServo :: refresh ()

MegaServo - www.arduino.cc/playground/Code/MegaServo
- biblioteca pentru versiunile anterioare ale IDE (în 0017 nu se va încărca, deoarece aparține deja IDE sub numele Servo :) - permite controlul a până la 12 servere

Toate felicitările, remodelează servo-ul pentru rotație într-un cerc (360 de grade), editează schița, dar se rotește fără oprire. Dacă conectați un servo servo, acesta se rotește la fiecare 90 de grade. Dar am nevoie de toate 360 ​​și nu de 180. spune-mi ce e în neregulă.
aici este schița
#include
Servo myservo;

void setup ()
<
// setați pinul ca ieșire a servo controlului
myservo.attach (10);
>

buclă voidă ()
<
// setați unghiul la 0 °
myservo.write (0);
întârziere (3000);
// setați unghiul de 90 °
myservo.write (90);
întârziere (3000);
// setați unghiul la 180 °
myservo.write (180);
întârziere (3000);
// setați unghiul la 270 °
myservo.write (270);
întârziere (3000);
>

IMHO așa cum ar trebui să fie.
Servo, înseamnă simplu, nu-l transformă mai mult de 180.
Despre dispozitiv - aici.
Numai dacă potențiometrul de reacție este schimbat în modul multi-rotativ, dar apoi precizia devine scăzută.
Nu știu exact cum ai fost modificat, dar de obicei servitorii nu se schimbă atât de mult pe "360", ci mai degrabă de "rotație constantă" - a se vedea detaliile.

Am scos dispozitivul de reținere, în loc de un potențiometru am lipit 2 rezistențe la 3.3k. este imposibil să se oprească la fiecare 90 de ani?

Deci este imposibil - și tu ai scos servomotorul potențiometru acum nu știe nimic despre poziția sa actuală.
Citiți asta.

Articole similare