Využij akce až 30% zdarma při nákupu e-learningu. Zároveň pouze tento týden sleva až 80 % na e-learning týkající se Javy
Hledáme fulltime koordinátora/ku kurzů. 100% homeoffice,100% časově flexibilní. Mám zájem!
discount week 30

Lekce 8 - Arduino - Spínání velké zátěže

Pokud se budete pouštět do projektů s Arduinem, dříve či později narazíte na jeden velký problém - pin má jen 20mA, ve chvilkových zátěžích až 40mA, ale já potřebuji více. Co s tím? Tentokrát si ukážeme dvě možnosti - tranzistor a relé. Každý má svoje výhody i nevýhody. Na jejich ukázku si půjčíme dva kódy - Blink z Examples (každou vteřinu blikne s LEDkou) a Melody ze stránek Arduina na hraní melodie.

Tranzistor

Tranzistor

První možností je tranzistor. Jedná se o polovodičovou součástku s přechodem PNP nebo NPN, ale my použijeme jen PNP tranzistory. Ten bychom mohli popsat jako "vypínač ovládaný proudem". Má 3 vývody - emitor, báze a colector. Laicky je báze vypínač pro spojení emitoru a colectoru. To nám bude stačit, pokud vás problém zajímá víc, odkáži vás na zdejší články o tranzistorech a polovodičích. Díky polovodičům lze vše spínat extrémně rychle, tudíž tranzistor zvládne i použití jako "zesilovač" při hraní melodie.

Jako příklad použiji Melody, ale budu jej chtít přehrát na větších reproduktorech, aby byla hlasitější. To má hned několik problémů - Arduino nemá dostatečný výkon na větší reproduktory a navíc bych ho mohl odpálit. Takže připojíme tranzistor, který použijeme jako "zesilovač" pro reproduktory, které budu napájet 12 volty. Emitor jde na zem spínaného objektu, colector na zem napájení a báze půjde na pin Arduina. Pro případ, že by došlo k proražení tranzistoru, je vhodné mezi něj a Arduino dát diodu, aby nám do Arduina netekl velký proud. 12V baterie je jen napájení pro onen objekt, Arduino budeme stále napájet z USB. Jen musí být oboje připojeno na stejnou zem. Pokud vše zapojíte správně, Arduinu nic nehrozí. U některých tranzistorů to není ve stejném pořadí, proto si VŽDY najděte datasheet a podívejte se, jak jsou piny rozmístěny.

ZA PŘÍPADNÉ ŠKODY ZPŮSOBENÉ CHYBNÝM ZAPOJENÍM NERUČÍM! Rozhodně nepoužívejte jen tak ledajaký tranzistor, ale před použitím si pročtěte datasheet, jestli tranzistor zvládne vaše nároky na proud i napětí!

Také pozor, abyste nepřekročili limit tranzistoru, může vybuchnout (sice slabě, ale může). Já tomu říkám "Teď ho vidíte a teď už ne.". Pokud mi nevěříte, na videu níže je vidět co se stane, pokud polovodič přetížíte. Nechtělo se mi obětovávat tranzistor, tak jsem použil diodu - také polovodič (jen přechod PN), ale efekt je stejný.

Takhle to dopadne, když do polovodiče pustíte více, než zvládne

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Takže si na to dáme pozor zapojíme dle schéma:

Schéma s Tranzistorem

A kód Melody ze stránek Arduina:

