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.)
Program:
Použil jsem knihovny:
- <Wire.h>
- <Adafruit_AHTX0.h> - K AHT10 senzoru
- <Adafruit_GFX.h> - podpůrný Adafruit driver
- <Adafruit_SSD1306.h> - K displeji
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.
Kód pro arduino:
#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); }
Použité součástky:
- https://dratek.cz/arduino/1164-arduino-nano-v3.0-atmega328-16m-5v-ch340g-klon.html
- https://dratek.cz/arduino/1480-iic-i2c-displej-oled-0.91-128x32-modry-3-3-v-5v-pro-iot-arduino-raspberry.html