Cuprins:
- Provizii
- Pasul 1: Descrierea funcționării
- Pasul 2: Circuitos
- Pasul 3: Programare
- Pasul 4: Concluzii
- Pasul 5: Legături Y Lecturas Relacionados
Video: Attiny85 Termometru OLED: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:42
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
Î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
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:
Termometru luminos - lumină de grădină vitaminizată (eNANO De Jardin): 6 pași
Termometru luminos - Lumina de grădină vitaminizată (eNANO De Jardin): Lumina de grădină vitaminizată cu arduino NANO și un senzor de temperatură BMP180. Lumina noastră de grădină umilă va avea o putere secretă: va putea indica temperatura exterioară prin intermediul unui cod de culoare și Funcționarea sa este după cum urmează: Este
Termometru inteligent cu infraroșu IOT (COVID-19): 3 pași
Termometru inteligent cu infraroșu IOT (COVID-19): Datorită revoltei COVID din 2019, am decis să realizăm un termometru inteligent cu infraroșu IOT care să se conecteze la dispozitive inteligente pentru a arăta temperatura înregistrată, aceasta nu este doar o alternativă mai ieftină, ci și o mare modul de predare pentru tehnologie și IOT care
Termometru de cameră DIY folosind un modul OLED: 7 pași (cu imagini)
Termometru de cameră DIY folosind un modul OLED: învățăm cum să construim un termometru de cameră folosind senzorul DS18B20 și un modul OLED. Folosim un Piksey Pico ca placă principală, dar schița este compatibilă și cu plăcile Arduino UNO și Nano, astfel încât să le puteți folosi și pe acestea
Utilizați smartphone-ul ca termometru fără contact / termometru portabil: 8 pași (cu imagini)
Utilizați telefonul inteligent ca termometru fără contact / termometru portabil: măsurarea temperaturii corpului cu un contact fără contact / ca un pistol termic. Am creat acest proiect deoarece Thermo Gun este acum foarte scump, așa că trebuie să primesc o alternativă pentru a face DIY. Și scopul este de a face cu versiune cu buget redus. Furnizează MLX90614Ardu
Termometru cu infraroșu fără contact pe bază de Arduino - Termometru IR folosind Arduino: 4 pași
Termometru cu infraroșu fără contact pe bază de Arduino | Termometru bazat pe IR folosind Arduino: Bună băieți, în acest instructables vom face un termometru fără contact folosind arduino. temperatura atunci în acel scenariu