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

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. 

Electronic TiltMaze

Cílem tohoto projektu je vytvoření jednoduchého ovládacího systému, který umožňuje naklápění dvou servomotorů pomocí analogového joysticku. Platforma řízená servomotory může simulovat pohyb například v ose X a Y — tedy naklánění doleva/doprava a dopředu/dozadu. Tento systém může sloužit jako základ pro různé aplikace:

- Manuální ovládání kamery nebo senzoru (např. na pohyblivé konstrukci nebo robotovi)
- Interaktivní ovládací panel pro školní projekty nebo herní ovladač