cum să controlați servomotoarele cu Arduino

una dintre primele utilizări ale servomotoarelor a fost controlul mecanismelor de direcție ale avioanelor, mașinilor și bărcilor RC. Astăzi, le puteți găsi în roboți, echipamente industriale și multe proiecte Arduino diferite.

Servo motoare sunt capabile de un control precis de rotație de la un arbore motor. Acestea vă permit să setați un unghi exact de rotație cu cod sau cu intrări precum joystick-uri, butoane sau potențiometre.,

în acest tutorial, vom arunca o privire la modul în care funcționează servomotoarele și cum să folosiți un Arduino pentru a le controla. Ne vom uita, de asemenea, la două exemple de programe pe care le puteți rula pe Arduino. Primul program vă va arăta cum să controlați direcția și poziția unui servo folosind două butoane. Al doilea program vă va arăta cum să utilizați un potențiometru pentru a controla poziția servo.

bine, să începem!

BONUS: am făcut un ghid de pornire rapidă pentru acest tutorial pe care îl puteți descărca și reveni mai târziu dacă nu puteți configura acest lucru chiar acum., Acesta acoperă toate etapele, diagrame, și Codul de care aveți nevoie pentru a începe.

cum funcționează servomotoarele

servo-urile sunt motoare de curent continuu care au fost orientate în jos pentru a reduce viteza și a crește cuplul motorului. De asemenea, au construit circuite care controlează unghiul de rotație cu un grad la un moment dat și mențin această poziție până când se primește o altă intrare., Servo se va roti cu un anumit număr de grade, în funcție de lățimea impulsurilor electrice transmise de Arduino:

servo se așteaptă la un puls la fiecare 20 ms. Pentru cele mai multe, servo, 1 ms puls rezultatele într-un zero grade de rotație, un 1.5 ms puls rezultatele într-un 90 de grade de rotație, și o 2 ms puls rezultatele într-o 180 de grade de rotație.

conectarea servomotorului la Arduino

acum să vedem cum se utilizează un Arduino pentru a controla un servomotor., Acestea sunt componentele de care aveți nevoie pentru a seta exemplu proiectele discutate mai jos:

  • Arduino Uno
  • SG90 Micro Servo
  • 10K Potențiometru
  • Rezistențe
  • Condensatoare
  • 4X AA Battery Holder
  • Butoane Tactile

în Funcție de servo pe care îl folosiți (cele mari mai ales), ar trebui să utilizați separat de alimentare DC pentru a alimenta. În caz contrar, curentul tras de servo ar putea deteriora Arduino-ul.,

Odată ce aveți toate componentele, conectați-le la Arduino următoarele aceasta schema:

Programare Servo

Vom folosi Arduino built-in Servo biblioteca pentru programul de servo. Această bibliotecă este inclusă cu IDE Arduino, deci nu este nevoie să o instalați.,

după ce ați conectat părți în conformitate cu schema de mai sus, deschide Arduino IDE și încărcați acest cod la bord:

motor servo ar trebui să se mute la 0 grade, pauză pentru o secundă, apoi trece la 90 de grade, pauză pentru o secundă, apoi trece la 180 de grade, pauză pentru o secundă, apoi începe peste.

pe prima linie includem Biblioteca Servo cu #include <Servo.h>., Pe linia următoare, creăm un obiect numit servo1 pentru a face referire la servomotorul specific în întregul cod. Pe linia următoare, declarăm o variabilă pin numită serverPin și o setăm egală cu PIN-ul Arduino 9.

în secțiunea de configurare, inițializăm servo-ul cu funcția attach(). Funcția attach() ia un parametru-pinul la care este conectat servo-ul. Deci avem servo1.attach(servoPin).,

pentru a muta servo-ul, utilizați funcția write() cu unghiul de rotație ca argument. Unghiul este în grade, de la 0 grade la 180 de grade. Unghiul modifică lățimea impulsului trimisă servomotorului, care determină apoi cantitatea de rotație. Suntem de asteptare funcția prin servo1 obiect, deci vom folosi servo1.write(angle), cu 0 grade, 90 grade, 180 de grade.

writeMicroseconds Funcția ()

write() funcția va lucra pentru cele mai multe, servo, dar nu toate., Unele servomotoare au o gamă de grade 180, unele au o gamă de grade 90, iar unele au oriunde între ele. Utilizarea funcției write() permite doar maxim 180 de pași. Cu toate acestea, există o funcție care permite până la 1000 de pași, numită writeMicroseconds(). Dacă doriți un control mai precis de servo, poate doriți să utilizați writeMicroseconds() funcția în loc de write().,

schita de mai jos demonstrează cum să utilizați writeMicroseconds() funcția:

În această schiță, am înlocuit fiecare write() funcția cu un writeMicroseconds() function. Modificați valorile unghiulare de la (0, 90, 180) grade la (1000, 1500, 2000) microsecunde. Încărcați și rulați programul utilizând aceeași configurație hardware. Pentru un servomotor capabil de o gamă de până la 180, valorile vor fi de 1000 microsecunde = 0 grade, 1500 microsecunde = 90 grade și 2000 microsecunde = 180 grade.,

în funcție de servomotorul pe care îl utilizați, este posibil să observați o diferență. Interesant pe setup meu, în timp ce monitorizarea impulsuri pe un osciloscop, am observat că atunci când se utilizează servo1.write(0);, lățimea impulsului a fost de numai aproximativ 700 de microsecunde, nu 1000, care este modul în care funcția ar trebui să funcționeze atunci când este setat la zero grade. Dar când utilizați servo1.writeMicroseconds(1000); ieșirea a fost exact 1000 microsecunde.,

Control un Servo Cu Butoane

Construieste circuitul așa cum se arată în diagrama de mai sus, apoi încărcați codul prezentat mai jos. după încărcarea codului compilat, deschideți Monitorul Serial pe Arduino. Pe măsură ce apăsați pe oricare dintre butoane, servo-ul ar trebui să crească sau să scadă așa cum se arată pe monitorul serial. Inițial, codul va seta servo-ul la 90 de grade. Utilizați butonul conectat la pinul 3 pentru a mări unghiul., Când ajungeți la 180 de grade, capătul înalt al rotației, LED-ul conectat la pinul 5 se va aprinde. Când ajungeți la capătul inferior al intervalului care este de 0 grade, LED-ul conectat la pinul 6 se va aprinde. pentru a determina rezultatul apăsării butonului, o declarație while verifică butonul și unghiul arborelui. while (digitalRead(pin3) == HIGH && pos < 180) determină că butonul a fost apăsat (înalt), iar unghiul este mai mic de 180, astfel încât programul adaugă un grad și bucle pe. Al doilea buton while (digitalRead(pin4) == HIGH && pos > 0) determină că butonul a fost apăsat (înalt) și unghiul este mai mare decât 0., Acest lucru face ca unghiul să scadă cu unul și buclele. LedHi și LedLow level Pentru LED-uri sunt fiecare controlate de o declarație if care verifică unghiul pentru a vedea dacă este 0 sau 180. LED-urile sunt oprite imediat ce unghiul se schimbă în fiecare dintre cele două declarații while.

Control un Servo Cu un Potențiometru

Construieste circuitul așa cum se arată în diagrama folosind un potentiometru de 10K pentru a controla servo motor. Apoi încărcați codul de mai jos.,

după încărcarea codului, deschideți monitorul serial pe Arduino. Pe măsură ce reglați potențiometrul, rotația servo-ului se va schimba în consecință. Când atingeți limita inferioară a intervalului, LED-ul scăzut se va aprinde și, pe măsură ce atingeți limita superioară, LED-ul ridicat se va aprinde.

codul este simplu. Prima linie de cod în loop() funcție ar trebui să fie:

val = analogRead(pot); val = map(val, 0, 1023, 0, 180); servo1.write(val); 

analogRead() ia în care tensiunea de la potențiometru ca un semnal analogic., Acceptă valorile întregii game de intrări acceptate într-un Arduino (0-5V). Acesta îl surprinde ca un număr întreg în intervalul (0-1023). De exemplu, o valoare DC de 0V ar fi capturată ca întreg 0; o valoare completă a intervalului de 5V ar fi capturată ca întreg 1023, iar jumătate din intervalul de intrare de 2,5 V ar fi capturată ca întreg 512, jumătate din 1023.

următoarea linie de cod val = map(val, 0, 1023, 0, 180); mapează valoarea val în intervalul 0, 1023, la o valoare de 0, 180.,

următoarea linie de cod servo1.write(val); este write() comanda care are numărul întreg memorat în val ca argument și se aplică-l la servo. Servo primește un impuls de la servo1.write(val); și lățimea impulsului este determinată de valoarea val. Servo-ul folosește lățimea acestui impuls pentru a determina rotația acestuia.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *