ArduinoUno + servomotor

V tomto príspevku prepojíme servomotor s Arduino Uno pomocou niekoľkých metód. A tiež pochopíme všetko, čo je potrebné vedieť o motorovom ovládači ULN2003.
Aké komponenty sú budeme potrebovať na prepojenie servomotora s Arduino?
- Arduino Uno
- Servomotor
- ULN2003
- 10 kΩ odpor
- Prepojovacie vodiče
- Nepájivé kontaktné pole






Prečo prepojiť servomotor s Arduinom?
Servomotor je zvyčajne potrebný pre elektromechanické projekty. Alebo častejšie v robotických aplikáciách. Kedykoľvek máte požiadavku, kde potrebujete ovládať uhol natočenia osi motora, môžete použiť servomotor. Tento motor umožňuje otáčanie do určitého stupňa. Úplne na rozdiel od jednosmerných motorov, ktoré bežia v úplných slučkách, pokiaľ je do nich dodávaná energia.
Servomotor je jedným zo základných zariadení v robotike a priemyselných odvetviach, kde sú presné pohyby nevyhnutnosťou.
Čo je servomotor?
Hriadeľ servomotoru je možné umiestniť do určitého uhla použitím riadiaceho signálu. Pokiaľ existuje riadiaci signál, uhlová poloha hriadeľa zostáva rovnaká.
Nezamieňajte si ho s krokovým motorom. Jeho rozdiel od krokového motora spočíva v tom, že servo si počas práce meria svoj uhol.
Časti servomotora?
Servomotor pozostáva zo štyroch hlavných častí:
- 1. Elektrický motor: je vec, ktorá premieňa elektrickú energiu na mechanickú energiu. Je to rotačný stroj.
- 2. Riadiaci systém: Riadi uhol natočenia osi použitím riadiaceho signálu.
- 3. Pohonný systém: Obsahuje prevody, ktoré môžu zvýšiť alebo znížiť rýchlosť a krútiaci moment.
- 4. Potenciometer: Je pripojený k centrálnemu hriadeľu a pomáha riadiacemu systému monitorovať uhol, v ktorom je hriadeľ motora umiestnený.

Servomotor pozostáva z riadiaceho obvodu a potenciometra, ktorý je spojený s hriadeľom. Potenciometer umožňuje prístup k riadiacemu obvodu na ovládanie motora a tým na ovládanie aktuálneho uhla hriadeľa. Keď je hriadeľ v požadovanom uhle, motor sa vypne. Ak aktuálny uhol nie je požadovaný, motor otáča hriadeľ, kým nedosiahne správny uhol. Maximálny rozsah hriadeľa je 180 stupňov. To znamená, že uhol otáčania hriadeľa je najviac 180 stupňov. Výstupný prevod má mechanickú zarážku, preto nie je možné otáčať hriadeľom nad 180 stupňov.
Vzdialenosť, ktorú treba prejsť, je úmerná použitej sile. Využíva proporcionálne riadenie. Proporcionálne ovládanie: Motor bude bežať pri maximálnej rýchlosti, keď sa hriadeľ musí otočiť o značnú vzdialenosť. Naopak, bude bežať pri minimálnej rýchlosti, keď sa hriadeľ potrebuje otočiť na malú vzdialenosť.
Ako ovládať uhol servomotora?

