Szukaj kodu

Jak używać ciągłego serwa 360° z Arduino

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

ProducentGeneryczny
Numer częściSerwo o ciągłym obrocie 360°
Napięcie logiki/IO5 V
Napięcie zasilania4,8–6 V
Prąd wyjściowy (na kanał)500 mA
Prąd szczytowy (na kanał)1 A maks.
Zalecana częstotliwość PWM50 Hz
Progi logiczne wejściaWysoki: >2,5 V, Niski: <0,8 V
Spadek napięcia / RDS(on) / nasycenie
Limity termiczne
ObudowaStandardowa obudowa serwa
Uwagi / wariantyDostę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
115-Arduino code to control continuous 360° servo from serial monitor command
Język: C++
/* 
 *  
 *  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.