Pokojový teploměr

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:

Další podobné články

Test ESC a BLDC motoru

Cílem tohoto Arduino projektu je testování a kalibrace obousměrného regulátoru otáček (ESC) pomocí PWM signálu. Program simuluje sekvenci pohybů: dopředu, neutrální pozici a reverzní chod, což umožňuje ověřit správnou funkci ESC včetně přepínání směru otáčení motoru.

Laserový alarm

Cílem tohoto projektu je vytvořit jednoduchý, ale funkční bezpečnostní systém, který detekuje narušení prostoru pomocí vysílače (laserového paprsku) a přijímače (fotorezistoru). Jakmile je paprsek přerušen, Arduino to vyhodnotí jako narušení a spustí alarm – například zvukový signál pomocí piezo bzučáku.