Search Code

Како да се користи континуиран 360° серво со Arduino

Како да се користи континуиран 360° серво со Arduino

Во ова упатство, ќе научиме како да контролираме континуиран 360° серво користејќи Arduino. За разлика од стандардните сервоси, континуираните сервоси можат да ротираат неограничено во било кој правец, што овозможува разноврсни апликации. Сепак, контролирането на нивната позиција бара разбирање на командите испратени до нив и малку експериментирање за да се најдат правилните вредности за запирање.

Ќе развиваме програма која ни овозможува да испраќаме команди преку Серискиот Монитор за да го ротираме сервото лево, десно или да го запреме. Кодот ќе вклучува потребната логика за интерпретација на ASCII вредностите на командите што ги внесуваме. За појаснување на процесот на кодирање, бидете сигурни да го проверите видеото на (во видеото на 12:30).

Објаснување на хардверот

За да се реализира овој проект, ќе ви биде потребен континуиран 360° серво, Arduino плоча и напојување способно да обезбеди доволно струја (најмалку 500mA). Серво-то прима контролни сигнали од Arduino, кој користи модулација на ширината на пулсот (PWM) за да одреди насоката и брзината на ротација.

Сервомоторот сам по себе има три жици: напојување, земја и контрола. Жицата за напојување се поврзува со напојувањето, жицата за земја се поврзува и со напојувањето и со земјата на Ардуино, а жицата за контрола се поврзува со одреден пин на Ардуино за пренос на сигнал.

Технички лист детали

ПроизводителОпштo
Број на деловиКонтинуирана 360° Серво
Логика/IO напон5 V
Напон на напојување4.8-6 V
Излезна струја (по канал)500 мА
Пиков тековен (по канал)1 А макс
Упатство за PWM фреквенција50 Hz
Влезни логички праговиВисоко: >2.5 V, Ниско: <0.8 V
Напонска пад / RDS(on)/ заситеност-
Термални ограничувања-
ПакетСтандардно куќиште за сервомотор
Забелешки / варијантиДостапно во различни големини
  • Осигурајте заедничка основа помеѓу Arduino и напојувањето.
  • Користете надворешен напојувач за сервото за да избегнете преоптоварување на Ардуиното.
  • Експериментирајте со вредности за запирање за да најдете најдобра перформанса за вашиот серво.
  • Следете ја температурата на серво механизмот за време на работа за да се спречи прегревање.
  • Користете PWM сигнал за контрола на брзината и насоката на серво.

Инструкции за поврзување

За да го поврзете вашиот континуиран 360° серво на Arduino, започнете со поврзување на жицата за напојување на серво на надворешен напојувач кој обезбедува 5V. Жицата за земја на серво треба да биде поврзана на пинот за земја (GND) на Arduino, осигурувајќи дека напојувачот и Arduino споделуваат заедничка земја. Контролната жица на серво ќе оди на пин 9 на Arduino, каде што ќе биде испратен PWM сигналот.

Двојно проверете дали вашите врски се безбедни, бидејќи лабавите врски можат да доведат до непредвидливо однесување на серво. Ако вашето серво е од типот што може да се напојува директно од Arduino, можете да ја поврзете напојувачката жица на 5V пинот на Arduino, но осигурајте се дека вкупниот тек не ја надминува количината што Arduino може да ја обезбеди.

Примери на код и водич

Следниот извлек покажува како да се постави серво и да се читаат команди од Серискиот Монитор:

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

Во овој коден фрагмент, вклучуваме библиотека Servo и создававме објект на серво нареченmyservo. Ние исто така ја поставивме серијската комуникација на 9600 бодови и го приклучивме сервото на пин 9.

Следно, имаме главна петља каде што читаме влезни серијски податоци и управуваме со сервото врз основа на командите:

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

Овој код проверува дали има достапни податоци во серијалниот буфер. Во зависност од ASCII вредноста на влезот (на пр.,108за 'L' да се ротира во насока на стрелките.114за 'R' да се ротира во спротивна насока), испраќа соодветна команда до серво.

За комплетен код и дополнителни детали, ве молиме да се обратите на целосната програма вградена под членот.

Демонстрација / Што да очекувате

Кога ќе го поставите кодот и ќе го отворите Серискиот Монитор, можете да внесете 'L' за да го ротирате серво-то налево, 'R' за да го ротирате надесно, или други вредности за да експериментирате со запирањето на серво-то. Очекувајте да најдете различни вредности за запирање, бидејќи однесувањето на серво-то може да варира во зависност од неговиот квалитет и дизајн (во видеото на 18:45).

Бидете внимателни како серво-то реагира на командите; ако не запре како што се очекува, пробајте различни вредности додека не ја најдете оптималната команда за запирање. Ова може да бара некои експерименти, особено за да се избегне прегревање на серво-то.

Глави

  • Вовед (0:00)
  • Објаснување на хардвер (1:30)
  • Инструкции за поврзување (3:45)
  • Кодна шетња (5:15)
  • Демонстрација (18:00)

Ресурси

  • Документација за библиотеката на Arduino Servo
  • Континуирани сервомотори производителски податоци
115-How to use continuous 360° servo with Arduino
Language: 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); 
                }
                  
                 
        }

  
}

Resources & references

No resources yet.

Files📁

No files available.