/*
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);
  }
}

Nyní máme v Arduinu nahraný kód melody, ZKONTROLOVÁNY VÝVODY TRANZISTORU A DLE NICH UPRAVENO SCHÉMA. Zapneme a výsledkem bude pořádně hlasitá melodie (myslím Twinkle Twinkle Little Star).

Relé

relé
Další možností je použít relé. To jsem již zmínil okrajově v jednom z minulých dílů. Jedná se také o elektricky ovládaný spínač, ovšem na zcela jiném okruhu. K Arduinu se prodávají 5V Relay moduly, které stačí jen připojit GND na zem, VCC na 5V a pak uzemněním IN (případně IN1, IN2… u modulů s více relátky) ho spínat. A jak uzemnit? Funkce digitalWrite() má dva stavy - HIGH a LOW. Na HIGH se na výstupu napětí, nejčastěji 5V. Na LOW jsme zatím brali žádné napětí, ale to není až tak dalece pravda - v tuto chvíli může i pin sloužit "jako" zem. Takže pokud na pin připojení na IN pin relé nastavíte digitalWrite(pin, HIGH), tak relé nesepne, a pokud LOW, tak sepne.
Napsal jsem "jako zem". Rozhodně není dobrý nápad na pin uzemnit polovinu součástek v projektu
Výhodou zcela jiného okruhu je, že jím můžeme pouštět, co se nám zlíbí, bez nutnosti společné země. Klidně jím můžeme spínat 230V ze zásuvky bez obav o Arduino (ovšem musíme zůstat v limitech napsaných na relátku).

Je zde ale jedna velká nevýhoda. Relé není schopné rychlého spínání. Na věci jako melody rovnou zapomeňte a na rychlejší spínání také. Pokud se pokusíte s relátkem spínat rychle, výsledkem bude vibrátor :-D (popřípadě se nesepne vůbec).

Zde snad schéma nebude třeba, piny jsou jasně popsané. Ovládání je vysvětleno výše, relé má ale další 3 piny - NC, NO, COM.

  • COM je jakýsi vstup
  • NO - Normaly Open. Pokud relé není sepnuto, tak je COM připojen na NO a NC je odpojeno.
  • NC - Normaly Closed. Ten je odpojen, ale v momentě kdy relé proudem sepneme, tak se COM odpojí od NO a přepojí se na NC.

Do Arduina nahrajeme blink (který každou vteřinu sepne 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
}

Dále připojíme relé a na něj nějaký oddělený obvod i s napájením, který chceme spínat. Třeba LED pásek. Připojíme jej jako kdyby měl svítí trvale, jen na jeden ze dvou drátů (třeba mezi + na zdroji a + na led pásku) připojíme relé, které nám to bude spínat. Já jsem použil 5V LEDky a jako oddělený zdroj 5V sériový převodník - momentálně jsem po ruce neměl nic jiného, napájení vytažené z USB převodníku bylo pouze jako příklad. Z USB se nedá vycucnout moc proudu, pro napájení něčeho velkého použijte zdroj, který to ustojí. Zapojení je dle následujícího schématu:

Jak můžete vidět, relé každou vteřinu sepne oddělený okruh, na kterém jsou LEDky.

To by bylo ke spínání velké zátěže vše, příště se podíváme na 7-segmentový display.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 210x (1.25 kB)
Aplikace je včetně zdrojových kódů

 

Předchozí článek
Arduino - Vzdálenost s ultrasonickým modulem HC-SR04
Všechny články v sekci
Arduino
Článek pro vás napsal Adam Ježek
Avatar
Jak se ti líbí článek?
9 hlasů
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 (5)

 

 

Komentáře
Zobrazit starší komentáře (22)

Avatar
ostrozan
Redaktor
Avatar
ostrozan:28.12.2016 21:21

Mně eth. shield přežil - jen jsem vyměnil ten regulátor a jedu dál

 
Odpovědět
28.12.2016 21:21
Avatar
Martin Kejzlar:28.12.2016 21:23

Mě právě všechno normálně funguje včetně internetu, jen ty poklesy napětí zlobí. Takže zkusím jen prohodit to Arduino. Ještě jednou díky.

 
Odpovědět
28.12.2016 21:23
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Martin Kejzlar
ostrozan:28.12.2016 21:28

On právě neodejde úplně - jen není už schopný dodávat proud který má a do určité míry to stíhá - ale pak stačí to jedno relé a klekne - dej tam to druhé arduino a uvidíš , že to pojede v pohodě - a to staré rozhodně nevyhazuj - to si sprav, nebo nech spravit - je to fakt pár korun

 
Odpovědět
28.12.2016 21:28
Avatar
Martin Kejzlar:1.3.2017 23:53

Píšu po delší době, protože jsem to moje Arduino Mega nenašel. Musel jsem tedy objednat z Číny a někde se ztratilo. Takže jsem musel objednávat druhé a to teprve teď dorazilo. Opravdu po výměně arduina zase vše šlape jak má. Ještě jednou díky.

 
Odpovědět
1.3.2017 23:53
Avatar
Patrik Ulrych:16.4.2018 0:34

Relé máš popsáno špatně: NO normal open je již z názvu otevřený kontakt, čili rozepnuté, NC normal closed sepnutý kontakt. NO a NC se udává v základním stavu, čili bez napětí na cívce relé.

 
Odpovědět
16.4.2018 0:34
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Jan Kartousek:9.11.2020 21:57

Mohu se zeptat, jaký transistor byl konkrétně použit?

 
Odpovědět
9.11.2020 21:57
Avatar
Martin Jína
Člen
Avatar
Martin Jína:29. května 11:45

Tento seriál mne ze začátku docela zaujal. Komentáře psané v češtině, deklarované proměnné s českými názvy - paráda. Zato tento díl - komentáře čengliš, proměnné také - fakt hnus! Kdo v dnešní době začíná s "arduino" a vybere si český návod asi anglicky umět nebude!!!!
Nebo se mýlím?

 
Odpovědět
29. května 11:45
Avatar
Atrament
Super redaktor
Avatar
Odpovídá na Martin Jína
Atrament:29. května 15:52

Tak to ber jako příležitost se pár anglických pojmů naučit, angličtina je při programování naprosto nezbytná, takže jestli se chceš programování jakkoliv věnovat stejně se jí nevyhneš :)

 
Odpovědět
29. května 15:52
Avatar
Martin Jína
Člen
Avatar
Odpovídá na Atrament
Martin Jína:29. května 19:51

Abych to vysvětlil! Nejdříve jsem se učil ruštinu, potom němčinu a nyní nějakých 10 let Angličtinu, protože ANO, bez ní to nejde.
Já jen, že je dnes mnoho vrstevníků, kteří se doteď mikrokontrolerů báli a používali jen analogové součástky, zkoušejí zjišťovat, co že to to ARDUINO je. A ti samosebou mají jazykovou bariéru, tak jim musím pomáhat. No a já také stále k té angličtině nepřirostl.

 
Odpovědět
29. května 19:51
Avatar
Atrament
Super redaktor
Avatar
Odpovídá na Martin Jína
Atrament:29. května 20:09

Tak jasně já to chápu, ale přece jenom se tady nechce, aby člověk ovládal tu angličtinu na takové úrovni, aby mohl vést konverzaci s opilým skotským námořníkem. :) Vždyť je tam jen pár slovíček, hodně z nich obecně známých i lidem co anglicky neumí (kdo třeba neví co je on a off a nebo read a write? ) navíc v dnešní době není problém si to myší označit, zkopírovat a hodit do google translate...

 
Odpovědět
29. května 20:09
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 32. Zobrazit vše