Lecția 89: Utilizarea servomotorului continuu sau 360| Curs Arduino Pas cu Pas
Ți-ai dorit vreodată să rotești un motor în orice direcție atât timp cât vrei, în loc să doar să oscilezi înainte și înapoi ca un servomotor standard? Exact asta oferă un servomotor continuu sau de 360 de grade. Spre deosebire de un servomotor standard care se mișcă la un unghi specific (de obicei 0 până la 180 de grade), un servomotor continuu se rotește la nesfârșit în sens orar sau antiorar. Acest lucru îl face perfect pentru construirea de roboți mici, platforme pentru camere sau orice proiect care necesită control continuu al rotației.
În acest proiect, vom construi un sistem de control pentru un servomotor de 360 de grade folosind doar trei butoane. Vei putea comanda servomotorului să se rotească în sens orar, antiorar sau să se oprească în orice moment. Acest ghid te va ghida prin cablare, va explica părțile configurabile ale codului și îți va arăta o demonstrație live a sistemului în acțiune.
Iată câteva idei practice pentru utilizarea unui servomotor continuu în propriile proiecte:
- Construiește un robot mic cu două roți: Folosește două servomotoare continue pentru a acționa roțile, permițând mișcări înainte, înapoi și viraje.
- Creează un suport de cameră cu mișcare panoramică și înclinare: Folosește un servomotor continuu pentru o panoramare lentă și nesfârșită a unei camere de securitate sau pentru animale sălbatice.
- Automatizează o bandă transportoare: Controlează un sistem mic de transport pentru sortarea sau distribuirea articolelor.
- Proiectează un stand rotativ de prezentare: Expune un model 3D sau un produs pe o platformă care se rotește continuu.
Hardware Necesar
- Placă Arduino (Uno, Nano etc.)
- Servomotor continuu (360 de grade) (de ex., FS90R, DS04-NFC)
- 3x butoane
- Fire de legătură
- Breadboard
Ghid de Cablare
Cablarea pentru acest proiect este simplă. Servomotorul are trei fire: de obicei unul întunecat pentru masă (GND), unul din mijloc (adesea roșu) pentru alimentare (5V) și unul mai deschis (portocaliu, galben sau alb) pentru semnal. După cum se arată în videoclip, servomotorul este conectat la Arduino după cum urmează:
- Masă servomotor (fir întunecat): Conectează la GND-ul Arduino.
- Alimentare servomotor (fir din mijloc/roșu): Conectează la 5V-ul Arduino.
- Semnal servomotor (fir deschis): Conectează la pinul 9 al Arduino.
Pentru cele trei butoane, fiecare buton are două părți. O parte a tuturor butoanelor este conectată împreună și apoi la GND-ul Arduino. Cealaltă parte a fiecărui buton este conectată la un pin digital separat, după cum este descris mai jos (în videoclip la 03:40):
- Buton sens orar (CW): Conectează la pinul 2 al Arduino.
- Buton oprire: Conectează la pinul 3 al Arduino.
- Buton sens antiorar (CCW): Conectează la pinul 4 al Arduino.

