Sommario:

Attiny85 Termometro OLED: 5 passaggi
Attiny85 Termometro OLED: 5 passaggi

Video: Attiny85 Termometro OLED: 5 passaggi

Video: Attiny85 Termometro OLED: 5 passaggi
Video: Corso Microcontrollori Seconda Lezione 2024, Novembre
Anonim
Attiny85 Termometro OLED
Attiny85 Termometro OLED
Attiny85 Termometro OLED
Attiny85 Termometro OLED

Este proyecto consiste en un termómetro pequeño y simple que muestra la temperatura current, la humedad relativa y el índice de temperatura. È possibile realizzare con un ATmega328p, pero la versione interessante di questa versione es utilizzare un ATtiny85 come batteria e consumo di batteria convergere su un dispositivo portatile e portatile.

A continuación describiré el funcionamiento, seguido mostraré el circuito y finalizaré con el programa y algunos comentarios sobre el proyecto en general.

Forniture

1 x ATtiny85

1 x Arduino UNO/PRO/etc (programmatore di ATtiny)

1 x 128x64 pantalla I2C OLED

1 x Sensore di temperatura DHT22

1 x Resistenza 4.7MOhm (1/4W)

1 x condensatore elettrolitico 0.1uF

1 x Alimentazione da 3.3V - 5V 10+ x Ponticelli

Passaggio 1: descrizione del funzionamento

L'obiettivo del progetto può essere visualizzato nei tre valori precedenti mencionados en la pantalla OLED, además, como objetivo secundario, e incluido el uso de la libreria sleep.he interrupt.h per attivare il termómetro e come ridurre manualmente il consumo per extender la vida de la bateria.

Nuestro programa se guiará por el siguiente proceso: Leer temperatura -> Mostrar temperatura en pantalla -> Apagar ATtiny -> Reiniciar al presionar botón.

Para cada uno de estos pasos dejaremos la mayor parte del trabajo a las librerías ya existentes, por lo que no reinventaremos la rueda. La libreria DHT sensor library de Adafruit (disponible en el IDE) y Tiny4kOLED de datacute que descargaremos de Github ya que, al parecer, el autore original es datacute y, además, necesitaremos modificarla un poco luego.

El método de renicio puede ser tanto un botón como dos placas metálicas que se tocan para encender el equipo. En lo personal, egli encontrado la opción de las placas metálicas más interactivo.

Passaggio 2: circuiti

circuiti
circuiti
circuiti
circuiti
circuiti
circuiti

En la primer imagen se encuentra el circuito que requerimos para programar el ATtiny85. Primeramente se debe programar al Arduino (el condensatore debe estar desconectado) con lo sketch ArduinoISP, che se encuentra in Archivos -> Ejemplos -> 11. ArduinoISP. Una vez hecho esto se debe colocar el condensatore para evitar que nuestro Arduino se reinicie al programar el ATtiny85.

El ATtiny se puede alimentare direttamente del Arduino. En caso de utilizar una fuente de poder come una batería es necesario conectar la masa (GND) del Arduino y el ATtiny85.

Colocar un botón entre el pin 13 del Arduino e el 2 del ATtiny può facilitare l'hacer pruebas ya que la pantalla no puede estar conectada cuando se programa al ATtiny.

Come osservare le immagini. El pin SDA del ATyiny es el 0 y el SCL/CLK es el 2. Nuestro DHT está conectado en el pin 4.

Fase 3: Programmazione

Primeramente, debemos selector "Arduino as ISP" como el programador. Si aún no han instalado la placa para el ATtiny, recomiendo instalar la placa ATtinyCore de Spence Konde. Esta placa no me generó ningún problema de compilación durante la realizzazione del progetto.

La placa debe estar configurada sin BOD, con un reloj de 8MHz interno e sin OptiBoot. Si utilizza 1MHz la comunicazione per I2C non è stabile e 16MHz con cristalli esterni, il consumo di energia aumenta notevolmente.

Cabe destacar que he modificado un archivio en la librería Tiny4kOLED. El archivo modificado es "font8x16.h" y he cambiado la línea 117 por el siguiente código con el fin de cambiar el símbolo ~ por ° que usaremos en °C.

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

