This tutorial is part of: Servomotory
Všetky videá súvisiace so servomotormi sú uvedené tu. Odkazy na ďalšie videá nájdete pod týmto článkom.
Ako používať kontinuálny 360° servomotor s Arduinom
V tomto tutoriále sa naučíme, ako ovládať nepretržitý 360° servo motor pomocou Arduina. Na rozdiel od štandardných servomotorov môžu nepretržité servomotory rotovať neobmedzene v oboch smeroch, čo umožňuje všestranné aplikácie. Ovládanie ich polohy si však vyžaduje pochopenie príkazov, ktoré sú im zasielané, a trochu experimentovania na nájdenie správnych hodnôt zastavenia.
Vyvineme program, ktorý nám umožní posielať príkazy cez sériový monitor na otáčanie serva doľava, doprava alebo jeho zastavenie. Kód bude obsahovať potrebnú logiku na interpretáciu ASCII hodnôt príkazov, ktoré zadáme. Pre objasnenie procesu kódovania sa určite pozrite na video (vo videu o 12:30).
Vysvetlenie hardvéru
Na realizáciu tohto projektu budete potrebovať kontinuálny 360° servo motor, dosku Arduino a napájací zdroj schopný poskytnúť dostatočný prúd (aspoň 500mA). Servo motor prijíma riadiace signály z Arduina, ktoré používa moduláciu šírky impulzu (PWM) na určenie smeru a rýchlosti otáčania.
Servomotor má tri vodiče: napájanie, zem a ovládanie. Vodič napájania sa pripája k napájaciemu zdroju, vodič zeme sa pripája k napájaciemu zdroju aj k zemi Arduina a vodič ovládania sa pripája k určenému pinu na Arduine na prenos signálu.
Technické údaje
| Výrobca | Generický |
|---|---|
| Číslo dielu | Kontinuálny 360° servomotor |
| Logika/IO napätie | 5 V |
| Napájacie napätie | 4.8-6 V |
| Výstupný prúd (na kanál) | 500 mA |
| Špičkový prúd (na kanál) | 1 A max |
| Pokyny pre PWM frekvenciu | 50 Hz |
| Vstupné logické prahy | Vysoká: >2,5 V, Nízka: <0,8 V |
| Pokles napätia / RDS(on)/ saturácia | - |
| Tepelné limity | - |
| Balík | Štandardné puzdro servomotora |
| Poznámky / varianty | Dostupné v rôznych veľkostiach |
- Zabezpečte spoločnú zem medzi Arduinom a napájacím zdrojom.
- Použite externý napájací zdroj pre servomotor, aby ste predišli preťaženiu Arduina.
- Experimentujte s hodnotami zastavenia, aby ste našli najlepšiu výkonnosť pre váš servomotor.
- Sledujte teplotu serva počas prevádzky, aby ste predišli prehriatiu.
- Použite PWM signál na ovládanie rýchlosti a smeru servomotora.
Inštrukcie na zapojenie
Aby ste pripojili svoj nepretržitý 360° servo motor k Arduinu, začnite pripojením napájacieho kábla serva k externému napájaniu, ktoré poskytuje 5V. Zemný kábel serva by mal byť pripojený k zemi (GND) na Arduine, čím zabezpečíte, že napájanie a Arduino zdieľajú spoločnú zem. Ovládací kábel serva pôjde na pin 9 na Arduine, odkiaľ bude odoslaný PWM signál.
Dvojito skontrolujte, či sú vaše pripojenia bezpečné, pretože voľné pripojenia môžu viesť k nepravidelnému správaniu servomotora. Ak je váš servomotor typu, ktorý môže byť napájaný priamo z Arduina, môžete pripojiť napájací vodič k 5V pinu Arduina, ale uistite sa, že celkový prúd nepresahuje to, čo Arduino dokáže dodať.
Príklady kódu a návod
Nasledujúci úryvok ukazuje, ako nastaviť servomotor a čítať príkazy zo sériového monitora:
#include
Servo myservo; // create servo object to control a servo
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
V tomto úryvku kódu zahrnieme knižnicu Servo a vytvoríme objekt servo s názvommyservoNastavili sme aj sériovú komunikáciu na 9600 baud a pripojili sme servomotor na pin 9.
Ďalej máme hlavnú slučku, kde čítame prichádzajúce sériové dáta a ovládame servomotor na základe príkazov:
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == 108) { // 'L' command
myservo.write(0); // rotate clockwise
} else if (incomingByte == 114) { // 'R' command
myservo.write(180); // rotate counterclockwise
} else if (incomingByte == 60) { // stop command
myservo.write(60); // stop servo
}
}
}
Tento kód kontroluje, či sú v sériovom vyrovnávacom pamäti dostupné nejaké údaje. V závislosti od ASCII hodnoty vstupu (napr.,108pre 'L' sa otočí v smere hodinových ručičiek,114pre 'R' na otočenie proti smeru hodinových ručičiek), odošle zodpovedajúci príkaz servomotoru.
Pre kompletný kód a ďalšie podrobnosti sa prosím odkazujte na celý program načítaný pod článkom.
Demonštrácia / Čo očakávať
Keď nahráte kód a otvoríte sériový monitor, môžete zadať 'L' na otočenie serva doľava, 'R' na otočenie doprava alebo iné hodnoty na experimentovanie so zastavením serva. Očakávajte rôzne hodnoty zastavenia, pretože správanie serva sa môže líšiť v závislosti od jeho kvality a dizajnu (vo videu o 18:45).
Buďte opatrní, ako servo reaguje na príkazy; ak sa nezastaví, ako sa očakáva, vyskúšajte rôzne hodnoty, kým nenájdete optimálny príkaz na zastavenie. Môže to vyžadovať niekoľko experimentov, najmä aby ste predišli prehriatiu serva.
Kapitoly
- Úvod (0:00)
- Vysvetlenie hardvéru (1:30)
- Inštrukcie na zapojenie (3:45)
- Prezentácia kódu (5:15)
- Demonštrácia (18:00)
Zdroje
- Dokumentácia knižnice Arduino Servo
- Datasheet výrobcu kontinuálnych servomotorov
This tutorial is part of: Servomotory
- Controlling a Servo with Push Buttons Using Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Controlling a Servo with a Potentiometer Using Arduino
- Controlling a Servo with Potentiometer and LCD1602 using Arduino
- Controlling Servo Motors Using an Infrared Remote with Arduino
- Ovládanie servomotora Arduino pomocou potenciometra
- Ovládanie pozície serva pomocou gest rúk pre Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Arduino Code and Video for PCA9685 16-Channel 12-Bit Servo Controller V1
- Zostavte Arduino servoprepínač s tlačidlom
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
* This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor.
📚⬇️ Download and resource page https://robojax.com/RJT762
*
* Modified by Ahmad Shamshiri for Robojax.com
* on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
* Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
* Get this code from Robojax.com
*
Original code by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
Modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("received: ");
Serial.print (incomingByte);
if(incomingByte == 108){
Serial.println(" sent 0 Rotating CW ");
myservo.write(0);
}else if(incomingByte == 114){
Serial.println(" sent 180 Rotating CCW ");
myservo.write(180);
}else if(incomingByte == 60){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Randomly");
myservo.write(incomingByte);
}
}
}
Resources & references
No resources yet.
Files📁
No files available.