Daftar Isi:

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, Oktober
Anonim
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED

Este proyecto consite en un termómetro pequeño y simple que muestra la temperaturea actual, la humedad relativa y el índice de temperaturea. Puede realizarse con un ATmega328p, pero lo interesante de esta versi dan utilizar un ATtiny85 cuyo tamaño y consumo de batería konvergen dan dispositivo pequeño y portátil.

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

Perlengkapan

1 x ATtiny85

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

1x128x64 pantalla I2C OLED

1 x Sensor suhu DHT22

1 x Resistensi 4.7MOhm (1/4W)

1 x Kapasitor electrolítico 0.1uF

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

Langkah 1: Deskripsi 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 el la visumucir la bateria.

Nuestro programa se guiará por el siguiente proses: Leer temperature -> Mostrar temperature en pantalla -> Apagar ATtiny -> Reiniciar al presionar botón.

Para cada uno de estos pasos dejaremos la walikota parte del trabajo a las librerias ya existentes, por lo que no reinventaremos la rueda. Perpustakaan sensor DHT dari 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 pribadi, dia encontrado la opción de las placas málicas más interaksi.

Langkah 2: Sirkuit

sirkuit
sirkuit
sirkuit
sirkuit
sirkuit
sirkuit

En la primer imagen se encuentra el circuito que requerimos para programar el ATtiny85. Dasar-dasar untuk program Arduino (el kapasitor debe estar desconectado) con el sketch ArduinoISP, lihat encuentra en Archivos -> Contoh -> 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 dan ATtiny85.

Colocar un botón entre el pin 13 del Arduino dan 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 ATyin es el 0 y el SCL/CLK es el 2. Nuestro DHT está conectado en el pin 4.

Langkah 3: Programasi

Primeramente, debemos seleccionar "Arduino as ISP" como el programador. Si aún no han instalado la placa para el ATtiny, recomiendo instalar 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 konfigurasi sin BOD, con un reloj de 8MHz interno y sin OptiBoot. Menggunakan komunikasi 1MHz untuk I2C tidak estable pada 16MHz kon cristal externo, además de perder dos pines digitales, el consumo energético aumenta besarmente.

Cabe destacar que he modificado un archivo en la libreria Tiny4kOLED. El archivo modificado es "font8x16.h" dan 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)) converter #define DHTPIN 4 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); const uint8_t lebar = 128; const uint8_t tinggi = 64; volatil bool berubah = false; /* * * Interrupt handler * */ ISR(PCINT_VECTOR){ //interrupt selalu pulih dari tidur if(digitalRead(I_PIN) == HIGH) { turn = true; //set flag untuk menggambar ulang layar lagi } }void setup() { cli(); //matikan interupsi PCMSK |= (1 << I_PINB); GIMSK |= (1 << PCIE); pinMode(I_PIN, INPUT); sei(); //mengaktifkan interupsi adc_disable(); //menghemat daya mematikan konverter set_sleep_mode(SLEEP_MODE_PWR_DOWN); //mengatur jenis tidur menjadi tidur nyenyak oled.begin(width, height, sizeof(tiny4koled_init_128x64br), tiny4koled_init_128x64br); //mulai objek oled oled.setFont(FONT8X16); //font ini terlihat lebih baik daripada yang lain drawScreen(); oled.on(); penundaan(2000); dht.mulai(); berbalik = benar; //flag untuk menggambar layar } void sleep(){ sleep_enable(); tidur_cpu(); } void loop() { jika (diputar){ cli(); //matikan interupsi oled.on(); float h = dht.readHumidity();//false read untuk mereset dht cache delay(2200);//tunggu dht untuk memuat 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"); //simbol ~ diubah di perpustakaan agar terlihat seperti penundaan simbol derajat °(5000); //tampilkan selama 5 detik oled.off(); berbalik = salah; sei();//lampirkan interupsi lagi } sleep(); //always go sleep at the end } void drawScreen() { //menggambar frame dan teks utama untuk (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, lebar - 2); oled.sendData(0b11111111); oled.endData(); for (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("Suhu:"); oled.setCursor(4, 3); oled.print("Hum:"); oled.setCursor(4, 5); oled.print("Sens:"); }

Langkah 4: Kesimpulan

Kesimpulan
Kesimpulan
Kesimpulan
Kesimpulan

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 possible inclluir el control de pantalla y de sleep juntos debido a las limitaciones de memoria. Dichozamente, el programa ha entrado en nuestro ATtiny

Ada otras librerias 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 eksis otras librerías y soluciones que son interesantes de explorar

El consumo del dispositivo es muy bajo. Pertimbangkan untuk tidak menggunakan konstanta, dia medido y estimado la vida para una batería de 3000mAh (NiMH o LiIon) dan 500 días. El consumo podría reducirse aún más desconectando la pantalla y el sensor directamente desde un pin del ATtiny, tidak perlu dipertimbangkan

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

Langkah 5: Tautan dan Relasi Perkuliahan

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

Direkomendasikan: