Kazalo:

Attiny85 Termómetro OLED: 5 korakov
Attiny85 Termómetro OLED: 5 korakov

Video: Attiny85 Termómetro OLED: 5 korakov

Video: Attiny85 Termómetro OLED: 5 korakov
Video: Attiny85 документация 2024, Oktober
Anonim
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED
Attiny85 Termómetro OLED

Este proyecto consiste en un termómetro pequeño y simple que muestra la temperature dejanska, la humedad relativa y el índice de temperatura. Puede realizarse con ATmega328p, pero lo interesante de esta versión es utilizar un ATtiny85 cuyo tamaño y consumo de batería convergen en un dispositivo pequeño y portátil.

Neprekinjen opis delovanja, funkcionamiento, seguido mostraré el circuito y finalizaré con el programa y algunos comentarios sobre el proyecto na splošno.

Zaloge

1 x ATtiny85

1 x Arduino UNO/PRO/etc (program za del ATtiny)

1 x 128x64 pantalla I2C OLED

1 x temperatura senzorja DHT22

1 x Resistencia 4,7MOhm (1/4W)

1 x elektrolitski kondenzator 0,1 uF

1 x Fuente de 3.3V - 5V 10+ x mostički

1. korak: Opis funkcijske funkcije

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

Najnovejši programi se izvajajo v skladu z naslednjimi postopki: Najnižja temperatura -> Najnižja temperatura v krogu -> Apagar ATtiny -> Reiniciar al presionar botton.

Para cada uno de estos pasos dejaremos la Mayor parte del trabajo a las librerías ya existentes, por lo que no reinventaremos la rueda. La Librería DHT sensor library de Adafruit (disponible en el IDE) y Tiny4kOLED de datacute que descargaremos de Github ya que, al parecer, el author 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. Osebno je predlagal opción de las placas metálicas más interactivo.

Korak: Circuitos

Circuitos
Circuitos
Circuitos
Circuitos
Circuitos
Circuitos

En la primer imagen en encuentra el circuito que requerimos para programmar el ATtiny85. Primeramente debe programer al Arduino (el kondenzator debe estar desconectado) s skico ArduinoISP, que se encuentra en Archivos -> Ejemplos -> 11. ArduinoISP. Una vez hecho esto se debe colocar el kondenzator za 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 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 je na 0 ali SCL/CLK es el 2. Nuestro DHT je povezan s pin 4.

3. korak: Programiranje

Primer, izbrani "Arduino kot ponudnik internetnih storitev" kot program. Si aún no han instalado la placa para el ATtiny, recomiendo instalar la placa ATtinyCore de Spence Konde. Esta placa no ge genero ningún problem de compilación durante la realización del proyecto.

La placa debe estar konfiguracija sinhronizacije BOD, ki je vgrajena v 8MHz interno y OptiBoot. Če uporabljate 1 MHz za komunikacijo po I2C, ni mogoče nastaviti na 16 MHz s kristalnim zunanjim izhodom, prilagoditi podatke o digitalnih pinesih, porabo energije pa znatno povečati.

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

Continuación ajunto el skica 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)) disable = "" adc = "" converter #def #define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); const uint8_t width = 128; const uint8_t višina = 64; hlapna bool obrnjena = napačno; / * * * Vodnik prekinitve * */ISR (PCINT_VECTOR) {// prekinitev se vedno povrne iz stanja spanja, če (digitalRead (I_PIN) == HIGH) {turn = true; // zastavo za ponovno risanje zaslona}} void setup () {cli (); // izklopi prekinitve PCMSK | = (1 << I_PINB); GIMSK | = (1 << PCIE); pinMode (I_PIN, INPUT); sei (); // vklopi prekinitve adc_disable (); // varčevanje z energijo pri izklopu pretvornika set_sleep_mode (SLEEP_MODE_PWR_DOWN); // vrsto spanja nastavimo na globok spanec oled.begin (width, height, sizeof (tiny4koled_init_128x64br), tiny4koled_init_128x64br); // zagon oled objekta oled.setFont (FONT8X16); // ta pisava izgleda bolje kot druga drawScreen (); oled.on (); zamuda (2000); dht.begin (); obrnjeno = res; // zastavica za risanje zaslona} void sleep () {sleep_enable (); sleep_cpu (); } void loop () {if (obrnjeno) {cli (); // izklopi prekinitve oled.on (); float h = dht.readHumidity (); // napačno branje za ponastavitev zakasnitve dht predpomnilnika (2200); // počakajte dht za nalaganje 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 ~ je bil v knjižnici spremenjen v zamik simbola ° stopinje (5000); // za 5 sekund pokaži oled.off (); obrnjeno = napačno; sei (); // znova priloži prekinitve} sleep (); // vedno pojdi spat na koncu} void drawScreen () {// nariše okvir in glavno besedilo za (uint8_t y = 0; y <8; y ++) {oled.setCursor (0, y); oled.startData (); za (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, širina - 2); oled.sendData (0b11111111); oled.endData (); za (uint8_t y = 1; y <(višina - 8) / 8; y ++) {oled.setCursor (0, y); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b00000000, širina - 2); oled.sendData (0b11111111); oled.endData (); } oled.setCursor (0, (višina - 8) / 8); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b10100000, širina - 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. korak: Zaključki

Zaključki
Zaključki
Zaključki
Zaključki

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 program has entrado en nuestro ATtiny

Obstoj otras librerías para las pantallas OLED. La librería GFX de Adafruit no permitió compiler por lo que decidí buscar algo precisamente para el ATtiny, pero existen otras librerías y soluciones que son interesantes de explorar

El consumo del dispositivo es muy bajo. Po mojem mnenju un uso constante je medido y estimado la vida para una batería de 3000mAh (NiMH o LiIon) in 500 días. El consumo podría reducirse aún más desconectando la pantalla y el sensor directamente desde un pin del ATtiny, no no he he razmisljala o tem

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

5. korak: Povežite 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…

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

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

www.technoblogy.com/show?WNM

www.technoblogy.com/show?2F5D

Priporočena: