Turinys:

„Attiny85 Termómetro OLED“: 5 žingsniai
„Attiny85 Termómetro OLED“: 5 žingsniai

Video: „Attiny85 Termómetro OLED“: 5 žingsniai

Video: „Attiny85 Termómetro OLED“: 5 žingsniai
Video: Very small oled 64x32 #Arduino #attiny85 #oled#tiny #pcb#Smallest 2024, Spalio mėn
Anonim
„Attiny85“termometras OLED
„Attiny85“termometras OLED
„Attiny85“termometras OLED
„Attiny85“termometras OLED

Este proyecto consiste en un termómetro pequeño y simple que muestra la temperatura faktinė, la humedad relativa y el índice de temperatura. Puede realizuoti su ATmega328p, bet įdomu iš esta versiją ir panaudojimo ir ATtiny85 cuyo tamaño ir Consumo de batería convergen en un dispositivo pequeño y portátil.

Tęstinis aprašymas el. Funkcijose, derinys labiausiai įpratęs prie grandinės ir baigiamasis programos ir algoritmų komentarai, tinkami el proyecto en general.

Prekės

1 x ATtiny85

1 x „Arduino UNO/PRO/etc“(„ATtiny“programa)

1 x 128x64 kelnės I2C OLED

1 x jutiklio temperatūra DHT22

1 x „Resistencia“4.7MOhm (1/4W)

1 x 0.1uF elektrinis kondensatorius

1 x 3,3 V - 5 V 10+ x džemperiai

1 veiksmas: aprašymas „Fun Funamamiento“

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 as así reducir el consumo para extender la vida de la baterija.

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

Para cada uno de estos pasos dejaremos la mero parte del trabajo a las librerías ya egzistuoja, por lo que no reinventaremos la rueda. Nemokama DHT jutiklių biblioteka, skirta „Adafruit“(disponable en el IDE) ir „Tiny4kOLED“, skirta „Github ya que“duomenų perdavimui, originaliam autoriui ir duomenų autoriui, ademai, 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. Asmeniškai jis užsiima metalozijų interaktyviu skaitymu.

2 žingsnis: grandinės

Circuitos
Circuitos
Circuitos
Circuitos
Circuitos
Circuitos

En la primer imagen se encuentra el circuitito que requerimos para programar el ATtiny85. Paruoškite Arduino programą (el kondensatorius debe estar desconectado) su eskizu ArduinoISP, que se encuentra en Archivos -> Ejemplos -> 11. ArduinoISP. Una vez hecho esto se debe colocar el kondensatorius 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 baterija ir būtinas konektorius la masa (GND) del Arduino y el ATtiny85.

„Colocar“ir „bot“Entre el pin 13 del Arduino ir 2 el.

Como se observa en las imágenes. El pin SDA del ATyiny es el 0 y el SCL/CLK es el 2. Nuestro DHT estect con enado en el pin 4.

3 žingsnis: Programavimas

Svarbiausias programos „Arduino as ISP“programos vadovas. 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 problem de compilación durante la realización del proyecto.

Išskirkite BOD konfigūraciją, perkelkite 8MHz intervalą ir „OptiBoot“. Naudojant 1MHz komunikaciją iš I2C nėra estabilios ir 16MHz išorinės kristalinės sistemos, además de perder dos pines digitalles, el consumo energético aumenta apsvarstyti.

Cabe destacar que he modificado un archivo en la librrí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

A Continue ajn el eskizas, būtinas 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)) disable = "" adc = "" converter #define DTP #define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); const uint8_t plotis = 128; const uint8_t aukštis = 64; nepastovus boolis pasuktas = klaidingas; / * * * Nutraukimo tvarkytojas * */ISR (PCINT_VECTOR) {// pertraukimas visada atsigauna iš miego režimo, jei (digitalRead (I_PIN) == HIGH) {turn = true; // vėl nustatyti vėliavą, kad ekranas būtų perbraižytas}} void setup () {cli (); // išjungti pertraukimus PCMSK | = (1 << I_PINB); GIMSK | = (1 << PCIE); pinMode (I_PIN, INPUT); sei (); // įjungti pertraukas adc_disable (); // taupyti energiją išjungiant keitiklį set_sleep_mode (SLEEP_MODE_PWR_DOWN); // nustatykite miego tipą į gilaus miego režimą jūs.begin (plotis, aukštis, dydisof (tiny4koled_init_128x64br), tiny4koled_init_128x64br); // pradėti esi objektas oled.setFont (FONT8X16); // šis šriftas atrodo geriau nei kitas drawScreen (); oled.on (); vėlavimas (2000 m.); dht.begin (); pasuktas = tiesa; // vėliava piešiant ekraną} void sleep () {sleep_enable (); sleep_cpu (); } void loop () {if (pasisuko) {cli (); // išjungti pertraukas oled.on (); float h = dht.readHumidity (); // false read to reset dht cache delay (2200); // wait dht to load h = dht.readHumidity (); plūdė t = dht.readTemperature (); plūdė 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"); // simbolis ~ buvo pakeistas bibliotekoje, kad atrodytų kaip ° laipsnio simbolio uždelsimas (5000); // rodyti 5 sekundes oled.off (); pasuktas = klaidingas; sei (); // vėl pridėkite pertraukas} miegas (); // visada eiti miegoti pabaigoje} void drawScreen () {// piešia rėmelį ir pagrindinį tekstą (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, plotis - 2); oled.sendData (0b11111111); oled.endData (); for (uint8_t y = 1; y <(aukštis - 8) / 8; y ++) {oled.setCursor (0, y); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b00000000, plotis - 2); oled.sendData (0b11111111); oled.endData (); } oled.setCursor (0, (aukštis - 8) / 8); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b10100000, plotis - 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 žingsnis: Išvados

Išvados
Išvados
Išvados
Išvados

A pesar de su tamaño nereikšmingas, 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 programoje, kuri yra įtraukta į entuziastingą ATtiny

Existen otras librerías para las pantallas OLED. Laisvas GFX de Adafruit no me permitió palygina lo lo que decidí buscar algo precisamente para el ATtiny, bet gali egzistuoti, kad yra librerías y soluciones que son interesantes de explorera

El Consumo del dispositivo es muy bajo. Atsižvelgiant į tai, kad jis yra pastovus, jis turi vidutiniškai apskaičiuotą 3000 mAh (NiMH arba Li) akumuliatorių ir 500 litų. El Consumo podría redcirse aún más desconectando la pantalla y el sensor directamente desde un pin del ATtiny, bet nesvarbu, kad jis yra būtinas

„Technoblogy.com“segmente el ATtiny puede operacininkas ir vienas konsumo įdegis, bajo como el mostrado en la primera imagen, pero en este proyecto jis obtenido ir consumo mero eilė atitinka al de la segunda imagen. El Consumo de la batería Continúa siendo lo soficientemente bajo como para ser un proyecto factible

5 veiksmas: nuorodos į „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…

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

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

www.technoblogy.com/show?WNM

www.technoblogy.com/show?2F5D

Rekomenduojamas: