Cov txheej txheem:

Attiny85 Termómetro OLED: 5 Kauj Ruam
Attiny85 Termómetro OLED: 5 Kauj Ruam

Video: Attiny85 Termómetro OLED: 5 Kauj Ruam

Video: Attiny85 Termómetro OLED: 5 Kauj Ruam
Video: Самодельный цифровой термометр на ATtiny13 2024, Lub kaum hli ntuj
Anonim
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED

Este proyecto suav nrog ib lo lus pemetño y yooj yim que muestra la temperatura qhov tseeb, la humedad relativa y el índice de temperatura. Puede realizarse con un ATmega328p, pero lo interesante de esta versión es utilizar un ATtiny85 cuyo tamaño y consumo de batería convergen en un dispositivo pequeño y portátil.

Kev txuas ntxiv piav qhia el funcionamiento, seguido mostraré el circuito y finalizaré con el programa y algunos comentarios sobre el proyecto en general.

Khoom siv

1 tx85

1 x Arduino UNO/PRO/thiab lwm yam (programador del ATtiny)

1 x 128x64 pantalla I2C OLED

1 x Sensor ntsuas kub DHT22

1 x Resistencia 4.7MOhm (1/4W)

1 x Capacitor electrolítico 0.1uF

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

Kauj Ruam 1: Cov lus piav qhia 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 cuam tshuam.h para activar el termómetro manualmente y así reducir el consumo para extender la vida de la cov ntaub ntawv

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 tus tswv nroog parte del trabajo a las librerías ya existentes, por lo que no tsis muaj kev txhawb ntxiv 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 autor 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 tus kheej, nws encontrado la opción de las placas metálicas más interactivo.

Kauj ruam 2: Circuitos

Circuitos
Circuitos
Circuitos
Circuitos
Circuitos
Circuitos

En la primer imagen se 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.

Kauj ruam 3: Programación

Primeramente, debemos seleccionar "Arduino li ISP" como el programador. Si aún no han instalado la placa para el ATtiny, rov ua dua instalar la placa ATtinyCore de Spence Konde. Esta placa tsis muaj kuv generó ningún problema de compilación durante la realización del proyecto.

La placa debe estar configurada sin BOD, txuas nrog 8MHz interno y sin OptiBoot. Si utilizamos 1MHz la comunicación por I2C no es estable y a 16MHz con cristal externo, además de perder dos pines digitales, el consumo energético aumenta considerablemente.

Cabe destacar que he modificado un archivo 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, 0x00, 0x00, 0x00

Kev txuas ntxiv txuas mus rau 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 = "" adcine "" DH #converter " #define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); const uint8_t dav = 128; const uint8_t qhov siab = 64; volatile bool tig = cuav; / * * * Tus cuam tshuam cuam tshuam * */ISR (PCINT_VECTOR) {// cuam tshuam ib txwm rov zoo li qub yog tias (digitalRead (I_PIN) == HIGH) {tig = muaj tseeb; // teeb tsa tus chij kom rov ua dua lub vijtsam dua}} void setup () {cli (); // tua tawm cuam tshuam PCMSK | = (1 << I_PINB); GIMSK | = (1 << PCIE); pinMode (I_PIN, INPUT); sib (); // qhib kev cuam tshuam adc_disable (); // txuag lub zog tua qhov hloov pauv set_sleep_mode (SLEEP_MODE_PWR_DOWN); // teeb tsa hom pw tsaug zog kom tsaug zog oled.begin (dav, qhov siab, qhov loj me (me me4koled_init_128x64br), me me4koled_init_128x64br); // pib oled object oled.setFont (FONT8X16); // qhov font no zoo dua li lwm qhov drawScreen (); oled.on (); ncua (2000); dht.begin (); tig = muaj tseeb; // chij rau kev kos duab screen void sleep () {sleep_enable (); pw_cpu (); } void loop () {yog (tig) {cli (); // tua kev cuam tshuam oled.on (); ntab h = dht.readHumidity (); // tsis raug nyeem kom rov pib dht cache ncua (2200); // tos dht kom thauj h = dht.readHumidity (); ntab t = dht.readTemperature (); ntab kuv = dht.computeHeatIndex (t, h, cuav); 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 (kuv); oled.print ("~ C"); // lub ~ cim tau hloov pauv ntawm lub tsev qiv ntawv kom zoo li ° degree cim ncua (5000); // qhia rau 5 vib nas this oled.off (); tig = cuav; sei (); // txuas cuam tshuam dua} pw (); // ib txwm mus pw thaum kawg} tsis muaj dabtsis drawScreen () {// thim qhov thav duab cov ntsiab lus tseem ceeb rau (uint8_t y = 0; y <8; y ++) {oled.setCursor (0, y); oled.startData (); rau (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, dav - 2); oled.sendData (0b11111111); oled.endData (); rau (uint8_t y = 1; y <(qhov siab - 8) / 8; y ++) {oled.setCursor (0, y); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b00000000, dav - 2); oled.sendData (0b11111111); oled.endData (); } oled.setCursor (0, (qhov siab - 8) / 8); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b10100000, dav - 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:"); }

Kauj Ruam 4: Cov lus xaus

Xaus
Xaus
Xaus
Xaus

Tus pesar de su tamaño tsis tseem ceeb, el ATtiny85 ofrece una amplia gama de aplicaciones en las que podemos implementar este controlador de bajo costo sin perder funcionalidad. Tus kheej tsis muaj qhov tshwj xeeb que fuera muaj peev xwm suav nrog el tswj de pantalla y de pw tsaug zog juntos debido a las limitaciones de memoria. Dichozamente, el programa ha entrado en nuestro ATtiny

Muaj nyob rau tam sim no librerías para las pantallas OLED. La librería GFX de Adafruit tsis muaj kuv tso cai sib piv 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. Xav txog qhov tseem ceeb ntawm kev siv, nws xav tau kwv yees kwv yees kwv yees li ntawm 3000 mAh (NiMH o LiIon) en 500 días. El consumo podría reducirse aún más desconectando la pantalla y el sensor directamente desde un pin del ATtiny, pero no lo he considerado necesario

Según Technoblogy.com el ATtiny puede operar en un consumo tan bajo como el mostrado en la primera imagen, pero en este proyecto nws obtenido un consumo tus tswv nroog que sib tham al de la segunda imagen. El consumo de la batería continúa siendo lo suficientemente bajo como para ser un proyecto qhov tseeb

Kauj Ruam 5: Txuas 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…

embeddedlookts.com/2016/06/06/attiny85-i…

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

www.technoblogy.com/show?WNM

www.technoblogy.com/show?2F5D

Pom zoo: