Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Descripción Del Funcionamiento
- Krok 2: Obwody
- Krok 3: Programación
- Krok 4: Wnioski
- Krok 5: Linki Y Lecturas Relacionados
Wideo: Attiny85 Termometro OLED: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:28
Este proyecto conforme en un termómetro pequeño y simple que muestra la temperaturaaktual, 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 pl 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.
Kieszonkowe dzieci
1 x ATtiny85
1 x Arduino UNO/PRO/etc (programator ATtiny)
1x128x64 pantalla I2C OLED
1 x czujnik temperatury DHT22
1 x Rezystancja 4,7 MOhm (1/4 W)
1 x kondensator elektrolityczny 0.1uF
1 x zasilanie 3,3 V - 5 V 10+ x zworki
Krok 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. la bateria.
Nuestro programa se guiará por el siguiente proceso: Leer temperatura -> Mostrar temperatura en pantalla -> Apagar ATtiny -> Reiniciiar 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 biblioteka czujników DHT 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 personal, on encontrado la opción de las placas metálicas más interactivo.
Krok 2: Obwody
En la primer imagen se encuentra el circuito que requerimos para programar el ATtiny85. Primeramente se debe programar al Arduino (el kondensator debe estar desconectado) con el sketch ArduinoISP, que se encuentra en Archivos -> Ejemplos -> 11. ArduinoISP. Una vez hecho se debe colocar el kondensator dla evitar que nuestro Arduino se reinicjal 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 obrazów. El pin SDA del ATyiny es el 0 y el SCL/CLK es el 2. Nuestro DHT está conectado en el pin 4.
Krok 3: Programación
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 compilación durante la realización del proyecto.
La placa debe estar configurada sin BOD, con un reloj 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 digitales, el consumo energético aumenta znaczny.
Cabe destacar que on modificado un archivo en la libreria Tiny4kOLED. El archivo modificado es "font8x16.h" y he cambiado la linea 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)) konwerter #define DHTPIN 4 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); const uint8_t szerokość = 128; const uint8_t wysokość = 64; volatile bool włączony = false; /* * * Obsługa przerwań * */ ISR(PCINT_VECTOR){ //przerwanie zawsze wychodzi ze stanu uśpienia if(digitalRead(I_PIN) == HIGH) { turn = true; //ustaw flagę na ponowne rysowanie ekranu } }void setup() { cli(); //wyłącz przerwania PCMSK |= (1 << I_PINB); GIMSK |= (1 <<PCIE); pinMode(I_PIN, WEJŚCIE); sei(); //włącz przerwania adc_disable(); //oszczędność energii wyłączanie konwertera set_sleep_mode(SLEEP_MODE_PWR_DOWN); //ustaw typ snu na głęboki sen oled.begin(width, height, sizeof(tiny4koled_init_128x64br), tiny4koled_init_128x64br); //uruchom obiekt oled oled.setFont(FONT8X16); //ta czcionka wygląda lepiej niż druga drawScreen(); oled.on(); opóźnienie (2000); dht.początek(); toczone = prawda; //flaga do rysowania ekranu } void sleep(){ sleep_enable(); procesor_uśpienia(); } void loop() { if (turned){ cli(); //wyłączanie przerwań oled.on(); float h = dht.readHumidity();//false read resetuje opóźnienie pamięci podręcznej dht(2200);//czekaj na załadowanie dht h = dht.readHumidity(); float t = dht.odczytTemperatura(); 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"); //symbol ~ został zmieniony w bibliotece, aby wyglądał jak opóźnienie symbolu ° stopni (5000); //pokaż przez 5 sekund oled.off(); obrócony = fałszywy; sei();//załącz ponownie przerwania } sleep(); //zawsze idź spać na koniec } void drawScreen() { //rysuje ramkę i główny tekst 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(0b0000011, szerokość - 2); oled.sendData(0b11111111); oled.endData(); for (uint8_t y = 1; y < (wysokość - 8) / 8; y++) { oled.setCursor(0, y); oled.startData(); oled.sendData(0b11111111); oled.repeatData(0b00000000, szerokość - 2); oled.sendData(0b11111111); oled.endData(); } oled.setCursor(0, (wysokość - 8) / 8); oled.startData(); oled.sendData(0b11111111); oled.repeatData(0b10100000, szerokość - 2); oled.sendData(0b11111111); oled.endData(); oled.setCursor(4, 1); oled.print("Temp:"); oled.setCursor(4, 3); oled.print("Szum:"); oled.setCursor(4, 5); oled.print("Sens:"); }
Krok 4: Wnioski
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
Existen otras librerías para las pantallas OLED. La librería GFX de Adafruit nie zezwala na kompilację 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. Rozważania un uso constante, on medido y estimado la vida para una batería de 3000mAh (NiMH o LiIon) en 500 dni. El consumo podría reducirse aún más desconectando la pantalla y el sensor directamente desde un pin del ATtiny, pero no lo on thoughtado necesario
Según Technoblogy.com el ATtiny puede operar pl un consumo tan bajo como el mostrado pl la primera imagen, pero en este proyecto on obtenido un consumo burmistrz que korespondent al de la segunda imagen. El consumo de la batería continúa siendo lo suficientemente bajo como para ser un proyecto factible
Krok 5: Linki 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
Zalecana:
Zmniejszenie zużycia energii baterii dla Digispark ATtiny85: 7 kroków
Zmniejszenie zużycia energii baterii dla Digispark ATtiny85: lub: Uruchamianie Arduino z baterią monetową 2032 przez 2 lata.Używając płytki Digispark Arduino po wyjęciu z pudełka z programem Arduino, pobiera ona 20 mA przy napięciu 5 woltów. 2000 mAh będzie działać tylko przez 4 dni
ATtiny85 Poręczny zegarek do śledzenia aktywności wibracyjnej i programowanie ATtiny85 z Arduino Uno: 4 kroki (ze zdjęciami)
ATtiny85 Wearable Wibracyjny zegarek do śledzenia aktywności i programowanie ATtiny85 z Arduino Uno: jak zrobić zegarek do noszenia na ciele? Jest to gadżet do noszenia, który wibruje, gdy wykryje stagnację. Czy spędzasz większość czasu przy komputerze tak jak ja? Siedzisz godzinami, nie zdając sobie z tego sprawy? Wtedy to urządzenie jest f
Jak używać silnika krokowego jako enkodera obrotowego i wyświetlacza OLED dla kroków: 6 kroków
Jak używać silnika krokowego jako enkodera obrotowego i wyświetlacza OLED dla kroków: W tym samouczku dowiemy się, jak śledzić kroki silnika krokowego na wyświetlaczu OLED. Obejrzyj film demonstracyjny.Kredyt samouczka oryginalnego trafia do użytkownika YouTube „sky4fly”
Flappy Bird na ATtiny85 i wyświetlaczu OLED SSD1306: 6 kroków (ze zdjęciami)
Flappy Bird na ATtiny85 i wyświetlaczu OLED SSD1306: Hej wszystkim, dzisiaj pokażę wam podstawowy klon Flappy Bird, który stworzyłem, i jak można zrobić podobną grę. Zasadniczo omówię z tobą mój kod i wyjaśnię, jak to działa na każdym kroku. Ta gra została stworzona, aby
Wizytówka/konsola do gier: ATtiny85 i ekran OLED: 5 kroków (ze zdjęciami)
Wizytówka/konsola do gier: ATtiny85 i ekran OLED: Cześć wszystkim! Dzisiaj pokażę wam, jak można zbudować własną wizytówkę/konsolę do gier/cokolwiek, co można sobie wyobrazić, wyposażone w podświetlany wyświetlacz I2C OLED i mikroprocesor ATtiny85. W tym instruktażowym opowiem ci, jak projektuję płytkę drukowaną