Compare commits
No commits in common. "Phase2Deliverables" and "main" have entirely different histories.
Phase2Deli
...
main
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue