Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Beskriv Del Funcionamiento
- Trinn 2: Circuitos
- Trinn 3: Programmering
- Trinn 4: Konklusjoner
- Trinn 5: Lenker Y Lecturas Relacionados
Video: Attiny85 Termómetro OLED: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Este proyecto consiste en un termómetro pequeño y simple que muestra la facta actual, la humedad relativa y el indice de temperatura. Det kan realiseres med ATmega328p, men kan også brukes i versjoner av ATtiny85 for å konvertere et batteri og disponere et porto.
En fortløpende beskrivelse av funksjonen, som gir en omfattende oversikt over alle programmer og generelle kommentarer.
Rekvisita
1 x ATtiny85
1 x Arduino UNO/PRO/etc (programleder for ATtiny)
1 x 128x64 pantalla I2C OLED
1 x Sensortemperatura DHT22
1 x Resistensia 4,7MOhm (1/4W)
1 x kondensator electrolítico 0.1uF
1 x Fuente de 3.3V - 5V 10+ x Gensere
Trinn 1: Beskriv 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. la batería.
Nuestro programa se guiará por el siguiente proceso: Leer temperatura -> Mostrar temperatura en pantalla -> Apatar ATtiny -> Reiniciar al presionar botón.
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. En lo personlig, han encontrado la opción de las placas metálicas más interactivo.
Trinn 2: Circuitos
En la primer imagen se encuentra el circuito que requerimos 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 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 es el 0 y el SCL/CLK es el 2. Nuestro DHT está conectado en el pin 4.
Trinn 3: Programmering
Primeramente, debemos seleccionar "Arduino as ISP" como el programador. Si aún no han installer la placa para el ATtiny, recommendo installer 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, med en reloj av 8MHz intern og y OptiBoot. Det bruker 1MHz kommunikasjon for I2C og er ikke tilgjengelig for 16MHz eksternt, además de perder dos pines digitales, el consumo energético aumenta considerablemente.
Kan deaktiveres og kan endres i arkiv av 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 continuación ajunto el sketch 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 #define DHTPIN #define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); const uint8_t bredde = 128; const uint8_t høyde = 64; flyktig bool slått = feil; / * * * Avbruddshåndterer * */ISR (PCINT_VECTOR) {// interrupt gjenoppretter alltid fra søvn hvis (digitalRead (I_PIN) == HIGH) {slått = sant; // sett flagget til å tegne skjermen igjen}} ugyldig oppsett () {cli (); // slå av avbryter PCMSK | = (1 << I_PINB); GIMSK | = (1 << PCIE); pinMode (I_PIN, INPUT); sei (); // slå på avbrudd adc_disable (); // spare strøm ved å slå av omformeren set_sleep_mode (SLEEP_MODE_PWR_DOWN); // angi søvntypen til dyp søvn oled.begin (bredde, høyde, størrelse på (tiny4koled_init_128x64br), tiny4koled_init_128x64br); // start oled objekt oled.setFont (FONT8X16); // denne skrifttypen ser bedre ut enn den andre drawScreen (); oled.on (); forsinkelse (2000); dht.begin (); slått = sant; // flagg for tegningsskjerm} ugyldig søvn () {sleep_enable (); sleep_cpu (); } void loop () {if (turn) {cli (); // slå av avbrudd oled.on (); float h = dht.readHumidity (); // false read for å tilbakestille dht cache delay (2200); // wait dht to load 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"); // symbolet ~ ble endret på biblioteket for å se ut som en ° graders forsinkelse (5000); // vis i 5 sekunder oled.off (); slått = usant; sei (); // legg til avbrudd igjen} søvn (); // sov alltid på slutten} void drawScreen () {// tegner rammen og hovedteksten for (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, bredde - 2); oled.sendData (0b11111111); oled.endData (); for (uint8_t y = 1; y <(høyde - 8) / 8; y ++) {oled.setCursor (0, y); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b00000000, bredde - 2); oled.sendData (0b11111111); oled.endData (); } oled.setCursor (0, (høyde - 8) / 8); oled.startData (); oled.sendData (0b11111111); oled.repeatData (0b10100000, bredde - 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:"); }
Trinn 4: Konklusjoner
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 and the sleep juntos debido a las limitaciones de memoria. Dichozamente, el programa ha entrado en nuestro ATtiny
Existen 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 existen otras librerías y soluciones que son interesantes de explorar
El consumo del dispositivo es muy bajo. Tenk på en uso konstante, han medido og estimado la vida para una batería de 3000mAh (NiMH o LiIon) en 500 días. Forbruket kan redusere størrelsen på en panteløsning og en sensor for å fastslå en pin for ATtiny, men det er ikke nødvendig å vurdere det
Según Technoblogy.com el ATtiny puede operar en un consumo tan bajo como el mostrado en la primera image, pero en este proyecto he obtenido un consumo Mayor que correspondonde al de la segunda image. El consumo de la batería continúa siendo lo suficientemente bajo como para ser un proyecto factible
Trinn 5: Lenker 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…
embedded Thoughts.com/2016/06/06/attiny85-i…
www.instructables.com/id/ATtiny85-Interrup…
www.technoblogy.com/show?WNM
www.technoblogy.com/show?2F5D
Anbefalt:
Større og forbedret julestjerne Neopixel Attiny85: 3 trinn (med bilder)
Større og forbedret julestjerne Neopixel Attiny85: I fjor lagde jeg en liten 3D-trykt julestjerne, se https://www.instructables.com/id/Christmas-Star-LE…I år laget jeg en større stjerne av en tråd av 50 Neopixels (5V WS2811). Denne større stjernen hadde flere mønstre (jeg legger fortsatt til og forbedrer
ATtiny85 Wearable Vibrating Activity Tracking Watch & Programming ATtiny85 With Arduino Uno: 4 Steps (with Pictures)
ATtiny85 Wearable Vibrating Activity Tracking Watch & Programming ATtiny85 With Arduino Uno: How to make the wearable activity tracking watch? Dette er en bærbar gadget designet for å vibrere når den oppdager stagnasjon. Bruker du mesteparten av tiden din på datamaskinen som meg? Sitter du i timevis uten å innse det? Da er denne enheten f
Hvordan bruke trinnmotor som roterende koder og OLED -skjerm for trinn: 6 trinn
Hvordan bruke trinnmotor som roterende koder og OLED -skjerm for trinn: I denne opplæringen lærer vi hvordan du sporer trinnmotortrinnene på OLED -skjermen. Se en demonstrasjonsvideo. Kreditt for den originale opplæringen går til youtube -brukeren " sky4fly "
Flappy Bird på ATtiny85 og OLED Display SSD1306: 6 trinn (med bilder)
Flappy Bird på ATtiny85 og OLED Display SSD1306: Hei alle sammen, I dag skal jeg vise deg en grunnleggende flappy bird -klon som jeg opprettet, og hvordan du kan lage et lignende spill. Jeg vil i hovedsak gå gjennom koden min med deg og forklare hvordan det fungerer hvert trinn på veien. Dette spillet er bygget for å ødelegge
Visittkort/spillkonsoll: ATtiny85 og OLED -skjerm: 5 trinn (med bilder)
Visittkort/spillkonsoll: ATtiny85 og OLED -skjerm: Hei alle sammen! I dag skal jeg vise deg hvordan du kan bygge ditt eget visittkort/spillkonsoll/alt du kan forestille deg som har en bakgrunnsbelyst I2C OLED -skjerm og en ATtiny85 mikroprosessor. I denne instruksjonsboken vil jeg fortelle deg hvordan en PCB som jeg designer