Get ready for 0.1.0
- tuning once more the pid - enabling fan while on full power - detect missing sensor - ...
This commit is contained in:
parent
67c1f0503a
commit
a19463b3a1
1 changed files with 72 additions and 23 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
/* Weckkubator - Weck(topf)-(In)kubator
|
||||||
|
*
|
||||||
|
* Version 0.1.0
|
||||||
|
*
|
||||||
|
* Fliegerjohn - 06.05.2024
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <Wire.h> // Support for I2C --> LCD
|
#include <Wire.h> // Support for I2C --> LCD
|
||||||
#include <LiquidCrystal_I2C.h> // Support for PCF8574 --> LCD
|
#include <LiquidCrystal_I2C.h> // Support for PCF8574 --> LCD
|
||||||
#include <OneWire.h> // 1-Wiresupport for DS18B20
|
#include <OneWire.h> // 1-Wiresupport for DS18B20
|
||||||
|
@ -16,7 +25,7 @@ DallasTemperature sensors(&oneWire); // declare sensors
|
||||||
double pidset, watertemp, output;
|
double pidset, watertemp, output;
|
||||||
|
|
||||||
// PID adjustment
|
// PID adjustment
|
||||||
double Kp=500, Ki=10, Kd=0;
|
double Kp=500, Ki=3, Kd=1;
|
||||||
PID myPID(&watertemp, &output, &pidset, Kp, Ki, Kd, DIRECT);
|
PID myPID(&watertemp, &output, &pidset, Kp, Ki, Kd, DIRECT);
|
||||||
int WindowSize = 5000;
|
int WindowSize = 5000;
|
||||||
unsigned long windowStartTime;
|
unsigned long windowStartTime;
|
||||||
|
@ -27,6 +36,7 @@ int poti;
|
||||||
|
|
||||||
// time
|
// time
|
||||||
unsigned long previousMillis;
|
unsigned long previousMillis;
|
||||||
|
unsigned long previousMillisFan;
|
||||||
|
|
||||||
|
|
||||||
// °C for LCD
|
// °C for LCD
|
||||||
|
@ -60,31 +70,15 @@ void setup() {
|
||||||
// Setup PID
|
// Setup PID
|
||||||
windowStartTime = millis();
|
windowStartTime = millis();
|
||||||
myPID.SetOutputLimits(0, WindowSize); //tell the PID to range between 0 and the full window size
|
myPID.SetOutputLimits(0, WindowSize); //tell the PID to range between 0 and the full window size
|
||||||
myPID.SetMode(AUTOMATIC); //turn the PID on
|
myPID.SetMode(AUTOMATIC); //turn on the PID
|
||||||
|
|
||||||
// Greetings
|
// Greetings
|
||||||
lcd.print("Weckkubator 0.0.1");
|
lcd.print("Weckkubator 0.1.0");
|
||||||
delay(3000);
|
delay(3000);
|
||||||
lcd.clear();
|
|
||||||
|
|
||||||
// Setup LCD
|
// Setup LCD
|
||||||
// Output temperatureset
|
setupdisplay();
|
||||||
lcd.setCursor(0, 1);
|
|
||||||
lcd.print("set: ");
|
|
||||||
lcd.print(pidset);
|
|
||||||
lcd.write((byte)0);
|
|
||||||
|
|
||||||
// Output watertemp
|
|
||||||
lcd.setCursor(0, 2);
|
|
||||||
lcd.print("temp: ");
|
|
||||||
lcd.print(watertemp);
|
|
||||||
lcd.write((byte)0);
|
|
||||||
lcd.print("C");
|
|
||||||
|
|
||||||
// output PID
|
|
||||||
lcd.setCursor (0, 3);
|
|
||||||
lcd.print("output: ");
|
|
||||||
lcd.print(output);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,7 +86,7 @@ void loop() {
|
||||||
|
|
||||||
// run pid
|
// run pid
|
||||||
pid();
|
pid();
|
||||||
|
|
||||||
// update LCD
|
// update LCD
|
||||||
unsigned long currentMillis = millis();
|
unsigned long currentMillis = millis();
|
||||||
if (currentMillis - previousMillis >= 250) {
|
if (currentMillis - previousMillis >= 250) {
|
||||||
|
@ -101,7 +95,13 @@ void loop() {
|
||||||
lcdoutput();
|
lcdoutput();
|
||||||
previousMillis = currentMillis;
|
previousMillis = currentMillis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// start fan if heating on full power
|
||||||
|
if (currentMillis - previousMillisFan >= 10000) {
|
||||||
|
if (output >= 4800) digitalWrite(fan, HIGH);
|
||||||
|
else digitalWrite(fan, LOW);
|
||||||
|
previousMillisFan = currentMillis;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
|
@ -127,6 +127,8 @@ void readtemp() {
|
||||||
*/
|
*/
|
||||||
sensors.requestTemperatures();
|
sensors.requestTemperatures();
|
||||||
watertemp = sensors.getTempCByIndex(0);
|
watertemp = sensors.getTempCByIndex(0);
|
||||||
|
|
||||||
|
if (watertemp == -127.00) missingsensor();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,3 +172,50 @@ void settemp() {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//------------------------------------------
|
||||||
|
// Missing Sensor
|
||||||
|
void missingsensor() {
|
||||||
|
// turn of all output
|
||||||
|
digitalWrite(wecktopf, LOW);
|
||||||
|
digitalWrite(fan, LOW);
|
||||||
|
|
||||||
|
// Clear LCD
|
||||||
|
lcd.clear();
|
||||||
|
|
||||||
|
do {
|
||||||
|
lcd.setCursor(0, 0);
|
||||||
|
lcd.print("Error:");
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
lcd.print("Missing Sensor");
|
||||||
|
sensors.requestTemperatures();
|
||||||
|
watertemp = sensors.getTempCByIndex(0);
|
||||||
|
} while (watertemp == -127.00);
|
||||||
|
|
||||||
|
setupdisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// Setup LCD
|
||||||
|
void setupdisplay() {
|
||||||
|
|
||||||
|
// Clear LCD
|
||||||
|
lcd.clear();
|
||||||
|
|
||||||
|
// Output temperatureset
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
lcd.print("set: ");
|
||||||
|
lcd.print(pidset);
|
||||||
|
lcd.write((byte)0);
|
||||||
|
|
||||||
|
// Output watertemp
|
||||||
|
lcd.setCursor(0, 2);
|
||||||
|
lcd.print("temp: ");
|
||||||
|
lcd.print(watertemp);
|
||||||
|
lcd.write((byte)0);
|
||||||
|
lcd.print("C");
|
||||||
|
|
||||||
|
// output PID
|
||||||
|
lcd.setCursor (0, 3);
|
||||||
|
lcd.print("output: ");
|
||||||
|
lcd.print(output);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue