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

Hardware PC Arduino Arduino - Spínání velké zátěže

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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


 

Stáhnout

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

 

  Aktivity (4)

Č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 (16)

Avatar
Martin Kejzlar:

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
Martin Kejzlar:

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:

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  +1 28.12.2016 21:01
Avatar
Martin Kejzlar:

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:

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:

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:

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:

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:

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:

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. března 23:53
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 26. Zobrazit vše