Na ovládanie uhla natočenia musíte použiť moduláciu šírky impulzu. Riadenie sa vykonáva vysielaním impulzu konkrétneho trvania do ovládacieho vodiča. Existujú tri typy impulzov, ktoré servo rozpozná. Minimálny impulz je impulz potrebný na to, aby servo zostalo na 0 stupňoch otáčania. Na uvedenie hriadeľa do neutrálnej polohy je potrebný neutrálny impulz (približne 1,5 ms). Neutrálna poloha je tá, z ktorej sa môže potenciálne otáčať na rovnakú vzdialenosť v oboch smeroch. Maximálny impulz asi 2 ms otočí servo o 180 stupňov. Obnovovacia frekvencia serva je cca 20 ms. Ak teda chcete pozíciu udržať, pošlite rovnaký impulz s odstupom 20 ms. Motor sa skontroluje po 20 ms. Ak sa vyslaný impulz líši od predchádzajúceho, motor podľa toho zmení polohu.
Ako vybrať vhodný servomotor pre projekt Arduino?
Existujú dva typy servomotorov:
- Štandardný/obmedzený servomotor: Tento servomotor sa zvyčajne otáča maximálne o 180 stupňov. Preto nachádza uplatnenie v projektoch, ako sú robotické ramená, ovládanie vztlakových klapiek lietadla atď.
- Servomotor s nepretržitým pohybom: Tento servomotor sa nepretržite otáča. Namiesto použitia signálov PWM na riadenie uhla pohybu ich používa na riadenie rýchlosti a krútiaceho momentu.
V tomto článku sa budeme zaoberať štandardným servomotorom. Rozsah vstupného napätia pre väčšinu hobby servomotorov sa pohybuje od 4,8 V do 6,5 V, ale priemerné požadované napätie je 5 V. Napätie je úmerné krútiacemu momentu, teda čím vyššie napätie, tým vyšší krútiaci moment.
Krútiaci moment je základným parametrom servomotora. Servomotory ktoré Poskytujú krútiaci moment 2,5 kg/cm, znamená, že môžu zdvihnúť závažie 2,5 kg, keď leží vo vzdialenosti 1 cm. Podľa potreby je potrebné zvoliť vhodné servo.
Kolíky servomotora :

PIN 1
- Hnedý
- Uzemňovací vodič pripojený k uzemňovaciemu kolíku Arduina
PIN 2
- Červený
- Napätie motora je normálne +5V
PIN 3
- Oranžový
- Signál PWM sa prenáša do serva Arduino cez tento vodič
Vlastnosti servomotora
- Prevádzkové napätie: +5V
- Krútiaci moment: 2,5 kg/cm
- Operating speed is 0.1s/60°
- Rotácia: 0°-180°
ULN2003 :

ULN2003 je integrovaný obvod reléového ovládača. Arduino Uno a mnohé ďalšie mikrokontroléry/mikroprocesory nemajú veľké výstupné výkony. V zásade nemôžeme očakávať, že Arduino bude riadiť záťaže vyžadujúce veľké napätie alebo prúd. Všeobecné výstupy Arduina sú dostatočné na ovládanie základných senzorov a podobne. Čo teda robíme, keď chceme riadiť vysokovýkonný predmet pomocou Arduina?
Tu vstupuje do hry ULN2003 IC. ULN2003IC obsahuje sedem Darlingtonových párov. Darlingtonove páry sú tranzistory, ktoré sú nakonfigurované tak, aby poskytovali vysoký výkon s vysokou úrovňou prúdov po vstupe malého prúdu. ULN2003 teda môže ovládať sedem rôznych relé naraz. Dokáže poháňať aj motory, čo je v našom prípade celkom praktické.

Kde použiť ULN2003?
ULN2003 IC je najbežnejšie používaný IC ovládača motora. Používa sa, keď potrebujeme súčasne spínať veľké množstvo motorov alebo akýchkoľvek iných zariadení. Môže poskytnúť konštantné napätie a prúd do motora.
Vlastnosti ULN2003 :
- Kolektorový prúd: 500mA
- Vysoké výstupné napätie: 50V
- ULN2003 je kompatibilný so vstupmi populárnych logických typov ako TTL atď.
Piny ULN2003

- 1 až 7 (Týchto sedem vstupných pinov je pripojených k základni tranzistora a na ich spustenie stačí +5V)
- 8 Zem (Uzemňovací kolík 8 môžeme prepojiť s uzemňovacím kolíkom Arduina.
- 9 COM (Je to testovací kolík alebo kolík na potlačenie napätia)
- 10 až 16 (Tieto kolíky sú príslušnými výstupmi siedmich vstupných kolíkov.
Rozsah aplikácií ULN 2003
Má širokú škálu aplikácií. Niektoré z nich sú uvedené nižšie,
- Logické vyrovnávacie pamäte.
- Ovládače relé (na riadenie rôznych záťaží)
- Ovládače displeja LED (zobrazovacie zariadenia)
- Ovládače motora (krokový a jednosmerný kartáčovaný motor).
Zapojenia rozhrania servomotora s Arduino Uno pomocou ULN2003
Fungovanie obvodu
- Analógový kolík Ao môžete pripojiť k stredovému kolíku 10k potenciometra.
- Pripojte napäťový kolík potenciometra s kolíkom Arduino 5volt Vcc.
- Rovnako tak môžete prepojiť uzemňovací kolík potenciometra s uzemňovacím kolíkom Arduina.
- Dajte 5V napätie do ULN2003 IC cez 9. kolík.
- Pripojte uzemňovací kolík servomotora k 10. kolíku integrovaného obvodu.
- Dajte 5V napätie do servomotora cez napäťový kolík.
- Pripojte signálny kolík PWM servomotora s kolíkom 9 Arduina.
Potenciometer dáva analógový vstup Arduinu, ktorý je uložený v premennej, na ktorú je mapovaný. Pomocou tohto mapovania môžeme ovládať servometer nastavením napätia potenciometra. Arduino teda vypočíta vstup a pošle zodpovedajúci PWM signál do servomotora. ULN2003 sa zvyčajne používa na ovládanie viac ako jedného servometra naraz.
Schéma zapojenia pre prepojenie jedného servomotora s Arduino Uno bez ULN2003

- Servomotor má konektor s tromi kolíkmi. Čierny kolík je zvyčajne uzemňovací kolík. Môžete to pripojiť k pinu Arduino GND.
- Pripojte červený kolík s kolíkom 5V Vcc na Arduine.
- Zostávajúci kolík na konektore ktorý je signálnym kolíkom PWM, pripojte k digitálnemu kolíku na Arduine.
Kód na ovládanie jedného jednosmerného motora s Arduino Uno pomocou ULN2003 a potenciometra
Príklad :
/* Ovládanie polohy serva pomocou potenciometra */
#include <Servo.h>
Servo myservo; // vytvorte servo objekt na ovládanie serva
int potpin = 0; // analógový kolík používaný na pripojenie potenciometra
int val; // premenná na čítanie hodnoty z analógového kolíka
void setup() {
myservo.attach(9); //pripája servo na kolík 9 k objektu serva
}
void loop() {
val = analogRead(potpin);
// číta vstup potenciometra (hodnota medzi 0 a 1023)
val = map(val, 0, 1023, 0, 180);
// prispôsobte ho tak, aby ste ho mohli použiť so servom (hodnota medzi 0 a 180)
myservo.write(val); // nastaví polohu serva podľa škálovanej hodnoty
delay(15);
}
Kód na ovládanie jedného jednosmerného motora s Arduino Uno bez ULN2003 a potenciometra
#include <Servo.h>
int servoPin = 9;
Servo servo;
int angle = 0; // poloha serva v stupňoch
void setup()
{
servo.attach(servoPin);
}
void loop()
{
for(angle = 0; angle < 180; angle++)
{
servo.write(angle);
delay(15);
}
for(angle = 180; angle > 0; angle--)
{
servo.write(angle);
delay(15);
}
}
Bežné chyby a riešenie problémov:
Ak zapínate Arduino Uno pomocou USB potom získavate 5V pre napájanie serva. To znamená môžete sa stretnúť s niektorými chybami. Napájanie prichádzajúce zo zdroja USB môže byť v niektorých prípadoch nedostatočné, čo spôsobí resetovanie serva. V tomto prípade pridajte 470uF elektrolytický kondenzátor medzi GND a 5V kolíky Arduina.
Pridaj komentár