IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

8. diel - Arduino - Spínanie veľkej záťaže

Ak sa budete púšťať do projektov s Arduino, skôr či neskôr narazíte na jeden veľký problém - pin má len 20mA, vo chvíľkových záťažiach až 40mA, ale ja potrebujem viac. Čo s tým? Tentoraz si ukážeme dve možnosti - tranzistor a relé. Každý má svoje výhody aj nevýhody. Na ich ukážku si požičiame dva kódy - Blink z Examples (každú sekundu blikne s LEDkou) a Melody zo stránok Arduino na hranie melódie.

Tranzistor

tranzistor - Arduino

Prvou možnosťou je tranzistor. Jedná sa o polovodičovú súčiastku s prechodom PNP alebo NPN, ale my použijeme len PNP tranzistory. Ten by sme mohli opísať ako "vypínač ovládaný prúdom". Má 3 vývody - emitor, bázy a colector. Laicky je báza vypínač pre spojenie emitora a colectoru. To nám bude stačiť, ak vás problém zaujíma viac, odkáže vás na tunajšie články o tranzistoroch a polovodičoch. Vďaka polovodičom možné všetko spínať extrémne rýchlo, teda tranzistor zvládne aj použitie ako "zosilňovač" pri hraní melódie.

Ako príklad použijem Melody, ale budem ho chcieť prehrať na väčších reproduktoroch, aby bola hlasnejší. To má hneď niekoľko problémov - Arduino nemá dostatočný výkon na väčšie reproduktory a navyše by som ho mohol odpáliť. Takže pripojíme tranzistor, ktorý použijeme ako "zosilňovač" pre reproduktory, ktoré budem napájať 12 volty. Emitor ide na zem spínaného objektu, colector na zem napájanie a bázy pôjde na pin Arduino. Pre prípad, že by došlo k prerazeniu tranzistora, je vhodné medzi neho a Arduino dať diódu, aby nám do Arduino netiekla veľký prúd. 12V batérie je len napájanie pre onen objekt, Arduino budeme stále napájať z USB. Len musí byť oboje pripojené na rovnakú zem. Ak všetko zapojíte správne, Arduino nič nehrozí. U niektorých tranzistorov to nie je v rovnakom poradí, preto si VŽDY nájdite datasheet a pozrite sa, ako sú piny rozmiestnené.

Za prípadné škody spôsobené Chybným zapojením neručíme! Rozhodne nepoužívajte len tak hocijaký tranzistor, ale pred použitím si prečítajte datasheet, či tranzistor zvládne vaše nároky na prúd i napätie!
Tiež pozor, aby ste neprekročili limit tranzistora, môže vybuchnúť (síce slabo, ale môže). Ja tomu hovorím "Teraz ho vidíte a teraz už nie.". Ak mi neveríte, na videu nižšie je vidieť čo sa stane, ak polovodič pret'ažíte. Nechcelo sa mi obeťou tranzistor, tak som použil diódu - tiež polovodič (len prechod PN), ale efekt je rovnaký.
.<> Takto to dopadne, keď do polovodiče pustíte viac, než zvládne

Takže si na to dáme pozor zapojíme podľa schémy:

Schéma s tranzistorom - Arduino

A kód Melody zo stránok Arduino:

/*
Jak to funguje zatím vědět nepotřebujeme, nám jen stačí vědět, že pomocí impulsů hraje
melodii na reproduktoru.
Kód je volně šiřitelný jako učební materiál. Je zcela vytvořený vývojáři Arduina.
*/
int speakerPin = 9;

int length = 15; // the number of notes
char notes[] = "ccggaagffeeddc "; // a space represents a rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}

void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

  // play the tone corresponding to the note name
  for (int i = 0; i < 8; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}

void setup() {
  pinMode(speakerPin, OUTPUT);
}

void loop() {
  for (int i = 0; i < length; i++) {
    if (notes[i] == ' ') {
      delay(beats[i] * tempo); // rest
    } else {
      playNote(notes[i], beats[i] * tempo);
    }

    // pause between notes
    delay(tempo / 2);
  }
}

Teraz máme v Arduino nahraný kód melody, skontrolované vývodov tranzistory a PODĽA NICH Upravená schéma. Zapneme a výsledkom bude poriadne hlasná melódia (myslím Twinkle Twinkle Little Star).

Relé

relé - Arduino

Ďalšou možnosťou je použiť relé. To som už spomenul okrajovo v jednom z minulých dielov. Ide tiež o elektricky ovládaný spínač, avšak na celkom inom okruhu. K Arduino sa predávajú 5V Relay moduly, ktoré stačí len pripojiť GND na zem, VCC na 5V a potom uzemnením IN (prípadne IN1, IN2 ... u modulov s viacerými relé) ho spínať. A ako uzemniť? Funkcia digitalWrite () má dva stavy - HIGH a LOW. Na HIGH sa na výstupe napätie, najčastejšie 5V. Na LOW sme zatiaľ brali žiadne napätie, ale to nie je až tak ďaleko pravda - v túto chvíľu môže aj pin slúžiť "ako" zem. Takže ak na pin pripojenie na IN pin relé nastavíte digitalWrite (pin, HIGH), tak relé nezopne, a ak LOW, tak zopne.

Napísal som "ako zem". Rozhodne nie je dobrý nápad na pin uzemniť polovicu súčiastok v projekte
Výhodou celkom iného okruhu je, že ním môžeme púšťať, čo sa nám zapáči, bez nutnosti spoločné krajiny. Pokojne ním môžeme spínať 230V zo zásuvky bez obáv o Arduino (avšak musíme zostať v limitoch napísaných na relátka).

Je tu ale jedna veľká nevýhoda. Relé nie je schopné rýchleho spínania. Na veci ako melody rovno zabudnite a na rýchlejšie spínanie tiež. Ak sa pokúsite s relátkom spínať rýchlo, výsledkom bude vibrátor :-D (Poprípade sa nezopne vôbec).

Tu snáď schéma nebude potrebné, piny sú jasne popísané. Ovládanie je vysvetlené vyššie, relé má ale ďalšie 3 piny - NC, NO, COM.

  • COM je akýsi vstup
  • NO - normal Open. Ak relé nie je zopnuté, tak je COM pripojený na NO a NC je odpojené.
  • NC - normal Closed. Ten je odpojený, ale v momente keď relé prúdom zopneme, tak sa COM odpojí od NO a prepojí sa na NC.

Do Arduino nahráme blink (ktorý každú sekundu zopne pin 13):

// Toto by jsme měli být schopni již napsat sami, ale
// File > Examples > Basics > Blink
// je rychlejší

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
  This example code is in the public domain.
 */

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

Ďalej pripojíme relé a naň nejaký oddelený obvod is napájaním, ktorý chceme spínať. Trebárs LED pásik. Pripojíme ho ako keby mal svieti trvalo, len na jeden z dvoch drôtov (napríklad medzi + na zdroji a + na ľad pásku) pripojíme relé, ktoré nám to bude spínať. Ja som použil 5V LEDky a ako oddelený zdroj 5V sériový prevodník - momentálne som po ruke nemal nič iné, napájanie vytiahnuté z USB prevodníka bolo len ako príklad. Z USB sa nedá vycucnúť moc prúdu, pre napájanie niečoho veľkého použite zdroj, ktorý to ustojí. Zapojenie je podľa tejto schémy:

Arduino
Ako môžete vidieť, relé každú sekundu zopne oddelený okruh, na ktorom sú LEDky.

To by bolo na spínanie veľkej záťaže všetko, nabudúce sa pozrieme na 7-segmentový display.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 242x (1.25 kB)
Aplikácia je vrátane zdrojových kódov

 

Predchádzajúci článok
Arduino - Vzdialenosť s ultrasonickým modulom HC-SR04
Všetky články v sekcii
Arduino
Preskočiť článok
(neodporúčame)
Arduino - Samostatný čip ATmega 328p
Článok pre vás napísal Adam Ježek
Avatar
Užívateľské hodnotenie:
2 hlasov
Autor se převážně věnuje Arduinu a psaní tutoriálů z této oblasti, občas napíše příležitostně nějakou tu zprávičku. Většinu svého volného času momentálně věnuje Linuxu a/nebo Raspberry Pi. Také umí C#, HTML, CSS, PHP a Python.
Aktivity