Índice:
- Suprimentos
- Etapa 1: Descripción Del Funcionamiento
- Etapa 2: Circuitos
- Etapa 3: Programação
- Etapa 4: Conclusões
- Etapa 5: Links Y Lecturas Relacionados
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
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
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
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:
Termômetro luminoso - luz de jardim vitaminada (eNANO De Jardin): 6 etapas
Termômetro Luminoso - Luz de Jardim Vitaminizada (eNANO De Jardin): Luz de Jardim Vitaminizada com Arduino NANO e sensor de temperatura BMP180. Nossa humilde Luz de Jardim terá um poder secreto: será capaz de indicar a temperatura externa por meio de um código de cores e piscando. Sua operação é a seguinte: It i
ATtiny85 Wearable Vibrating Activity Tracking Watch & Programming ATtiny85 With Arduino Uno: 4 etapas (com imagens)
ATtiny85 Relógio de rastreamento de atividade vibratória vestível e programação ATtiny85 com Arduino Uno: Como fazer o relógio de rastreamento de atividade vestível? Este é um gadget vestível projetado para vibrar quando detecta estagnação. Você passa a maior parte do tempo no computador como eu? Você fica sentado por horas sem perceber? Então este dispositivo é f
Termômetro de sala faça você mesmo usando um módulo OLED: 7 etapas (com fotos)
Termômetro de sala DIY usando um módulo OLED: Aprendemos como construir um termômetro de sala usando o sensor DS18B20 e um módulo OLED. Usamos um Piksey Pico como placa principal, mas o esboço também é compatível com as placas Arduino UNO e Nano, então você também pode usá-las
Usar smartphone como termômetro sem contato / termômetro portátil: 8 etapas (com fotos)
Use Smartphone como termômetro sem contato / termômetro portátil: Medir a temperatura corporal com sem contato / sem contato como uma pistola térmica. Eu criei este projeto porque o Thermo Gun agora é muito caro, então preciso encontrar uma alternativa para fazer DIY. E o objetivo é fazer com a versão de baixo orçamento.SuppliesMLX90614Ardu
Termômetro infravermelho sem contato baseado em Arduino - Termômetro baseado em IR usando Arduino: 4 etapas
Termômetro infravermelho sem contato baseado em Arduino | Termômetro baseado em IR usando Arduino: Olá pessoal, neste instructables faremos um termômetro sem contato usando arduino. Já que às vezes a temperatura do líquido / sólido é muito alta ou muito baixa e então é difícil fazer contato com ele e ler sua temperatura então naquele cenário