Lekcja 89: Użycie silnika serwo ciągłego lub 360°| Kurs Arduino Krok po Kroku
Czy kiedykolwiek chciałeś obracać silnikiem w dowolnym kierunku tak długo, jak chcesz, zamiast tylko wychylać go w przód i w tył jak w przypadku standardowego serwomechanizmu? To właśnie oferuje serwo o ciągłym obrocie lub 360 stopni. W przeciwieństwie do standardowego serwa, które ustawia się pod określonym kątem (zazwyczaj od 0 do 180 stopni), serwo o ciągłym obrocie obraca się bez końca w kierunku zgodnym lub przeciwnym do ruchu wskazówek zegara. Dzięki temu idealnie nadaje się do budowy małych robotów, platform kamerowych lub dowolnego projektu wymagającego ciągłej kontroli obrotu.
W tym projekcie zbudujemy system sterowania serwem 360 stopni za pomocą zaledwie trzech przycisków. Będziesz mógł wydać polecenie serwu, aby obracało się zgodnie z ruchem wskazówek zegara, przeciwnie do ruchu wskazówek zegara lub zatrzymało się w dowolnym momencie. Ten przewodnik przeprowadzi Cię przez podłączenie, wyjaśni konfigurowalne części kodu i pokaże praktyczną demonstrację działania systemu.
Oto kilka praktycznych pomysłów na wykorzystanie serwa o ciągłym obrocie we własnych projektach:
- Zbuduj małego robota na dwóch kołach: Użyj dwóch serw o ciągłym obrocie do napędzania kół, co umożliwi jazdę do przodu, do tyłu i skręcanie.
- Stwórz uchwyt kamery z funkcją obrotu i pochylania: Użyj jednego serwa o ciągłym obrocie do powolnego, niekończącego się obracania kamery ochrony lub kamery do obserwacji przyrody.
- Zautomatyzuj taśmę przenośnika: Steruj małym systemem przenośnika do sortowania lub wydawania przedmiotów.
- Zaprojektuj obrotową podstawę wystawową: Prezentuj model 3D lub produkt na platformie, która obraca się w sposób ciągły.
Wymagany sprzęt
- Płytka Arduino (Uno, Nano itp.)
- Serwomechanizm o ciągłym obrocie (360 stopni) (np. FS90R, DS04-NFC)
- 3x przyciski
- Przewody połączeniowe
- Płytka stykowa
Schemat podłączenia
Podłączenie w tym projekcie jest proste. Serwomechanizm ma trzy przewody: zazwyczaj ciemny do masy (GND), środkowy (często czerwony) do zasilania (5V) oraz jaśniejszy (pomarańczowy, żółty lub biały) do sygnału. Jak pokazano na filmie, serwo jest podłączone do Arduino w następujący sposób:
- Masa serwa (ciemny przewód): Podłącz do GND na Arduino.
- Zasilanie serwa (środkowy/czerwony przewód): Podłącz do 5V na Arduino.
- Sygnał serwa (jasny przewód): Podłącz do pinu 9 na Arduino.
Jeśli chodzi o trzy przyciski, każdy przycisk ma dwie strony. Jedna strona wszystkich przycisków jest połączona razem, a następnie do GND na Arduino. Druga strona każdego przycisku jest podłączona do osobnego pinu cyfrowego, jak opisano poniżej (na filmie o 03:40):
- Przycisk zgodnie z ruchem wskazówek zegara (CW): Podłącz do pinu 2 na Arduino.
- Przycisk Stop: Podłącz do pinu 3 na Arduino.
- Przycisk przeciwnie do ruchu wskazówek zegara (CCW): Podłącz do pinu 4 na Arduino.

Wyjaśnienie kodu
Kod został zaprojektowany tak, aby był łatwy do skonfigurowania. Najważniejszą częścią, którą będziesz musiał dostosować, jest tablica sc[], która zawiera konkretne wartości PWM wysyłane do serwa w celu sterowania jego działaniami. Te wartości nie są uniwersalne i muszą być skalibrowane dla Twojego konkretnego serwomechanizmu (na filmie o 12:23).
int sc[]={106, 58, 0};// polecenia serwa są w kolejności
//CCW, STOP, CW
Ta tablica jest sercem kalibracji. Wartości są używane w tej kolejności:
- sc[0] = 106: Ta wartość jest wysyłana, aby serwo obracało się przeciwnie do ruchu wskazówek zegara.
- sc[1] = 58: To jest wartość „stop". Ze względu na wewnętrzne obwody dokładna wartość, która zatrzymuje silnik, jest różna. Możesz zauważyć, że Twoje serwo powoli się obraca nawet po wysłaniu tego polecenia, i będziesz musiał nieznacznie dostosować tę liczbę, aby znaleźć prawdziwą wartość „całkowitego zatrzymania" dla swojego silnika.
- sc[2] = 0: Ta wartość powoduje obrót serwa zgodnie z ruchem wskazówek zegara z maksymalną prędkością.
Możesz dostosować wartości w tablicy sc[], aby zmienić prędkość obrotu. Na przykład ustawienie sc[0] na 70 spowoduje wolniejszy obrót przeciwnie do ruchu wskazówek zegara. Im bliżej wartości „stop" (58), tym wolniej silnik będzie się obracał w danym kierunku. Wartości dalsze od 58 zwiększą prędkość aż do maksymalnego limitu.
Istnieje również kilka innych kluczowych zmiennych, które możesz musieć zmodyfikować. servoPin jest ustawione na 9, co musi być pinem z obsługą PWM na Twoim Arduino. Piny przycisków są zdefiniowane na początku kodu i można je zmienić w razie potrzeby.
int servoPin = 9;// ten pin musi być jednym z tych z PWM ~
#define STOPpin 3 // pin przycisku dla STOP
#define CWpin 2 // pin przycisku dla CW
#define CCWpin 4 // pin przycisku dla CCW
Na koniec tablica scText[] zawiera ciągi znaków, które są wyświetlane w monitorze szeregowym do debugowania. Możesz je zmienić, jeśli chcesz wyświetlać inne komunikaty.
Jak używać kodu
Wgraj dostarczony kod na swoją płytkę Arduino. Otwórz monitor szeregowy (ustawiony na 9600 bodów), aby zobaczyć komunikaty statusu. Możesz teraz sterować serwem za pomocą trzech przycisków:
- Naciśnij i przytrzymaj przycisk CW: Serwo zacznie obracać się zgodnie z ruchem wskazówek zegara. Monitor szeregowy wyświetli „CW" oraz wysyłaną wartość.
- Naciśnij i przytrzymaj przycisk CCW: Serwo zacznie obracać się przeciwnie do ruchu wskazówek zegara. Monitor szeregowy wyświetli „CCW" oraz wysyłaną wartość.
- Naciśnij przycisk Stop: Serwo spróbuje się zatrzymać. Monitor szeregowy wyświetli „Stop".
Jeśli Twój serwo nie zatrzymuje się całkowicie po naciśnięciu przycisku Stop, konieczna będzie kalibracja wartości sc[1] w tablicy sc[]. Spróbuj nieznacznie zmienić wartość (np. z 58 na 54 lub 52) i ponownie wgraj kod, aż silnik pozostanie idealnie nieruchomy.
Prezentacja na żywo
Na filmie prowadzący demonstruje kompletny system. Możesz zobaczyć, jak serwo obraca się w obu kierunkach w zależności od naciśnięć przycisków. Wyświetlane jest również okno Serial Monitor, pokazujące bieżący stan („CW", „Stop" lub „CCW") oraz konkretną wartość wysyłaną do serwa. To doskonałe narzędzie do debugowania i znajdowania idealnych wartości kalibracji dla Twojego konkretnego silnika. Demonstracja pokazuje również, jak zmiana wartości w tablicy sc[] bezpośrednio wpływa na prędkość silnika — od powolnego pełzania do maksymalnej prędkości obrotowej.
Podsumowanie
Ten projekt zapewnia prosty i skuteczny sposób sterowania serwem o ciągłym obrocie. Dzięki zrozumieniu procesu kalibracji wartości „stop" możesz zapewnić precyzyjne sterowanie w swoich własnych projektach robotyki i automatyki.
Rozdziały filmu
- [00:05] Wprowadzenie do serwa o ciągłym obrocie
- [02:02] Przegląd sprzętu serwa
- [02:40] Schemat połączeń i podłączenia
- [05:07] Wyjaśnienie kodu: zmienne i konfiguracja
- [08:03] Wyjaśnienie kodu: logika pętli głównej
- [09:56] Funkcja servoCommand()
- [10:54] Prezentacja na żywo i wyjście Serial Monitor
- [12:23] Kalibracja prędkości serwa i wartości 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(")");
}
Rzeczy, których możesz potrzebować
-
Amazon360 Degree Servo motor on Amazonlink.amazon
-
Allegro360 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
Zasoby i odniesienia
-
Wewnętrzny
Pliki📁
Inne pliki
-
Dane techniczne silnika SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB