Table des matières:
- Fournitures
- Étape 1: Descripción Del Funcionamiento
- Étape 2: Circuits
- Étape 3: Programmation
- Étape 4: Conclusions
- Étape 5: Liens Y Lecturas Relacionados
Vidéo: Attiny85 Termómetro OLED : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:06
Este proyecto consiste en un termómetro pequeño y simple que muestra la temperatura actual, la humedad relativa y el índice de temperatura. Puede realizarse con un 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.
A continuación describiré el funcionamiento, seguido mostraré el circuito y finalizaré con el programa y algunos comentarios sobre el proyecto en general.
Fournitures
1 x ATtiny85
1 x Arduino UNO/PRO/etc (programador del ATtiny)
1 x 128x64 pantalon I2C OLED
1 x capteur de température DHT22
1 x Resistencia 4.7MOhm (1/4W)
1 x condensateur electrolítico 0.1uF
1 x Fuente de 3.3V - 5V 10+ x Cavaliers
Étape 1: Descripción 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.h para activar el termómetro manualmente y así reducir el consumo para extender la bateria.
Nuestro programa se guiará por el siguiente proceso: Leer temperatura -> Mostrar temperatura en pantalla -> Apagar 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 autor 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 personnel, il encontrado la opción de las placas metálicas más interactivo.
Étape 2: Circuits
En la primer imagen se encuentra el circuito que requerimos para programar el ATtiny85. Primeramente se debe programar al Arduino (el condensateur debe estar desconectado) avec el sketch ArduinoISP, que se encuentra en Archivos -> Ejemlos -> 11. ArduinoISP. Una vez hecho esto se debe colocar el condensateur 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.
Étape 3: Programmation
Primeramente, debemos seleccionar "Arduino as ISP" como el programador. 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 problema de compilation durante la realización del proyecto.
La placa debe estar configurada sin BOD, avec un reloj de 8MHz interno y sin OptiBoot. Si utilizamos 1MHz la communication por I2C n'est pas stable et 16MHz avec cristal externe, además de perder dos pins digitales, el consumo energético aumenta considérablemente.
Cabe destacar qu'il a modifié un archivage dans 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
Une continuation 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)) convertisseur #define DHTPIN 4 #définir DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); const uint8_t largeur = 128; const uint8_t hauteur = 64; bool volatile tourné = faux; /* * * Gestionnaire d'interruption * */ ISR(PCINT_VECTOR){ //l'interruption récupère toujours du sommeil if(digitalRead(I_PIN) == HIGH) { turn = true; //définit le drapeau pour redessiner l'écran } } void setup() { cli(); //désactiver les interruptions PCMSK |= (1 << I_PINB); GIMSK |= (1 << PCIE); pinMode(I_PIN, INPUT); sei(); //activer les interruptions adc_disable(); //économie d'énergie en éteignant le convertisseur set_sleep_mode(SLEEP_MODE_PWR_DOWN); //définir le type de sommeil sur sommeil profond oled.begin(width, height, sizeof(tiny4koled_init_128x64br), tiny4koled_init_128x64br); //démarrer l'objet oled oled.setFont(FONT8X16); //cette police est meilleure que l'autre drawScreen(); oled.on(); retard (2000); dht.begin(); tourné = vrai; //indicateur pour l'écran de dessin } void sleep(){ sleep_enable(); sleep_cpu(); } boucle vide() { if (tourné){ cli(); //désactiver les interruptions oled.on(); float h = dht.readHumidity();//false read pour réinitialiser le délai du cache dht (2200);//wait dht to load h = dht.readHumidity(); float t = dht.readTemperature(); float i = dht.computeHeatIndex(t, h, faux); 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"); //le symbole ~ a été modifié sur la bibliothèque pour ressembler à un délai de symbole ° degré (5000); //afficher pendant 5 secondes oled.off(); tourné = faux; sei();//attacher à nouveau les interruptions } sleep(); //toujours se coucher à la fin } void drawScreen() { //dessine le cadre et le texte principal pour (uint8_t y = 0; y < 8; y++) { oled.setCursor(0, y); oled.startData(); pour (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, largeur - 2); oled.sendData(0b11111111); oled.endData(); for (uint8_t y = 1; y < (hauteur - 8) / 8; y++) { oled.setCursor(0, y); oled.startData(); oled.sendData(0b11111111); oled.repeatData(0b00000000, largeur - 2); oled.sendData(0b11111111); oled.endData(); } oled.setCursor(0, (hauteur - 8) / 8); oled.startData(); oled.sendData(0b11111111); oled.repeatData(0b10100000, largeur - 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:"); }
Étape 4: Conclusions
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 y de sleep juntos debido a las limitaciones de memoria. Dichozamente, el programa ha entrado en nuestro ATtiny
Existent d'autres 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. Considéré un uso constant, il medido y estimado la vida para une batterie de 3000mAh (NiMH o LiIon) en 500 jours. El consumo podría reducirse aún más desconectando la pantalla y el sensor directement desde un pin del ATtiny, pero no lo he considerado necesario
Según Technoblogy.com el ATtiny puede operar en un consumo tan bajo como el mostrado en la primera imagen, pero en este proyecto he obtenido un consumo mayor que corresponde al de la segunda imagen. El consumo de la batería continúa siendo lo suficientemente bajo como para ser un proyecto factible
Étape 5: Liens 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…
embeddedthoughts.com/2016/06/06/attiny85-i…
www.instructables.com/id/ATtiny85-Interrupt…
www.technoblogy.com/show?WNM
www.technoblogy.com/show?2F5D
Conseillé:
Étoile de Noël plus grande et améliorée Neopixel Attiny85 : 3 étapes (avec photos)
Étoile de Noël plus grande et améliorée Neopixel Attiny85 : L'année dernière, j'ai fait une petite étoile de Noël imprimée en 3D, voir https://www.instructables.com/id/Christmas-Star-LE… Cette année, j'ai fait une plus grande étoile à partir d'un brin de 50 Néopixels (5V WS2811). Cette plus grande étoile avait plus de motifs (j'ajoute et j'améliore encore
ATtiny85 Montre et programmation de suivi d'activité vibrant portable ATtiny85 avec Arduino Uno: 4 étapes (avec photos)
ATtiny85 Montre de suivi d'activité vibrante portable et programmation ATtiny85 avec Arduino Uno: Comment fabriquer la montre de suivi d'activité portable? Il s'agit d'un gadget portable conçu pour vibrer lorsqu'il détecte une stagnation. Vous passez la plupart de votre temps sur l'ordinateur comme moi ? Vous êtes assis pendant des heures sans vous en rendre compte ? Alors cet appareil est f
Comment utiliser le moteur pas à pas comme encodeur rotatif et écran OLED pour les étapes : 6 étapes
Comment utiliser le moteur pas à pas comme encodeur rotatif et écran OLED pour les étapes : Dans ce didacticiel, nous allons apprendre à suivre les pas du moteur pas à pas sur l'écran OLED. Regardez une vidéo de démonstration. Le crédit pour le didacticiel original va à l'utilisateur youtube "sky4fly"
Flappy Bird sur ATtiny85 et écran OLED SSD1306 : 6 étapes (avec photos)
Flappy Bird sur ATtiny85 et écran OLED SSD1306 : Salut tout le monde, aujourd'hui, je vais vous montrer un clone d'oiseau flappy de base que j'ai créé et comment vous pouvez créer un jeu similaire. Je vais essentiellement parcourir mon code avec vous et expliquer comment cela fonctionne à chaque étape du processus. Ce jeu est conçu pour ru
Carte de visite/Console de jeu : ATtiny85 et écran OLED : 5 étapes (avec photos)
Carte de visite/console de jeu : ATtiny85 et écran OLED : Bonjour à tous ! Aujourd'hui, je vais vous montrer comment vous pouvez créer votre propre carte de visite/console de jeu/tout ce que vous pouvez imaginer qui comprend un écran I2C OLED rétroéclairé et un microprocesseur ATtiny85. Dans ce Instructable je vais vous dire comment un PCB que je conçois