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:
Typově podobný teploměr: