Taula de continguts:

Attiny85 Termómetro OLED: 5 passos
Attiny85 Termómetro OLED: 5 passos

Vídeo: Attiny85 Termómetro OLED: 5 passos

Vídeo: Attiny85 Termómetro OLED: 5 passos
Vídeo: Como Gravar um Attiny85 usando um Arduino Nano 2024, De novembre
Anonim
Attiny85 Termòmetre OLED
Attiny85 Termòmetre OLED
Attiny85 Termòmetre OLED
Attiny85 Termòmetre OLED

Aquest projecte consisteix en un termòmetre petit i senzill que mostra la temperatura actual, la humitat relativa i l’índex de temperatura. Pot realitzar-se amb un ATmega328p, però l'interessant d'aquesta versió és utilitzar un ATtiny85 amb un tamany i un consum de bateria convergents en un dispositiu petit i portàtil.

A continuació es va descriure el funcionament, seguit es va mostrar el circuit i finalitzar amb el programa i alguns comentaris sobre el projecte en general.

Subministraments

1 x ATtiny85

1 x Arduino UNO / PRO / etc (programador de ATtiny)

1 x 128x64 pantalla I2C OLED

1 x Sensor de temperatura DHT22

1 x Resistència 4.7MOhm (1 / 4W)

1 x condensador electrolític 0.1uF

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

Pas 1: Descripció del funcionament

L’objectiu del projecte és mostrar els tres valors anteriors mencionats a la pantalla OLED, a més, com a objectiu secundari, i s’inclou l’ús de la llibreria sleep.he interrupt.h per activar el termòmetre manualment i així reduir el consum per estendre la vida de la bateria.

El nostre programa guiarà pel següent procés: Leer temperatura -> Mostrar temperatura en pantalla -> Apagar ATtiny -> Reiniciar al presionar botó.

Per a cada un d’aquests passos deixem la major part del treball a les biblioteques ja existents, per lo que no reinventarem la roda. La biblioteca DHT sensor library de Adafruit (disponible en el IDE) y Tiny4kOLED de datacute que descarregem de Github ja que, al parecer, l'autor original és datacute i, a més, necessitarem modificar un poc després.

El mètode de reinici pot ser tant un botó com a dues plaques metàl·liques que es poden canviar per aconseguir l’equip. En el personal, ha trobat l’opció de les places metàl·liques més interactives.

Pas 2: Circuits

Circuits
Circuits
Circuits
Circuits
Circuits
Circuits

En la primera imatge es troba el circuit que es requereix per programar l’ATtiny85. Primerament s’ha de programar a Arduino (el condensador ha d’estar desconectat) amb el sketch ArduinoISP, que es troba a Archivos -> Ejemplos -> 11. ArduinoISP. Una vegada fet això es deu colocar el condensador per evitar que el nostre Arduino es reinicie al programa l’ATtiny85.

El ATtiny es pot alimentar directament de Arduino. En cas d’utilitzar una font de poder com una bateria és necessari connectar la massa (GND) de l’Arduino i l’ATtiny85.

Col·locar un botó entre el pin 13 del Arduino i el 2 de ATtiny pot facilitar fer proves ja que la pantalla no pot estar connectada quan es programa al ATtiny.

Com es observa en les imatges. El pin SDA del ATyiny és el 0 i el SCL / CLK és el 2. El nostre DHT està connectat al pin 4.

Pas 3: Programació

Primerament, debem seleccionar "Arduino as ISP" com a programador. Si encara no heu instal·lat la placa per a ATtiny, recomiendo instalar la placa ATtinyCore de Spence Konde. Aquesta placa no em va generar cap problema de compilació durant la realització del projecte.

La placa ha d'estar configurada sense BOD, amb un reloj de 8MHz intern i sense OptiBoot. Si utilitzem 1MHz la comunicació per I2C no és estable i a 16MHz amb vidre extern, a més de perdre dos pins digitals, el consum energètic augmenta considerablement.

Es pot destacar que va modificar un arxiu a la biblioteca Tiny4kOLED. El fitxer modificat és "font8x16.h" i va canviar la línia 117 pel següent codi amb el fi de canviar el símbol ~ per ° que utilitzarem en ° C.

0x00, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

A continuació ajunt el sketch necessari per al projecte.

#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 DHTPIN 4 #define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); const uint8_t ample = 128; const uint8_t altura = 64; bool volàtil convertit = fals; / * * * Gestió de la interrupció * * / ISR (PCINT_VECTOR) {// La interrupció sempre es recupera del son si (digitalRead (I_PIN) == HIGH) {tornat = cert; // torneu a configurar el senyalador per tornar a dibuixar la pantalla}} void setup () {cli (); // apaga les interrupcions PCMSK | = (1 << I_PINB); GIMSK | = (1 << PCIE); pinMode (I_PIN, INPUT); sei (); // activar les interrupcions adc_disable (); // estalviar energia apagant el convertidor set_sleep_mode (SLEEP_MODE_PWR_DOWN); // estableix el tipus de son en son profund oled.begin (amplada, alçada, mida de (tiny4koled_init_128x64br), tiny4koled_init_128x64br); // iniciar l'objecte oled oled.setFont (FONT8X16); // aquest tipus de lletra té un aspecte millor que l’altre drawScreen (); oled.on (); endarreriment (2000); dht.begin (); convertit = cert; // marca per a la pantalla de dibuix} void sleep () {sleep_enable (); sleep_cpu (); } void loop () {if (convertit) {cli (); // apagar les interrupcions oled.on (); float h = dht.readHumidity (); // lectura falsa per restablir el retard de la memòria cau de dht (2200); // espera dht per carregar h = dht.readHumidity (); flotador 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"); // el símbol ~ es va canviar a la biblioteca per semblar un retard de símbol de ° grau (5000); // mostra durant 5 segons oled.off (); convertit = fals; sei (); // attach torna a interrompre} sleep (); // sempre vés a dormir al final} void drawScreen () {// dibuixa el marc i el text principal per a (uint8_t y = 0; y <8; y ++) {oled.setCursor (0, y); oled.startData (); per a (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, amplada - 2); oled.sendData (0b11111111); oled.endData (); per a (uint8_t y = 1; y <(altura - 8) / 8; y ++) {oled.setCursor (0, y); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b00000000, amplada - 2); oled.sendData (0b11111111); oled.endData (); } oled.setCursor (0, (alçada - 8) / 8); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b10100000, amplada - 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:"); }

Pas 4: Conclusions

Conclusions
Conclusions
Conclusions
Conclusions

A pesar de la seva mida insignificant, el ATtiny85 ofereix una àmplia gamma d’aplicacions en les que podem implementar aquest controlador de baix cost sense perdre funcionalitat. Personalment no esperava que fora possible inclogués el control de pantalla i de son junts a causa de les limitacions de memòria. Dichozamente, el programa ha entrat en el nostre ATtiny

Existeixen altres llibres per a les pantalles OLED. La libreria GFX de Adafruit no em permeté compilar per lo que decidí buscar alguna cosa precisament per a l’ATtiny, però hi ha altres biblioteques i solucions que son interessants d’explorar

El consum del dispositiu és molt baix. Considerant un ús constant, va meditar i estimar la vida per a una bateria de 3000mAh (NiMH o LiIon) en 500 dies. El consum podria reduir-se encara més desconectant la pantalla i el sensor directament des d’un pin de ATtiny, però no el considera necessari

Según Technoblogy.com el ATtiny pot operar en un consum tan baix com el mostrat en la primera imatge, però en aquest projecte ha obtingut un consum major que correspon a la segona imatge. El consum de la bateria continua cantant el suficientment baix com per ser un projecte factible

Pas 5: enllaços i lectures relacionades

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

Recomanat: