Lekcia 89: Použitie kontinuálneho alebo 360° servomotora | Kurz Arduino krok za krokom
Už ste niekedy chceli roztočiť motor v oboch smeroch tak dlho, ako chcete, namiesto toho, aby sa len kýval tam a späť ako štandardný servo motor? To je presne to, čo ponúka kontinuálny alebo 360-stupňový servo motor. Na rozdiel od štandardného serva, ktoré sa pohybuje do určitého uhla (zvyčajne 0 až 180 stupňov), kontinuálne servo sa otáča donekonečna v smere alebo proti smeru hodinových ručičiek. Vďaka tomu je ideálne na stavbu malých robotov, kamerových platforiem alebo akéhokoľvek projektu vyžadujúceho kontinuálne riadenie otáčania.
V tomto projekte postavíme riadiaci systém pre 360-stupňové servo pomocou iba troch tlačidiel. Budete môcť prikázať servu, aby sa otáčalo v smere hodinových ručičiek, proti smeru hodinových ručičiek alebo sa kedykoľvek zastavilo. Táto príručka vás prevedie zapojením, vysvetlí používateľsky konfigurovateľné časti kódu a ukáže vám živú demonštráciu systému v akcii.
Tu je niekoľko praktických nápadov na použitie kontinuálneho serva vo vašich vlastných projektoch:
- Postavte malého dvojkolesového robota: Použite dve kontinuálne servá na pohon kolies, čo umožní pohyb vpred, vzad a otáčanie.
- Vytvorte naklápaciu a otočnú kamerovú hlavicu: Použite jedno kontinuálne servo na pomalé, nekonečné natáčanie bezpečnostnej alebo prírodnej kamery.
- Automatizujte dopravný pás: Ovládajte malý dopravníkový systém na triedenie alebo vydávanie predmetov.
- Navrhnite otočný výstavný stojan: Vystavte 3D model alebo produkt na platforme, ktorá sa nepretržite otáča.
Potrebný hardvér
- Doska Arduino (Uno, Nano atď.)
- Kontinuálny (360-stupňový) servo motor (napr. FS90R, DS04-NFC)
- 3x tlačidlá
- Prepojovacie vodiče
- Nepájivé pole
Sprievodca zapojením
Zapojenie tohto projektu je jednoduché. Servo motor má tri vodiče: zvyčajne tmavý pre zem (GND), stredný (často červený) pre napájanie (5V) a svetlejší (oranžový, žltý alebo biely) pre signál. Ako je znázornené vo videu, servo je zapojené k Arduinu nasledovne:
- Uzemenie serva (tmavý vodič): Pripojte k GND na Arduine.
- Napájanie serva (stredný/červený vodič): Pripojte k 5V na Arduine.
- Signál serva (svetlý vodič): Pripojte k pinu 9 na Arduine.
Pre tri tlačidlá platí, že každé tlačidlo má dve strany. Jedna strana všetkých tlačidiel je spojená dohromady a potom pripojená k GND na Arduine. Druhá strana každého tlačidla je pripojená k samostatnému digitálnemu pinu, ako je opísané nižšie (vo videu o 03:40):
- Tlačidlo v smere hodinových ručičiek (CW): Pripojte k pinu 2 na Arduine.
- Tlačidlo STOP: Pripojte k pinu 3 na Arduine.
- Tlačidlo proti smeru hodinových ručičiek (CCW): Pripojte k pinu 4 na Arduine.

