Search Code

Lekcia 89: Použitie kontinuálneho alebo 360° servomotora | Kurz Arduino krok za krokom

Lekcia 89: Použitie kontinuálneho alebo 360° servomotora | Kurz Arduino krok za krokom

Už ste niekedy chceli roztočiť motor v oboch smeroch tak dlho, ako chcete, namiesto toho, aby sa len kýval tam a späť ako štandardný servo motor? To je presne to, čo ponúka kontinuálny alebo 360-stupňový servo motor. Na rozdiel od štandardného serva, ktoré sa pohybuje do určitého uhla (zvyčajne 0 až 180 stupňov), kontinuálne servo sa otáča donekonečna v smere alebo proti smeru hodinových ručičiek. Vďaka tomu je ideálne na stavbu malých robotov, kamerových platforiem alebo akéhokoľvek projektu vyžadujúceho kontinuálne riadenie otáčania.

V tomto projekte postavíme riadiaci systém pre 360-stupňové servo pomocou iba troch tlačidiel. Budete môcť prikázať servu, aby sa otáčalo v smere hodinových ručičiek, proti smeru hodinových ručičiek alebo sa kedykoľvek zastavilo. Táto príručka vás prevedie zapojením, vysvetlí používateľsky konfigurovateľné časti kódu a ukáže vám živú demonštráciu systému v akcii.

Tu je niekoľko praktických nápadov na použitie kontinuálneho serva vo vašich vlastných projektoch:

  • Postavte malého dvojkolesového robota: Použite dve kontinuálne servá na pohon kolies, čo umožní pohyb vpred, vzad a otáčanie.
  • Vytvorte naklápaciu a otočnú kamerovú hlavicu: Použite jedno kontinuálne servo na pomalé, nekonečné natáčanie bezpečnostnej alebo prírodnej kamery.
  • Automatizujte dopravný pás: Ovládajte malý dopravníkový systém na triedenie alebo vydávanie predmetov.
  • Navrhnite otočný výstavný stojan: Vystavte 3D model alebo produkt na platforme, ktorá sa nepretržite otáča.

Potrebný hardvér

  • Doska Arduino (Uno, Nano atď.)
  • Kontinuálny (360-stupňový) servo motor (napr. FS90R, DS04-NFC)
  • 3x tlačidlá
  • Prepojovacie vodiče
  • Nepájivé pole

Sprievodca zapojením

Zapojenie tohto projektu je jednoduché. Servo motor má tri vodiče: zvyčajne tmavý pre zem (GND), stredný (často červený) pre napájanie (5V) a svetlejší (oranžový, žltý alebo biely) pre signál. Ako je znázornené vo videu, servo je zapojené k Arduinu nasledovne:

  • Uzemenie serva (tmavý vodič): Pripojte k GND na Arduine.
  • Napájanie serva (stredný/červený vodič): Pripojte k 5V na Arduine.
  • Signál serva (svetlý vodič): Pripojte k pinu 9 na Arduine.

Pre tri tlačidlá platí, že každé tlačidlo má dve strany. Jedna strana všetkých tlačidiel je spojená dohromady a potom pripojená k GND na Arduine. Druhá strana každého tlačidla je pripojená k samostatnému digitálnemu pinu, ako je opísané nižšie (vo videu o 03:40):

  • Tlačidlo v smere hodinových ručičiek (CW): Pripojte k pinu 2 na Arduine.
  • Tlačidlo STOP: Pripojte k pinu 3 na Arduine.
  • Tlačidlo proti smeru hodinových ručičiek (CCW): Pripojte k pinu 4 na Arduine.
360_Serrvo_3_push_button_wiring

Vysvetlenie kódu

Kód je navrhnutý tak, aby bol ľahko konfigurovateľný. Najdôležitejšia časť, ktorú budete musieť upraviť, je pole sc[], ktoré obsahuje konkrétne hodnoty PWM odosielané servu na riadenie jeho činností. Tieto hodnoty nie sú univerzálne a musia byť kalibrované pre váš konkrétny servo motor (vo videu o 12:23).

int sc[]={106, 58, 0};// príkazy pre servo sú v poradí
        //CCW, STOP, CW

Toto pole je srdcom kalibrácie. Hodnoty sa používajú v tomto poradí:

  • sc[0] = 106: Táto hodnota sa odošle, aby sa servo otáčalo proti smeru hodinových ručičiek.
  • sc[1] = 58: Toto je hodnota "stop". Kvôli vnútornému obvodu sa presná hodnota, pri ktorej sa motor zastaví, líši. Môžete zistiť, že sa vaše servo pomaly otáča, aj keď sa odošle tento príkaz, a budete musieť toto číslo mierne upraviť, aby ste našli skutočnú hodnotu "úplného zastavenia" pre váš motor.
  • sc[2] = 0: Táto hodnota spôsobí, že sa servo otáča v smere hodinových ručičiek maximálnou rýchlosťou.

Hodnoty v poli sc[] môžete upraviť, aby ste zmenili rýchlosť otáčania. Napríklad nastavením sc[0] na 70 sa otáčanie proti smeru hodinových ručičiek spomalí. Čím bližšie je hodnota k hodnote "stop" (58), tým pomalšie sa bude motor otáčať v danom smere. Hodnoty ďalej od 58 zvýšia rýchlosť až do maximálneho limitu.

Existujú tiež ďalšie kľúčové premenné, ktoré možno budete musieť upraviť. servoPin je nastavený na 9, čo musí byť pin s podporou PWM na vašom Arduine. Piny tlačidiel sú definované na začiatku kódu a možno ich v prípade potreby zmeniť.

int servoPin = 9;// tento pin musí byť jeden z tých s PWM ~

#define STOPpin 3 // pin tlačidla pre STOP
#define CWpin 2 //  pin tlačidla pre CW
#define CCWpin 4 // pin tlačidla pre CCW

Nakoniec pole scText[] obsahuje reťazce, ktoré sa tlačia do sériového monitora na ladenie. Môžete ich zmeniť, ak chcete zobraziť iné správy.

Ako používať kód

Nahrajte poskytnutý kód na svoju dosku Arduino. Otvorte sériový monitor (nastavený na 9600 baudov), aby ste videli stavové správy. Teraz môžete ovládať servo pomocou troch tlačidiel:

  • Stlačte a podržte tlačidlo CW: Servo sa začne otáčať v smere hodinových ručičiek. Sériový monitor zobrazí "CW" a odosielanú hodnotu.
  • Stlačte a podržte tlačidlo CCW: Servo sa začne otáčať proti smeru hodinových ručičiek. Sériový monitor zobrazí "CCW" a odosielanú hodnotu.
  • Stlačte tlačidlo Stop: Servo sa pokúsi zastaviť. Sériový monitor zobrazí "Stop".

Ak sa váš servomotor úplne nezastaví po stlačení tlačidla Stop, budete musieť kalibrovať hodnotu sc[1] v poli sc[]. Skúste hodnotu mierne zmeniť (napr. z 58 na 54 alebo 52) a znova nahrať kód, kým motor nezostane dokonale nehybný.

Živá demonštrácia

Vo videu prezentujúci demonštruje celý systém. Môžete vidieť servomotor otáčajúci sa v oboch smeroch na základe stlačení tlačidiel. Zobrazený je aj výstup Serial Monitora, ktorý ukazuje aktuálny stav ("CW", "Stop" alebo "CCW") a konkrétnu hodnotu odosielanú servomotoru. Je to skvelý nástroj na ladenie a nájdenie dokonalých kalibračných hodnôt pre váš konkrétny motor. Demonštrácia tiež ukazuje, ako úprava hodnôt v poli sc[] priamo ovplyvňuje rýchlosť motora, od pomalého plazenia až po maximálnu rýchlosť otáčania.

Záver

Tento projekt poskytuje jednoduchý a efektívny spôsob ovládania kontinuálneho servomotora. Pochopením procesu kalibrácie hodnoty "stop" môžete zabezpečiť presné ovládanie vo vašich vlastných robotických a automatizačných projektoch.

Kapitoly videa

  • [00:05] Úvod ku kontinuálnemu servomotoru
  • [02:02] Prehľad hardvéru servomotora
  • [02:40] Schéma zapojenia a pripojenia
  • [05:07] Vysvetlenie kódu: Premenné a nastavenie
  • [08:03] Vysvetlenie kódu: Logika hlavnej slučky
  • [09:56] Funkcia servoCommand()
  • [10:54] Živá demonštrácia a výstup Serial Monitora
  • [12:23] Kalibrácia rýchlosti servomotora a hodnôt stop

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