Sadržaj:

Attiny85 Termómetro OLED: 5 koraka
Attiny85 Termómetro OLED: 5 koraka

Video: Attiny85 Termómetro OLED: 5 koraka

Video: Attiny85 Termómetro OLED: 5 koraka
Video: Как прошить Digispark Attiny85. Обзор платы Digispark Attiny85. Установка драйверов. 2024, Prosinac
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 temperatura stvarna, 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.

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

Pribor

1 x ATtiny85

1 x Arduino UNO/PRO/etc (program za del ATtiny)

1 x 128x64 pantalla I2C OLED

1 x temperatura osjetnika DHT22

1 x Resistencia 4.7MOhm (1/4W)

1 x elektrolitski kondenzator 0,1uF

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

Korak 1: Opis funkcije 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.h para activar el termómetro manualmente y así reducir el consumo para extender la vida de la batería.

Nuestro programi se guiará el el siguiente processso: Niža temperatura -> Mostrar temperatura en pantalla -> Apagar ATtiny -> Reiniciar al presionar botton.

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 senzorska knjižnica iz Adafruit -a (dostupno u IDE -u) y Tiny4kOLED za podatke koje možete skinuti s Github -a, al parecer, autor originalnih podataka, 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 personal, he encontrado la opción de las placas metálicas más interactvo.

Korak 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 (el kondenzator debe estar desconectado) con el skica ArduinoISP, que se encuentra en Archivos -> Ejemplos -> 11. ArduinoISP. Una vez hecho esto se debe colocar el kondenzator 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 0 y SCL/CLK es el 2. Nuestro DHT está conectado en el pin 4.

Korak 3: Programiranje

Primarno, odaberite "Arduino kao ISP" kao program. Si aún no han instalado la placa para el ATtiny, recomiendo instalar la placa ATtinyCore de Spence Konde. Esta placa no me generira ningún problem de compilación durante la realización del proyecto.

La placa debe estar konfiguracija sinhronizirana BP, s un reloj de 8MHz interno y sin OptiBoot. Ako koristite 1MHz za komunikaciju na I2C, nema kristala na 16 MHz, vanjski kristalni ekran, odgovarajući digitalni signal, potrošnja energije je značajna.

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

A continuación ajunto el skica 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 = "" pretvarač #def #define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); const uint8_t širina = 128; const uint8_t visina = 64; isparljiva bool okrenuta = lažno; / * * * Rukovatelj prekida * */ISR (PCINT_VECTOR) {// prekid se uvijek oporavi iz stanja mirovanja ako (digitalRead (I_PIN) == HIGH) {turn = true; // ponovo postaviti zastavicu na ponovno iscrtavanje zaslona}} void setup () {cli (); // isključiti prekide PCMSK | = (1 << I_PINB); GIMSK | = (1 << PCIE); pinMode (I_PIN, INPUT); sei (); // uključite prekide adc_disable (); // ušteda energije isključivanjem pretvarača set_sleep_mode (SLEEP_MODE_PWR_DOWN); // postavimo vrstu sna na duboki san oled.begin (width, height, sizeof (tiny4koled_init_128x64br), tiny4koled_init_128x64br); // pokretanje oled objekta oled.setFont (FONT8X16); // ovaj font izgleda bolje od drugog drawScreen (); oled.on (); odgoda (2000); dht.begin (); okrenuto = istina; // zastavica za zaslon za crtanje} void sleep () {sleep_enable (); sleep_cpu (); } void loop () {if (okrenuto) {cli (); // isključiti prekide oled.on (); float h = dht.readHumidity (); // lažno čitanje za poništavanje kašnjenja dht predmemorije (2200); // čekanje dht za učitavanje 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.tisak (h, 0); oled.print ("%"); oled.setCursor (55, 5); oled.print (i); oled.print ("~ C"); // simbol ~ je promijenjen u knjižnici da izgleda kao kašnjenje simbola ° stupnja (5000); // prikazuje 5 sekundi oled.off (); okrenuto = lažno; sei (); // ponovo priloži prekide} sleep (); // uvijek idite na spavanje na kraju} void drawScreen () {// iscrtava okvir i glavni tekst za (uint8_t y = 0; y <8; y ++) {oled.setCursor (0, y); oled.startData (); za (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, širina - 2); oled.sendData (0b11111111); oled.endData (); za (uint8_t y = 1; y <(visina - 8) / 8; y ++) {oled.setCursor (0, y); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b00000000, širina - 2); oled.sendData (0b11111111); oled.endData (); } oled.setCursor (0, (visina - 8) / 8); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b10100000, širina - 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:"); }

Korak 4: Zaključci

Zaključci
Zaključci
Zaključci
Zaključci

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 program ima entrado en nuestro ATtiny

Postojite otras librerías para las pantallas OLED. La librería GFX de Adafruit no me permitió compiler 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. Considerando un uso constante, on medido y estimado la vida para una batería de 3000mAh (NiMH o LiIon) i 500 días. El consumo podría reducirse aún más desconectando la pantalla y el sensor directamente desde un pin del ATtiny, no no he he razmatrao necesario

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

5. korak: povezuje 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…

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

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

www.technoblogy.com/show?WNM

www.technoblogy.com/show?2F5D

Preporučeni: