Cuprins:

Attiny85 Termometru OLED: 5 pași
Attiny85 Termometru OLED: 5 pași

Video: Attiny85 Termometru OLED: 5 pași

Video: Attiny85 Termometru OLED: 5 pași
Video: Термометр на олед дисплее 0.96". Финишная прошивка от goldenandy. 2024, Decembrie
Anonim
Attiny85 Termometru OLED
Attiny85 Termometru OLED
Attiny85 Termometru OLED
Attiny85 Termometru OLED

Acest proiect constă într-un termometru mic și simplu care indică temperatura actuală, umiditatea relativă și indicele de temperatură. Se poate realiza cu un ATmega328p, dar interesantul acestei versiuni utilizează un ATtiny85 cu dimensiunea și consumul de baterie convergen într-un dispozitiv mic și portabil.

A continuare a descris funcționarea, urmărit a arătat circuitul și finalizarea cu programul și câteva comentarii despre proiectul în general.

Provizii

1 x ATtiny85

1 x Arduino UNO / PRO / etc (programator del ATtiny)

1 x 128x64 ecran I2C OLED

1 x Senzor temperatura DHT22

1 x Resistencia 4.7MOhm (1 / 4W)

1 x condensator electrolitic 0.1uF

1 x Fuente de 3.3V - 5V 10+ x Jumpers

Pasul 1: Descrierea funcționării

Obiectivul proiectului afișează valorile anterioare menționate pe ecranul OLED, în plus, ca obiectiv secundar, și includerea utilizării bibliotecii sleep.he interrupt.h pentru activarea termometrului manual și astfel reducerea consumului pentru extinderea vieții de la batería.

Noul program se ghidează pentru următorul proces: Leer temperature -> Show temperature on screen -> Apagar ATtiny -> Reiniciar to presionar button.

Pentru fiecare unul de acești pași dejaremos la mayor parte del trabajo a las librerías ya existentes, por lo que no reinventaremos la rueda. La bibliotecă DHT sensor library de Adafruit (disponibil în IDE) și Tiny4kOLED de datacute pe care le-am descărcat de Github, care, parcă, autorul original este datacute și, în plus, trebuie să modificăm puțin apoi.

El method of reinicio can be tanto un button as two metas metálicas that se tocan for encender the team. În ceea ce privește personalul, el a găsit opțiunea de plasări metale mai multe interactiv.

Pasul 2: Circuitos

Circuitos
Circuitos
Circuitos
Circuitos
Circuitos
Circuitos

În prima imagine se găsește circuitul necesar pentru programarea ATtiny85. În primul rând trebuie să programezi Arduino (capacitorul trebuie să fie desconectat) cu schița ArduinoISP, care se află în Archivos -> Ejemplos -> 11. ArduinoISP. Una vez hecho esto se debe colocar el capacitor para evitar que nuestro Arduino se reinicie al programului el ATtiny85.

El ATtiny se poate alimenta direct din Arduino. În caz de utilizare o sursă de putere ca o baterie este necesar conectarea la masă (GND) a Arduino și el ATtiny85.

Colocarea unui buton între pinul 13 al Arduino și el 2 del ATtiny poate facilita efectuarea probelor ya că ecranul nu poate fi conectat când se programează la ATtiny.

Como se observa en las imágenes. El pin SDA del ATyiny es el 0 y el SCL / CLK es el 2. Nuestro DHT este conectat în pin 4.

Pasul 3: Programare

În primul rând, trebuie să selectăm „Arduino ca ISP” ca programator. Dacă încă nu au instalat placa pentru ATtiny, primind instalarea plăcii ATtinyCore de Spence Konde. Această placă nu mi-a generat nicio problemă de compilare în timpul realizării proiectului.

La placa trebuie să fie configurat fără BOD, cu un reloj de 8MHz intern și fără OptiBoot. Dacă utilizăm 1MHz comunicarea prin I2C nu este stabilă și la 16MHz cu cristal extern, în plus de a pierde doi pini digitali, consumul energetic crește considerabil.

Cabește să evidențiezi faptul că a modificat un arhiv în bibliotecă Tiny4kOLED. El archive modificado es "font8x16.h" y he cambiado the line 117 por the next code with the fin de change the symbol ~ por ° that useemos en ° C.

0x00, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

O continuare ajutat la schița necesară pentru proiect.

