Search Code

Hoe om 'n Kontinu 360° Servo met Arduino te gebruik

Hoe om 'n Kontinu 360° Servo met Arduino te gebruik

In hierdie tutorial sal ons leer hoe om 'n deurlopende 360° servo te beheer met 'n Arduino. Anders as standaard servos, kan deurlopende servos onbeperkt in enige rigting draai, wat veelsydige toepassings moontlik maak. Om egter hul posisie te beheer, vereis dit om die opdragte wat aan hulle gestuur word te verstaan en 'n bietjie eksperimenteer om die regte stopwaardes te vind.

Ons sal 'n program ontwikkel wat ons in staat stel om opdragte via die Serial Monitor te stuur om die servo links, regs of te stop. Die kode sal die nodige logika insluit om die ASCII-waardes van die opdragte wat ons invoer, te interpreteer. Vir verduideliking oor die kodering proses, maak seker om die video te kyk (in video om 12:30).

Hardeware verduidelik

Om hierdie projek te implementeer, sal jy 'n deurlopende 360° servo, 'n Arduino-bord en 'n kragbron nodig hê wat voldoende stroom kan verskaf (ten minste 500mA). Die servo ontvang beheersignale van die Arduino, wat pulsbreedtemodulasie (PWM) gebruik om die rigting en spoed van rotasie te bepaal.

Die servo-motor self het drie drade: krag, grond en beheer. Die kragdraad verbind met die kragbron, die gronddraad verbind met beide die kragbron en die Arduino-grond, en die beheerdraad verbind met 'n aangewese pen op die Arduino vir seintransmissie.

Datasheet Besonderhede

FabrikantGeneries
Onderdeel nommerDeurlopende 360° Servo
Logika/IO spanning5 V
Voorsienings spanning4.8-6 V
Uitsetstroom (per kanaal)500 mA
Piekstroom (per kanaal)1 'n maksimum
PWM frekwensie riglyne50 Hz
Invoer logika drempelsHoog: >2.5 V, Laag: <0.8 V
Spanningstoename / RDS(on)/ versadiging-
Termiese perke-
PakketStandaard servo behuising
Notas / varianteBeskikbaar in verskeie groottes
  • Verseker 'n gemeenskaplike grond tussen die Arduino en die kragbron.
  • Gebruik 'n eksterne kragbron vir die servo om oorlaai van die Arduino te vermy.
  • Eksperimenteer met stopwaardes om die beste prestasie vir jou servo te vind.
  • Monitor die servo-temperatuur tydens werking om oorverhitting te voorkom.
  • Gebruik 'n PWM sein om die spoed en rigting van die servo te beheer.

Draadinstruksies

Om jou deurlopende 360° servo aan die Arduino te koppel, begin deur die servo se kragdraad aan 'n eksterne kragbron te verbind wat 5V verskaf. Die gronddraad van die servo moet aan die grond (GND) pen op die Arduino gekoppel word, wat verseker dat die kragbron en Arduino 'n gemeenskaplike grond deel. Die beheerdraad van die servo sal na pen 9 op die Arduino gaan, waar die PWM sein gestuur sal word.

Dubbelcheck dat jou verbindings veilig is, aangesien los verbindings kan lei tot onreëlmatige servo gedrag. As jou servo van 'n tipe is wat direk van die Arduino van krag voorsien kan word, kan jy die kragdraad aan die Arduino se 5V pen koppel, maar verseker dat die totale stroom nie oorskry wat die Arduino kan voorsien nie.

Kode Voorbeelde & Staproete

Die volgende uittreksel demonstreer hoe om die servo op te stel en opdragte van die Serial Monitor te lees:

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

In hierdie kode-snippet sluit ons die Servo-biblioteek in en skep 'n servo-objek genaamdmyservoOns het ook die seriële kommunikasie op 9600 baud opgestel en die servo aan pen 9 geheg.

Volgende het ons die hooflus waar ons inkomende seriële data lees en die servo beheer op grond van die opdragte:

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

Hierdie kode kyk of daar enige data beskikbaar is in die seriële buffer. Afhangende van die ASCII-waarde van die invoer (bv.,108om 'L' met die klok te draai,114vir 'R' om teen die klok in te draai), stuur dit die ooreenstemmende opdrag na die servo.

Vir volledige kode en addisionele besonderhede, verwys asseblief na die volledige program wat hieronder die artikel gelaai is.

Demonstraasie / Wat om te verwag

Wanneer jy die kode op laai en die Serial Monitor oopmaak, kan jy 'L' invoer om die servo links te draai, 'R' om dit regs te draai, of ander waardes om te eksperimenteer met die stop van die servo. Verwacht om verskillende stopwaardes te vind, aangesien die servo se gedrag kan wissel op grond van sy kwaliteit en ontwerp (in die video om 18:45).

Wees versigtig oor hoe die servo op die opdragte reageer; as dit nie stop soos verwag nie, probeer verskillende waardes totdat jy die optimale stopopdrag vind. Dit mag 'n bietjie eksperimenteer vereis, veral om te verhoed dat die servo oorverhit.

Hoofstukke

  • Inleiding (0:00)
  • Hardeware verduidelik (1:30)
  • Draadinstruksies (3:45)
  • Kode Deurloop (5:15)
  • Demonstraasie (18:00)

Hulpbronne

  • Arduino Servo Biblioteek Dokumentasie
  • Deurlopende Servo vervaardiger datasheets
115-How to use continuous 360° servo with Arduino
Taal: 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. 
 *  
 * 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); 
                }
                  
                 
        }

  
}

Hulpbronne en verwysings

Geen hulpbronne nog.

Lêers📁

Geen lêers beskikbaar.