PC REVUE
Image
10.4.2018 0 Comments

Arduino: Pripojenie senzorov a akčných členov

Riadiaca doska bez ohľadu na typ a platformu umožňuje softvérové ovládanie zariadenia. Môže to byť prakticky čokoľvek – robot, robotická ruka, dron, riadiaca jednotka inteligentnej domácnosti, automatizované meracie zariadenie a podobne. Tak ako ľudský mozog prijíma podnety od zmyslových orgánov a využíva končatiny ako akčné členy, aj riadiaca jednotka potrebuje získať nevyhnutné informácie zo svojho okolia a mať možnosť toto okolie nejakým spôsobom – mechanicky, elektricky či inak – ovplyvniť. Napríklad riadiaca jednotka vykurovania meria teplotu a na základe toho vypína či zapína zdroj svetla. Robotické vozidlo pomocou mechanických, optických alebo ultrazvukových signálov zistí pred sebou prekážku a koriguje ovládanie motorov tak, aby sa jej vozidlo vyhlo.

Vstupné alebo výstupné porty

Srdcom základnej, najjednoduchšej dosky Arduino UNO je mikrokontrolér Atmel ATMega328P taktovaný na 16 MHz.  Táto informácia napriek tomu, že piny na doske viac-menej korešpondujú s pinmi použitého mikrokontroléra, nie je na praktické použitie kľúčová, rôzne klony Arduina využívajú rôzne procesory vrátane tých od Intelu. Dôležitejšie je rozhranie, pomocou ktorého sa k doske pripájajú rozširujúce dosky (shieldy), prípadne periférne zariadenia. 

Všetky porty vyvedené na konektor možno nastaviť individuálne na vstupný (INPUT) a výstupný (OUTPUT) režim. Na tento účel sa využíva funkcia pinMode(). Nemožno inicializovať piny tak, aby fungovali zároveň ako vstupné aj výstupné. Ak je pin nastavený ako vstupný, dokáže rozlíšiť hodnoty napätia vstupného číslicového signálu medzi hodnotami HIGH (logická 1, true, vyššie napätie) a LOW (logická 0, false, nižšie napätie). Ak je pin nakonfigurovaný ako výstupný, môžete na ňom programovo nastaviť hodnotu HIGH alebo LOW. V obidvoch prípadoch je povolené prúdové zaťaženie jedného pinu 40 mA. Vo výstupnom móde sa dá tento prúd dodať napríklad do LED diódy. Tretí mód je INPUT_PULLUP. Je to vstupný mód, pri ktorom je na čipe k vstupu pripojený interný rezistor medzi vstupom a +5 V. V tomto režime je definovaná pokojová hodnota vstupného napätia HIGH. Ak sa napríklad tlačidlom tento vstup pripojí k napäťovej úrovni 0 V, vtedy bude na vstupe hodnota LOW.

 


Opis pinov konektora vrátane ich alternatívnych funkcií

Analógové vstupy

Piny A0-A5 fungujú nielen ako „digitálne“ vstupno-výstupné porty, ale alternatívne aj ako analógové vstupy. Programovo možno zistiť hodnoty na týchto pinov v rozmedzí 0 V – 5 V pomocou funkcie analogRead(pin). Takýmto spôsobom sa dá napríklad zosnímať uhol natočenia potenciometra zapojeného ako delič napätia, hodnota z termistora, fotorezistora a podobne. Väčšina mikrokontrolérov použitých v doskách Arduino má presnosť A/D prevodníka 10 bitov, čiže v závislosti od napätia na fotorezistore môžete načítať hodnoty v rozsahu 0 – 1023. Niektoré dosky, napríklad Arduino DUE, majú presnosť A/D prevodníka 12 bitov.

Výstupy PWM

Ak si pozriete označenie pinov 3, 5, 6, 9, 10 a 11, vedľa čísla pinu vidíte symbol vlnovky. Ten označuje piny, ktoré možno použiť ako výstupy PWM. PWM znamená Pulse Width Modulation, teda impulzová šírková modulácia, ktorá umožňuje meniť výstupné napätie na pine nie analógovo, ale prostredníctvom premenlivej šírky impulzov. Takto môžete napríklad meniť intenzitu LED svetla. Na výstupe sú impulzy s amplitúdou 5 V a s premenlivým pomerom medzi časom zapnutia a vypnutia. Ak na výstup PWM pripojíte LED diódu, maximálny jas sa dosiahne, ak je na výstupe trvalo hodnota HIGH. Ak má byť hodnota napätia polovičná, pomer impulzov zapnuté/vypnuté je 50: 50. Ak potrebujete štvrtinový jas, pomer zapnuté/vypnuté je 25:75 Pri tomto princípe regulácie, ktorá sa, mimochodom, využíva aj na reguláciu jasu podsvietenia lacnejších monitorov, LED diódy nesvietia kontinuálne, ale blikajú mnohokrát za sekundu, a čím je doba ich zopnutia kratšia, tým je nižšia intenzita podsvietenia.


