Hallo liebe Community,
ich benötige Hilfe bei meinem Projekt. Soweit steht alles und funktioniert auch alles, nun will ich einen timer einbinden, den ich per BlynkApp starte bzw. aktiviere. Wenn die Zeit ,,x" abgelaufen ist, soll PIN13(LED) an dem ein SSR angeschlossen ist, ausgeschaltet werden (LOW).
Funktion: Der Temperatursensor MAX6675 misst die Temperatur und hält diese mit Hilfe des Relais. Wenn die Solltemperatur erreicht wurde, soll für eine Zeit ,,x" die Temperatur gehalten werden und dann automatisch abschalten. Weiß jemand weiter? Hänge da gerade.
Danke
#define BLYNK_TEMPLATE_ID "TMPLyYek5f7e"
#define BLYNK_DEVICE_NAME "Autoklav1"
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
#include <max6675.h>
#include <Wire.h>
#include <U8x8lib.h>
#include <U8g2lib.h>
#include "BlynkEdgent.h" //Bibliothek für die Verbindung mit der Blynk App über WLAN
U8X8_SH1106_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE); // Display 128x64 ausgewählt in Bibliothek
int ktcSO = 19; // ktcSO deklariert und auf PIN 19 initialisiert
int ktcCS = 5;
int ktcCLK = 18;
int LED = 13; // LED deklariert und PIN 13 initialisiert
double solltemp = 121; // solltemp deklariert und mit 26 initialisiert
double hyst = 2; // Hystherese deklariert
int temp = 0;
BlynkTimer timer;
//WidgetLED led1(V3);
MAX6675 ktc(ktcCLK, ktcCS, ktcSO); // Sensor MAX6675 für Temperatur Sensor Typ K
BLYNK_WRITE(V1) // Schreibt virtuellen PIN 3 in Blynk
{
solltemp = param.asDouble(); // Sollwert = Parameter als Double (für Slider)
}
BLYNK_WRITE(V2)
{
hyst = param.asDouble(); // Hystherese = Parameter als Double (für Slider)
}
BLYNK_WRITE(V3) { // Switch Widget for Timer
int pinValue = param.asInt();
}
void setup()
{
Serial.begin(9600); // Serielle Schnittstelle, serieller Monitor, Baudrate 9600
Serial.println("Max6675 test");
pinMode(LED, OUTPUT); // deklariert LED als Output
timer.setInterval(1000L, sensorDataSend);
u8x8.begin();
//Der Bildschirm hat ein Raster aus Bildpunkten
//Pixel oder Bildpunkt: Ein Kästchen des Rasters
u8x8.setFont(u8x8_font_7x14_1x2_f);
// u8x8 Library mit der man sehr einfach Texte darstellen kann, Schriftgröße nur 8x8 Pixel, kaum Schriftarten
// => wenig Ressourcen
// bei u8x8 arbeitet man mit Zeilen und Spalten
// bei u8g2 arbeitet man mit Pixeln
u8x8.drawString(0, 1, " Autoklav 1 "); // 0. Zeichen von links in der 1. Spalte von oben wird geschrieben
u8x8.drawString(0, 3, "Temp:");
u8x8.drawString(0, 5, "Soll:");
u8x8.drawString(11, 3, " °C"); // 11. Zeichen von links in der 3. Spalte von oben wird geschrieben
u8x8.drawString(12, 5, "°C");
u8x8.drawString(12, 5, " ");
u8x8.setCursor(7, 1);
BlynkEdgent.begin(); // Kommunikation mit der Blynk 2.0 App
}
void sensorDataSend() {
temp = ktc.readCelsius();
Blynk.virtualWrite(V0, temp); //Schreibt die gemessene Werte auf die virtuellen PINs in der Blynk APP
Blynk.virtualWrite(V1, solltemp);
Blynk.virtualWrite(V2, hyst);
if (ktc.readCelsius() > solltemp) { // wenn die gemessene Temperatur < der angegebene Sollwert
digitalWrite(LED, LOW); // dann LED an bzw. PIN an
}
else if (ktc.readCelsius() <= solltemp - hyst) { // Hystherese, damit das Relais nicht ununterbrochen schaltet
digitalWrite(LED, HIGH); // sonst LED aus bzw. Pin aus
}
Serial.print("Temperatur = "); // Ausgabe im seriellen Monitor
Serial.print(ktc.readCelsius());
Serial.println(" °C");
u8x8.setCursor(8, 3); // Stellt den Cursor zum schreiben an das 9. Zeichen von links und die 3. Spalte von oben
// schreibt eine Leerzeile an angegebene Stelle, wenn der Wert unter 100 ist umd die erste Ziffer zu löschen
if (ktc.readCelsius() < 100) u8x8.drawString(12, 3, " ");
u8x8.print(ktc.readCelsius(), 1); // schreibt an der oben genannten Stelle den Messwert (eine Nachkommastelle: ,1)
u8x8.setCursor(8, 5);
if (solltemp < 100) u8x8.drawString(12, 5, " ");
u8x8.print(solltemp, 1);
}
void loop() {
BlynkEdgent.run();
timer.run();
}