Isi kandungan:

Attiny85 Termómetro OLED: 5 Langkah
Attiny85 Termómetro OLED: 5 Langkah

Video: Attiny85 Termómetro OLED: 5 Langkah

Video: Attiny85 Termómetro OLED: 5 Langkah
Video: Термометр, измеритель влажности на Arduino DUE c OLED SSD1306 и русским шрифтом. Скетч в описании. 2024, Disember
Anonim
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED

Este proyecto conste en un termómetro pequeño y simple que muestra la temperatura sebenar, 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 konsumeno de batería convergen en un dispositivo pequeño y portátil.

Satu kesinambungan yang diterangkan el funcionamiento, seguido mostraré el circuito y finalizaré con el programa y algunos comentarios sobre el proyecto secara umum.

Bekalan

1 x ATtiny85

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

1 x 128x64 pantalla I2C OLED

1 x Sensor temperatura DHT22

1 x Resistencia 4.7MOhm (1 / 4W)

1 x Kapasitor electrolítico 0.1uF

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

Langkah 1: Descripción 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.h para activar el termómetro manualmente y así reducir el konsumeno de extender la batería.

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 walikota parte del trabajo a las librerías ya وجود, por lo que no reinventaremos la rueda. Perpustakaan sensor DHT La Adrruit (boleh guna en 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. Secara peribadi, dia mengurus pilihan utama dan interaksivo.

Langkah 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 kapasitor debe estar desconectado) con el sketsa ArduinoISP, que se encuentra en Archivos -> Ejemplos -> 11. ArduinoISP. Una vez hecho esto se debe colocar el kapasitor untuk 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 fasilitator 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 SCL / CLK es el 2. Nuestro DHT está conectado en el pin 4.

Langkah 3: Programación

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

La placa debe estar configurada sin BOD, con un reloj de 8MHz interno y sin OptiBoot. Sebanyak 1 MHz dan kelangsungan hidup dari I2C tidak dapat dikecualikan dengan luaran 16MHz, además de perder dos pines digitales, elumero energético aumenta pertimbangan.

Cabe destacar que ia modificado un archivo en la librería Tiny4kOLED. El archivo modificado es "font8x16.h" y 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

Satu lakaran berterusan yang perlu diberi perhatian untuk 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 DHTP #tentukan DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); const uint8_t lebar = 128; const uint8_t tinggi = 64; bool tidak menentu berubah = salah; / * * * Pengendali gangguan * * / ISR (PCINT_VECTOR) {// gangguan selalu pulih dari tidur jika (digitalRead (I_PIN) == TINGGI) {bertukar = benar; // tetapkan bendera ke gambar semula skrin}} batal penyediaan () {cli (); // mematikan gangguan PCMSK | = (1 << I_PINB); GIMSK | = (1 << PCIE); pinMode (I_PIN, INPUT); sei (); // hidupkan gangguan adc_disable (); // jimat kuasa mematikan penukar set_sleep_mode (SLEEP_MODE_PWR_DOWN); // tetapkan jenis tidur ke tidur nyenyak. mulakan (lebar, tinggi, ukuranof (tiny4koled_init_128x64br), tiny4koled_init_128x64br); // mulakan objek oled.setFont (FONT8X16); // fon ini kelihatan lebih baik daripada drawScreen yang lain (); oled.on (); kelewatan (2000); dht.begin (); bertukar = benar; // bendera untuk skrin gambar} kosongkan tidur () {sleep_enable (); sleep_cpu (); } gelung void () {if (berpusing) {cli (); // matikan gangguan oled.on (); float h = dht.readHumidity (); // bacaan palsu untuk menetapkan semula penangguhan cache dht (2200); // tunggu dht untuk memuat h = dht.readHumidity (); terapung t = dht.readTemperature (); terapung 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"); // simbol ~ diubah di perpustakaan agar kelihatan seperti kelewatan simbol darjah (5000); // tunjukkan selama 5 saat oled.off (); bertukar = palsu; sei (); // sambung mengganggu lagi} tidur (); // selalu tidur pada akhir} kekosongan drawScreen () {// melukis bingkai sebagai teks utama untuk (uint8_t y = 0; y <8; y ++) {oled.setCursor (0, y); oled.startData (); untuk (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, lebar - 2); oled.sendData (0b11111111); oled.endData (); untuk (uint8_t y = 1; y <(tinggi - 8) / 8; y ++) {oled.setCursor (0, y); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b00000000, lebar - 2); oled.sendData (0b11111111); oled.endData (); } oled.setCursor (0, (tinggi - 8) / 8); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b10100000, lebar - 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:"); }

Langkah 4: Kesimpulan

Kesimpulannya
Kesimpulannya
Kesimpulannya
Kesimpulannya

Pesar de su tamaño tidak penting, 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 incluir el control de pantalla and de sleep juntos debido a las limaciones 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 wujud otras librerías y soluciones que son interesantes de explorar

El habiso del dispositivo es muy bajo. Sebagai pertimbangan, tidak dapat dipertimbangkan, ia dianggap lebih baik daripada 3000mAh (NiMH o LiIon) dan 500 días. Peluang pengurangan dan pengurangan masa kerja dan penerangan sensor dan pengarah yang tepat, tidak perlu dipertimbangkan lagi

Según Technoblogy.com el ATtiny puede operar en un eato tan bajo como el mostrado en la primera imagen, pero en este proyecto he obtenido un καταναλωo walikota queesponde al de la segunda imagen. El conso de la batería contúa siendo lo suficientemente bajo como para ser un proyecto factible

Langkah 5: Pautan 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 خيالنts.com/2016/06/06/attiny85-i…

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

www.technoblogy.com/show?WNM

www.technoblogy.com/show?2F5D

Disyorkan: