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

Saimon říká:

Hra „Simon říká“ realizovaná pomocí Arduina je skvělým projektem, jehož cílem je spojit zábavu s učením a rozvojem technických dovedností. Hráč se snaží zapamatovat a správně zopakovat sekvenci světelných nebo zvukových signálů, čímž si trénuje paměť, koncentraci a rychlé reakce.

ROBOTICKÉ RAMENO

Stavebnice obsahuje všechny potřebné díly na sestavení robotnického ramene včetně spojovacího materiálu, pouze je nutné dokoupit čtyři kusy MIKRO SERV SG90. Dále je nutné dokoupit řídící jednotku já jsem použil domácí zásoby ARDUINO NANO a pro něho pak modul ARDUINO NANO IO SHIELD pro jednoduchost zapojení. Díly pro sestavení ramene jdou dobře tzv. vylamovat „vypadávají skoro sami. K servům pokud použijete nové tak doporučuji je před montáží odzkoušet zda jsou funkční v plném rozsahu tj. od 0° do 180°, po namontování a zjištění že servo nefunguje to pak opravdu dost zahýbá s nervy.