Nauč se s námi víc. Využij 50% zdarma na e-learningové kurzy.
discount week 50

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

 

 

Komentáře

Avatar
...
Redaktor
Avatar
...:27.8.2014 21:28

Niesom si istý ale myslím, že si v tej schéme nezapojil správne zeme, lebo zem batérie nie spojená so zemou Arduina.

Odpovědět
27.8.2014 21:28
Nehovor čo vieš, ale snaž sa vedieť, čo hovoríš...
Avatar
Adam Ježek
Redaktor
Avatar
Odpovídá na ...
Adam Ježek:27.8.2014 21:46

Sakra, máš pravdu. Takže se jde editovat, dík

Editováno 27.8.2014 21:48
Odpovědět
27.8.2014 21:46
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
jol
Člen
Avatar
jol:14.9.2014 13:13

Pěkný článek, dík. Jen lehká oprava:
COM vývod není "jakýsi vstup". Je to zkratka ze slova COMMON - společný a bežně se používá na relé i dalších el. součástkách. Tedy, jak je psáno, kontakty relé fungují buď jako spínač (COM a NO), nebo rozpínací prvek (COM a NC), nebo dokonce jako přepínač (NC-COM-NO).

Editováno 14.9.2014 13:16
 
Odpovědět
14.9.2014 13:13
Avatar
Adam Ježek
Redaktor
Avatar
Odpovídá na jol
Adam Ježek:14.9.2014 13:16

ano, ale pro začátečníky se to dá považovat za "jakýsi vstup", který se "střídavě připojuje na NC a NO"

Odpovědět
14.9.2014 13:16
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Hello World
Člen
Avatar
Hello World:25.12.2014 14:57

Dá se nějak zjistit jakou zátěž má např elektromotor? Myslíte, že to bude do 20mA?

Odpovědět
25.12.2014 14:57
Jo! Zkompilovalo se to!
Avatar
Adam Ježek
Redaktor
Avatar
Odpovídá na Hello World
Adam Ježek:25.12.2014 15:00

To záleží kus od kusu. Nejjednodušší bude na něj připojit multimetr a zapnout ho. Já mam pár motůrků, co to splňujou, ale ty sou z nejaky hracky o velikosti mobilu ktera se pohybovala rychlosti mrtvyho sneka :D

Odpovědět
25.12.2014 15:00
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Jiří Šachl:9.4.2015 11:57

Máte někdo zkušenost se spínáním 230V přes relay modul ? Na jiném fóru jsem popsal připravovanou stavbu řídící jednotky pro hydroponický systém na balkon. Bude se pomocí čidel a arduina mega řídit spínání několika akvarijních čerpadel. Hned jsem byla sepsut zato ať to udělá elektrikář nebo rovnou revizní technik a hlavně mě udivilo tvrzení, že relay modul a do něho přivedených 230V bude rušit arduino co bude dělat chyby. nevymýšlím to z hlavy ale poučil jsem se jinde kde se tímto způsobem řídí celé hydroponocké skleníky, velká i malá akvária. Nikde jsem neviděl nějaký náznak rušení. Jak to tedy je ?

 
Odpovědět
9.4.2015 11:57
Avatar
Adam Ježek
Redaktor
Avatar
Odpovídá na Jiří Šachl
Adam Ježek:9.4.2015 15:14
  1. at se ti nekrizi kabely do arduina a 230, ty mej co nejdal od sebe, jinak je ruseni mozne.
  2. pokud neprekrocis maximalni zatez (je to napsane na modlu, z hlavy to ted nedam), tak neni problem sppinat cokoliv
  3. s trochou rozumu si to mzes zapojit sam, ale veskera odpovednost de na tebe (ja sem se v 230 hrabal uz nekdy v 10 letech a funguje to dodnes :D )
Odpovědět
9.4.2015 15:14
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Odpovídá na Adam Ježek
Jiří Šachl:9.4.2015 15:23

Díky. Dráty se nebudou křížit a ty od arduina projdou kroužkem z počítače (na odrušení). Určitě nepřekročím zátěž. To co potřebuju žere dohromady jak 20W žárovka. Rozebírám to tady http://forum.robodoupe.cz/viewtopic.php?…

Editováno 9.4.2015 15:24
 
Odpovědět
9.4.2015 15:23
Avatar
Jiří Šachl:10.4.2015 19:31

Dnes mi domů pošta dodala z číny dvou relé. Je třeba do článku dopsat, že napájení je vyvedeno na zadní stranu bez jakéhokoli jištění. Ani barva. Takže zapojit do toho modelářskou lipolku co umí dát 40A a pak na to sáhnout by mohlo být dost závažné. A to že to zvládne 230V a pka to chtít třeba posunout ne-li to položit na něco vodivého.

 
Odpovědět
10.4.2015 19:31
Avatar
Ludvík D.
Člen
Avatar
Ludvík D.:2.11.2016 18:25

