Daftar Isi:
- Perlengkapan
- Langkah 1: Deskripsi Del Funcionamiento
- Langkah 2: Sirkuit
- Langkah 3: Programasi
- Langkah 4: Kesimpulan
- Langkah 5: Tautan dan Relasi Perkuliahan
Video: Attiny85 Termómetro OLED: 5 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:54
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
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
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:
Bintang Natal Neopixel Attiny85 yang Lebih Besar dan Lebih Baik: 3 Langkah (dengan Gambar)
Bintang Natal yang Lebih Besar dan Lebih Baik Neopixel Attiny85: Tahun lalu saya membuat bintang natal kecil yang dicetak 3D, lihat https://www.instructables.com/id/Christmas-Star-LE…Tahun ini saya membuat bintang yang lebih besar dari untaian dari 50 Neopiksel (5V WS2811). Bintang yang lebih besar ini memiliki lebih banyak pola (saya masih menambahkan dan meningkatkan
ATtiny85 Wearable Vibrating Activity Tracking Watch & Programming ATtiny85 Dengan Arduino Uno: 4 Langkah (dengan Gambar)
ATtiny85 Jam Tangan & Pemrograman Pelacakan Aktivitas Bergetar yang Dapat Dipakai ATtiny85 Dengan Arduino Uno: Bagaimana cara membuat jam tangan pelacak aktivitas yang dapat dikenakan? Ini adalah gadget yang dapat dikenakan yang dirancang untuk bergetar saat mendeteksi stagnasi. Apakah Anda menghabiskan sebagian besar waktu Anda di depan komputer seperti saya? Apakah Anda duduk berjam-jam tanpa menyadarinya? Maka perangkat ini f
Cara Menggunakan Motor Stepper Sebagai Rotary Encoder dan Tampilan OLED untuk Langkah: 6 Langkah
Cara Menggunakan Motor Stepper Sebagai Rotary Encoder dan Tampilan OLED untuk Langkah-Langkahnya: Dalam tutorial ini kita akan mempelajari cara melacak langkah motor stepper pada Tampilan OLED. Tonton video demonstrasi. Kredit untuk tutorial Asli diberikan kepada pengguna youtube "sky4fly"
Flappy Bird pada ATtiny85 dan OLED Display SSD1306: 6 Langkah (dengan Gambar)
Flappy Bird di ATtiny85 dan OLED Display SSD1306: Hai Semuanya,Hari ini saya akan menunjukkan kepada Anda klon dasar flappy bird yang saya buat, dan bagaimana Anda bisa membuat game serupa. Saya pada dasarnya akan menjalankan kode saya dengan Anda dan menjelaskan cara kerjanya di setiap langkah. Game ini dibuat untuk
Kartu Nama/Konsol Game: ATtiny85 dan Layar OLED: 5 Langkah (dengan Gambar)
Kartu Bisnis/Konsol Game: ATtiny85 dan Layar OLED: Hai semuanya! Hari ini saya akan menunjukkan kepada Anda bagaimana Anda dapat membuat kartu bisnis/konsol game/apa pun yang dapat Anda bayangkan yang menampilkan layar OLED I2C dengan lampu latar dan Mikroprosesor ATtiny85. Dalam Instructable ini saya akan memberi tahu Anda bagaimana PCB yang saya rancang