Hallo,
ich habe seit Januar ein wenig herumprobiert aber bekomms nicht hin....
Im Trockentest lief es immer relativ gut. Doch kaum möchte ich es mal zum Grillen nutzen, klappt gar nichts mehr. Evtl. Spannungseinbrüche ? Also wie gesagt hat es eine Zeit lang während des probierens mit dem Code gut ausgeschaut und mein Sohnemann hat sich in MIT APP Inventor eingewurstelt und ne wirklich Klasse App dazu gebaut. Nur leider ist nun die App fertig seit Ostern und ich bekomm die Schaltung nicht ans laufen... Ich hoffe jemand kann mir sagen was ich falsch mache oder noch besser sagen was ich denn ändern muss das es klappt.
leider habe ich keine Idee wie ich die Thermometer evtl. Nacheinander abfragen könnte um so evtl Strom zu sparen. Beim Grillen sind Schwankungen ja nicht im Sekundentakt gefragt. 2 Fühler sollen fürs Fleisch und 2 für den Grill sein. Wenn das alles mal so klappt soll dann noch über thingspeak mitgeloggt werden. Über Sinn und Unsinn geht es hier weniger... Nur eben ums Basteln und lernen ...
Vielen Dank schon mal ....
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#define I2C_ADDR 0x3F
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
#define BACKLIGHT 3
SoftwareSerial Bluetooth(5, 6); //RX5 TX6
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
// Konstanten
const int ntc1 = A0;
const int ntc2 = A1;
const int ntc3 = A2;
const int ntc4 = A3;
const float ntcNominal = 200000;
const float tempNominal = 25;
const int bCoefficient = 4200;
const float serienWiederstand = 100000;
const int abfrageZahl = 10;
int abfrage1[abfrageZahl]; // Array Variable für das Mitteln der Temperatur
float durchschnitt1 = 0; // Variable für das Mitteln der Temperatur
float temp1;
int abfrage2[abfrageZahl];
float durchschnitt2 = 0;
float temp2;
float durchschnitt3 = 0;
float temp3;
int abfrage4[abfrageZahl];
float durchschnitt4 = 0;
float temp4;
String temperatur;
void setup()
{
lcd.begin(20, 4);
Serial.begin(9600);
pinMode(ntc1, INPUT);
pinMode(ntc2, INPUT);
pinMode(ntc3, INPUT);
pinMode(ntc4, INPUT);
lcd.setBacklightPin(BACKLIGHT, POSITIVE);
pinMode(A7, OUTPUT);
pinMode(4, INPUT);
pinMode(12, OUTPUT);
Bluetooth.begin(9600);
}
void loop()
{
delay(5000);
lcd.backlight();
// Nimmt N Abfragen in einer Reihe, mit einem kurzen delay
// for (int i=0; i < abfrageZahl; i++)
// {
// abfrage1[i] = analogRead(ntc1);
// abfrage2[i] = analogRead(ntc2);
// abfrage3[i] = analogRead(ntc3);
// abfrage4[i] = analogRead(ntc4);
// delay(10);
// }
// Mittelt alle Abfragen
durchschnitt1 = analogRead(ntc1); durchschnitt2 = analogRead(ntc2);
durchschnitt3 = analogRead(ntc3); durchschnitt4 = analogRead(ntc4);
// for (int i=0; i < abfrageZahl; i++)
// {
// durchschnitt1 += abfrage1[i];
// durchschnitt2 += abfrage2[i];
// durchschnitt3 += abfrage3[i];
// durchschnitt4 += abfrage4[i];
// }
// { durchschnitt1 /= abfrageZahl;
// durchschnitt2 /= abfrageZahl;
// durchschnitt3 /= abfrageZahl;
// durchschnitt4 /= abfrageZahl;
// }
// Umwandlung des Wertes in Wiederstand
durchschnitt1 = 1023 / durchschnitt1 - 1;
durchschnitt1 = serienWiederstand / durchschnitt1;
durchschnitt2 = 1023 / durchschnitt2 - 1;
durchschnitt2 = serienWiederstand / durchschnitt2;
durchschnitt3 = 1023 / durchschnitt3 - 1;
durchschnitt3 = serienWiederstand / durchschnitt3;
durchschnitt4 = 1023 / durchschnitt4 - 1;
durchschnitt4 = serienWiederstand / durchschnitt4;
// Umrechnung aller Ergebnisse in die Temperatur mittels einer Steinhard Berechnung
temp1 = durchschnitt1 / ntcNominal; // (R/Ro)
temp1 = log(temp1); // ln(R/Ro)
temp1 /= bCoefficient; // 1/B * ln(R/Ro)
temp1 += 1.0 / (tempNominal + 273.15); // + (1/To)
temp1 = 1.0 / temp1; // Invertieren
temp1 -= 273.15; // Umwandeln in °C
temp2 = durchschnitt2 / ntcNominal; // (R/Ro)
temp2 = log(temp2); // ln(R/Ro)
temp2 /= bCoefficient; // 1/B * ln(R/Ro)
temp2 += 1.0 / (tempNominal + 273.15); // + (1/To)
temp2 = 1.0 / temp2; // Invertieren
temp2 -= 273.15; // Umwandeln in °C
temp3 = durchschnitt3 / ntcNominal; // (R/Ro)
temp3 = log(temp3); // ln(R/Ro)
temp3 /= bCoefficient; // 1/B * ln(R/Ro)
temp3 += 1.0 / (tempNominal + 273.15); // + (1/To)
temp3 = 1.0 / temp3; // Invertieren
temp3 -= 273.15; // Umwandeln in °C
temp4 = durchschnitt4 / ntcNominal; // (R/Ro)
temp4 = log(temp4); // ln(R/Ro)
temp4 /= bCoefficient; // 1/B * ln(R/Ro)
temp4 += 1.0 / (tempNominal + 273.15); // + (1/To)
temp4 = 1.0 / temp4; // Invertieren
temp4 -= 273.15; // Umwandeln in °C
if (temp1 < 20) tone(A7, 16350);
delay(500);
noTone(A7);
digitalWrite(12, LOW);
if (temp1 < (-20))
{
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Grill 1: Fehler ");
}
else
{lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Grill 1: "); lcd.print(temp1); lcd.print("*C");
}
if (temp2 < (-20))
{lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Grill 2: Fehler ");
}
else
{lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Grill 2: "); lcd.print(temp2); lcd.print("*C");
}
if (temp3 < (-20))
{lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print("Kern 1: Fehler ");
}
else
{lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print("Kern 1: "); lcd.print(temp3); lcd.print("*C");
}
if (temp4 < (-20))
{lcd.setCursor(0, 3);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print("Kern 2: Fehler ");
}
else
{lcd.setCursor(0, 3);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print("Kern 2: "); lcd.print(temp4); lcd.print("*C");
}
Bluetooth.print((int)temp1);
Bluetooth.print("|");
Bluetooth.print((int)temp2);
Bluetooth.print("|");
Bluetooth.print((int)temp3);
Bluetooth.print("|");
Bluetooth.print((int)temp4);
Bluetooth.println("|");
}