A continuación ajunto el sketch necesario para el proyecto.

#include #include #include #include #define I_PINB PCINT3 #define I_PIN PB3 #define I_VECTOR PCINT0_vect #define adc_disable() (ADCSRA &= ~(1<<aden)) converter #define DHTPIN 4 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); const uint8_t larghezza = 128; const uint8_t altezza = 64; volatile bool girato = falso; /* * * Gestore di interrupt * */ ISR(PCINT_VECTOR){ //l'interrupt si ripristina sempre dallo stato di sospensione if(digitalRead(I_PIN) == HIGH) { turn = true; //imposta il flag per ridisegnare nuovamente lo schermo } }void setup() { cli(); //disattiva gli interrupt PCMSK |= (1 << I_PINB); GIMSK |= (1 << PCIE); pinMode(I_PIN, INPUT); sei(); //attiva gli interrupt adc_disable(); //risparmia energia spegnendo il convertitore set_sleep_mode(SLEEP_MODE_PWR_DOWN); //imposta il tipo di sonno su deep sleep oled.begin(width, height, sizeof(tiny4koled_init_128x64br), tiny4koled_init_128x64br); //avvia l'oggetto oled oled.setFont(FONT8X16); //questo font ha un aspetto migliore dell'altro drawScreen(); oled.on(); ritardo (2000); dht.begin(); girato = vero; //flag per la schermata di disegno } void sleep(){ sleep_enable(); sleep_cpu(); } void loop() { if (girato){ cli(); //disattiva gli interrupt oled.on(); float h = dht.readHumidity();//false read per ripristinare dht cache delay(2200);//wait dht per caricare 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"); //il simbolo ~ è stato modificato nella libreria in modo che assomigli a un simbolo di ritardo di ° gradi (5000); //mostra per 5 secondi oled.off(); girato = falso; sei();//attach interrompe di nuovo } sleep(); //vai sempre a dormire alla fine } void drawScreen() { //disegna il frame e il testo principale for (uint8_t y = 0; y < 8; y++) { oled.setCursor(0, y); oled.startData(); for (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, larghezza - 2); oled.sendData(0b11111111); oled.endData(); for (uint8_t y = 1; y < (altezza - 8) / 8; y++) { oled.setCursor(0, y); oled.startData(); oled.sendData(0b11111111); oled.repeatData(0b00000000, larghezza - 2); oled.sendData(0b11111111); oled.endData(); } oled.setCursor(0, (altezza - 8) / 8); oled.startData(); oled.sendData(0b11111111); oled.repeatData(0b10100000, larghezza - 2); oled.sendData(0b11111111); oled.endData(); oled.setCursor(4, 1); oled.print("Temp:"); oled.setCursor(4, 3); oled.print("Uhm:"); oled.setCursor(4, 5); oled.print("Sens:"); }

Fase 4: Conclusioni

Conclusioni
Conclusioni
Conclusioni
Conclusioni

A pesar de su tamaño insignificante, el ATtiny85 ofrece una amplia gama de aplicaciones en las que podemos implementar este controlador de bajo costo sin perder funcionalidad. Personalmente no esperaba que fuera posible incluir el control de pantalla y de sleep juntos debido a las limitaciones de memoria. Dichozamente, el programa ha entrado en nuestro ATtiny

Esistono altre librerie per i pantaloni OLED. La libreria GFX di Adafruit non mi permetta di compilare per lo que decidí buscar anche specificando per el ATtiny, pero esiste o librerías y soluciones que son interesantes de explorar

Il consumo del dispositivo è molto utile. Considerando un uso constante, he medido y estimado la vida para una batería de 3000mAh (NiMH o LiIon) en 500 días. Il consumo della polvere riduci a un massimo di scollegare la pantalla e il sensore direttamente da un pin del ATtiny, pero non lo considero necesario

Según Technoblogy.com el ATtiny puede operare su un consumo di abbronzatura come el mostrado en la primera imagen, pero en este proyecto lui ottenere un consumo maggiore che corrisponde alla seconda immagine. El consumo de la batería continúa siendo lo suficientemente bajo como para ser un proyecto factible

Passaggio 5: collegamenti e lezioni di relazione

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

Consigliato: