Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

V předchozí lekci, MPU6050 akcelerometr a gyroskop pro Arduino, jsme pracovali s akcelerometrem a gyroskopem.

V tomto tutoriálu Arduina se naučíme vyřešit jeden velký problém. Jeden pin Arduina je schopen pojmout pouze 20 mA, ve chvilkových zátěžích až 40 mA. Co když ale potřebujeme více? Ukážeme si dvě možnosti, jak se s velkou zátěží vypořádat - tranzistor a relé. Každá varianta má svoje výhody i nevýhody. Na jejich demonstraci si ukážeme dva kódy. Jeden přehraje melodii a druhý každou vteřinu blikne LEDkou.

Tranzistor

O tranzistoru jsme si již řekli na začátku tohoto kurzu. Jedná se o polovodičovou součástku s přechodem PNP nebo NPN. My použijeme PNP tranzistor. Ten můžeme popsat jako "vypínač ovládaný proudem". Tranzistor má tři vývody - emitor, bázi a kolektor. Funguje tak, že báze je vypínač pro spojení emitoru a kolektoru. To nám pro účely tohoto tutoriálu bude stačit. Více se tématu věnujeme v článcích 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:

tranzistory - Arduino - Hardware

Tranzistor jako zesilovač

Naši melodii budeme 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 bychom ho mohli zničit. Problém vyřešíme tak, že připojíme tranzistor, který použijeme jako "zesilovač" pro reproduktory napájené 12 V. Emitor tranzistoru bude zapojený na zem spínaného objektu, kolektor na zem napájení a báze bude připojená na pin Arduina. Pro případ, že by došlo k proražení tranzistoru, je vhodné mezi něj a Arduino dát diodu. Ta Arduino ochrání, aby nám do něj netekl příliš velký proud. Naše 12V baterie je jen napájení pro onen objekt, Arduino budeme stále napájet z USB. Jen musí být obojí připojeno na stejnou zem. Pokud vše zapojíme správně, Arduinu nic nehrozí. Rozmístění báze, emitoru a kolektoru není u všech tranzistorů ve stejném pořadí. Proto si VŽDY najdeme datasheet a podíváme se, jak jsou piny rozmístěny.

ZA PŘÍPADNÉ ŠKODY ZPŮSOBENÉ CHYBNÝM ZAPOJENÍM NERUČÍME! Před použitím konkrétního tranzistoru si musíme pročíst jeho datasheet, jestli zvládne naše nároky na proud i napětí!

Také si musíme dát pozor, abychom nepřekročili limit tranzistoru. Může totiž vybuchnout (sice slabě, ale může). Na obrázku níže je vidět, co se stane, pokud se polovodič přetíží:

Tranzistor-zniceny - Arduino - Hardware

Schéma zapojení

Když už víme, na co si musíme dávat pozor, můžeme se vrhnut na správné zapojení. Po zapojení schématu si jej raději ještě dvakrát zkontrolujeme:

Schéma s Tranzistorem - Arduino - Hardware

Program k přehrání melodie

Náš kód jsme si vypůjčili z oficiálních stránek Arduina. Kód je volně šiřitelný jako učební materiál. Funguje tak, že pomocí impulsů hraje melodii na reproduktoru:

int speakerPin = 9;

int length = 15; // počet not
char notes[] = "ccggaagffeeddc "; // mezera představuje pauzu
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, zkontrolovány vývody tranzistoru a dle nich upravené schéma. Zapojení zapneme a výsledkem bude pořádně hlasitá melodie :-)

Relé

Další možností je použít relé. Jedná se také o elektricky ovládaný spínač, ovšem na zcela jiném principu než tranzistor. K Arduinu se prodávají 5V Relay moduly, které stačí jen připojit GND na zem, VCC na 5 V a pak uzemněním IN (případně IN1, IN2… u modulů s více relátky) jej spínat:

Rele - Arduino - Hardware

A jak tedy naše relé uzemnit? Funkce digitalWrite() má dva stavy - HIGH a LOW. Na HIGH je na výstupu napětí nejčastěji 5 V. Na LOW jsme zatím brali nulové napětí, ale to není až tak pravda - v tuto chvíli může pin sloužit také "jako zem". Takže pokud na pin připojený na IN relé nastavíme digitalWrite(pin, HIGH), relé nesepne. Pokud naopak nastavíme LOW, tak sepne.

Napsali jsme "jako zem". Rozhodně ale 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 230 V ze zásuvky bez obav o Arduino, pokud ovšem zůstaneme 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 přehrání melodie můžeme rovnou zapomenout a na rychlejší spínání také. Pokud se pokusíme s relátkem spínat rychle, výsledkem bude vibrátor :-D (popřípadě se nesepne vůbec).

Piny tedy máme jasně popsané a ovládání je vysvětleno výše. Relé má ale další tři piny - NC, NO a COM:

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

Program na blikání diody

Do Arduina nahrajeme kód, který každou vteřinu sepne pin 13. Kód je z oficiálních stránek Arduina a je volně šiřitelný jako učební materiál:

int led = 13;

void setup()
{
  pinMode(led, OUTPUT);  // inicializuje digitální pin jako výstup
}
void loop()
{
  digitalWrite(led, HIGH);   // zapne LED přepnutím napětí na HIGH
  delay(1000);               // vteřinu čeká
  digitalWrite(led, LOW);    // vypne LED přepnutím napětí na LOW
  delay(1000);               // vteřinu čeká
}

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ítit trvale. Na jeden ze dvou drátů (třeba mezi + na zdroji a + na LED pásku) ale připojíme relé, které nám bude zapojení spínat. My jsme použili 5V LEDky a jako oddělený zdroj 5V sériový převodník. Protože se z USB se nedá odebrat moc proudu, pro napájení něčeho velkého bychom použili externí zdroj, který je schopen požadovaný proud dodat. Zapojení provedeme dle následujícího schématu:

Arduino - Hardware

Vidíme, že relé každou vteřinu sepne oddělený okruh, na kterém máme připojené LEDky.

To by bylo ke spínání velké zátěže vše.

V příští lekci, Arduino - Samostatný čip ATmega 328P, se naučíme používat samostatný čip ATMega 328P.


 

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 238x (1.25 kB)
Aplikace je včetně zdrojových kódů

 

Předchozí článek
MPU6050 akcelerometr a gyroskop pro Arduino
Všechny články v sekci
Arduino - Hardware
Přeskočit článek
(nedoporučujeme)
Arduino - Samostatný čip ATmega 328P
Článek pro vás napsal Adam Ježek
Avatar
Uživatelské hodnocení:
23 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