8. díl - Arduino - Spínání velké zátěže

Hardware PC Arduino 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

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.

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.


 

Stáhnout

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

 

  Aktivity (3)

Článek pro vás napsal Adam Ježek
Avatar
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.

Jak se ti líbí článek?
Celkem (9 hlasů) :
4.555564.555564.555564.555564.55556


 


Miniatura
Všechny články v sekci
Arduino
Miniatura
Následující článek
Arduino - Samostatný čip ATmega 328p

 

 

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

Avatar
jol
Člen
Avatar
jol:

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
Tým ITnetwork
Avatar
Odpovídá na jol
Adam Ježek:

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  +2 14.9.2014 13:16
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
O.S.DV.F
Člen
Avatar
O.S.DV.F:

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
Tým ITnetwork
Avatar
Odpovídá na O.S.DV.F
Adam Ježek:

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
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Jiří Šachl:

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
Tým ITnetwork
Avatar
Odpovídá na Jiří Šachl
Adam Ježek:
  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  +1 9.4.2015 15:14
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Odpovídá na Adam Ježek
Jiří Šachl:

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:

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.:

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. listopadu 18:25
Avatar
pgarsky
Člen
Avatar
pgarsky:

Č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 Včera 14:45
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 12. Zobrazit vše