Índice:

Attiny85 Termómetro OLED: 5 etapas
Attiny85 Termómetro OLED: 5 etapas
Anonim
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED

Este projeto consiste em um termômetro pequeno e simples que muestra la temperatura atual, o humedad relativo e o índice de temperatura. Realize a realização com um ATmega328p, para que haja interesse nesta versão, é usar um ATtiny85 tamanho e consumo de bateria convertido em um dispositivo pequeno e portátil.

Uma continuação que descreve o funcionamento, seguido, mostra o circuito e finaliza com o programa e os comentários sobre o projeto em geral.

Suprimentos

1 x ATtiny85

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

1 x 128x64 pantalla I2C OLED

1 x temperatura do sensor DHT22

1 x Resistencia 4,7 MOhm (1 / 4W)

1 x capacitor eletrolítico 0,1uF

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

Etapa 1: Descripción Del Funcionamiento

O objetivo do projeto é mostrar os três valores anteriores atribuídos na pantalla OLED, además, como objetivo secundário, e inclui o uso da biblioteca sleep.he interrupt.h para ativar o termómetro manualmente e assim reduzir o consumo para estender a vida de la batería.

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

Para cada um de estos pasos dejaremos la mayor parte del trabajo a las librerías ya existentes, por lo que no reinventaremos la rueda. A biblioteca de sensores DHT de Adafruit (disponível no IDE) e Tiny4kOLED de dados que descargaremos de Github ya que, al parecer, o autor original es datacute y, además, necesitaremos modificarla un poco luego.

O método de reinicio pode ser tanto um botón como das placas metálicas que se tocam para encender o equipo. No personal, ele encontrado a opção de las placas metálicas más interactivo.

Etapa 2: Circuitos

Circuitos
Circuitos
Circuitos
Circuitos
Circuitos
Circuitos

En la primer imagen se encuentra el circuito que requerimos para programar el ATtiny85. Primeramente se debe programar al Arduino (o capacitor debe estar desconectado) com o sketch ArduinoISP, que se encuentra en Archivos -> Ejemplos -> 11. ArduinoISP. Uma vez mais, você deve colocar o capacitor para evitar que o novo Arduino reinicie o programa no ATtiny85.

El ATtiny se pode alimentar directamente do Arduino. Em caso de usar um recurso de poder como uma bateria é necessário conectar a massa (GND) do Arduino e o ATtiny85.

Colocar um botão entre o pino 13 do Arduino e o 2 do ATtiny pode facilitar o acesso ao hacer para que a pantalla não possa estar conectada com o programa do ATtiny.

Como se observa nas imagens. O pino SDA do ATyiny é o 0 e o SCL / CLK é o 2. Novo DHT está conectado ao pino 4.

Etapa 3: Programação

Primeiramente, devemos selecionar "Arduino as ISP" como o programador. Se não houver han instalado na placa para o ATtiny, recomendo instalar a placa ATtinyCore de Spence Konde. Esta placa não me gera nenhum problema de compilação durante a realização do projeto.

A placa deve estar configurada no BOD, com um reloj de 8MHz interno e no OptiBoot. Se utilizar 1MHz la comunicación por I2C no es estable y a 16MHz con cristal externo, además de perder dos pinheiros digitales, el consumo energético aumenta consideravelmente.

Cabe destacar que ele modificado um arquivo na biblioteca Tiny4kOLED. O arquivo modificado é "font8x16.h" e ele muda a linha 117 para o código seguinte com a fin de mudar o símbolo ~ por ° que usaremos em ° C.

0x00, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 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)) disable = "" adc = "" conversor #define DHTPIN 4 # define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); const uint8_t largura = 128; const uint8_t height = 64; bool volátil tornado = falso; / * * * Manipulador de interrupção * * / ISR (PCINT_VECTOR) {// a interrupção sempre se recupera do hibernação if (digitalRead (I_PIN) == HIGH) {Turn = true; // define o sinalizador para redesenhar a tela novamente}} void setup () {cli (); // desliga interrupções PCMSK | = (1 << I_PINB); GIMSK | = (1 << PCIE); pinMode (I_PIN, INPUT); sei (); // liga as interrupções adc_disable (); // economiza energia desligando o conversor set_sleep_mode (SLEEP_MODE_PWR_DOWN); // define o tipo de sono para sono profundo oled.begin (largura, altura, sizeof (tiny4koled_init_128x64br), tiny4koled_init_128x64br); // inicia o objeto oled oled.setFont (FONT8X16); // esta fonte parece melhor que a outra drawScreen (); oled.on (); atraso (2000); dht.begin (); virou = verdadeiro; // sinaliza para a tela de desenho} void sleep () {sleep_enable (); sleep_cpu (); } void loop () {if (rodado) {cli (); // desativa as interrupções oled.on (); float h = dht.readHumidity (); // leitura falsa para redefinir o atraso do cache dht (2200); // esperar dht para carregar 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"); // o símbolo ~ foi alterado na biblioteca para se parecer com um atraso de símbolo de ° grau (5000); // mostra por 5 segundos oled.off (); virou = falso; sei (); // anexar interrupções novamente} sleep (); // sempre vai dormir no final} void drawScreen () {// desenha o quadro e o texto principal para (uint8_t y = 0; y <8; y ++) {oled.setCursor (0, y); oled.startData (); para (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, largura - 2); oled.sendData (0b11111111); oled.endData (); para (uint8_t y = 1; y <(altura - 8) / 8; y ++) {oled.setCursor (0, y); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b00000000, largura - 2); oled.sendData (0b11111111); oled.endData (); } oled.setCursor (0, (altura - 8) / 8); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b10100000, largura - 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:"); }

Etapa 4: Conclusões

Conclusiones
Conclusiones
Conclusiones
Conclusiones

A pesar de su tamaño insignificante, o ATtiny85 oferece uma ampliação de gama de aplicativos e que podemos implementar este driver de baixo custo sem perder funcionalidad. Personalmente no esperaba que fuera possible incluir el control de pantalla y de sleep juntos debido a las limitaciones de memoria. Dichozamente, o programa está entrado em novo ATtiny

Existen otras librerías para las pantallas OLED. A biblioteca GFX de Adafruit não me permite compilar por lo que decidir buscar algo precisamente para o ATtiny, porque existem outras bibliotecas e soluções que interesantes de explorar

O consumo do dispositivo é muito bonito. Considerando um uso constante, ele medido e estimado a vida para uma bateria de 3000mAh (NiMH ou LiIon) em 500 dias. El consumo podría reduzir aún más desconectando a pantalla e o sensor diretamente desde un pin del ATtiny, pero no lo considerado necesario

Según Technoblogy.com o ATtiny pode operar em um consumo tan bajo como o descritor na imagem primária, pero neste projeto ele obtenido un consumo prefeito que corresponde al de la segunda imagem. O consumo da bateria continua siendo lo suficientemente baixo como para ser um projeto factível

Etapa 5: Links 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

Recomendado: