Close

Dá se sfouknout LEDka?

Arduin LED svička - sfouknutí

Když si chcete udělat pěkný večer, není nad to si zapálit svíčku. Geekové možná sáhnou po LED svíčce, která už dokáže docela obstojně ty skutečné svíčky napodobit. Tyhle umělé svíčky ale většinou neumí jednu věc, kterou od svíčky čekáte – aby se dala sfouknout. Kutil s přezdívkou electron_plumber se ale rozhodl, že vymyslí, jak by šlo LED svíčky zhasínat fouknutím.

Jeho projekt je založený na měření úbytku napětí na LED, který se mění s teplotou LED. Když na ni fouknete, dojde k ochlazení diody, Arduino UNO tuto změnu detekuje a LED zhasne.

Arduin LED svička - sfouknutí

Primárním účelem LEDek je, aby vydávaly světlo. Zároveň se ale dají použít jako překvapivě užitečné senzory. Pouze za použití Arduino UNO, LED, dvou vodičů a rezistoru je tak možné sestavit nejenom sfouknutelnou LED, ale i další typy uživatelských rozhraní.

Jak to funguje?

Když skrz LED prochází proud, dochází k jejímu zahřívání. Rychlost zahřívání závisí na procházejícím proudu, ale také na tom, jak dobře LED ochlazujeme. Když fouknete na zahřátou LED, dojde k jejímu ochlazení a zároveň poklesu úbytku napětí na diodě, který můžeme měřit.

Obvod je velice jednoduchý a vlastně vypadá tak, jako kdybyste jen napájeli LED. Jedinou úpravou je připojení dalšího vodiče za rezistor, který slouží právě k měření úbytku napětí. Změna napětí, kterou je potřeba měřit, je v řádu milivoltů, což je na hranici toho, co umí Arduino spolehlivě měřit. Proto potřebujeme, aby byla LED malá a změna teploty při fouknutí tak byla dostatečně velká. Jako ideální se ukázalo SMD pouzdro 0402. I vodiče by měly být co nejtenčí, aby nedocházelo ke zbytečnému ochlazování LED.

Připojení sfouknutelné LED k Arduinu
Připojení sfouknutelné LED k Arduinu

Na následujícím videu jsme použili pro vyzkoušení modrou LED velikosti 0603 s odporem 100 Ω a funguje to obstojně s níže uvedeným programem. Tomuhle se prostě nedá odolat a museli jsme to vyzkoušet :).

Program pro Arduino

// Program pro vytvoření efektu hořící svíčky (LED), kterou je možné sfouknout (zhasnout).
// Funkce se obnoví po 2 sekundách
// Copyright 2018, Paul H. Dietz

// Připojení LED
#define PLUS A1               // Pin pro napájení pro LED
#define MEASURE A0            // Pin pro měření napětí na LED (anoda LED)
// Katoda LED je připojena na GND

#define NUMSAMPLES 10         // Počet vzorků pro vyhodnocení
#define MINJUMP 150           // Minimální změna pro sfouknutí

long int sensedata[NUMSAMPLES];
int dataptr = 0;
int buffull = 0;

void setup() {
  Serial.begin(250000);                     // Inicializace sériové linky
  pinMode(MEASURE, INPUT);
  pinMode(PLUS, OUTPUT);
  digitalWrite(PLUS, HIGH);                 // Rozsvícení LED
}

void loop() {
  int cnt;
  long int sum = 0;

  // Sum 256 (pro redukci šumu)
  for (cnt = 0; cnt < 256; cnt++) {
    sum = sum + analogRead(MEASURE);
  }
  
  Serial.println(sum);                      // Výstupní sum pro vyhodnocení na sériové lince

  // Porovnání měření s nejstarším, pokud je buffer plný
  if (buffull && (sum > (sensedata[dataptr] + MINJUMP))) {
    // Pokud teplota dosáhne minima tak vypni LED
    digitalWrite(PLUS, LOW);
    dataptr = 0;                            // Obnovení bufferu
    buffull = 0;
    delay(2000);                            // Zhasnutí LED na 2 sekundy
    digitalWrite(PLUS, HIGH);
  }
  else {
    sensedata[dataptr] = sum;               // Uloží poslední data do bufferu
    dataptr++;                              // Aktualizuje ukazatel bufferu
    if (dataptr == NUMSAMPLES) {            // Kontrola dosažení počtu vzorků
      dataptr = 0;                          // Reset datapr
      buffull = 1;                          // Označení plného bufferu
    }
  }
}

Přeloženo z https://blog.arduino.cc/2018/08/21/blow-out-this-arduino-led-candle/ a upraveno.

Zbyšek Voda

Napsat komentář