Pretraži kod

Kako koristiti kontinuirani 360° servo s Arduinom

Kako koristiti kontinuirani 360° servo s Arduinom

U ovom tutorijalu, naučićemo kako kontrolisati kontinuirani 360° servo koristeći Arduino. Za razliku od standardnih serva, kontinuirani servosi mogu se rotirati neograničeno u bilo kojem pravcu, što omogućava svestrane primene. Međutim, kontrolisanje njihove pozicije zahteva razumevanje komandi koje im se šalju i malo eksperimentisanja kako bi se pronašle prave vrednosti za zaustavljanje.

Razvijat ćemo program koji nam omogućava slanje komandi putem Serijskog monitora za okretanje serva lijevo, desno ili zaustavljanje. Kod će uključivati potrebnu logiku za tumačenje ASCII vrijednosti komandi koje unosimo. Za pojašnjenje procesa kodiranja, obavezno pogledajte video (u videu u 12:30).

Objašnjeni hardver

Za implementaciju ovog projekta biće vam potreban kontinuirani 360° servo, Arduino ploča i napajanje koje može obezbijediti dovoljnu struju (najmanje 500mA). Servo prima kontrolne signale od Arduina, koji koristi modulaciju širine impulsa (PWM) da odredi pravac i brzinu rotacije.

Servo motor ima tri žice: napajanje, uzemljenje i kontrola. Žica za napajanje se povezuje sa napajanjem, žica za uzemljenje se povezuje i sa napajanjem i sa uzemljenjem Arduina, a žica za kontrolu se povezuje na određeni pin na Arduinu za prenos signala.

Tehnički podaci

ProizvođačGenerički
Broj dijelaKontinuirani 360° Servo
Logika/IO napon5 V
Napon napajanja4.8-6 V
Izlazna struja (po kanalu)500 mA
Vrhunski trenutni (po kanalu)1 A max
Upute za PWM frekvenciju50 Hz
Ulazne logičke graniceVisoko: >2.5 V, Nisko: <0.8 V
Napon / RDS(on)/ zasićenje-
Termalne granice-
PakovanjeStandardno kućište servomotora
Napomene / varijanteDostupno u raznim veličinama
  • Osigurajte zajedničku masu između Arduina i napajanja.
  • Koristite vanjski izvor napajanja za servo kako biste izbjegli preopterećenje Arduina.
  • Eksperimentirajte s vrijednostima zaustavljanja kako biste pronašli najbolju izvedbu za vaš servo.
  • Pratite temperaturu serva tokom rada kako biste sprečili pregrevanje.
  • Koristite PWM signal za kontrolu brzine i pravca servomotora.

Uputstva za povezivanje

Da biste povezali svoj kontinuirani 360° servo sa Arduinom, počnite povezivanjem naponskog kabla serva na vanjski izvor napajanja koji pruža 5V. Zemaljski kabel serva treba biti povezan na zemaljsku (GND) pin na Arduinu, osiguravajući da izvor napajanja i Arduino dijele zajedničku zemlju. Kontrolni kabel serva ide na pin 9 na Arduinu, što je mjesto s kojeg će biti poslan PWM signal.

Dvostruko provjerite da su vaše veze sigurne, jer labave veze mogu dovesti do nepredvidivog ponašanja servomotora. Ako je vaš servomotor tip koji se može napajati direktno iz Arduina, možete povezati naponski vod do 5V pina na Arduinu, ali osigurajte da ukupna struja ne prelazi ono što Arduino može isporučiti.

Primjeri koda i vodič

Sljedeći izvod pokazuje kako postaviti servo i čitati komande iz Serijskog 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
}

U ovom kodu uključujemo Servo biblioteku i kreiramo servo objekat nazvanmyservoTakođer smo postavili serijsku komunikaciju na 9600 baud i priključili servo na pin 9.

Sljedeće, imamo glavnu petlju gdje čitamo dolazne serijske podatke i kontroliramo servo na osnovu komandi:

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
    }
  }
}

Ovaj kod provjerava da li postoji bilo kakav podatak dostupan u serijskom baferu. Ovisno o ASCII vrijednosti ulaza (npr.,108za 'L' da se rotira u smjeru kazaljke na satu,114za 'R' da se rotira u suprotnom smeru), šalje odgovarajuću komandu servou.

Za potpuni kod i dodatne detalje, molimo vas da se obratite punom programu učitanom ispod članka.

Demonstracija / Šta očekivati

Kada otpremite kod i otvorite Serijski Monitor, možete unijeti 'L' za okretanje serva lijevo, 'R' za okretanje desno, ili druge vrijednosti za eksperimentisanje sa zaustavljanjem serva. Očekujte da pronađete razne vrijednosti zaustavljanja, jer se ponašanje serva može razlikovati u zavisnosti od njegove kvalitete i dizajna (u videu u 18:45).

Budite oprezni kako servo reaguje na komande; ako se ne zaustavi kako se očekuje, isprobajte različite vrednosti dok ne pronađete optimalnu komandu za zaustavljanje. Ovo može zahtevati malo eksperimentisanja, posebno da biste izbegli pregrevanje serva.

Poglavlja

  • Uvod (0:00)
  • Objašnjenje hardvera (1:30)
  • Uputstva za povezivanje (3:45)
  • Kodna šetnja (5:15)
  • Demonstracija (18:00)

Resursi

  • Dokumentacija Arduino Servo biblioteke
  • Tehnički listovi proizvođača kontinuiranih servoa
115-Arduino code to control continuous 360° servo from serial monitor command
Jezik: 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); 
                }
                  
                 
        }

  
}

Resursi i reference

Još nema resursa.

Datoteke📁

Nema dostupnih datoteka.