Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Descripción Del Funcionamiento
- Schritt 2: Circuitos
- Schritt 3: Programmación
- Schritt 4: Schlussfolgerungen
- Schritt 5: Links Y Lecturas Relacionados
Video: Attiny85 Termómetro OLED - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:16
Este proyecto en un termómetro pequeño y simple que muestra la temperatura current, la humedad relativa y el índice de temperatura. Puede realizarse con a ATmega328p, pero lo interesante de esta version es utilizar a ATtiny85 Cuyo tamaño y consumo de batería convergen en un dispositivo pequeño y portátil.
A Continuación describe el funcionamiento, seguido mostraré el Circuito y finalizaré con el programa y algunos comentarios sobre el proyecto en general.
Lieferungen
1 x ATtiny85
1 x Arduino UNO/PRO/etc (Programmierer von ATtiny)
1 x 128x64 Pantalla I2C OLED
1 x Sensortemperatur DHT22
1 x Widerstand 4.7MOhm (1/4W)
1 x Kondensatorelektrolyse 0,1uF
1 x Fuente de 3.3V - 5V 10+ x Jumper
Schritt 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 libreía sleep.he interrupt.h para activar el termómetro manualmente y así reducir la batería.
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 liberías ya existentes, por lo que no reventaremos la rueda. Die freie DHT-Sensorbibliothek von Adafruit (verfügbar in der IDE) und Tiny4kOLED von Datacute, die von Github-Descargaremos que, al parecer, el autor original es datacute y, además, notwending 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 persönlich, er encontrado la opción de las placas metálicas más interactivo.
Schritt 2: Circuitos
En la prime imagen se encuentra el Circuito que requerimos para programar el ATtiny85. Primeramente se debe programar al Arduino (el Kondensator debe estar desconectado) mit el Sketch ArduinoISP, que se encuentra en Archivos -> Ejemplos -> 11. ArduinoISP. Una vez hecho esto se debe colocar el Kondensator für evitar que nuestro Arduino se reinicie al programar el ATtiny85.
El ATtiny se puede alimentary directamente del Arduino. En Caso de utilizar a fuente de poder como a batería, die notwendig ist, um die Masse (GND) von Arduino und ATtiny85 zu verbinden.
Colocar ein botón entre el pin 13 von Arduino und el 2 von 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.
Schritt 3: Programmación
Primeramente, debemos seleccionar "Arduino als 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 compilación durante la realización del proyecto.
La placa debe estar configurada sin BOD, con unreloj de 8MHz interno y sin OptiBoot. Si utilizamos 1MHz la comunicación por I2C no estable y a 16MHz con cristal externo, además de perder dos pines digitals, el consumo energético aumenta beträchtlich.
Cabe destacar que he modificado a archivo in the 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 camambiar el símbolo ~ por ° que usaremos en °C.
0x00, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
Eine Continuación ajunto el Sketch necesario para el proyecto.
#include #include #include #include #define I_PIN PCINT3 #define I_PIN PB3 #define I_VECTOR PCINT0_vect #define adc_disable() (ADCSRA &= ~(1<<aden)) Konverter #define DHTPIN 4 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); const uint8_t Breite = 128; const uint8_t Höhe = 64; volatile bool gedreht = false; /* * * Interrupt-Handler * */ ISR (PCINT_VECTOR) {// Interrupt erholt sich immer aus dem Ruhezustand If (digitalRead (I_PIN) == HIGH) {turned = true; // Setzen Sie das Flag, um den Bildschirm erneut zu zeichnen. aufrechtzuerhalten. Void setup () { cli (); // Interrupts ausschalten PCMSK |= (1 << I_PINB); GIMSK |= (1 << PCIE); pinMode (I_PIN, EINGANG); sei(); // Interrupts einschalten adc_disable(); // Strom sparen beim Ausschalten des Konverters set_sleep_mode (SLEEP_MODE_PWR_DOWN); // Setze die Schlafart auf Tiefschlaf oled.begin(width, height, sizeof(tiny4koled_init_128x64br), tiny4koled_init_128x64br); // Oled-Objekt starten oled.setFont (FONT8X16); // diese Schriftart sieht besser aus als die andere drawScreen (); oled.on(); Verzögerung (2000); dht.begin(); gedreht = wahr; // Flag zum Zeichnen des Bildschirms aufrechtzuerhalten. Void sleep () { sleep_enable (); sleep_cpu(); aufrechtzuerhalten. Void Schleife () { wenn (gedreht) { cli (); // Interrupts ausschalten oled.on (); float h = dht.readHumidity (); // False Read, um die DHT-Cache-Verzögerung (2200) zurückzusetzen; // Warten auf DHT, um zu laden 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"); // das ~-Symbol wurde in der Bibliothek so geändert, dass es wie eine ° Grad Symbolverzögerung aussieht (5000); // 5 Sekunden lang anzeigen oled.off (); gedreht = falsch; sei(); // Interrupts wieder anhängen } sleep(); //immer am Ende schlafen gehen} void drawScreen() { //Zeichnet den Rahmen und den Haupttext für (uint8_t y = 0; y < 8; y++) { oled.setCursor(0, y); oled.startData(); für (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, Breite - 2); oled.sendData(0b11111111); oled.endData(); for (uint8_t y = 1; y < (Höhe - 8) / 8; y++) { oled.setCursor (0, y); oled.startData(); oled.sendData(0b11111111); oled.repeatData(0b00000000, Breite - 2); oled.sendData(0b11111111); oled.endData(); } oled.setCursor (0, (Höhe - 8) / 8); oled.startData(); oled.sendData(0b11111111); oled.repeatData(0b10100000, Breite - 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:"); }
Schritt 4: Schlussfolgerungen
A pesar de su tamaño insignificante, el ATtiny85 ofrece una amplia gama de aplicaciones las que podemos implementar est 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
Existieren Sie otras librerías para las pantallas OLED. Die GFX-Bibliothek von Adafruit kann nicht von mir kompiliert werden, die für die Entscheidung des Buscars präzisiert ist, um die ATtiny zu verwenden, um vorhandene Otras Librerías y Soluciones que son interesantes de explorar zu erhalten
El consumo del dispositivo es muy bajo. Berücksichtigen Sie eine Konstante, die Sie für eine Batterie von 3000mAh (NiMH oder LiIon) und 500 Tage schätzen. El consumo podría reducirse aún más deconectando la pantalla y el sensor directamente desde un pin del ATtiny, pero no lo he rücksichtsvoll
Según Technoblogy.com el ATtiny puede operar en a consumo tan bajo como el mostrado en la primera imagen, pero en este proyecto er obtenido a consumo Bürgermeister 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
Schritt 5: Links Y Lecturas Relacionados
www.technoblogy.com/show?KX0&fbclid=IwAR0qu…
github.com/SpenceKonde/ATTinyCore
www.electroschematics.com/am2302-dht22-dat…
ww1.microchip.com/downloads/de/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
Empfohlen:
Wie man eine Babygewichtsmaschine mit Arduino Nano, HX-711 Wägezelle und OLED 128X64 herstellt -- Kalibrierung des HX-711: 5 Schritte
Wie man eine Babygewichtsmaschine mit Arduino Nano, HX-711-Wägezelle und OLED 128X64 herstellt || Kalibrierung von HX-711: Hallo Instructables, vor wenigen Tagen wurde ich Vater eines süßen Babys?. Als ich im Krankenhaus war, stellte ich fest, dass das Gewicht des Babys so wichtig ist, um das Wachstum des Babys zu überwachen. Also ich habe eine Idee? um eine Babygewichtsmaschine von meinem Selbst zu machen. In diesem Instructable ich