#include #include #include #include #define I_PINB PCINT3 #define I_PIN PB3 #define I_VECTOR PCINT0_vect #define adc_disable () (ADCSRA & = ~ (1 << aden)) disable = "" adc = "" converter #define DHTPIN 4 #define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); const uint8_t width = 128; const uint8_t înălțime = 64; bool volatil întors = fals;. // setați steagul pentru a redesena ecranul din nou}} void setup () {cli (); // opriți întreruperile PCMSK | = (1 << I_PINB); GIMSK | = (1 << PCIE); pinMode (I_PIN, INPUT); sei (); // activați întreruperile adc_disable (); // economisiți energie oprind convertorul set_sleep_mode (SLEEP_MODE_PWR_DOWN); // setați tipul de somn la somn profund oled.begin (lățime, înălțime, dimensiune (tiny4koled_init_128x64br), tiny4koled_init_128x64br); // pornește obiectul oled oled.setFont (FONT8X16); // acest font arată mai bine decât celălalt drawScreen (); oled.on (); întârziere (2000); dht.begin (); întors = adevărat; // semnalizare pentru ecran de desen} void sleep () {sleep_enable (); sleep_cpu (); } void loop () {if (turnat) {cli (); // opri întreruperile oled.on (); float h = dht.readHumidity (); // false read to reset dht cache delay (2200); // wait dht to load h = dht.readHumidity (); float t = dht.readTemperature (); float i = dht.computeHeatIndex (t, h, false); oled.setCursor (55, 1); oled.print (t); oled.print ("~ C"); oled.setCursor (55, 3); oled.print (h, 0); oled.print ("%"); oled.setCursor (55, 5); oled.print (i); oled.print ("~ C"); // simbolul ~ a fost modificat în bibliotecă pentru a arăta ca o întârziere a simbolului ° grade (5000); // arată timp de 5 secunde oled.off (); transformat = fals; sei (); // atașează întrerupe din nou} sleep (); // mereu dormi la sfârșit} void drawScreen () {// desenează cadrul și textul principal pentru (uint8_t y = 0; y <8; y ++) {oled.setCursor (0, y); oled.startData (); pentru (uint8_t x = 0; x <128; x + = 2) {oled.sendData (0b10101010); oled.sendData (0b01010101); } oled.endData (); } oled.setCursor (0, 0); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b00000101, lățime - 2); oled.sendData (0b11111111); oled.endData (); pentru (uint8_t y = 1; y <(înălțime - 8) / 8; y ++) {oled.setCursor (0, y); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b00000000, lățime - 2); oled.sendData (0b11111111); oled.endData (); } oled.setCursor (0, (înălțime - 8) / 8); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b10100000, lățime - 2); oled.sendData (0b11111111); oled.endData (); oled.setCursor (4, 1); oled.print ("Temp:"); oled.setCursor (4, 3); oled.print ("Hum:"); oled.setCursor (4, 5); oled.print ("Sens:"); }

Pasul 4: Concluzii

Concluzii
Concluzii
Concluzii
Concluzii

A pesar de su size insignificante, el ATtiny85 oferă o gamă largă de aplicații în care putem implementa acest controlator de mai puțin cost fără pierderea funcționalității. Personalmente no esperaba that afara possible include the control of screen and de sleep juntos due to the limitations of memory. Dichozamente, el programa ha entrado en nuestro ATtiny

Existen otras librerías para las pantallas OLED. La librería GFX de Adafruit no me permitió compilar por lo que decidí căuta ceva precis pentru ATtiny, dar există alte biblioteci și soluții care sunt interesante de explorare

El consumo del dispositivo es muy bajo. Considerând un uz constant, el a meditat și a estimat viața pentru o baterie de 3000mAh (NiMH o LiIon) în 500 de zile. El consum ar putea reduce și mai mult desconectând ecranul și senzorul direct dintr-un pin al ATtiny, dar fără a fi considerat necesar

Según Technoblogy.com el ATtiny poate opera într-un consum atât de jos ca cel mai mult în prima imagine, dar în acest proiect el a obținut un consum primar care corespunde celei de-a doua imagini. El consumo de la batería continúa și-l suficient de jos ca pentru un proiect factibil

Pasul 5: Legături Y Lecturas Relacionados

www.technoblogy.com/show?KX0&fbclid=IwAR0qu…

github.com/SpenceKonde/ATTinyCore

www.electroschematics.com/am2302-dht22-dat…

ww1.microchip.com/downloads/en/DeviceDoc/A…

embeddedthoughts.com/2016/06/06/attiny85-i…

www.instructables.com/id/ATtiny85-Interrup…

www.technoblogy.com/show?WNM

www.technoblogy.com/show?2F5D

Recomandat: