Compare commits

..

No commits in common. "Phase2Deliverables" and "main" have entirely different histories.

2 changed files with 7 additions and 41 deletions

View File

@ -31,8 +31,7 @@ Live-Messwerte laufen Ende-zu-Ende: Der Arduino misst Temperatur, Luftfeuchte, e
| **Arduino Uno** (Haupt-Uno) | Herz der Messstation: liest alle 2 s die Sensoren, zeigt die Werte auf dem LCD und gibt sie an den ESP weiter. |
| **DHT11** | Misst **Temperatur** (°C) und **Luftfeuchte** (%). Langsam, braucht ca. 2 s zwischen zwei Messungen. |
| **CCS811 / CJMCU-811** | Misst die Luftqualität: **eCO₂** (ppm) und **TVOC** (ppb, flüchtige organische Stoffe). eCO₂ ist ein aus den Gasen *geschätzter* CO₂-Wert, keine echte CO₂-Messung. Temperatur und Feuchte vom DHT11 bekommt er zur Korrektur. In den ersten ~20 min nach dem Einschalten oft 400 ppm / 0 ppb. |
| **Fotowiderstand (LDR)** | Misst die **Helligkeit** an der Tafel als relativen Wert (0–100 %, keine Lux). Ein zweiter für das Fenster ist vorgesehen, aber noch nicht angeschlossen. Wird bisher nur auf dem LCD angezeigt, nicht ans Backend gesendet. |
| **LCD 16×2** | Zeigt die Werte direkt an der Station. Nur 2 Zeilen, daher Wechsel zwischen Temp/Luft, CO2/TVOC und Licht. Beim Start zeigt es den WLAN-Status („WLAN OK“ oder „Fehler E1“ …). |
| **LCD 16×2** | Zeigt die Werte direkt an der Station. Nur 2 Zeilen, daher Wechsel zwischen Temp/Luft und CO2/TVOC. Beim Start zeigt es den WLAN-Status („WLAN OK“ oder „Fehler E1“ …). |
| **Potentiometer** | Stellt den Kontrast des LCD ein. |
| **ESP-01 (ESP8266)** | WLAN-Modul, da der Uno selbst kein WLAN hat. Der Uno schickt ihm Textbefehle („AT-Befehle“), der ESP verbindet sich mit dem Hotspot und schickt die Werte an den Laptop. |
| **Zweiter Uno** | Liefert dem ESP nur Strom (3,3 V), weil der Haupt-Uno zu wenig Strom für den ESP hat. Braucht **gemeinsame Masse** (GND) mit dem Haupt-Uno. |
@ -54,7 +53,7 @@ Live-Messwerte laufen Ende-zu-Ende: Der Arduino misst Temperatur, Luftfeuchte, e
### Ablauf einer Messung
1. Der **Uno** liest **DHT11** und **CCS811** aus und zeigt die Werte auf dem **LCD**.
2. Etwa alle 6 s schickt er DHT11- und CCS811-Werte über Pin 0/1 an den **ESP-01**.
2. Etwa alle 4 s schickt er sie über Pin 0/1 an den **ESP-01**.
3. Der ESP sendet sie über den **Hotspot** an den **Laptop** (`server.py`, Port 3000).
4. Der **Browser** fragt den Server alle 2 s nach den neuesten Werten und zeigt sie auf der Website.
@ -64,8 +63,6 @@ Live-Messwerte laufen Ende-zu-Ende: Der Arduino misst Temperatur, Luftfeuchte, e
| DHT11 | Daten → Pin 2 |
| LCD 16×2 | RS 7, E 8, D4–D7 → 9–12, RW → GND, V0 → Poti |
| CCS811 (CJMCU-811) | VCC → 3,3 V, GND, SDA → A4, SCL → A5, WAK → GND, ADD → GND (Adresse 0x5A) |
| LDR Tafel | Ein Bein → 5 V, anderes Bein → A0 und über 10 kΩ → GND |
| LDR Fenster (noch nicht angeschlossen) | Ein Bein → 5 V, anderes Bein → A1 und über 10 kΩ → GND; danach im Sketch `LDR_FENSTER_AKTIV` auf `true` setzen |
| ESP-01 | **TX → Pin 0, RX → Pin 1 (gekreuzt!)**, VCC + EN → 3,3 V, GND; RST, GPIO0, GPIO2 frei |
Der 3,3-V-Pin des Uno liefert nur ca. 150 mA, der ESP-01 braucht beim Start kurz bis zu 300 mA. Wir versorgen den ESP deshalb aus einer eigenen 3,3-V-Quelle (zweiter Uno); deren **GND muss mit dem GND des Haupt-Uno verbunden** sein.

View File

@ -21,17 +21,6 @@ DHT dht(DHTPIN, DHTTYPE);
Adafruit_CCS811 ccs;
bool ccsOk = false;
// --- Fotowiderstände (LDR) Setup ---
// Je ein Spannungsteiler: 5V -> LDR -> Analogpin -> 10 kOhm -> GND. Heller = höherer Wert.
#define LDR_TAFEL_PIN A0
#define LDR_FENSTER_PIN A1
const bool LDR_FENSTER_AKTIV = false; // auf true setzen, sobald der zweite LDR an A1 hängt (offener Pin liefert Zufallswerte)
// Helligkeit in Prozent des Messbereichs (relativer Wert, keine Lux)
int lichtProzent(uint8_t pin) {
return map(analogRead(pin), 0, 1023, 0, 100);
}
// --- CCS811-Baseline im EEPROM ---
// Die Baseline ist der Kalibrierwert des Sensors. Wird sie nach einem Neustart
// wieder gesetzt, ist der eCO2/TVOC-Wert sofort deutlich stabiler.
@ -81,9 +70,8 @@ void ccsStarten() {
}
}
// Anzeige wechselt zwischen drei Seiten, da das LCD nur 2 Zeilen hat
enum Seite { SEITE_KLIMA, SEITE_LUFTQUALITAET, SEITE_LICHT };
uint8_t seite = SEITE_KLIMA;
// Anzeige wechselt zwischen zwei Seiten, da das LCD nur 2 Zeilen hat
bool zeigeLuftqualitaet = false;
void setup() {
// Serial gehoert dem ESP8266 (wird in wifiVerbinden() gestartet), kein Serial-Monitor moeglich
@ -136,28 +124,9 @@ void loop() {
return; // Loop hier abbrechen und von vorne starten
}
// --- Seite 3: Helligkeit an Tafel und Fenster ---
if (seite == SEITE_LICHT) {
seite = SEITE_KLIMA;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tafel: ");
lcd.print(lichtProzent(LDR_TAFEL_PIN));
lcd.print(" %");
if (LDR_FENSTER_AKTIV) {
lcd.setCursor(0, 1);
lcd.print("Fenster: ");
lcd.print(lichtProzent(LDR_FENSTER_PIN));
lcd.print(" %");
}
return;
}
// --- Seite 2: CO2 und TVOC vom CCS811 ---
if (seite == SEITE_LUFTQUALITAET) {
seite = SEITE_LICHT;
if (zeigeLuftqualitaet) {
zeigeLuftqualitaet = false;
lcd.clear();
if (!ccsOk) {
@ -199,7 +168,7 @@ void loop() {
}
// --- Seite 1: Ausgabe auf dem LCD Display ---
seite = SEITE_LUFTQUALITAET;
zeigeLuftqualitaet = true;
// Zeile 1: Temperatur
lcd.setCursor(0, 0); // Spalte 0, Zeile 0