สารบัญ:

Attiny85 Termómetro OLED: 5 ขั้นตอน
Attiny85 Termómetro OLED: 5 ขั้นตอน

วีดีโอ: Attiny85 Termómetro OLED: 5 ขั้นตอน

วีดีโอ: Attiny85 Termómetro OLED: 5 ขั้นตอน
วีดีโอ: Arduino infrared thermometer with case MDF 2024, ตุลาคม
Anonim
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED

Este proyecto ประกอบด้วย en un termómetro pequeño และ simple que muestra la temperatura actual, la humedad relativa y el índice de temperatura. การใช้งานจริงกับ ATmega328p, การใช้งานจริงกับ ATtiny85 ที่ใช้งานได้กับแบตเตอรี่คอนเวอร์เจนและพอร์ต

A Continuacion describiré el funcionamiento, seguido mostraré el circuito y finalizaré con el programa y algunos comentarios sobre el proyecto en general. คำอธิบาย

เสบียง

1 x ATtiny85

1 x Arduino UNO/PRO/ฯลฯ (โปรแกรมเมอร์เดล ATtiny)

1 x 128x64 กางเกง I2C OLED

1 x อุณหภูมิเซนเซอร์ DHT22

1 x ตัวต้านทาน 4.7MOhm (1/4W)

1 x ตัวเก็บประจุไฟฟ้า 0.1uF

1 x Fuente de 3.3V - 5V 10+ x จัมเปอร์

ขั้นตอนที่ 1: คำอธิบาย Del Funcionamiento

วัตถุประสงค์ของวัตถุประสงค์ส่วนใหญ่ ลอส tres valores anteriormente mencionados en la pantalla OLED, además, como objetivo secundario, และรวมถึง el uso de la librería sleep.he interrupt.h para activar de el termómetro manualmentuir ขยายเป็นเงื่อนไข ลา batería.

โปรแกรม Nuestro 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 mayor parte del trabajo a las librerías yaดำรงอยู่, por lo que no reinventaremos la rueda. ไลบรารี่เซ็นเซอร์ DHT ของ Adafruit (ใช้ผ่าน en el IDE) และ Tiny4kOLED จาก 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 elequipo. โดยส่วนตัว เขาขัดแย้งกับ opción de las placas metalicas más interactiveivo.

ขั้นตอนที่ 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 debe estar desconectado) กับ Sketch ArduinoISP, que se encuentra en Archivos -> Ejemplos -> 11. ArduinoISP Una vez hecho esto se debe colocar el capacitor สำหรับ evitar que nuestro Arduino se reinicie al programar el ATtiny85

El ATtiny se puede alimentar directamente del Arduino การใช้งานกับอุปกรณ์ที่ใช้ร่วมกัน como una batería es necesario conectar la masa (GND) จาก Arduino และ ATtiny85

Colocar unbotón เข้า el pin 13 ของ 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 เชื่อมต่อด้วย el pin 4

ขั้นตอนที่ 3: โปรแกรม

Primeramente, debemos เลือก "Arduino as ISP" ร่วมกับโปรแกรมเมอร์ Si aún no han instalado la placa para el ATtiny, แนะนำการติดตั้ง 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 กำหนดค่า sin BOD, ตั้งค่า 8MHz interno y sin OptiBoot ใช้งานได้ 1MHz สำหรับการใช้งาน I2C ไม่มีการตั้งค่าและ 16MHz กับ cristal externo, ใช้งานผ่านระบบดิจิทัล, ใช้งานจริงเพิ่มมาก

Cabe destacar que he modificado un archivo en la libría Tiny4kOLED. ดาวน์โหลด การแก้ไขเอกสารเก่าใน "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

ความต่อเนื่องของ 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 ความกว้าง = 128; const uint8_t ความสูง = 64; บูลผันผวนเปลี่ยน = เท็จ; /* * * ตัวจัดการขัดจังหวะ * */ ISR (PCINT_VECTOR) {// ขัดจังหวะจะกู้คืนจากโหมดสลีปเสมอถ้า (digitalRead (I_PIN) == สูง) { หัน = จริง; //ตั้งค่าแฟล็กเพื่อวาดหน้าจอใหม่อีกครั้ง } }การตั้งค่าเป็นโมฆะ() { cli(); // ปิดการขัดจังหวะ PCMSK |= (1 << I_PINB); GIMSK |= (1 << PCIE); โหมดพิน (I_PIN, INPUT); เส (); //เปิดอินเตอร์รัปต์ adc_disable(); //ประหยัดพลังงานโดยปิดตัวแปลง set_sleep_mode(SLEEP_MODE_PWR_DOWN); //กำหนดประเภทของ sleep เป็น deep sleep oled.begin(width, height, sizeof(tiny4koled_init_128x64br), tiny4koled_init_128x64br); // เริ่มวัตถุ oled oled.setFont (FONT8X16); // แบบอักษรนี้ดูดีกว่า drawScreen(); oled.on(); ล่าช้า (2000); dht.begin(); หัน = จริง; //ตั้งค่าสถานะสำหรับหน้าจอการวาด } void sleep(){ sleep_enable(); sleep_cpu(); } วงเป็นโมฆะ () { ถ้า (หัน) { cli(); //ปิดการขัดจังหวะ oled.on(); float h = dht.readHumidity();//false read เพื่อรีเซ็ตการหน่วงเวลาแคช dht(2200); //รอ dht เพื่อโหลด h = dht.readHumidity(); float t = dht.readTemperature(); float i = dht.computeHeatIndex(t, h, เท็จ); 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"); // สัญลักษณ์ ~ ถูกเปลี่ยนในไลบรารีให้ดูเหมือนสัญลักษณ์องศาดีเลย์ (5000); //แสดงเป็นเวลา 5 วินาที oled.off(); หัน = เท็จ; sei();//attach ขัดจังหวะอีกครั้ง } sleep(); // เข้าสู่โหมดสลีปในตอนท้ายเสมอ } void drawScreen() { //วาดกรอบข้อความหลักสำหรับ (uint8_t y = 0; y <8; y++) { oled.setCursor(0, y); oled.startData(); สำหรับ (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 ความกว้าง - 2); oled.sendData(0b11111111); oled.endData(); สำหรับ (uint8_t y = 1; y < (ความสูง - 8) / 8; y++) { oled.setCursor(0, y); oled.startData(); oled.sendData(0b11111111); oled.repeatData(0b00000000 ความกว้าง - 2); oled.sendData(0b11111111); oled.endData(); } oled.setCursor(0, (สูง - 8) / 8); oled.startData(); oled.sendData(0b11111111); oled.repeatData(0b10100000 ความกว้าง - 2); oled.sendData(0b11111111); oled.endData(); oled.setCursor(4, 1); oled.print("อุณหภูมิ:"); oled.setCursor(4, 3); oled.print("ฮัม:"); oled.setCursor(4, 5); oled.print("ความรู้สึก:"); }

ขั้นตอนที่ 4: บทสรุป

บทสรุป
บทสรุป
บทสรุป
บทสรุป

A pesar de su tamaño ไม่มีนัยสำคัญ, 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 programa ha entrado en nuestro ATtiny. ดิโชซาเมนเต

ที่มีอยู่ otras librías para las pantallas OLED ห้องสมุด GFX ของ Adafruit ไม่มีใบอนุญาต รวบรวมไว้ล่วงหน้า รถโดยสารประจำทางสำหรับ el ATtiny, pero มีอยู่ otras librías y soluciones que son interesantes de explorer

El consumo del dispositivo es muy bajo. พิจารณาจากการใช้ค่าคงที่, ค่าคงที่และค่าประมาณการแบตเตอรี่ 3000mAh (NiMH หรือ LiIon) และ 500 วัน 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 forgetado 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 he obtenido un consumo นายกเทศมนตรี que ที่สอดคล้องกัน al de la segunda imagen El consumo de la batería continúa siendo lo suficientemente bajo como para ser un proyecto ข้อเท็จจริง

ขั้นตอนที่ 5: ลิงก์ 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…

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

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

www.technoblogy.com/show?WNM

www.technoblogy.com/show?2F5D

แนะนำ: