Čas a teplota na oled displeji
Tento projekt slouží k měření teploty, tlaku a času a k jejich zobrazení na OLED displeji. Současně data vypisuje na sériovou linku.
Zdravím všechny Arduino příznivce a představuji vám můj skromný pokojový teploměr.
Jelikož se kvůli mému poměrně výkonnému počítači často stávalo, že se v místnosti vytopilo až na 30° C, rozhodl jsem se, že si postavím menší kontrolní teploměr, kolik stupňů je zrovna v pokoji.
Motivovala mě hlavně představa, že si budu regulovat teplotu pomocí otvírání okna, nebo podobně, ale zatím si musím vystačit s tímto mini teploměrem.
Teď už ale k věci:
Začal jsem tím, že jsem si v Autodesk Inventoru navrhl krabičku, pro ty co nemají Inventor doporučuji webový CAD ONSHAPE, je zdarma a intuitivní.
přikládám případný soubor stl. Není to perfektní, jsem amatér, ale stačí. (soubor ke stažení dole poz. red.)
Použil jsem knihovny:
Program je vcelku jednoduchý,
Každých 10 sekund přečte hodnotu z adresy senzoru a vypíše ji na displej. Pro okrasu je zde i malá uvítací animace při zapnutí teploměru.
#include <Wire.h> #include <Adafruit_AHTX0.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 32 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); Adafruit_AHTX0 aht; float lastTemp = -1000; float lastHum = -1000; void showWelcomeAnimation() { display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(20, 5); display.println("Vitej, Priteli"); display.display(); delay(1500); int barWidth = 108; int barHeight = 6; int barX = 10; int barY = 22; display.drawRect(barX, barY, barWidth, barHeight, SSD1306_WHITE); display.display(); for (int i = 0; i <= barWidth; i += 5) { display.fillRect(barX + 1, barY + 1, i, barHeight - 2, SSD1306_WHITE); display.display(); delay(30); } delay(500); display.clearDisplay(); display.display(); } void setup() { Serial.begin(9600); Wire.begin(); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println("SSD1306 nenalezen!"); while (1); } display.clearDisplay(); display.setTextColor(SSD1306_WHITE); if (!aht.begin()) { Serial.println("AHT10 nenalezen!"); while (1); } showWelcomeAnimation(); } void loop() { sensors_event_t humidity, temp; aht.getEvent(&humidity, &temp); // Kontrola platnosti hodnot if (isnan(temp.temperature) || isnan(humidity.relative_humidity) || temp.temperature < -40 || temp.temperature > 80 || humidity.relative_humidity < 0 || humidity.relative_humidity > 100) { Serial.println("Chyba cteni ze senzoru AHT10!"); return; } float teplota = round(temp.temperature * 10) / 10.0; // Zaokrouhlení na 1 desetinné místo float vlhkost = round(humidity.relative_humidity * 10) / 10.0; Serial.print("Teplota: "); Serial.print(teplota); Serial.println(" °C"); Serial.print("Vlhkost: "); Serial.print(vlhkost); Serial.println(" %"); // Aktualizuj displej pouze pokud se změnila hodnota if (teplota != lastTemp || vlhkost != lastHum) { display.clearDisplay(); // Velký text pro teplotu display.setTextSize(3); display.setCursor(10, 1); display.print(teplota, 1); display.print(" C"); // Menší text pro vlhkost display.setTextSize(1); display.setCursor(10,25); display.print("Vlhk: "); display.print(vlhkost, 1); display.print(" %"); display.display(); lastTemp = teplota; lastHum = vlhkost; } delay(10000); }
Tento projekt slouží k měření teploty, tlaku a času a k jejich zobrazení na OLED displeji. Současně data vypisuje na sériovou linku.
Kamarád mi poprosil o pomoc s tím že v současnosti potřebuje v jednom projektu ovládat čtyři reléové moduly, kdy jeden obsahuje šestnáct relátek které zakoupil v [1] a již má hotovou část zapojení přípravku, s tím že časem by chtěl ovládání z PC „po otestování“, ovládat diody pomocí tabletu nebo chytrého telefonu. Na tento počet ovládání relé je potřeba 64 ovládacích pinů, což ani ARDUINO MEGA 2560 s potřebou dalších vstupů které budou potřeba není možné použít. Po návrzích s posuvnými registry kterých by bylo potřeba osm kusů a složitosti zapojení mi napadlo použít pásek NEOPIXEL s RGB led diodami kdy na ovládání stačí jeden výstup z ARDUINA. Tak že pro pokusy co a jak půjde použít, jsem použil modul relátek osazený dvěma relátky, modul s MOSFET tranzistorem, Neopixel pásek s osmi RGB led diodami WS2812B, fototranzistor GL5528 a bluetooth JDY-33 pro komunikaci s tabletem chytrým telefonem vše zakoupené v [1]. Napsané programy jsou celkem dva jeden pouze pro ovládání Neopixel s osmi RGB led diodami, druhý pak umožňuje ovládat maximálně 255 RGB led použitých v Neopixel pásku. Oba programy umožňují ovládat libovolnou RGB diodu nebo více RGB led diod na Neopixel pásku včetně barev a dají se upravit dle potřeby. Přípravek může posloužit při vlastních pokusech s RGB LED Neopixel pásky a zároveň doplňuje články v [2]. Ovládání RGB diod je zde řešeno s ARDUINO NANO je možné použít i ARDUINO UNO. Programové ovládání RGB led diod na Neopixel pásku je dle požadavků kamaráda.