Hi,
genau den habe ich aktuell vor mir liegen und angeschlossen, bin aber echt überfordert, das vorhandene Sketch mit den DHT22 gegen die Si7021 am TCA9548A auszutauschen. Habe mir als totaler Anfänger glaube ich zu viel zugemutet.
Folgendes Sketch für eine Lüftersteuerung möchte ich anpassen. Mit dem Austausch der DHT22 gegen die Si7021 bin ich echt überfordert.
Könnt ihr mir da helfen?
/*****************************************************************************************************************************
Verein Feuerkunst-Pyrotechnik - www.feuerkunst-pyrotechnik.ch (C)2018
Projekt: Trockenlüftungs-Steuerung V 1.0
Beschreibung: zwei DHT22 Feuchte/Temperatur Sensoren ermitteln Innen und Aussen die aktuellen Werte.
Durch Berechnung wird der Taupunkt ermittelt, und Zu- und Abluft-Ventilatoren ein-/ausgeschaltet.
Über ein Taster an Pin A3 können Daten am LCD angezeigt werden
Einige Programmteile wurden übernommen von www.fluuux.de, www.markus-otte.de, und www.arduino.cc
*****************************************************************************************************************************/
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <dht.h> // library für DHT22
#include "Adafruit_Si7021.h" //neu
Adafruit_Si7021 sensor = Adafruit_Si7021(); //neu
#define PinS1 2 // Schalter an Pin 2 (Automatik)
#define PinS2 3 // Schalter an Pin 3 (Man. ein)
#define PinFanIN 8 // Lüfter Zuluft an Pin 8
#define PinFanOUT 9 // Lüfter Abluft an Pin 9
#define DHT1_PIN 5 // Zur Messung DHT-Sensor 1 verwendeter Pin 5 (Innen)
#define DHT2_PIN 6 // Zur Messung DHT-Sensor 2 verwendeter Pin 6 (Aussen)
#define Hmax 55 // max. Luftfeuchte Innen
#define dT 5 // Temp. Delta für Taupunktberechnung
#define OS1 0.0 // Offset Temp Sensor 1 (Bitte alle Offsets mit allen Sensoren abgleichen!)
#define OS2 0.0 // Offset Temp Sensor 2
#define OSH1 0.0 // Offset Feuchte Sensor 1
#define OSH2 0.0 // Offset Feuchte Sensor 2
#define lcdButton 13 // aktiviert LCD
dht DHT2; // Initialisieren der DHTs
dht DHT1; // Initialisieren der DHTs
boolean S1; // Schalter S1 (Automatik)
boolean S2; // Schalter S2 (Man. ein)
boolean lcdActive = false; // LCD Aktivität
// *****************************************************************************
int FAN_I = 1; // Zuluft Lüfter ein
int FAN_A = 1; // Abluft Lüfter ein
float dht1_h; // Innen Feuchte
float dht1_t; // Innen Temp.
float dht2_h; // Aussen Feuchte
float dht2_t; // Aussen Temp.
float dp; // Berechneter Taupunkt Aussen
LiquidCrystal_I2C lcd(0x27, 20, 4); //LCD mit 4 Zielen à 20 Spalten
// ****** SETUP ****************************************************************
void setup()
{
pinMode(PinS1, INPUT); // Schalter I Automatik
digitalWrite(PinS1, HIGH); // Pullupwiderstand aktivieren (gegen Masse schalten)
pinMode(PinS2, INPUT); // Schalter II Man. ein.
digitalWrite(PinS2, HIGH); // Pullupwiderstand aktivieren (gegen Masse schalten)
pinMode(PinFanIN, OUTPUT); // Lüfter Zuluft
digitalWrite(PinFanIN, HIGH); // Ausschalten
pinMode(PinFanOUT, OUTPUT); // Lüfter Abluft
digitalWrite(PinFanOUT, HIGH); // Ausschalten
pinMode(LED_BUILTIN, OUTPUT); // Kontroll LED für Loop
pinMode(lcdButton,INPUT_PULLUP);// aktiviert LCD
lcd.begin();
lcd.clear();
lcd.noBlink();
lcd.noCursor();
lcd.noDisplay();
lcd.noBacklight();
Serial.begin(9600);
Serial.flush();
delay(500);
}
// ****** Hauptprogramm Loop START *********************************************
void loop()
{
readSensor();
// ****** Betriebswahl *******************************************************
S1 = digitalRead(PinS1); // Schalter 1 = Automatik EIN
S2 = digitalRead(PinS2); // Schalter 2 = HAND EIN
if (S1 == LOW) Automatik();
if (S2 == LOW) Handbetrieb();
if (S1 == HIGH && S2 == HIGH) AUS();
//Plotter(); // Ausgabe auf Plotter
if(!digitalRead(lcdButton)){
lcdActive = true;
printLCD();
} else {
if(lcdActive){
lcd.noDisplay();
lcd.noBacklight();
lcdActive = false;
}
}
digitalWrite(LED_BUILTIN,digitalRead(LED_BUILTIN)^1); // Kontroll LED
}
// ****** Funktion Temperatur der Sensoren auslesen ****************************
void readSensor()
{
DHT1.read22(DHT1_PIN);
dht1_h = DHT1.humidity, 1; // Luftfeuchte auslesen
dht1_h = dht1_h + OSH1; // Offset hinzu
dht1_t = DHT1.temperature, 1; // Temperatur auslesen
dht1_t = dht1_t + OS1; // Offset hinzu
DHT2.read22(DHT2_PIN);
dht2_h = DHT2.humidity, 1; // Luftfeuchte auslesen
dht2_h = dht2_h + OSH2; // Offset hinzu
dht2_t = DHT2.temperature, 1; // Temperatur auslesen
dht2_t = dht2_t + OS2; // Offset hinzu
}
//****** Automatik Betrieb *****************************************************
void Automatik()
{
Regelung(); // Automatikregelung
if (FAN_I == 1)
{
digitalWrite(PinFanIN, LOW); // Einschalten
digitalWrite(PinFanOUT, LOW); // Einschalten
} else {
digitalWrite(PinFanOUT, HIGH); // Ausschalten
digitalWrite(PinFanIN, HIGH); // Ausschalten
}
}
//****** Man. ein Betrieb ******************************************************
void Handbetrieb()
{
if (S2 == LOW)
{
digitalWrite(PinFanOUT, LOW); // Einschalten
digitalWrite(PinFanIN, LOW); // Einschalten
}
}
//****** Ausschalten ***********************************************************
void AUS()
{
digitalWrite(PinFanOUT, HIGH); // Ausschalten
digitalWrite(PinFanIN, HIGH); // Ausschalten
}
//******Lüftersteuerung ********************************************************
void Regelung() {
float a, b;
if (dht2_t >= 0) {
a = 7.5;
b = 237.3;
} else {
a = 7.6;
b = 240.7;
}
float sgp = 6.1078 * pow(10, (a * dht2_t) / (b + dht2_t));
float gp = (dht2_h / 100) * sgp;
float v = log10(gp / 6.1078);
dp = (b * v) / (a - v);
if ((dp - dT) < dht1_t) {
FAN_I = 1;
} else {
FAN_I = 0;
}
if (dht2_h > Hmax) FAN_I = 0; // Feuchte aussen zu hoch
}
// ****** LCD ***************************************************************
void printLCD () {
lcd.display();
lcd.backlight();
lcd.home();
//Zeile 1
lcd.print("AT: ");lcd.print(dht2_t,1);lcd.setCursor(9,0);lcd.print("TP-A: ");lcd.print(dp,1);
//Zeile 2
lcd.setCursor(0,1);
lcd.print("AH: ");lcd.print(dht2_h,1);
//Zeile 3
lcd.setCursor(0,2);
lcd.print("IT: ");lcd.print(dht1_t,1);lcd.setCursor(9,2);lcd.print("MODE: ");
if(!S1){
lcd.print("AUT");
} else {
lcd.print("MAN");
}
//Zeile 4
lcd.setCursor(0,3);
lcd.print("IH: ");lcd.print(dht1_h,1);lcd.setCursor(9,3);lcd.print("FAN: ");
if(FAN_I){
lcd.print("ON");
} else {
lcd.print("OFF");
}
}
// ****** Serial Plotter ****************************************************
void Plotter () {
Serial.print(dht1_h); Serial.print('\t');
Serial.print(dht1_t); Serial.print('\t');
Serial.print(dht2_h); Serial.print('\t');
Serial.print(dht2_t); Serial.print('\t');
Serial.print(dp); Serial.print('\t');
Serial.println();
}