Vysvetlenie kódu
Kód je navrhnutý tak, aby bol ľahko konfigurovateľný. Najdôležitejšia časť, ktorú budete musieť upraviť, je pole sc[], ktoré obsahuje konkrétne hodnoty PWM odosielané servu na riadenie jeho činností. Tieto hodnoty nie sú univerzálne a musia byť kalibrované pre váš konkrétny servo motor (vo videu o 12:23).
int sc[]={106, 58, 0};// príkazy pre servo sú v poradí
//CCW, STOP, CW
Toto pole je srdcom kalibrácie. Hodnoty sa používajú v tomto poradí:
- sc[0] = 106: Táto hodnota sa odošle, aby sa servo otáčalo proti smeru hodinových ručičiek.
- sc[1] = 58: Toto je hodnota "stop". Kvôli vnútornému obvodu sa presná hodnota, pri ktorej sa motor zastaví, líši. Môžete zistiť, že sa vaše servo pomaly otáča, aj keď sa odošle tento príkaz, a budete musieť toto číslo mierne upraviť, aby ste našli skutočnú hodnotu "úplného zastavenia" pre váš motor.
- sc[2] = 0: Táto hodnota spôsobí, že sa servo otáča v smere hodinových ručičiek maximálnou rýchlosťou.
Hodnoty v poli sc[] môžete upraviť, aby ste zmenili rýchlosť otáčania. Napríklad nastavením sc[0] na 70 sa otáčanie proti smeru hodinových ručičiek spomalí. Čím bližšie je hodnota k hodnote "stop" (58), tým pomalšie sa bude motor otáčať v danom smere. Hodnoty ďalej od 58 zvýšia rýchlosť až do maximálneho limitu.
Existujú tiež ďalšie kľúčové premenné, ktoré možno budete musieť upraviť. servoPin je nastavený na 9, čo musí byť pin s podporou PWM na vašom Arduine. Piny tlačidiel sú definované na začiatku kódu a možno ich v prípade potreby zmeniť.
int servoPin = 9;// tento pin musí byť jeden z tých s PWM ~
#define STOPpin 3 // pin tlačidla pre STOP
#define CWpin 2 // pin tlačidla pre CW
#define CCWpin 4 // pin tlačidla pre CCW
Nakoniec pole scText[] obsahuje reťazce, ktoré sa tlačia do sériového monitora na ladenie. Môžete ich zmeniť, ak chcete zobraziť iné správy.
Ako používať kód
Nahrajte poskytnutý kód na svoju dosku Arduino. Otvorte sériový monitor (nastavený na 9600 baudov), aby ste videli stavové správy. Teraz môžete ovládať servo pomocou troch tlačidiel:
- Stlačte a podržte tlačidlo CW: Servo sa začne otáčať v smere hodinových ručičiek. Sériový monitor zobrazí "CW" a odosielanú hodnotu.
- Stlačte a podržte tlačidlo CCW: Servo sa začne otáčať proti smeru hodinových ručičiek. Sériový monitor zobrazí "CCW" a odosielanú hodnotu.
- Stlačte tlačidlo Stop: Servo sa pokúsi zastaviť. Sériový monitor zobrazí "Stop".
Ak sa váš servomotor úplne nezastaví po stlačení tlačidla Stop, budete musieť kalibrovať hodnotu sc[1] v poli sc[]. Skúste hodnotu mierne zmeniť (napr. z 58 na 54 alebo 52) a znova nahrať kód, kým motor nezostane dokonale nehybný.
Živá demonštrácia
Vo videu prezentujúci demonštruje celý systém. Môžete vidieť servomotor otáčajúci sa v oboch smeroch na základe stlačení tlačidiel. Zobrazený je aj výstup Serial Monitora, ktorý ukazuje aktuálny stav ("CW", "Stop" alebo "CCW") a konkrétnu hodnotu odosielanú servomotoru. Je to skvelý nástroj na ladenie a nájdenie dokonalých kalibračných hodnôt pre váš konkrétny motor. Demonštrácia tiež ukazuje, ako úprava hodnôt v poli sc[] priamo ovplyvňuje rýchlosť motora, od pomalého plazenia až po maximálnu rýchlosť otáčania.
Záver
Tento projekt poskytuje jednoduchý a efektívny spôsob ovládania kontinuálneho servomotora. Pochopením procesu kalibrácie hodnoty "stop" môžete zabezpečiť presné ovládanie vo vašich vlastných robotických a automatizačných projektoch.
Kapitoly videa
- [00:05] Úvod ku kontinuálnemu servomotoru
- [02:02] Prehľad hardvéru servomotora
- [02:40] Schéma zapojenia a pripojenia
- [05:07] Vysvetlenie kódu: Premenné a nastavenie
- [08:03] Vysvetlenie kódu: Logika hlavnej slučky
- [09:56] Funkcia servoCommand()
- [10:54] Živá demonštrácia a výstup Serial Monitora
- [12:23] Kalibrácia rýchlosti servomotora a hodnôt stop
++
/*
* 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(")");
}
Things you might need
-
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
Resources & references
-
Internal
Files📁
Other files
-
SG90 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB