ATtiny85 Piranha LED lampa

Zápisník experimentátora

Hierarchy: ATtiny85

Narození druhého dítěte bylo inspirací pro tento projekt. Potřebovali jsme snadno přenositelný zdroj světla, na kterém lze plynule nastavit jas. Využil jsem zkušenosti z projektu​ Bambíno a ATtiny13A a vytvořil jsem projekt LED světla, které je napájeno 4,5 V baterií. Toto LED světlo je ovládáno mikrokontrolérem ATtiny85, ale program je kompatibilní i pro ATtiny13A.

Na obrázku je univerzální plošný spoj. Na něm se nachází 10 LED typu Piranha spolu s předřadným rezistory. Všechny LED diody jsou paralelně připojeny na Mosfet 2N7000, jehož gate je ovládána z mikrokontroléru. To umožňuje plynule nastavit jas pomocí PWM z mikrokontroléru. Jas se nastavuje potenciometrem, který není na plošném spoji. Potenciometr musí být umístěn ve stěně krabice, která zapouzdřuje desku s plošnými spoji. My na toto doma využíváme nadbytečné plastové dózy na potraviny, ale stejně dobře poslouží i plastová krabička s průhlednou stěnou.

Schéma celého obvodu je na tomto obrázku. Vidíte, že je to celé velmi jednoduché. Na gate MOSFETy není třeba dát rezistor, protože 2N7000 potřebuje pouze maličký elektrický náboj na otevření. Zato je tam potřebný rezistor R2, který přidrží jako pull-down gate během startu mikrokontroléru, kdy je pin PB0 ve vysoké impedanci a mohlo by to náhodně zablikat i při dotyku prstu. LED dioda je připojena přes předřadný rezistor, který nastavuje proud přes LED diodu na 11-13 mA. To závisí na napětí na baterii. Použil jsem plochou baterii s napětím 4,5 V, která mi zůstala z předchozího projektu.

Na tomto obrázku je ATtiny85 na vývojové desce. Je připojena LED dioda a potenciometr. Vývojová deska umožňuje programování mikrokontroléru přes USBasp.

Tento obrázek ukazuje zadní stranu univerzální desky plošných spojů. LED diody Piranha mají čtyři vývody. To je umožňuje snadno prispájkovať do řad vedle sebe. Význam jednotlivých vývodů zjistíte pomocí multimetru. Vždy dva vývody jsou připojeny na anodu a katodu LED diody.

Na tomto obrázku je vidět použité součástky.

  • Univerzální plošný spoj
  • Potenciometr 100k
  • 10x rezistor 150R
  • 10x LED dioda Piranha
  • 1x Mosfet 1N7000 (na obrázku jsou dva, ale stačí na všechno i jeden)
  • 8 pinový socket pro ATtiny85

Na tomto obrázku je ukázka z testování pomocí zdroje konstantního proudu. Používám B3603. Proud je nastaven na 1 mA. Všimněte si, kam jsou během testu připojeny propojovací vodiče. VCC je připojeno na pin 8 a GND na pin 4. Kromě toho je ještě propojen pin 8 a 5, což simuluje signál HIGH na gate MOSFETy.

Program

Program je jen drobnou úpravou mého staršího programu. Na pinu PB2 měří napětí z potenciometru a podle něj nastavuje PWM signál na pine PB0. PWM signál je přizpůsoben​ lidské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 se nachází na serveru GitHub.


05.09.2017


Menu