Ten poradnik jest częścią: Silniki serwo
Wszystkie powiązane filmy dotyczące serwomotorów znajdują się tutaj. Linki do innych filmów znajdują się poniżej tego artykułu.
Jak używać ciągłego serwa 360° z Arduino
W tym samouczku nauczymy się, jak sterować serwem o ciągłym obrocie 360° za pomocą Arduino. W przeciwieństwie do standardowych serw, serwa o ciągłym obrocie mogą obracać się w nieskończoność w dowolnym kierunku, co pozwala na wszechstronne zastosowania. Jednak kontrolowanie ich pozycji wymaga zrozumienia komend do nich wysyłanych oraz odrobiny eksperymentowania, aby znaleźć odpowiednie wartości zatrzymania.
Będziemy opracowywać program, który pozwoli nam wysyłać komendy przez Monitor Portu Szeregowego, aby obracać serwo w lewo, w prawo lub je zatrzymać. Kod będzie zawierał niezbędną logikę do interpretacji wartości ASCII wprowadzanych komend. Aby wyjaśnić proces kodowania, koniecznie sprawdź wideo (w filmie o 12:30).
Wyjaśnienie Sprzętu
Aby zrealizować ten projekt, będziesz potrzebować serwa o ciągłym obrocie 360°, płytki Arduino oraz zasilacza zdolnego do dostarczenia wystarczającego prądu (co najmniej 500 mA). Serwo otrzymuje sygnały sterujące z Arduino, które wykorzystuje modulację szerokości impulsu (PWM) do określania kierunku i prędkości obrotu.
Sam silnik serwa ma trzy przewody: zasilanie, masę i sterowanie. Przewód zasilający łączy się z zasilaczem, przewód masy łączy się zarówno z zasilaczem, jak i masą Arduino, a przewód sterujący łączy się z wyznaczonym pinem na Arduino w celu transmisji sygnału.
Szczegóły z Karty Katalogowej
| Producent | Generyczny |
|---|---|
| Numer części | Serwo o ciągłym obrocie 360° |
| Napięcie logiki/IO | 5 V |
| Napięcie zasilania | 4,8–6 V |
| Prąd wyjściowy (na kanał) | 500 mA |
| Prąd szczytowy (na kanał) | 1 A maks. |
| Zalecana częstotliwość PWM | 50 Hz |
| Progi logiczne wejścia | Wysoki: >2,5 V, Niski: <0,8 V |
| Spadek napięcia / RDS(on) / nasycenie | — |
| Limity termiczne | — |
| Obudowa | Standardowa obudowa serwa |
| Uwagi / warianty | Dostępne w różnych rozmiarach |
- Zapewnij wspólną masę między Arduino a zasilaczem.
- Użyj zewnętrznego zasilacza dla serwa, aby uniknąć przeciążenia Arduino.
- Eksperymentuj z wartościami zatrzymania, aby znaleźć najlepszą wydajność dla swojego serwa.
- Monitoruj temperaturę serwa podczas pracy, aby zapobiec przegrzaniu.
- Użyj sygnału PWM do kontrolowania prędkości i kierunku obrotu serwa.
Instrukcje Podłączania
Aby podłączyć serwo o ciągłym obrocie 360° do Arduino, zacznij od podłączenia przewodu zasilającego serwa do zewnętrznego zasilacza dostarczającego 5 V. Przewód masy serwa należy podłączyć do pinu masy (GND) na Arduino, zapewniając wspólną masę między zasilaczem a Arduino. Przewód sterujący serwa trafi do pinu 9 na Arduino, skąd będzie wysyłany sygnał PWM.
Sprawdź dokładnie, czy połączenia są pewne, ponieważ luźne połączenia mogą prowadzić do nieregularnego zachowania serwa. Jeśli Twoje serwo jest typu, który można zasilać bezpośrednio z Arduino, możesz podłączyć przewód zasilający do pinu 5 V na Arduino, ale upewnij się, że całkowity prąd nie przekracza tego, co Arduino może dostarczyć.
Przykłady Kodu i Omówienie
Poniższy fragment demonstruje, jak skonfigurować serwo i odczytywać komendy z Monitora Portu Szeregowego:
#include
Servo myservo; // utwórz obiekt serwa do sterowania serwem
int incomingByte = 0; // dla przychodzących danych szeregowych
void setup() {
Serial.begin(9600);
myservo.attach(9); // podłącz serwo na pinie 9 do obiektu serwa
}
W tym fragmencie kodu dołączamy bibliotekę Servo i tworzymy obiekt serwa o nazwie myservo. Ustawiamy również komunikację szeregową z prędkością 9600 bodów i podłączamy serwo do pinu 9.
Następnie mamy główną pętlę, w której odczytujemy przychodzące dane szeregowe i sterujemy serwem na podstawie komend:
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == 108) { // komenda 'L'
myservo.write(0); // obrót zgodnie z ruchem wskazówek zegara
} else if (incomingByte == 114) { // komenda 'R'
myservo.write(180); // obrót przeciwnie do ruchu wskazówek zegara
} else if (incomingByte == 60) { // komenda zatrzymania
myservo.write(60); // zatrzymaj serwo
}
}
}
Ten kod sprawdza, czy w buforze szeregowym są dostępne dane. W zależności od wartości ASCII wprowadzonego znaku (np. 108 dla 'L' oznaczającego obrót zgodnie z ruchem wskazówek zegara, 114 dla 'R' oznaczającego obrót przeciwnie do ruchu wskazówek zegara), wysyła odpowiednią komendę do serwa.
Pełny kod i dodatkowe szczegóły znajdziesz w kompletnym programie zamieszczonym poniżej artykułu.
Demonstracja / Czego Się Spodziewać
Po wgraniu kodu i otwarciu Monitora Portu Szeregowego możesz wpisać 'L', aby obracać serwo w lewo, 'R', aby obracać je w prawo, lub inne wartości, aby eksperymentować z zatrzymywaniem serwa. Spodziewaj się znalezienia różnych wartości zatrzymania, ponieważ zachowanie serwa może się różnić w zależności od jego jakości i konstrukcji (w filmie o 18:45).
Bądź ostrożny z reakcją serwa na komendy; jeśli nie zatrzymuje się zgodnie z oczekiwaniami, spróbuj różnych wartości, aż znajdziesz optymalną komendę zatrzymania. Może to wymagać pewnych eksperymentów, zwłaszcza aby uniknąć przegrzania serwa.
Rozdziały
- Wprowadzenie (0:00)
- Wyjaśnienie Sprzętu (1:30)
- Instrukcje Podłączania (3:45)
- Omówienie Kodu (5:15)
- Demonstracja (18:00)
Zasoby
- Dokumentacja Biblioteki Servo Arduino
- Karty katalogowe producentów serw o ciągłym obrocie
Ten poradnik jest częścią: Silniki serwo
- Sterowanie serwomechanizmem za pomocą przycisków przy użyciu 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)
- Sterowanie serwomechanizmem za pomocą potencjometru z użyciem Arduino
- Sterowanie serwomechanizmem za pomocą potencjometru i wyświetlacza LCD1602 przy użyciu Arduino
- Sterowanie serwomotorami za pomocą pilota na podczerwień z Arduino
- Kontrola serwomotoru Arduino za pomocą potencjometru
- Kontrolowanie pozycji serwomechanizmu za pomocą gestów ręcznych dla Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Kod Arduino i wideo dla kontrolera serw PCA9685 16-kanałowego 12-bitowego V1
- Zbuduj przełącznik serwomechanizmu Arduino z przyciskiem
/*
*
* 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);
}
}
}
Zasoby i odniesienia
Brak zasobów.
Pliki📁
Brak dostępnych plików.