Explicația Codului
Codul este conceput pentru a fi ușor configurabil. Cea mai importantă parte pe care va trebui să o ajustezi este matricea sc[], care conține valorile PWM specifice trimise servomotorului pentru a-i controla acțiunile. Aceste valori nu sunt universale și trebuie calibrate pentru servomotorul tău specific (în videoclip la 12:23).
int sc[]={106, 58, 0};// comenzile servomotorului sunt în ordine
//CCW, STOP, CW
Această matrice este inima calibrării. Valorile sunt folosite în această ordine:
- sc[0] = 106: Această valoare este trimisă pentru a face servomotorul să se rotească în sens antiorar.
- sc[1] = 58: Aceasta este valoarea de "oprire". Din cauza circuitelor interne, valoarea exactă care face motorul să se oprească variază. S-ar putea să descoperi că servomotorul tău se rotește încet chiar și atunci când această comandă este trimisă și va trebui să ajustezi ușor acest număr pentru a găsi adevărata valoare de "oprire completă" pentru motorul tău.
- sc[2] = 0: Această valoare face servomotorul să se rotească în sens orar la viteză maximă.
Poți ajusta valorile din matricea sc[] pentru a schimba viteza de rotație. De exemplu, setarea sc[0] la 70 va face rotația în sens antiorar mai lentă. Cu cât o valoare este mai aproape de valoarea de "oprire" (58), cu atât motorul se va roti mai lent în acea direcție. Valorile mai departe de 58 vor crește viteza până la o limită maximă.
Există, de asemenea, câteva alte variabile cheie pe care s-ar putea să fie nevoie să le modifici. servoPin este setat la 9, care trebuie să fie un pin cu capacitate PWM pe Arduino-ul tău. Pinii butoanelor sunt definiți la începutul codului și pot fi schimbați dacă este necesar.
int servoPin = 9;// acest pin trebuie să fie unul dintre cei cu PWM ~
#define STOPpin 3 // pin buton pentru STOP
#define CWpin 2 // pin buton pentru CW
#define CCWpin 4 // pin buton pentru CCW
În final, matricea scText[] conține șirurile care sunt afișate în Monitorul Serial pentru depanare. Le poți schimba dacă dorești să afișezi mesaje diferite.
Cum să Utilizezi Codul
Încarcă codul furnizat pe placa ta Arduino. Deschide Monitorul Serial (setat la 9600 baud) pentru a vedea mesajele de stare. Acum poți controla servomotorul folosind cele trei butoane:
- Apasă și ține apăsat butonul CW: Servomotorul va începe să se rotească în sens orar. Monitorul Serial va afișa "CW" și valoarea trimisă.
- Apasă și ține apăsat butonul CCW: Servomotorul va începe să se rotească în sens antiorar. Monitorul Serial va afișa "CCW" și valoarea trimisă.
- Apasă butonul Stop: Servomotorul va încerca să se oprească. Monitorul Serial va afișa "Stop".
Dacă servomotorul tău nu se oprește complet atunci când este apăsat butonul Stop, va trebui să calibrezi valoarea sc[1] din tabloul sc[]. Încearcă să modifici ușor valoarea (de exemplu, de la 58 la 54 sau 52) și reîncarci codul până când motorul rămâne perfect nemișcat.
Demonstrație Live
În videoclip, prezentatorul demonstrează sistemul complet. Poți vedea servomotorul rotindu-se în ambele direcții în funcție de apăsările butoanelor. De asemenea, este afișată ieșirea din Serial Monitor, care arată starea curentă ("CW", "Stop" sau "CCW") și valoarea specifică trimisă către servomotor. Acesta este un instrument excelent pentru depanare și pentru găsirea valorilor de calibrare perfecte pentru motorul tău specific. Demonstrația arată, de asemenea, cum ajustarea valorilor din tabloul sc[] afectează direct viteza motorului, de la o mișcare lentă până la viteza maximă de rotație.
Concluzie
Acest proiect oferă o modalitate simplă și eficientă de a controla un servomotor continuu. Înțelegând procesul de calibrare pentru valoarea de "oprire", poți asigura un control precis în propriile proiecte de robotică și automatizare.
Capitole Video
- [00:05] Introducere în Servomotorul Continuu
- [02:02] Prezentarea Hardware a Servomotorului
- [02:40] Diagrama de Conexiuni și Cablaje
- [05:07] Explicația Codului: Variabile și Configurare
- [08:03] Explicația Codului: Logica Buclei Principale
- [09:56] Funcția servoCommand()
- [10:54] Demonstrație Live și Ieșirea din Serial Monitor
- [12:23] Calibrarea Vitezei Servomotorului și a Valorilor de Oprire
++
/*
* S05-13 Servo with 3 push buttons
* Demonstration of Controlling a Continuous Servo (360 servo)
* This code allows you to control a 360-degree servo using push buttons
*
* Modified by Ahmad Shamshiri for Robojax Robojax.com
* on Jan 17, 2019 at 22:42 in Ajax, Ontario, Canada
Watch the video instruction for this sketch: https://youtu.be/hVe4TSRV4ww
Watch Introduction to 360 Servo video with code: https://youtu.be/b_xvu6wWafA
You can get the wiring diagram from my Arduino Course at Udemy.com
Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place
visit my course now http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
Original code by BARRAGAN <http://barraganstudio.com>
*
* Code is available at http://robojax.com/learn/arduino
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int servoPin = 9;// this pin must be one of those with PWM ~
#define STOPpin 3 // push button pin for STOP
#define CWpin 2 // push button for CW
#define CCWpin 4 // push button for CCW
int sc[]={106, 58, 0};// servo commands are in order
//CCW, STOP,CW
String scText[]={"CCW","Stop","CW"};// define texts for 3 actions
int statusText;
int CWBS, CCWBS, SBS;
//CW button status (CWBS)
//CCW button status (CCWBS)
//stop button status (SBS)
void setup() {
Serial.begin(9600);
pinMode(STOPpin,INPUT_PULLUP);// set pin for push button STOP
pinMode(CCWpin,INPUT_PULLUP);// set pin for push button CCW
pinMode(CWpin,INPUT_PULLUP);// set pin for push button CW
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
myservo.write(sc[1]);// send STOP command
statusText=1;// initial value is STOP
}
void loop() {
CCWBS = digitalRead(CCWpin);// read status of button CCW
SBS = digitalRead(STOPpin);// read status of button STOP
CWBS = digitalRead(CWpin);// read status of button CW
if(CCWBS ==LOW)
{
servoCommand(0);
}else if(SBS ==LOW)
{
servoCommand(1);
}else if(CWBS ==LOW)
{
servoCommand(2);
}
Serial.println(scText[statusText]);
delay(50);
}// loop
void servoCommand(int n)
{
statusText = n;
myservo.write(sc[n]);
Serial.print("Going to ");
Serial.print(scText[n]);
Serial.print( "(");
Serial.print(sc[n]);
Serial.println(")");
}
Lucruri de care ai putea avea nevoie
-
Amazon360 Degree Servo motor on Amazonlink.amazon
-
eBay360 Degree Servo motor on eBayebay.us
-
AliExpress360 Degree Servo motor on AliExpresss.click.aliexpress.com
-
AliExpress360 Degree Servo motor on AliExpress-2s.click.aliexpress.com
Resurse și referințe
-
Internă
Fișiere📁
Alte fișiere
-
Fișa tehnică a motorului SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB