Search Code

Lekcija 89: Korištenje kontinuiranog ili 360 servo motora | Arduino kurs korak po korak

Lekcija 89: Korištenje kontinuiranog ili 360 servo motora | Arduino kurs korak po korak

Da li ste ikada željeli okretati motor u bilo kojem smjeru koliko god želite, umjesto samo pomicanja naprijed-nazad kao kod standardnog serva? Upravo to nudi kontinuirani ili 360-stepeni servo motor. Za razliku od standardnog serva koji se pomjera na određeni ugao (obično 0 do 180 stepeni), kontinuirani servo rotira beskonačno u smjeru kazaljke na satu ili suprotno od kazaljke na satu. To ga čini savršenim za izradu malih robota, platformi za kamere ili bilo kojeg projekta koji zahtijeva kontinuiranu kontrolu rotacije.

U ovom projektu ćemo izgraditi upravljački sistem za 360-stepeni servo koristeći samo tri tipke. Moći ćete narediti servu da rotira u smjeru kazaljke na satu, suprotno od kazaljke na satu ili da se zaustavi u bilo kojem trenutku. Ovaj vodič će vas provesti kroz povezivanje, objasniti korisnički podesive dijelove koda i pokazati vam demonstraciju sistema uživo.

Evo nekoliko praktičnih ideja za korištenje kontinuiranog serva u vašim projektima:

  • Napravite malog dvotočkaša robota: Koristite dva kontinuirana serva za pogon kotača, omogućavajući kretanje naprijed, nazad i okretanje.
  • Napravite pan-tilt nosač kamere: Koristite jedan kontinuirani servo za sporo, beskonačno okretanje sigurnosne ili kamere za divlje životinje.
  • Automatizirajte transportnu traku: Upravljajte malim transportnim sistemom za sortiranje ili izdavanje predmeta.
  • Dizajnirajte rotirajući stalak za izlaganje: Prikažite 3D model ili proizvod na platformi koja se kontinuirano okreće.

Potreban hardver

  • Arduino ploča (Uno, Nano, itd.)
  • Kontinuirani (360-stepeni) servo motor (npr. FS90R, DS04-NFC)
  • 3x tipke
  • Konektorski kablovi
  • Breadboard

Vodič za povezivanje

Povezivanje za ovaj projekt je jednostavno. Servo motor ima tri žice: obično tamnu za uzemljenje (GND), srednju (često crvenu) za napajanje (5V) i svjetliju (narandžastu, žutu ili bijelu) za signal. Kao što je prikazano u videu, servo je povezan na Arduino na sljedeći način:

  • Servo uzemljenje (tamna žica): Spojite na Arduino GND.
  • Servo napajanje (srednja/crvena žica): Spojite na Arduino 5V.
  • Servo signal (svijetla žica): Spojite na Arduino pin 9.

Za tri tipke, svaka tipka ima dvije strane. Jedna strana svih tipki je spojena zajedno i zatim na Arduino GND. Druga strana svake tipke je spojena na zaseban digitalni pin, kao što je opisano ispod (u videu na 03:40):

  • Tipka za smjer kazaljke na satu (CW): Spojite na Arduino pin 2.
  • Tipka za zaustavljanje: Spojite na Arduino pin 3.
  • Tipka za suprotno od kazaljke na satu (CCW): Spojite na Arduino pin 4.
360_Serrvo_3_push_button_wiring

Objašnjenje koda

Kod je dizajniran da bude lako podesiv. Najvažniji dio koji ćete morati prilagoditi je sc[] niz, koji sadrži specifične PWM vrijednosti poslane servu za kontrolu njegovih radnji. Ove vrijednosti nisu univerzalne i moraju se kalibrirati za vaš specifični servo motor (u videu na 12:23).

int sc[]={106, 58, 0};// servo komande su redom
        //CCW, STOP,CW

Ovaj niz je srce kalibracije. Vrijednosti se koriste ovim redoslijedom:

  • sc[0] = 106: Ova vrijednost se šalje da servo rotira suprotno od kazaljke na satu.
  • sc[1] = 58: Ovo je vrijednost za "zaustavljanje". Zbog unutrašnjeg kola, tačna vrijednost koja zaustavlja motor varira. Možda ćete primijetiti da se vaš servo polako okreće čak i kada se ova komanda pošalje, pa ćete morati malo prilagoditi ovaj broj da pronađete pravu vrijednost "potpunog zaustavljanja" za vaš motor.
  • sc[2] = 0: Ova vrijednost čini da servo rotira u smjeru kazaljke na satu maksimalnom brzinom.

Možete prilagoditi vrijednosti u sc[] nizu da promijenite brzinu rotacije. Na primjer, postavljanje sc[0] na 70 učinit će rotaciju suprotno od kazaljke na satu sporijom. Što je vrijednost bliža vrijednosti "zaustavljanja" (58), motor će se sporije okretati u tom smjeru. Vrijednosti dalje od 58 će povećati brzinu do maksimalnog ograničenja.

Postoji i nekoliko drugih ključnih varijabli koje možda trebate modificirati. servoPin je postavljen na 9, što mora biti pin s PWM podrškom na vašem Arduinu. Pinovi tipki su definirani na vrhu koda i mogu se promijeniti ako je potrebno.

int servoPin = 9;// ovaj pin mora biti jedan od onih sa PWM ~

#define STOPpin 3 // pin tipke za STOP
#define CWpin 2 //  tipka za CW
#define CCWpin 4 // tipka za CCW

Konačno, scText[] niz sadrži stringove koji se ispisuju na Serial Monitor za debugging. Možete ih promijeniti ako želite prikazati druge poruke.

Kako koristiti kod

Prenesite priloženi kod na vašu Arduino ploču. Otvorite Serial Monitor (postavljen na 9600 baud) da vidite statusne poruke. Sada možete upravljati servom koristeći tri tipke:

  • Pritisnite i držite CW tipku: Servo će početi rotirati u smjeru kazaljke na satu. Serial Monitor će prikazati "CW" i vrijednost koja se šalje.
  • Pritisnite i držite CCW tipku: Servo će početi rotirati suprotno od kazaljke na satu. Serial Monitor će prikazati "CCW" i vrijednost koja se šalje.
  • Pritisnite Stop tipku: Servo će pokušati da se zaustavi. Serial Monitor će prikazati "Stop".

Ako se vaš servo ne zaustavi potpuno kada pritisnete tipku Stop, morat ćete kalibrirati vrijednost sc[1] u nizu sc[]. Pokušajte malo promijeniti vrijednost (npr. sa 58 na 54 ili 52) i ponovno učitajte kod sve dok motor ne ostane savršeno miran.

Živa demonstracija

U videu, prezenter demonstrira kompletan sistem. Možete vidjeti servo kako se rotira u oba smjera na osnovu pritisaka tipki. Također je prikazan izlaz Serial Monitora, koji prikazuje trenutno stanje ("CW", "Stop" ili "CCW") i specifičnu vrijednost koja se šalje servu. Ovo je odličan alat za otklanjanje grešaka i pronalaženje savršenih kalibracijskih vrijednosti za vaš specifični motor. Demonstracija također pokazuje kako podešavanje vrijednosti u nizu sc[] direktno utiče na brzinu motora, od sporog puzanja do maksimalne brzine rotacije.

Zaključak

Ovaj projekat pruža jednostavan i efikasan način za upravljanje kontinuiranim servo motorom. Razumijevanjem procesa kalibracije za "stop" vrijednost, možete osigurati preciznu kontrolu u vašim vlastitim robotičkim i automatizacijskim projektima.

Video poglavlja

  • [00:05] Uvod u kontinuirani servo motor
  • [02:02] Pregled hardvera serva
  • [02:40] Dijagram ožičenja i veze
  • [05:07] Objašnjenje koda: Varijable i postavke
  • [08:03] Objašnjenje koda: Logika glavne petlje
  • [09:56] Funkcija servoCommand()
  • [10:54] Živa demonstracija i izlaz Serial Monitora
  • [12:23] Kalibracija brzine serva i stop vrijednosti

Images

360_Serrvo_3_push_button_wiring
360_Serrvo_3_push_button_wiring
209-How to control a 360 servo with push buttons
Language: C++
++
/*
 *  S05-13 Servo with 3 push buttons
 *  Demonstration of Controlling a Continuous Servo (360 servo)
 *  This code allows you to control a 360-degree servo using push buttons
 *
 * Modified by Ahmad Shamshiri for Robojax Robojax.com
 * on Jan 17, 2019 at 22:42 in Ajax, Ontario, Canada
 Watch the video instruction for this sketch: https://youtu.be/hVe4TSRV4ww

 Watch Introduction to  360 Servo video with code: https://youtu.be/b_xvu6wWafA
 You can get the wiring diagram from my Arduino Course at Udemy.com
 Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place
 visit my course now http://robojax.com/L/?id=62

 If you found this tutorial helpful, please support me so I can continue creating
 content like this. 
 or make a donation using PayPal http://robojax.com/L/?id=64

 Original code by BARRAGAN <http://barraganstudio.com>
 *
 * Code is available at http://robojax.com/learn/arduino

 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int servoPin = 9;// this pin must be one of those with PWM ~


#define STOPpin 3 // push button pin  for STOP
#define CWpin 2 //  push button for CW
#define CCWpin 4 // push button for CCW

int sc[]={106, 58, 0};// servo commands are in order
        //CCW, STOP,CW

String scText[]={"CCW","Stop","CW"};// define texts for 3 actions
int statusText;
int CWBS, CCWBS, SBS;
      //CW button status (CWBS)
      //CCW button status (CCWBS)
      //stop button status (SBS)

void setup() {
  Serial.begin(9600);
  pinMode(STOPpin,INPUT_PULLUP);// set pin for push button STOP
  pinMode(CCWpin,INPUT_PULLUP);// set pin for push button CCW
  pinMode(CWpin,INPUT_PULLUP);// set pin for push button CW

  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object
  myservo.write(sc[1]);// send STOP command
  statusText=1;// initial value is STOP
}



void loop() {

    CCWBS = digitalRead(CCWpin);// read status of button CCW
    SBS = digitalRead(STOPpin);// read status of button STOP
    CWBS = digitalRead(CWpin);// read status of button CW

    if(CCWBS ==LOW)
    {
      servoCommand(0);
    }else if(SBS ==LOW)
    {
      servoCommand(1);
    }else if(CWBS ==LOW)
    {
      servoCommand(2);
    }

  Serial.println(scText[statusText]);
  delay(50);
}// loop



void servoCommand(int n)
{
   statusText = n;
   myservo.write(sc[n]);
   Serial.print("Going to  ");
   Serial.print(scText[n]);
   Serial.print( "(");
   Serial.print(sc[n]);
   Serial.println(")");
}

Things you might need

Resources & references

Files📁

Other files