Taula de continguts:
- Subministraments
- Pas 1: Descripció del funcionament
- Pas 2: Circuits
- Pas 3: Programació
- Pas 4: Conclusions
- Pas 5: enllaços i lectures relacionades
Vídeo: Attiny85 Termómetro OLED: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:12
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
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
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:
Neopixel Attiny85: 3 passos (amb imatges) més gran i millorat de l'estrella de Nadal
Neopixel Attiny85 d’estrella de Nadal més gran i millorada: L’any passat vaig fer una petita estrella de Nadal impresa en 3D, vegeu https://www.instructables.com/id/Christmas-Star-LE … Aquest any he fet una estrella més gran a partir d’un fil de 50 Neopíxels (5V WS2811). Aquesta estrella més gran tenia més patrons (encara estic afegint i millorant
Rellotge i programació de seguiment d'activitats vibrants portables ATtiny85 ATtiny85 amb Arduino Uno: 4 passos (amb imatges)
Rellotge i programació de seguiment d'activitats vibrants portables ATtiny85 ATtiny85 amb Arduino Uno: Com fer que el rellotge de seguiment d'activitat portable? Es tracta d’un gadget usable dissenyat per vibrar quan detecta l’estancament. Passes la major part del temps a l’ordinador com jo? Estàs assegut durant hores sense adonar-te’n? Llavors, aquest dispositiu és f
Com utilitzar el motor pas a pas com a codificador rotatiu i pantalla OLED per a passos: 6 passos
Com utilitzar el motor pas a pas com a codificador rotatiu i pantalla OLED per als passos: en aquest tutorial aprendrem com fer un seguiment dels passos del motor pas a pas a la pantalla OLED. Mireu un vídeo de demostració. El crèdit per al tutorial original va a l'usuari de youtube " sky4fly "
Flappy Bird a ATtiny85 i pantalla OLED SSD1306: 6 passos (amb imatges)
Flappy Bird a ATtiny85 i pantalla OLED SSD1306: Ei a tothom, avui us mostraré un clon bàsic d’aus flappy que he creat i com podeu fer un joc similar. Essencialment, examinaré el meu codi amb vosaltres i us explicaré com funciona a cada pas del camí. Aquest joc està construït per ru
Targeta de visita / Consola de jocs: Pantalla ATtiny85 i OLED: 5 passos (amb imatges)
Targeta de visita / Consola de jocs: Pantalla ATtiny85 i OLED: Hola a tothom. Avui us mostraré com podeu crear la vostra pròpia targeta de visita / consola de jocs / qualsevol cosa que us pugueu imaginar que inclogui una pantalla OLED I2C retroil·luminada i un microprocessador ATtiny85. En aquest instructiu us explicaré com dissenyo un PCB