Arduino a bipolární tranzistor jako spínač

Zápisník experimentátora

V tomto článku si vysvětlíme, jak můžeme posílit výstupní pin Arduina pomocí tranzistoru. Účelem článku není vysvětlovat teorii fungování tranzistorů. Při ní se omezíme jen na nezbytné minimum. Jako příklad použijeme vysokosvietiacu LED diodu, kterou může téct proud 350 mA. To je vysoko nad možnostmi Arduino. Pomocí tranzistoru ji budeme schopni ovládat.

Seznam součástek

Potřebujeme tyto součástky.

  • Breadboard {linkBreadboard}
  • Rezistor 100R, 10R, 1k {linkR}
  • LED dioda {linkLED}
  • NPN Tranzistor BC547B {linkTransistor}
  • OLED displej {linkOLED}
  • Propojovací vodiče
  • Arduino {linkArduino}

Bipolární tranzistor

Bipolární tranzistor funguje tak, že na bázi tranzistoru musíte připojit výstupní pin z Arduina. Musíte protékající proud omezit pomocí rezistoru. Protože použitý rezistor BC547B má zesilující činitel přibližně 200, můžeme použít rezistor s hodnotou 1k. Pokud byste si chtěli hodnotu vypočítat, můžete tak učinit pomocí jednoduchého vzorce. Napětí otevřeného tranzistoru mezi bází a emitorem je přibližně 0,7. Abychom měli jistotu, že se tranzistor otevře, použijeme pro jistotu trojnásobek toho, co potřebujeme.

(5V - 0,7V) / 1000 * 200 / 3 = 0.28A

Malá poznámka k zapojení. Na bázi tranzistoru bychom měli zapojit ještě jeden rezistor R3 s hodnotou 100k. Při takovém zapojování na breadboarde se nestane nic špatného, pokud ho vynecháme. Arduino má ale své výstupy po připojení na zdroj napětí ve stavu vysoké impedance. To znamená, že nejsou připojeny ani na VCC ani na GND. Jsou jako kdyby ve vzduchu. A protože na bázi stačí přivézt malý proud, aby se tranzistor sepnul, může se nám stát, že se dioda na malou chvíli rozsvítí těsně před tím, než se spustí program v Arduinu.

Program

V zapojení jsem použil i OLED displej. V tomto konkrétním případě blikání LED diodou není nutný, ale už si připravuji materiál na následující článek. V tomto případě se na displeji pouze zobrazuje aktuální stav na bázi tranzistoru. V programu využívám knihovnu TimerOne na blikání LED diodou v půlsekundovou intervalech.

#include <U8g2lib.h>
#include <TimerOne.h>

U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

#define ledPin 6
int ledState = LOW;

void setup() {
  u8g2.begin();
  u8g2.setFont(u8g2_font_ncenB10_tr);

  pinMode(ledPin, OUTPUT);
  Timer1.initialize(500000); // 500 ms
  Timer1.attachInterrupt(blinkLed);
}

void loop() {
  for (int i = 12; i < 64 - 24; i++) {
    drawFrame(i);
    delay(10);
  }
  for (int i = 63 - 24; i >= 12; i--) {
    drawFrame(i);
    delay(10);
  }
}

void drawFrame(int y) {
  u8g2.firstPage();
  do {

  u8g2.drawStr(0, y, "Arduino Slovakia");
  u8g2.drawStr(8, y + 12, "Blink");
  u8g2.drawStr(8, y + 24, ledState ? "ON" : "OFF");
  for (int j = 0; j <= 128; j += 2)
    u8g2.drawLine(j, 0, j, (j % 10 == 0 ? 2 : 1));
  for (int j = 0; j <= 64; j += 2)
    u8g2.drawLine(0, j, (j % 10 == 0 ? 2 : 1), j);

  } while ( u8g2.nextPage() );
}

void blinkLed(){
  ledState = !ledState;
  digitalWrite(ledPin, ledState);
}

Zdrojový kód

Zdrojový kód se nachází na serveru GitHub.


01.03.2020


Menu