Arduino a bipolárny tranzistor ako spínač

Zápisník experimentátora

V tomto článku si vysvetlíme, ako môžeme posilniť výstupný pin Arduina pomocou tranzistora. Účelom článku nie je vysvetľovať teóriu fungovania tranzistorov. Pri nej sa obmedzíme len na nevyhnutné minimum. Ako príklad použijeme vysokosvietiacu LED diódu, ktorou môže tiecť prúd 350 mA. To je vysoko nad možnosťami Arduina. Pomocou tranzistora ju budeme schopní ovládať.

Zoznam súčiastok

Potrebujeme tieto súčiastky.

  • Breadboard {linkBreadboard}
  • Rezistor 100R, 10R, 1k {linkR}
  • LED dióda {linkLED}
  • NPN Tranzistor BC547B {linkTransistor}
  • OLED displej {linkOLED}
  • Prepojovacie vodiče
  • Arduino {linkArduino}

Bipolárny tranzistor

Bipolárny tranzistor funguje tak, že na bázu tranzistora musíte pripojiť výstupný pin z Arduina. Musíte pretekajúci prúd obmedziť pomocou rezistora. Pretože použitý rezistor BC547B má zosilujúci činiteľ približne 200, môžeme použiť rezistor s hodnotou 1k. Ak by ste si chceli hodnotu vypočítať, môžete tak urobiť pomocou jednoduchého vzorca. Napätie otvoreného tranzistora medzi bázou a emitorom je približne 0,7V. Aby sme mali istotu, že sa tranzistor otvorí, použijeme pre istotu trojnásobok toho, čo potrebujeme.

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

Malá poznámka k zapojeniu. Na bázu tranzistora by sme mali zapojiť ešte jeden rezistor R3 s hodnotou 100k. Pri takomto zapájaní na breadboarde sa nestane nič zlé, ak ho vynecháme. Arduino má ale svoje výstupy po pripojení na zdroj napätia v stave vysokej impedancie. To znamená, že nie sú pripojené ani na VCC ani na GND. Sú ako keby vo vzduchu. A pretože na bázu stačí priviezť malý prúd, aby sa tranzistor zopol, môže sa nám stať, že sa dióda na malú chvíľu rozsvieti tesne pred tým, ako sa spustí program v Arduine.

Program

V zapojení som použil aj OLED displej. V tomto konkrétnom prípade blikania LED diódou nie je potrebný, ale už si pripravujem materiál na nasledujúci článok. V tomto prípade sa na displeji iba zobrazuje aktuálny stav na báze tranzistora. V programe využívam knižnicu TimerOne na blikanie LED diódou v polsekundových intervaloch.

#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 sa nachádza na serveri GitHub.


01.03.2020


Menu