ATtiny85 Piranha LED lampa

Zápisník experimentátora

Hierarchy: ATtiny85

Narodenie druhého dieťaťa bolo inšpiráciou pre tento projekt. Potrebovali sme ľahko prenositeľný zdroj svetla, na ktorom je možné plynule nastaviť jas. Využil som skúsenosti z projektu Bambíno a ATtiny13A a vytvoril som projekt LED svetla, ktoré je napájané 4,5 V batériou. Toto LED svetlo je ovládané mikrokontrolérom ATtiny85, ale program je kompatibilný aj pre ATtiny13A.

Na obrázku je univerzálny plošný spoj. Na ňom sa nachádza 10 LED typu Piranha spolu s predradnými rezistormi. Všetky LED diódy sú paralelne pripojené na Mosfet 2N7000, ktorého gate je ovládaná z mikrokontroléra. To umožňuje plynule nastaviť jas pomocou PWM z mikrokontroléra. Jas sa nastavuje potenciometrom, ktorý nie je na plošnom spoji. Potenciometer je potrebné umiestniť do steny krabičky, ktorá zapúzdruje plošný spoj. My na toto doma využívame nadbytočné plastové dózy na potraviny, ale rovnako dobre poslúži aj plastová krabička s priehľadnou stenou.

Schéma celého obvodu je na tomto obrázku. Vidíte, že je to celé veľmi jednoduché. Na gate Mosfetu nie je potrebné dať rezistor, pretože 2N7000 potrebuje iba maličký elektrický náboj na otvorenie. Zato je tam potrebný rezistor R2, ktorý pridrží ako pull-down gate počas štartu mikrokontroléra, kedy je pin PB0 vo vysokej impedancii a mohlo by to náhodne zablikať aj pri dotyku prsta. LED dióda je pripojená cez predradný rezistor, ktorý nastavuje prúd cez LED diódu na 11-13 mA. To závisí od napätia na batérii. Použil som plochú batériu s napätím 4,5 V, ktorá mi ostala z predchádzajúceho projektu.

Na tomto obrázku je ATtiny85 na vývojovej doske. Je pripojená LED dióda a potenciometer. Vývojová doska umožňuje programovanie mikrokontroléra cez USBasp.

Na tomto obrázku je zadná strana univerzálneho plošného spoja. LED diódy Piranha majú štyri vývody. To umožňuje ich ľahko prispájkovať do radov vedľa seba. Význam jednotlivých vývodov zistíte pomocou multimetra. Vždy dva vývody sú pripojené na anódu a katódu LED diódy.

Na tomto obrázku je vidno použité súčiastky.

  • Univerzálny plošný spoj
  • Potenciometer 100k
  • 10x rezistor 150R
  • 10x LED dióda Piranha
  • 1x Mosfer 1N7000 (na obrázku sú dva, ale stačí na všetko aj jeden)
  • 8 pinový socket pre ATtiny85

Na tomto obrázku je ukážka z testovania pomocou zdroja konštantného prúdu. Používam B3603. Nastavený je prúd 1 mA. Všimnite si, kam sú počas testu pripojené prepojovacie vodiče. VCC je pripojené na pin 8 a GND na pin 4. Okrem toho je ešte prepojený pin 8 a 5, čo simuluje signál HIGH na gate Mosfetu.

Program

Program je len drobnou úpravou môjho staršieho programu. Na pine PB2 meria napätie z potenciometra a podľa neho nastavuje PWM signál na pine PB0. PWM signál je prispôsobený ľudskému oku.

const int led = 0;
const int pot = A1;
int pot_value = 0;

// ATMEL ATTINY85
//
//                  +-\/-+
//      (D 5) PB5  1|    |8  Vcc
//      (D 3) PB3  2|    |7  PB2 (D 2) pot
//      (D 4) PB4  3|    |6  PB1 (D 1)
//            GND  4|    |5  PB0 (D 0) led
//                  +----+

// table of exponential values
// generated for values of i from 0 to 255 -> x=round( pow( 2.0, i/32.0) - 1);
const byte table[] PROGMEM = {
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  0,   0,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,
  2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,
  3,   3,   3,   3,   3,   3,   4,   4,   4,   4,   4,   4,   4,   4,   4,   5,
  5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,   7,   7,
  7,   7,   7,   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,  10,  10,  10,
 10,  11,  11,  11,  11,  12,  12,  12,  12,  13,  13,  13,  14,  14,  14,  15,
 15,  15,  16,  16,  16,  17,  17,  18,  18,  18,  19,  19,  20,  20,  21,  21,
 22,  22,  23,  23,  24,  24,  25,  25,  26,  26,  27,  28,  28,  29,  30,  30,
 31,  32,  32,  33,  34,  35,  35,  36,  37,  38,  39,  40,  40,  41,  42,  43,
 44,  45,  46,  47,  48,  49,  51,  52,  53,  54,  55,  56,  58,  59,  60,  62,
 63,  64,  66,  67,  69,  70,  72,  73,  75,  77,  78,  80,  82,  84,  86,  88,
 90,  91,  94,  96,  98, 100, 102, 104, 107, 109, 111, 114, 116, 119, 122, 124,
127, 130, 133, 136, 139, 142, 145, 148, 151, 155, 158, 161, 165, 169, 172, 176,
180, 184, 188, 192, 196, 201, 205, 210, 214, 219, 224, 229, 234, 239, 244, 250
};

///
/// Setup ports
///
void setup() {
  pinMode(led, OUTPUT);
  pinMode(pot, INPUT);
}

///
/// Main loop
///
void loop() {
  int p = analogRead(pot);
  pot_value = map(p, 0, 1023, 0, 255);
  pot_value = pgm_read_byte(&table[pot_value]);
  analogWrite(led, pot_value);
  delay(10);
}

Zdrojový kód programu sa nachádza na serveri GitHub.


03.09.2017


Menu