Lidičky zdravím. Na stránku jsem se dostal náhodou, a měl bych jednu připomínku. ve schématu a v textu se hovoří o PNP tranzistoru, ve schématu je ale zapojen tranzistor obráceně. Běžné tranzistory řady BC . . . Mají pořadí vývodů, zleva do prava CBE. Kdežto tak jak je nakreslen ve schématu tranzistor by odpovídalo tranzistoru s vodivostí NPN. Takže pozor na to. Pokud použijete PNP tranzistor musíte ho otočit bříškem k sobě a ploškou s nápisem od sebe. Mějte se, a ať se všem daří. Já sem občas nakouknu. Jsem hrozný "šťoura", hi.

 
Odpovědět
2.11.2016 18:25
Avatar
pgarsky
Člen
Avatar
pgarsky:10.12.2016 14:45

Článek celkem k ničemu. Ta první polovina, rezistor se celkem ještě dá, i když začátečník by ho asi moc dobře nepochopil. A u relé: Ne každému musí dojít, jak se to má připojit do toho TTL převodníku.

Odpovědět
10.12.2016 14:45
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Martin Kejzlar:28.12.2016 15:22

Ahoj všem.
Mám dotaz. Zkouším pomocí Adruino Mega spínat 4 relátka (http://www.ebay.com/…201498785043?…) . Nevím zda je to přesně toto, ale vypadá to stejně. Mám problém, že každý sepnutý kanál způsobí pokles napětí na pinech arduina o 0,4 - 1 V. takže při dvou současně sepnutých kanálech dává arduino napětí 3-3,5 V a to už to relé nesepne.

Co s tím lze prosím dělat?

Díky

Martin

 
Odpovědět
28.12.2016 15:22
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Martin Kejzlar
ostrozan:28.12.2016 20:10

jak arduino napájíš - přes jack, nebo z USB konektoru?
kde bereš napájení pro relé modul?

 
Odpovědět
28.12.2016 20:10
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Martin Kejzlar
ostrozan:28.12.2016 20:16

máš nějaký měřák - můžeš změřit proud pro sepnutí jednoho relé?

Editováno 28.12.2016 20:17
 
Odpovědět
28.12.2016 20:16
Avatar
Martin Kejzlar:28.12.2016 20:26

Stejná situace je při napájení přes USB a přes jack silným zdrojem. Napájení relé mám normálně vytažené z arduina piny 5V a GND. Myslíš, že by to mělo mít samostatné napájení?

Já mám právě doma takový chytrý dům. Dvě Megy, obě s ethernet shieldem, jedna posílá data na web, tam se data vyhodnotí a uloží a pošle se povel do druhé Megy, co má sepnout. Nedávno mi přestalo spínat relé u kotle. Tak jsem myslel, že je v háji, dal jsem nové a dělalo to znova. Tak jsem hledal a zjistil jsem ten pokles napětí. Dřív jsem to napětí neměřil, ale min půl roku to běhalo spolehlivě. Ještě zkusím k tomu relé připojit jiné arduino, abych zjistil, jestli to dělá taky, nebo je chyba v arduinu.

 
Odpovědět
28.12.2016 20:26
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Martin Kejzlar:28.12.2016 20:28

Mám takový easy multimetr z Číny, takže s tím by asi proud jít změřit šel, ale nejsem si jistý jak. Mám měřák nastavit na 200 mA a "zapojit" do obvodu, který napájí relé???

 
Odpovědět
28.12.2016 20:28
Avatar
Odpovídá na ostrozan
Martin Kejzlar:28.12.2016 20:51

Tak pokud jsem měřil dobře tak to má při sepnutí jednoho kanálu proud 65 mA, což je dost, ne?

 
Odpovědět
28.12.2016 20:51
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Martin Kejzlar
ostrozan:28.12.2016 21:01

No to tak odpovídá - 5V relé si může vzít i 40mA a něco sežere i optočlen co ho spíná.
Ale problém bude asi jinde - pokud používáš eth. shieldy, co se co se nasunují na arduino - tento a napájecí napětí na jacku bylo vyšší než 9V (LDO regulátor na desce ethernetu víc nesnese) tak ti odešel LDO regulátor na desce arduina - stalo se mně to samé - ale mně to aspoň fungovalo při napájení z USB - to se napájení z jacka automaticky odpojuje.

 
Odpovědět
28.12.2016 21:01
Avatar
Martin Kejzlar:28.12.2016 21:07

Ahááááá :-). Je pravda, že jsem nedávno omylem připojil na jack 24V. Arduino chcíplo, tak jsem to hned odpojil. Pak mi to došlo. Připojil jsem znova 9V a vše jelo. takže to jen odnesla nějaká součástka, která tohle způsobuje. Mám tady ještě 2 Megy, tak až bude čas, zkusím to prohodit.

Díky MOC:

Editováno 28.12.2016 21:07
 
Odpovědět
28.12.2016 21:07
Avatar
Odpovídá na ostrozan
Martin Kejzlar:28.12.2016 21:11

Takže bude stačit jiné Arduino, nebo musím dát i nový eth. shield? Protože ten tuším nemám, tak že bych ho hned objednal.

 
Odpovědět
28.12.2016 21:11
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Martin Kejzlar
ostrozan:28.12.2016 21:20

Jinak je to tohle - haléřová položka - pokud to teda máš jak a čím vyměnit

 
Odpovědět
28.12.2016 21:20
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Martin Kejzlar
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
Odpovídá na ostrozan
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
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 32 zpráv z 32.