Princíp regulácie PWM

Poznatky ohľadne analógových vstupov a  výstupov PWM zhrnieme do jednoduchého príkladu, kde budeme natočením potenciometra regulovať jas LED diódy, alebo otáčky motora. Príklad má jednu drobnú zákernosť: rozsah vstupných hodnôt je 0 – 1023 a rozsah výstupných hodnôt je 0 – 255, takže nemôžete nameranú hodnotu z A/D prevodníka použiť priamo, musíte ju prepočítať. V tomto prípade stačí nameranú hodnotu vydeliť konštantou 4.

byte led = 6;
byte potenciometer = A0;
int pom;

void setup() {}

void loop() {
   pom = analogRead(potenciometer)/4;
   analogWrite(led, pom);
}

Skúste urobiť variant príkladu, v ktorom budete analógovú hodnotu z potenciometra zobrazovať efektne pomocou stĺpca zo štyroch alebo viacerých LED diód.

Ovládanie jednosmerných a krokových motorov

Smer otáčania jednosmerných motorov závisí od polarity privedeného napätia. Preto stať o ovládaní klasických jednosmerných motorov začneme vysvetlením fungovania takzvaného H-mostíka. Pomocou štyroch spínačov sa dá ovládať smer otáčania. 

 


Fungovanie H-mostíka

Práve túto funkciu, H-mostík s elektronickými prepínačmi, realizujú moderné integrované obvody určené na riadenie jednosmerných motorov, napríklad L298P, ktorý je na rozširujúcej doske Motor Shield. Tento modul si vyžaduje externé napájanie, pretože v prípade ovládania dvoch motorov obvod L298P obsahujúci dvojitý H-mostík dokáže dodať prúd 2 × 2 A alebo celkový prúd 4 A. Napájanie cez rozhranie USB nedokáže dodať takéto prúdy. Modul umožňuje ovládať nielen motory, ale aj elektromagnetické ventily a podobné zariadenia vyžadujúce ovládanie jednosmerného prúdu.

Smer otáčania je určený zopnutím príslušných elektronických spínačov H-mostíka a to, ktoré spínače sú zopnuté, sa určuje nastavením úrovní na pinoch LOW DIR A a DIR B. Rýchlosť otáčania sa reguluje intenzitou prúdu na vstupoch PWM A a PWM. Pomocou výstupov (z pohľadu dosky motor shield) SNS0 a SNS1 môžete merať jednosmerný prúd prechádzajúci regulovaným motorom. Čítať ju môžete pomocou funkcie analogRead () analógových vstupov A0 a A1.


Rozširujúca doska Motor Shield

Krokové motory sú mnohopólové a mnohofázové synchrónne motory, skonštruované tak, aby fungovali v krokovom režime. Najčastejšie sa používajú ako servopohon bez spätnej väzby. V praxi to znamená, že ak riadiaca jednotka, v tomto prípade Arduino, vystaví na svojich výstupoch príslušný počet impulzov, malo by sa dať spoľahnúť na to, že krokový motor sa natočí o uhol zodpovedajúci počtu impulzov. Samozrejme, iba vtedy, ak je krokový motor dobre nadimenzovaný na predpokladanú záťaž. Navyše krokový motor si udržiava aktuálnu polohu, ako keby bol v polohe, ktorú práve dosiahol zabrzdený. Cenou za túto vlastnosť je však prúdový odber aj v prípade, ak motor stojí.

Krokový motor funguje tak, že sa na jeho vývody privádzajú fázovo posunuté impulzy a podľa ich počtu sa motor natočí. Rýchlosť otáčania je daná rýchlosťou generovania impulzov a pri dostatočne dimenzovanom motore nezávisí od záťaže.  Ak je motor nedostatočne dimenzovaný, dochádza k prekĺzavaniu. Preto by konštruktér zariadenia mal pamätať na mechanizmus, ktorý napríklad pomocou optočlenu alebo mikrospínača sníma základnú polohu, a algoritmy umožňujúce resetovať polohu, teda nastaviť východiskovú polohu. Z dosiaľ uvedeného vyplýva, že krokové motory sú výhodné, ak treba nastaviť definovanú polohu a tú aj pri zmenách záťaže udržať.

Bežné krokové motory, používané v amatérskych konštrukciách, sa pripájajú pomocou piatich vodičov. Červený vodič sa pripája na +5 V a na ostatné štyri vodiče, ktoré majú spravidla oranžovú, žltú, modrú a ružovú farbu, sa privádza sekvencia impulzov. Dôležitý údaj je uhol natočenia pri jednom kroku. Často sa udáva ako zlomok, napríklad v tvare  5,625°/64. Pre takýto motorček treba na jednu otáčku o 360 stupňov vygenerovať 512 impulzov, pretože 360/(8 × 5,625/64) = 512. Príklad obsahuje kód, ktorý otočí krokový motor najskôr o jednu otáčku jedným smerom a potom o jednu otáčku opačným smerom. K dispozícii sú rôzne knižnice podľa toho, cez aký obvod je krokový motor zapojený, napríklad Krokper.h.

 Menšie krokové motorčeky sa dajú pripojiť priamo na piny Arduina, napríklad na digitálne výstupy 8 – 11, a generovať postupnosti impulzov pre jednotlivé kroky podľa tabuľky.

Krok   stav pinov

0      1  1  0  0

1      0  1  0  0

2      0  1  1  0

3      0  0  1  0

4      0  0  1  1

5      0  0  0  1

6      1  0  0  1

7      1  0  0  0

Skrátený kód

void setup() {
  pinMode(8, OUTPUT); pinMode(9, OUTPUT);
  pinMode(10, OUTPUT); pinMode(11, OUTPUT);
}
void loop() {
int i=0;
for(i=0;i<512;i++){
pootocenie();}
}
void pootocenie() { //revolve clockwise
krok1(); krok2(); krok3(); krok4();
krok5(); krok6(); krok7(); krok8();
}
void krok1(){
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(2);
}
...
void krok8(){
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(2);
}

Servo je komplexná súčiastka umožňujúca pootočenie osky s ramenom. Môžete si ho predstaviť ako motor s prevodovkou, so spätnoväzbovým potenciometrom, ktorým sa meria uhol natočenia, a riadiacim obvodom. Pomocou impulzov PWM môžete regulovať uhol jeho natočenia. Servo je k riadiacej jednotke pripojené pomocou troch rôznofarebných vodičov. Na červenom vodiči je kladné napájacie napätie, na čiernom (niekedy hnedom) vodiči je zem a na oranžový vodič sa privádzajú signály. Frekvencia impulzov privádzaných na oranžový vodič je 50 Hz. Uhol natočenia sa ovláda šírkou pozitívneho pinu. Napríklad pri modelárskom serve SG90 je šírka impulzu 500 až 2400 μs a tejto hodnote zodpovedá uhol natočenia 0° až 180°.

Konštrukcia servomotora – kvalitnejšie servomotory majú kovové prevody a ložiská


Príklad kráčajúceho robota – každá noha má tri servomotory

 Na prvý pohľad to znie zložito, ale vďaka knižnici integrovanej do vývojového prostredia je ovládanie servomotorov veľmi jednoduché.

#include 
Servo servo1;
int potenciometer = 0; //potenciometer na pin A0
int pom;
void setup()
{
    myservo.attach(9); // servo na pin 9
}
void loop()
{
   pom = analogRead(potenciometer);  //hodnoty 0 - 1023
   pom = map(pom, 0, 1023, 0, 179); // mapuj na interval 0 - 180)
   servo1.write(pom);
   delay(15);
}


Detail serva v prípravku na simulovanie vibrácií pri testoch stabilizácie obrazu fotoaparátov a smartfónov

My sme v redakcii servo ovládané Arduinom využili v prípravku na simuláciu vibrácií pri teste optických stabilizátorov mobilov. Impulzy generujeme tak, že os servomotora, na ktorú je nasadené pákové rameno, sa periodicky podľa naprogramovaných premenlivých cyklov rýchlejšie alebo pomalšie natáča o stanovený uhol.

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Zmena farby na fotke? Zvládnete to na pár kliknutí

17.10.2018 13:37

Urobiť z modrej červenú alebo zo zelenej žltú. Aj takáto úprava sa občas hodí. Pritom nie je vôbec ťažké zariadiť to. Zmenu farby na fotkách zvládnete na pár kliknutí. Či už chcete upraviť jeden objek ...

Ako na to

Tipy, triky a návody: Ako bez Photoshopu otvárať súbory Photoshopu a pracovať s nimi?

14.09.2018 17:48

Photoshop je v súčasnosti suverénne najrozšírenejší pokročilý editor na prácu s rastrovou grafikou, pričom je obľúbený nielen medzi profesionálmi, ale aj nadšencami. Jeho cena od 143 eur ročne (dnes j ...

Ako na to

Tipy, triky a návody: Ako zistiť heslo k Wi-Fi na prihlásenom zariadení s Windows či Androidom?

17.09.2018 00:10

Možno sa vám už stalo, že ste prišli na návštevu k „nie príliš technicky zdatným“ príbuzným či priateľom, ktorí vám ponúkli pripojenie k ich Wi-Fi, no hoci vám povedali niekoľko rozličných hesiel, kto ...

q

Žiadne komentáre

Vyhľadávanie

ITAPA_jesen2018

Najnovšie videá



PC forum button