Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
www-fuer-alle:co2-ampel [2020/11/20 14:06] – [Programmcode] bieblwww-fuer-alle:co2-ampel [2021/12/04 16:16] (aktuell) – [CO2-Ampel] biebl
Zeile 3: Zeile 3:
   * [[www-fuer-alle:arduino|SAS-Projekte: Arduino ab Klasse 8]]   * [[www-fuer-alle:arduino|SAS-Projekte: Arduino ab Klasse 8]]
   * Fragen und Anregungen: [[ARDUINO@GymSAS.de]]   * Fragen und Anregungen: [[ARDUINO@GymSAS.de]]
 +  * [[https://www.cik-solutions.com/anwendungen/co2-im-innenraum/|Co2-Werte und Bedeutung]]
 +  * [[info:arduino:iot-co2-ampelprojekt|intern]]
 ===== Varianten ===== ===== Varianten =====
  
Zeile 10: Zeile 12:
   * LEDs und Buzzer   * LEDs und Buzzer
   * LEDs, Buzzer und OLED-Anzeige   * LEDs, Buzzer und OLED-Anzeige
-  * LEDs, BUZZER, OLED-Anzeige und SD-Speicher+  * LEDs, BUZZER, OLED-Anzeige und SD-Speicher (und UHR)
   * LEDs, BUZZER, OLED-Anzeige und WLAN-Anbindung an einen Raspi mit Datenbank und Apache   * LEDs, BUZZER, OLED-Anzeige und WLAN-Anbindung an einen Raspi mit Datenbank und Apache
-===== fertige Ampel - LED mit Buzzer und OLED-Anzeige===== 
  
-{{:www-fuer-alle:co2-nano-oled-2.jpg?300|}}+  * [[https://www.youtube.com/watch?v=-zFD7MYOmb4|Weiterentwicklung der CO2-Ampel]] 
 +  * [[https://www.heinz-schmitz.org/index.php/hiz-nachrichtenleser/hiz323.html|Materialien]] 
 +===== fertige Ampel - LED mit Buzzer und OLED-Anzeige (ohne UHR und SD-Karte)===== 
 + 
 +{{:www-fuer-alle:co2-nano-oled-2.jpg?300|}}{{:www-fuer-alle:arduino-co2-nano.jpg?200|}} 
 + 
 +  * Nano 5 € 
 +  * CO2-Sensor 20 € 
 +  * OLED 5 € 
 +  * Kleinteile 4 € 
 +  * POWERBANK 6 €  
 +  * 40 € pro Ampel 
  
 ===== Sensorbeschaltung ===== ===== Sensorbeschaltung =====
Zeile 24: Zeile 37:
   * Vin - +5V   * Vin - +5V
  
-  * HD über einen Taster an Masse zur Kalibrierung+  * HD über einen Taster oder ein Steckkabel an Masse zur Kalibrierung 
 + 
 +===== Messbeispiel ===== 
 + 
 + 
 +{{:www-fuer-alle:2020-12-10-co2-messung-klausur.png?400|}} 
 + 
 +===== Breadboardvariante ===== 
 + 
 +{{:www-fuer-alle:co2-oled-sd-schaltung-breadboard.jpg?400|}}{{:www-fuer-alle:co2-oled-sd-schaltung-breadboard-fertig.jpg?400|}}
 ===== Programmcode ===== ===== Programmcode =====
  
  
   * Zusammenkopierter Sketch   * Zusammenkopierter Sketch
 +    * ACHTUNG: der dieser Sketch ist für die kleinste (billigste) NANO-Variente zur groß.
 +    * mit UHR und SD-Kartenschreiber
     * Aufgabe: Reduziere den Programmcode auf ein Minimum     * Aufgabe: Reduziere den Programmcode auf ein Minimum
 <code> <code>
Zeile 47: Zeile 71:
 RTC_DS3231 rtc; RTC_DS3231 rtc;
 File Messdaten;                                            // An dieser Stelle wird die Variable "Messdaten" als File (dts. Datei) deklariert. File Messdaten;                                            // An dieser Stelle wird die Variable "Messdaten" als File (dts. Datei) deklariert.
 +
 +int z = 0;                                                 // globale Zaehlvariable für die SD-Kartennutzung in der loop
  
 /************************************************ /************************************************
Zeile 98: Zeile 124:
     oled.println(" ------------");     oled.println(" ------------");
     oled.println(" SAS-Projekt 2020");     oled.println(" SAS-Projekt 2020");
 +    tone(summer,444);
 +    // delay(20);
 +    noTone;
 +       
  
 /************************************** /**************************************
Zeile 107: Zeile 137:
    pinMode(rot, OUTPUT);    pinMode(rot, OUTPUT);
    pinMode(blau, OUTPUT);    pinMode(blau, OUTPUT);
-   tone(summer,600); +   noTone;
-   delay(2000);+
    ledTest();    ledTest();
    Serial.begin(9600);       Serial.begin(9600);   
Zeile 156: Zeile 185:
                                                                  
         Serial.write(Messdaten.read());                        // ... bis keine Daten mehr gefunden werden können.         Serial.write(Messdaten.read());                        // ... bis keine Daten mehr gefunden werden können.
 +        digitalWrite(blau, HIGH);
 +        digitalWrite(blau, LOW);
 +        
        }        }
      Messdaten.close();                                        // Im Anschluss wird die Textdatei wieder geschlossen.      Messdaten.close();                                        // Im Anschluss wird die Textdatei wieder geschlossen.
Zeile 163: Zeile 195:
     Serial.println("Textdatei konnte nicht geoeffnet werden"); // ... erscheint eine Fehlermeldung im seriellen Monitor.     Serial.println("Textdatei konnte nicht geoeffnet werden"); // ... erscheint eine Fehlermeldung im seriellen Monitor.
     }     }
 +    digitalWrite(blau, LOW);
  
 /************************************** /**************************************
Zeile 172: Zeile 205:
 }                                                              // ENDE Setup }                                                              // ENDE Setup
  
-void loop() {                                                  +/*********************************************************************************************************************** 
 +
 +* LOOP 
 +
 +***********************************************************************************************************************/ 
 + 
 +void loop() { 
 +  z = z+1;                                                  
   ppm_pwm = readCO2PWM();                                      // Messung der PWM-Länge mittels einer eigenen Funktion   ppm_pwm = readCO2PWM();                                      // Messung der PWM-Länge mittels einer eigenen Funktion
-  messWertSchreibenSD();                                       // Messwerte auf die SD-Karte schreiben (blaue LED)+  if (z > 4) {                                                 // erst die 5. Messung wird gesichert, dann ca. pro Minute eine 
 +    messWertSchreibenSD();                                     // jeden 5. Messwert auf die SD-Karte schreiben (blaue LED) 
 +    z = 0;                                                     // Zaehler zurueck setzen 
 +  }
   oledAnzeige();                                               // Messwerte auf dem OLED ausgeben   oledAnzeige();                                               // Messwerte auf dem OLED ausgeben
-  delay(schreibPause);                                                // PAUSE: nächste Messungen in 12 Sekunden+  delay(schreibPause);                                         // PAUSE: nächste Messungen in 12 Sekunden (ca. 5 Messungen pro Minute)
 } }
 +
 +/************************************************************************************************************************
 +*
 +* LOOP ENDE
 +*
 +************************************************************************************************************************/
 +
 +/*********************************
 +*                                *
 +* Funktionen und Prozeduren      *
 +*                                *
 +*********************************/
  
 /********************************************************************************************************** /**********************************************************************************************************
Zeile 257: Zeile 312:
   oled.println(now.minute(), DEC);   oled.println(now.minute(), DEC);
   ledRot();   ledRot();
-  if (ppm_pwm < guteLuft)          { ledGruen(); }+  ledGruen();
   if (ppm_pwm > mittlereQualitaet) { ledGelb(); }   if (ppm_pwm > mittlereQualitaet) { ledGelb(); }
   if (ppm_pwm > schlechteLuft)     { ledRot();    if (ppm_pwm > schlechteLuft)     { ledRot(); 
Zeile 276: Zeile 331:
            digitalWrite(gelb, HIGH);            digitalWrite(gelb, HIGH);
            digitalWrite(rot, HIGH);            digitalWrite(rot, HIGH);
 +           digitalWrite(blau, LOW); 
 +           delay(600);
            digitalWrite(blau, HIGH);             digitalWrite(blau, HIGH); 
 +           delay(100);       
 +           digitalWrite(gruen, LOW);
 +           digitalWrite(gelb, LOW);
 +           digitalWrite(rot, LOW);
 +           digitalWrite(blau, LOW);            
            noTone(summer);            noTone(summer);
 } }
QR-Code
QR-Code www-fuer-alle:co2-ampel (erstellt für aktuelle Seite)