Innholdsfortegnelse:

Attiny85 Termómetro OLED: 5 trinn
Attiny85 Termómetro OLED: 5 trinn

Video: Attiny85 Termómetro OLED: 5 trinn

Video: Attiny85 Termómetro OLED: 5 trinn
Video: Attiny85 документация 2024, Oktober
Anonim
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED

Este proyecto consiste en un termómetro pequeño y simple que muestra la facta actual, la humedad relativa y el indice de temperatura. Det kan realiseres med ATmega328p, men kan også brukes i versjoner av ATtiny85 for å konvertere et batteri og disponere et porto.

En fortløpende beskrivelse av funksjonen, som gir en omfattende oversikt over alle programmer og generelle kommentarer.

Rekvisita

1 x ATtiny85

1 x Arduino UNO/PRO/etc (programleder for ATtiny)

1 x 128x64 pantalla I2C OLED

1 x Sensortemperatura DHT22

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

1 x kondensator electrolítico 0.1uF

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

Trinn 1: Beskriv Del Funcionamiento

El objetivo del proyecto es mostrar los tres valores anteriormente mencionados en la pantalla OLED, además, como objetivo secundario, e incluido el uso de la librería sleep. He interrupt. la batería.

Nuestro programa se guiará por el siguiente proceso: Leer temperatura -> Mostrar temperatura en pantalla -> Apatar 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 librería DHT sensor library de Adafruit (disponible en el IDE) y Tiny4kOLED de datacute que descargaremos de Github ya que, al parecer, el author original es datacute y, además, necesitaremos modificarla un poco luego.

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

Trinn 2: Circuitos

Kretser
Kretser
Kretser
Kretser
Kretser
Kretser

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

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

Colocar un botón entre el pin 13 del Arduino y el 2 del ATtiny puede facilitar el hacer pruebas ya que la pantalla no puede estar conectada cuando se programa al 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 está conectado en el pin 4.

Trinn 3: Programmering

Primeramente, debemos seleccionar "Arduino as ISP" como el programador. Si aún no han installer la placa para el ATtiny, recommendo installer la placa ATtinyCore de Spence Konde. Esta placa no me generó ningún problema de compilación durante la realización del proyecto.

La placa debe estar configurada sin BOD, med en reloj av 8MHz intern og y OptiBoot. Det bruker 1MHz kommunikasjon for I2C og er ikke tilgjengelig for 16MHz eksternt, además de perder dos pines digitales, el consumo energético aumenta considerablemente.

Kan deaktiveres og kan endres i arkiv av 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)) disable = "" adc = "" converter #define DHTPIN #define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); const uint8_t bredde = 128; const uint8_t høyde = 64; flyktig bool slått = feil; / * * * Avbruddshåndterer * */ISR (PCINT_VECTOR) {// interrupt gjenoppretter alltid fra søvn hvis (digitalRead (I_PIN) == HIGH) {slått = sant; // sett flagget til å tegne skjermen igjen}} ugyldig oppsett () {cli (); // slå av avbryter PCMSK | = (1 << I_PINB); GIMSK | = (1 << PCIE); pinMode (I_PIN, INPUT); sei (); // slå på avbrudd adc_disable (); // spare strøm ved å slå av omformeren set_sleep_mode (SLEEP_MODE_PWR_DOWN); // angi søvntypen til dyp søvn oled.begin (bredde, høyde, størrelse på (tiny4koled_init_128x64br), tiny4koled_init_128x64br); // start oled objekt oled.setFont (FONT8X16); // denne skrifttypen ser bedre ut enn den andre drawScreen (); oled.on (); forsinkelse (2000); dht.begin (); slått = sant; // flagg for tegningsskjerm} ugyldig søvn () {sleep_enable (); sleep_cpu (); } void loop () {if (turn) {cli (); // slå av avbrudd oled.on (); float h = dht.readHumidity (); // false read for å tilbakestille 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"); // symbolet ~ ble endret på biblioteket for å se ut som en ° graders forsinkelse (5000); // vis i 5 sekunder oled.off (); slått = usant; sei (); // legg til avbrudd igjen} søvn (); // sov alltid på slutten} void drawScreen () {// tegner rammen og hovedteksten 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, bredde - 2); oled.sendData (0b11111111); oled.endData (); for (uint8_t y = 1; y <(høyde - 8) / 8; y ++) {oled.setCursor (0, y); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b00000000, bredde - 2); oled.sendData (0b11111111); oled.endData (); } oled.setCursor (0, (høyde - 8) / 8); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b10100000, bredde - 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:"); }

Trinn 4: Konklusjoner

Konklusjoner
Konklusjoner
Konklusjoner
Konklusjoner

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 and the sleep juntos debido a las limitaciones de memoria. 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í buscar algo precisamente para el ATtiny, pero existen otras librerías y soluciones que son interesantes de explorar

El consumo del dispositivo es muy bajo. Tenk på en uso konstante, han medido og estimado la vida para una batería de 3000mAh (NiMH o LiIon) en 500 días. Forbruket kan redusere størrelsen på en panteløsning og en sensor for å fastslå en pin for ATtiny, men det er ikke nødvendig å vurdere det

Según Technoblogy.com el ATtiny puede operar en un consumo tan bajo como el mostrado en la primera image, pero en este proyecto he obtenido un consumo Mayor que correspondonde al de la segunda image. El consumo de la batería continúa siendo lo suficientemente bajo como para ser un proyecto factible

Trinn 5: Lenker 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…

embedded Thoughts.com/2016/06/06/attiny85-i…

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

www.technoblogy.com/show?WNM

www.technoblogy.com/show?2F5D

Anbefalt: