جدول المحتويات:

Attiny85 Termómetro OLED: 5 خطوات
Attiny85 Termómetro OLED: 5 خطوات

فيديو: Attiny85 Termómetro OLED: 5 خطوات

فيديو: Attiny85 Termómetro OLED: 5 خطوات
فيديو: ATtiny13 и ATtiny85. Обзор и программирование с помощью Arduino 2024, اكتوبر
Anonim
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED

تتكون هذه الاستنتاجات من حد أقصى للتكيف مع درجات الحرارة البسيطة. Puede realizarse con un ATmega328p، pero lo interesante de esta versión es utilizar un ATtiny85 cuyo tamaño y Consumer batería convergen en unpositivo pequeño y portátil.

وصف مستمر للعملية والتشغيل النهائي للبرامج والأجناس المرتبطة بالعموم.

اللوازم

1 × ATtiny85

1 × Arduino UNO / PRO / إلخ (programador del ATtiny)

1 × 128 × 64 بانتالا I2C OLED

1 × مستشعر درجة حرارة DHT22

1 × ريزيستنسيا 4.7 ميجا أوم (1/4 واط)

1 × مكثف electrolítico 0.1 فائق التوهج

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

الخطوة 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. لا باتيريا.

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

Para cada uno de estos dejaremos la mayor parte del trabajo a las librerías ya presententes، por lo que no renventaremos la rueda. مكتبة مستشعر La librería DHT de 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 encender el equipo. على المستوى الشخصي ، فإنه يلتقي في مجال عمل لاس بلاكاس metálicas más التفاعلي.

الخطوة 2: الدوائر

الدوائر
الدوائر
الدوائر
الدوائر
الدوائر
الدوائر

En la primer imagen se encuentra el creque que reberimos para programar el ATtiny85. Primeramente se debe programar al Arduino (el capacitor debe estar desconectado) con el sketch ArduinoISP، que se encuentra en Archivos -> Ejemplos -> 11. ArduinoISP. Una vez hecho esto se debe colocar el capacitor 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 simple el hacer pruebas ya que la pantalla no puede estar conectada cuando se programa al ATtiny.

كومو حد المراقبة في لاس فيغاس. El Pin SDA del ATyiny es el 0 y el SCL / CLK es el 2. Nuestro DHT está conectado en el pin 4.

الخطوة 3: البرمجة

Primeramente ، debemos seleccionar "Arduino as ISP" كومو البرنامج. 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 configurada sin BOD ، مع إعادة تشغيل 8 ميجا هرتز داخليًا وخطأ OptiBoot. استخدام 1 ميجاهرتز لاتصالات من خلال I2C no es estable y a 16MHz con cristal externo، además de perder dos pines digitales، el Consumo energético aumenta.

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

استمرارية العمل في رسم تخطيطي للخطوة الأولى.

#include #include #include #include #define I_PINB PCINT3 #define I_PIN PB3 #define I_VECTOR PCINT0_vect #define adc_disable () (ADCSRA & = ~ (1 << aden)) تعطيل = "" adcine = "DHINTP Converter # 4 # تعريف DHTTYPE DHT22 DHT dht (DHTPIN ، DHTTYPE) ؛ عرض ثابت uint8_t = 128 ؛ ارتفاع uint8_t = 64 ؛ تحول منطقي متقلب = خطأ ؛ / * * * Interrupt handler * * / ISR (PCINT_VECTOR) {// المقاطعة دائمًا ما تتعافى من السكون إذا (digitalRead (I_PIN) == HIGH) {turn = true؛ // تعيين العلم لإعادة رسم الشاشة مرة أخرى}} إعداد باطل () {cli ()؛ // إيقاف تشغيل المقاطعات PCMSK | = (1 << I_PINB) ؛ GIMSK | = (1 << PCIE) ؛ pinMode (I_PIN ، INPUT) ؛ سي () ؛ // قم بتشغيل المقاطعات adc_disable () ؛ // حفظ الطاقة إيقاف تشغيل المحول set_sleep_mode (SLEEP_MODE_PWR_DOWN) ؛ // اضبط نوع النوم على النوم العميق oled.begin (العرض ، الارتفاع ، الحجم (tiny4koled_init_128x64br) ، tiny4koled_init_128x64br) ؛ // بدء كائن oled oled.setFont (FONT8X16) ؛ // هذا الخط يبدو أفضل من الآخر drawScreen () ؛ oled.on () ؛ تأخير (2000) ؛ dht.begin () ، تحول = صحيح ؛ // flag for drawing screen} void sleep () {sleep_enable ()؛ sleep_cpu () ؛ } حلقة باطلة () {إذا (تحولت) {cli ()؛ // إيقاف المقاطعات oled.on () ؛ float h = dht.readHumidity () ؛ // قراءة خاطئة لإعادة تعيين تأخير ذاكرة التخزين المؤقت dht (2200) ؛ // انتظر dht لتحميل h = dht.readHumidity () ؛ تعويم t = dht.readTemperature () ، تعويم i = dht.computeHeatIndex (t، h، false) ؛ oled.setCursor (55، 1) ؛ oled.print (ر) ؛ oled.print ("~ C") ؛ oled.setCursor (55، 3) ؛ oled.print (ح ، 0) ؛ oled.print ("٪") ؛ oled.setCursor (55، 5) ؛ oled.print (ط) ؛ oled.print ("~ C") ؛ // تم تغيير الرمز ~ في المكتبة ليبدو وكأنه تأخير رمز درجة درجة (5000) ؛ // عرض لمدة 5 ثوان oled.off () ؛ تحول = خطأ ؛ sei () ؛ // إرفاق المقاطعات مرة أخرى} 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 <(height - 8) / 8 ؛ y ++) {oled.setCursor (0، y) ؛ oled.startData () ، oled.sendData (0b11111111) ؛ oled.repeat البيانات (0b00000000 ، العرض - 2) ؛ oled.sendData (0b11111111) ؛ oled.endData () ، } oled.setCursor (0، (height - 8) / 8) ؛ oled.startData () ، oled.sendData (0b11111111) ؛ oled.repeatData (0b10100000 ، عرض - 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:") ؛ }

الخطوة 4: الاستنتاجات

الاستنتاجات
الاستنتاجات
الاستنتاجات
الاستنتاجات

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 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 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 موجودة otras librerías y soluciones que son interesantes de explorar

El الاستهلاك الخاص بجهاز muy bajo. ضع في اعتبارك أن الاستخدام الثابت ، هو medido y Estimado la vida para una batería de 3000mAh (NiMH o LiIon) en 500 días. يتم تقليل استهلاك الطاقة من خلال تصميم جهاز استشعار وتوجيه جهاز استشعار ، حتى لا يتم التفكير فيه بشكل ضروري

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 concee all de la segunda imagen. El Consumo de la batería Contina siendo lo sufactemente bajo como para ser un proyecto factible

الخطوة 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…

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

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

www.technoblogy.com/show؟WNM

www.technoblogy.com/show؟2F5D

موصى به: