• Du musst dich registrieren, bevor du Beiträge verfassen kannst. Klicke auf Jetzt registrieren!, um den Registrierungsprozess zu starten. Registrierte User surfen werbefrei, können Suchen durchführen und sehen die volle Darstellung des Forums!!!

LowCost (10 €) Arduino WLAN BBQ Thermometer mit ESP8266

grillmeister27

Militanter Veganer
Hallo zusammen,

seit kurzer Zeit bin ich fasziniert vom Thema BBQ. Ich habe mein erstes PP durchgezogen und bin begeistert.
Zum Überwachen der Temperaturen habe ich mir ein Maverick ET 732 gekauft, damit hat alles auch prima funktioniert.
Ich musste allerdings oft den Grill nachstellen, was aber wahrscheinlich an meinem Billig-Kugelgrill liegt.

Nun habe ich ein bisschen rumgebastelt und mit einem Arduino (bei mir ein Arduino Mega, da ich die Erweiterungen noch nicht abschätzen kann)
und dem WLAN Baustein ESP8266 kam ein Datenlogger für die Maverick-Sensoren dabei heraus. Ich wollte erst das Funksignal
des Maverick abfangen und weiterverarbeiten, habe die Daten auch anscheinend ausgelesen, bin aber "auf keine grünen Zweig"
gekommen.

Hier nun zum Projekt:

Kosten: absolut LowCost! Wenn ihr die Teile in China über die Bucht bestellt könnt ihr es schaffen, für einen Arduino Uno und den ESP8266
unter 10 € zu bleiben. Für die Sensoren habe ich mir noch offene Klinkenbuchsen 2,5 mm auch in der Bucht besorgt (10 Stk. etwa 2 €).
Das teuerste sind die Sensoren. Ich habe auch noch einen Lipo-Akku drangehängt, um so autark zu sein.
Da das ESP8266 die TX und RX-Leitungen des Arduino nutzt, habe ich auch noch einen Schalter (2 x UM) in die Leitungen gelötet, um den Arduino
auch "in the box" programmieren zu können.

Da ich auch nicht der erfahrene Arduino-Programmierer bin lässt das Script mit Sicherheit noch viel Spielraum für Optimierungen und Erweiterungen.

Ziel war es, Daten über Garraumtemperatur und Kerntemperatur auszulesen und ins Internet zu spielen, wo ich eine Seite geschrieben habe,
welch die Werte aufnimmt und weiterverarbeitet. So kann man überall seine Temperaturen überwachen. Hierzu gibt es ja auch mehrere
Online-Dienste, die übergebene Werte aufnehmen und anzeigen.

Der ESP8266 loggt sich also ins hauseigene Wlan ein und ruft eine Internetseite nach den Schema
http://www.internetseite.de?Wert1=Temperatur1&Wert1=Temperatur2 auf, ist individuell konfigurierbar.

Da ich mit einem Akku arbeite habe ich über einen Spannungsteiler noch die Spannung errechnet und übergebe diese auch
an die Internetseite. Ich habe einfach den Link erweitert:
http://www.internetseite.de?Wert1=Temperatur1&Wert1=Temperatur2&VCC=Akkuspannung fertig.

Ich würde gerne noch um eine Zuluftregelung per Lüfter oder per Servo (Luftklappensteuerung) erweitern. Das kommt als nächstes.

Da ich schon öfter im Forum gelesen habe, das so was auf LowCost-Basis gesucht wird, findet ihr das Anschlussschema (Fritzing-Neuling bin ich auch, sorry :-)) im Anhang.

Hier das Arduino Script:

<code>
// Based on https://github.com/wvuong/bbqsmoker/blob/master/bbqsmoker.ino

#define DST_IP "199.199.199.199" // IP der Internetseite

int led = 13; //Pin der LED
int mess1 = 0;
int vcc;
String stringValue = "";
const int numProbes = 2;
const int bufferLength = 30;
float temp;
int Temperatur;
int Temperatur1;

// probe datastructure
struct Probe {
String name;
int pin;
double A;
double B;
double C;
int buffer[bufferLength];
int currentTemp;
int resistor;
};

// probes array
Probe probes[2];


void setup() {

Serial.begin(9600);

Serial.println("AT+RST");
//WiFi modul bootup
delay(800);
//"client" mode
Serial.println("AT+CWMODE=1");
//Einwahl ins WLAN
//SSID und Passwort auf das eigene Netzwerk anpassen.
Serial.println("AT+CWJAP=\"SSID\",\"Passwort\"");

// configure probes
Probe p0 = Probe();
p0.name = "ET-732-1";
p0.pin = A1;
p0.A = 5.36924e-4;
p0.B = 1.91396e-4;
p0.C = 6.60399e-8;

p0.resistor = 22000;
probes[0] = p0;

Probe p1 = Probe();
p1.name = "ET-732-2";
p1.pin = A2;
p1.A = 5.36924e-4;
p1.B = 1.91396e-4;
p1.C = 6.60399e-8;

p1.resistor = 22001;
probes[1] = p1;

delay(2000);
}

void loop() {
int sensorValue = 0;
int outputValue = 0;

// loop für jeden Geber
for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes;

// Wert einlesen:
outputValue = readAndOverSample((*ptr).pin, (*ptr).A, (*ptr).B, (*ptr).C, (*ptr).resistor);

// Wert in den Buffer schreiben
(*ptr).currentTemp = outputValue;

for (int i = bufferLength -1; i >= 1; i--) {
(*ptr).buffer = (*ptr).buffer[i-1];
}
(*ptr).buffer[0] = outputValue;
}

for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes;

// maximal 4 Geber!

int x; int y;
if (i % 2 == 0) {
x = 0;
}
else if (i % 2 == 1) {
x = 8;
}
if (i / 2 == 0) {
y = 0;
}
else if (i / 2 == 1) {
y = 1;
}
}
delay(10000);

int per = 50000/numProbes/5000;

for (int p = 0; p < per; p++) {
for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes;

// Durchschnitt errechnen 5 Minuten
int five, fifteen, thirty;
int accum = 0;
for (int i = 0; i < 5; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer;
}
five = accum/5;

// Durchschnitt errechnen 15 Minuten
accum = 0;
for (int i = 0; i < 15; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer;
}
fifteen = accum/15;

// Durchschnitt errechnen 30 Minuten
accum = 0;
for (int i = 0; i < 30; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer;
}
thirty = accum/30;

}
}

// Spannungsmessung mit Spannnungsteiler
int mess1 = analogRead(mess1);
vcc = ((mess1/36.35)*1000); // Faktor für Spannungsteiler

//Vertbindung zum web server
String cmd = "AT+CIPSTART=\"TCP\",\""; //make this command: AT+CPISTART="TCP","199.199.199.199",80
cmd += DST_IP;
cmd += "\",80";
Serial.println(cmd);

//warten auf Verlinkung
delay(300);

//HTTP GET Request
cmd = "GET /datei.php?Wert1="; // Datei des Internetservices aufrufen
cmd += Temperatur;
cmd += "&Wert2=";
cmd += Temperatur1;
cmd +="&VCC=";
cmd += vcc;
cmd += " HTTP/1.0\r\n";
cmd += "Host: 217.160.107.197\r\n\r\n";

//Größe des Requests für ESP8266
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
Serial.println(cmd);
}

int readAndOverSample(int apin, double A, double B, double C, int resistor) {
int sensorvalue = 0;
unsigned int accumulated = 0;
int numsamples = 64;
int n = 0;

sensorvalue = analogRead(apin);
delay(2);

// einlesen der 64 samples
for (int i = 0; i < numsamples; i++) {
sensorvalue = analogRead(apin);
if (sensorvalue == 0 || sensorvalue >= 1023) {
return -1;
}
accumulated += sensorvalue;
n++;
delay(2);
}

unsigned int ADCmax = (1 << 13) - 1;
unsigned int ADCval = accumulated >> 3;
float R, T;
R = log( resistor / ((ADCmax/(float)ADCval) - 1.0f));
T = 1.0f / ((C * R * R + B) * R + A);
temp = (T - 273.15f);

// Serial.print("temp="); Serial.println(temp);

if (resistor > 22000) {
Temperatur = temp; // Wert für Internetseite speichern
}

else {
Temperatur1 = temp; // Wert für Internetseite speichern
}
//return temp;
delay(60000); // 1 Minute warten
}
</code>

Ich hoffe es reicht für ein paar Anregungen.

Grüße
Markus


fritzing.png
 

Anhänge

OP
OP
G

grillmeister27

Militanter Veganer
Da in dem Code oben ein paar Zeichen nicht mit übertragen wurden, hier nochmal ein zweiter Versuch:

CODE:

--------------------------------------------------------------------------------------------------------

// Based on https://github.com/wvuong/bbqsmoker/blob/master/bbqsmoker.ino

#define DST_IP "199.199.199.199" // IP der Internetseite

int led = 13; //Pin der LED
int mess1 = 0;
int vcc;
String stringValue = "";
const int numProbes = 2;
const int bufferLength = 30;
float temp;
int Temperatur;
int Temperatur1;

// probe datastructure
struct Probe {
String name;
int pin;
double A;
double B;
double C;
int buffer[bufferLength];
int currentTemp;
int resistor;
};

// probes array
Probe probes[2];


void setup() {

Serial.begin(9600);

Serial.println("AT+RST");
//WiFi modul bootup
delay(800);
//"client" mode
Serial.println("AT+CWMODE=1");
//Einwahl ins WLAN
//SSID und Passwort auf das eigene Netzwerk anpassen.
Serial.println("AT+CWJAP=\"SSID\",\"Passwort\"");

// configure probes
Probe p0 = Probe();
p0.name = "ET-732-1";
p0.pin = A1;
p0.A = 5.36924e-4;
p0.B = 1.91396e-4;
p0.C = 6.60399e-8;

p0.resistor = 22000;
probes[0] = p0;

Probe p1 = Probe();
p1.name = "ET-732-2";
p1.pin = A2;
p1.A = 5.36924e-4;
p1.B = 1.91396e-4;
p1.C = 6.60399e-8;

p1.resistor = 22001;
probes[1] = p1;

delay(2000);
}

void loop() {
int sensorValue = 0;
int outputValue = 0;

// loop für jeden Geber
for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes;

// Wert einlesen:
outputValue = readAndOverSample((*ptr).pin, (*ptr).A, (*ptr).B, (*ptr).C, (*ptr).resistor);

// Wert in den Buffer schreiben
(*ptr).currentTemp = outputValue;

for (int i = bufferLength -1; i >= 1; i--) {
(*ptr).buffer = (*ptr).buffer[i-1];
}
(*ptr).buffer[0] = outputValue;
}

for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes;

// maximal 4 Geber!

int x; int y;
if (i % 2 == 0) {
x = 0;
}
else if (i % 2 == 1) {
x = 8;
}
if (i / 2 == 0) {
y = 0;
}
else if (i / 2 == 1) {
y = 1;
}
}
delay(10000);

int per = 50000/numProbes/5000;

for (int p = 0; p < per; p++) {
for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes;

// Durchschnitt errechnen 5 Minuten
int five, fifteen, thirty;
int accum = 0;
for (int i = 0; i < 5; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer;
}
five = accum/5;

// Durchschnitt errechnen 15 Minuten
accum = 0;
for (int i = 0; i < 15; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer;
}
fifteen = accum/15;

// Durchschnitt errechnen 30 Minuten
accum = 0;
for (int i = 0; i < 30; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer;
}
thirty = accum/30;

}
}

// Spannungsmessung mit Spannnungsteiler
int mess1 = analogRead(mess1);
vcc = ((mess1/36.35)*1000); // Faktor für Spannungsteiler

//Vertbindung zum web server
String cmd = "AT+CIPSTART=\"TCP\",\""; //make this command: AT+CPISTART="TCP","199.199.199.199",80
cmd += DST_IP;
cmd += "\",80";
Serial.println(cmd);

//warten auf Verlinkung
delay(300);

//HTTP GET Request
cmd = "GET /datei.php?Wert1="; // Datei des Internetservices aufrufen
cmd += Temperatur;
cmd += "&Wert2=";
cmd += Temperatur1;
cmd +="&VCC=";
cmd += vcc;
cmd += " HTTP/1.0\r\n";
cmd += "Host: 217.160.107.197\r\n\r\n";

//Größe des Requests für ESP8266
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
Serial.println(cmd);
}

int readAndOverSample(int apin, double A, double B, double C, int resistor) {
int sensorvalue = 0;
unsigned int accumulated = 0;
int numsamples = 64;
int n = 0;

sensorvalue = analogRead(apin);
delay(2);

// einlesen der 64 samples
for (int i = 0; i < numsamples; i++) {
sensorvalue = analogRead(apin);
if (sensorvalue == 0 || sensorvalue >= 1023) {
return -1;
}
accumulated += sensorvalue;
n++;
delay(2);
}

unsigned int ADCmax = (1 << 13) - 1;
unsigned int ADCval = accumulated >> 3;
float R, T;
R = log( resistor / ((ADCmax/(float)ADCval) - 1.0f));
T = 1.0f / ((C * R * R + B) * R + A);
temp = (T - 273.15f);

// Serial.print("temp="); Serial.println(temp);

if (resistor > 22000) {
Temperatur = temp; // Wert für Internetseite speichern
}

else {
Temperatur1 = temp; // Wert für Internetseite speichern
}
//return temp;
delay(60000); // 1 Minute warten
}


--------------------------------------------------------------------------------------------------------
 
OP
OP
G

grillmeister27

Militanter Veganer
Klappt leider auch jetzt nicht :confused::mad:, bin anscheinend zu blöd. Wenn Fehler im Code auftauchen, müsst ihr nur ein ergänzen. Warum das hier geschluckt wird, weiß ich leider nicht, sorry.
 

Frank74

Drama-Queen
Code gibt man am besten auch als "Code" im Forum ein.

Dann wird auch nix geschluckt.


Screenshot_3.jpg


Code:
// Based on https://github.com/wvuong/bbqsmoker/blob/master/bbqsmoker.ino

#define DST_IP "199.199.199.199" // IP der Internetseite

int led = 13; //Pin der LED
int mess1 = 0;
int vcc;
String stringValue = "";
const int numProbes = 2;
const int bufferLength = 30;
float temp;
int Temperatur;
int Temperatur1;

// probe datastructure
struct Probe {
String name;
int pin;
double A;
double B;
double C;
int buffer[bufferLength];
int currentTemp;
int resistor;
};

// probes array
Probe probes[2];


void setup() {

Serial.begin(9600);

Serial.println("AT+RST");
//WiFi modul bootup
delay(800);
//"client" mode
Serial.println("AT+CWMODE=1");
//Einwahl ins WLAN
//SSID und Passwort auf das eigene Netzwerk anpassen.
Serial.println("AT+CWJAP=\"SSID\",\"Passwort\"");

// configure probes
Probe p0 = Probe();
p0.name = "ET-732-1";
p0.pin = A1;
p0.A = 5.36924e-4;
p0.B = 1.91396e-4;
p0.C = 6.60399e-8;

p0.resistor = 22000;
probes[0] = p0;

Probe p1 = Probe();
p1.name = "ET-732-2";
p1.pin = A2;
p1.A = 5.36924e-4;
p1.B = 1.91396e-4;
p1.C = 6.60399e-8;

p1.resistor = 22001;
probes[1] = p1;

delay(2000);
}

void loop() {
int sensorValue = 0;
int outputValue = 0;

// loop für jeden Geber
for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes;

// Wert einlesen:
outputValue = readAndOverSample((*ptr).pin, (*ptr).A, (*ptr).B, (*ptr).C, (*ptr).resistor);

// Wert in den Buffer schreiben
(*ptr).currentTemp = outputValue;

for (int i = bufferLength -1; i >= 1; i--) {
(*ptr).buffer = (*ptr).buffer[i-1];
}
(*ptr).buffer[0] = outputValue;
}

for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes;

// maximal 4 Geber!

int x; int y;
if (i % 2 == 0) {
x = 0;
}
else if (i % 2 == 1) {
x = 8;
}
if (i / 2 == 0) {
y = 0;
}
else if (i / 2 == 1) {
y = 1;
}
}
delay(10000);

int per = 50000/numProbes/5000;

for (int p = 0; p < per; p++) {
for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes;

// Durchschnitt errechnen 5 Minuten
int five, fifteen, thirty;
int accum = 0;
for (int i = 0; i < 5; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer;
}
five = accum/5;

// Durchschnitt errechnen 15 Minuten
accum = 0;
for (int i = 0; i < 15; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer;
}
fifteen = accum/15;

// Durchschnitt errechnen 30 Minuten
accum = 0;
for (int i = 0; i < 30; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer;
}
thirty = accum/30;

}
}

// Spannungsmessung mit Spannnungsteiler
int mess1 = analogRead(mess1);
vcc = ((mess1/36.35)*1000); // Faktor für Spannungsteiler

//Vertbindung zum web server
String cmd = "AT+CIPSTART=\"TCP\",\""; //make this command: AT+CPISTART="TCP","199.199.199.199",80
cmd += DST_IP;
cmd += "\",80";
Serial.println(cmd);

//warten auf Verlinkung
delay(300);

//HTTP GET Request
cmd = "GET /datei.php?Wert1="; // Datei des Internetservices aufrufen
cmd += Temperatur;
cmd += "&Wert2=";
cmd += Temperatur1;
cmd +="&VCC=";
cmd += vcc;
cmd += " HTTP/1.0\r\n";
cmd += "Host: 217.160.107.197\r\n\r\n";

//Größe des Requests für ESP8266
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
Serial.println(cmd);
}

int readAndOverSample(int apin, double A, double B, double C, int resistor) {
int sensorvalue = 0;
unsigned int accumulated = 0;
int numsamples = 64;
int n = 0;

sensorvalue = analogRead(apin);
delay(2);

// einlesen der 64 samples
for (int i = 0; i < numsamples; i++) {
sensorvalue = analogRead(apin);
if (sensorvalue == 0 || sensorvalue >= 1023) {
return -1;
}
accumulated += sensorvalue;
n++;
delay(2);
}

unsigned int ADCmax = (1 << 13) - 1;
unsigned int ADCval = accumulated >> 3;
float R, T;
R = log( resistor / ((ADCmax/(float)ADCval) - 1.0f));
T = 1.0f / ((C * R * R + B) * R + A);
temp = (T - 273.15f);

// Serial.print("temp="); Serial.println(temp);

if (resistor > 22000) {
Temperatur = temp; // Wert für Internetseite speichern
}

else {
Temperatur1 = temp; // Wert für Internetseite speichern
}
//return temp;
delay(60000); // 1 Minute warten
}
 

Anhänge

OP
OP
G

grillmeister27

Militanter Veganer
Sorry und danke!!

Hier dann nun der Code:

Code:
// Based on https://github.com/wvuong/bbqsmoker/blob/master/bbqsmoker.ino

#define DST_IP "199.199.199.199" // IP der Internetseite

int led = 13; //Pin der LED
int mess1 = 0;
int vcc;
String stringValue = "";
const int numProbes = 2;
const int bufferLength = 30;
float temp;
int Temperatur;
int Temperatur1;

// probe datastructure
struct Probe {
String name;
int pin;
double A;
double B;
double C;
int buffer[bufferLength];
int currentTemp;
int resistor;
};

// probes array
Probe probes[2];


void setup() {

Serial.begin(9600);

Serial.println("AT+RST");
//WiFi modul bootup
delay(800);
//"client" mode
Serial.println("AT+CWMODE=1");
//Einwahl ins WLAN
//SSID und Passwort auf das eigene Netzwerk anpassen.
Serial.println("AT+CWJAP=\"SSID\",\"Passwort\"");

// configure probes
Probe p0 = Probe();
p0.name = "ET-732-1";
p0.pin = A1;
p0.A = 5.36924e-4;
p0.B = 1.91396e-4;
p0.C = 6.60399e-8;

p0.resistor = 22000;
probes[0] = p0;

Probe p1 = Probe();
p1.name = "ET-732-2";
p1.pin = A2;
p1.A = 5.36924e-4;
p1.B = 1.91396e-4;
p1.C = 6.60399e-8;

p1.resistor = 22001;
probes[1] = p1;

delay(2000);
}

void loop() {
int sensorValue = 0;
int outputValue = 0;

// loop für jeden Geber
for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes[i];

// Wert einlesen:
outputValue = readAndOverSample((*ptr).pin, (*ptr).A, (*ptr).B, (*ptr).C, (*ptr).resistor);

// Wert in den Buffer schreiben
(*ptr).currentTemp = outputValue;

for (int i = bufferLength -1; i >= 1; i--) {
(*ptr).buffer[i] = (*ptr).buffer[i-1];
}
(*ptr).buffer[0] = outputValue;
}

for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes[i];

// maximal 4 Geber!

int x; int y;
if (i % 2 == 0) {
x = 0;
}
else if (i % 2 == 1) {
x = 8;
}
if (i / 2 == 0) {
y = 0;
}
else if (i / 2 == 1) {
y = 1;
}
}
delay(10000);

int per = 50000/numProbes/5000;

for (int p = 0; p < per; p++) {
for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes[i];

// Durchschnitt errechnen 5 Minuten
int five, fifteen, thirty;
int accum = 0;
for (int i = 0; i < 5; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer[i];
}
five = accum/5;

// Durchschnitt errechnen 15 Minuten
accum = 0;
for (int i = 0; i < 15; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer[i];
}
fifteen = accum/15;

// Durchschnitt errechnen 30 Minuten
accum = 0;
for (int i = 0; i < 30; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer[i];
}
thirty = accum/30;

}
}

// Spannungsmessung mit Spannnungsteiler
int mess1 = analogRead(mess1);
vcc = ((mess1/36.35)*1000); // Faktor für Spannungsteiler

//Vertbindung zum web server
String cmd = "AT+CIPSTART=\"TCP\",\""; //make this command: AT+CPISTART="TCP","199.199.199.199",80
cmd += DST_IP;
cmd += "\",80";
Serial.println(cmd);

//warten auf Verlinkung
delay(300);

//HTTP GET Request
cmd = "GET /datei.php?Wert1="; // Datei des Internetservices aufrufen
cmd += Temperatur;
cmd += "&Wert2=";
cmd += Temperatur1;
cmd +="&VCC=";
cmd += vcc;
cmd += " HTTP/1.0\r\n";
cmd += "Host: 217.160.107.197\r\n\r\n";

//Größe des Requests für ESP8266
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
Serial.println(cmd);
}

int readAndOverSample(int apin, double A, double B, double C, int resistor) {
int sensorvalue = 0;
unsigned int accumulated = 0;
int numsamples = 64;
int n = 0;

sensorvalue = analogRead(apin);
delay(2);

// einlesen der 64 samples
for (int i = 0; i < numsamples; i++) {
sensorvalue = analogRead(apin);
if (sensorvalue == 0 || sensorvalue >= 1023) {
return -1;
}
accumulated += sensorvalue;
n++;
delay(2);
}

unsigned int ADCmax = (1 << 13) - 1;
unsigned int ADCval = accumulated >> 3;
float R, T;
R = log( resistor / ((ADCmax/(float)ADCval) - 1.0f));
T = 1.0f / ((C * R * R + B) * R + A);
temp = (T - 273.15f);

// Serial.print("temp="); Serial.println(temp);

if (resistor > 22000) {
Temperatur = temp; // Wert für Internetseite speichern
}

else {
Temperatur1 = temp; // Wert für Internetseite speichern
}
//return temp;
delay(60000); // 1 Minute warten
}
 

Nobi

Veganer
5+ Jahre im GSV
Hi,
eine ähnliche Idee hatte ich auch schon. Kann man nicht dafür direkt den Analog-In Pin des ESP nehmen (wenn man eine Version hat, wo der rausgeführt wird) ?
Meine Überlegung war das Ganze dann mit Akku zu betreiben, so dass man eine KT-Messung auch am Drehspieß machen kann und das dann mit dem WLAN-Thermo zu koppeln.
Die Hardware habe ich schon hier liegen, aber weiter bin ich noch nicht gekommen.

Gruss
Norbert
 
OP
OP
G

grillmeister27

Militanter Veganer
Hallo Norbert,

der Arduino überträgt hier die Daten an eine Internetseite im Format www.seite.com/start.php?Temp1=X&Temp2=Y. Wenn du an den Raspberry schicken willst müsste der die Daten irgendwie auslesen/speichern. Ist bestimmt machbar. Warum betreibst du denn den Raspberry nicht mit Akku?? Der Arduino hängt bei mir auch am Akku, dafür ja auch der Spannungsteiler.

Grüße
Markus
 

Nobi

Veganer
5+ Jahre im GSV
Hi Markus,

das Wlan Thermo ist ja ein Pi mit display und einigem drum und dran, da fand ich das eleganter den PI, der ja auch eine Webseite zur verfügung stellt, da hinzustellen, wo ich ihn gut sehen kann. Dann muss man an den Spieß nur den ESP und die Batterie packen, dann sollte das laufen. Ich denke auch die Akkulaufzeit ist von dem PI mit Display nicht so dolle, oder hast du da Erfahrungen?

Gruss
Norbert
 
OP
OP
G

grillmeister27

Militanter Veganer
Hallo Nobi,

ich habe am Raspberry nur die Fühler, kein Display, kein Lüfter, etc, da ich alles über das Handy/Tab sehen kann.

Mit diesem Akku:
http://www.ebay.de/itm/221692940424
läuft der Raspberry dann fast 4 Stunden. Für Long Jobs habe ich mir jetzt eine größeren Akku bestellt.

Grüße
Markus
 

Henry Der Rote

Vegetarier
Interessantes Low Budget Projekt, gefällt mir sehr gut soweit, klasse Arbeit. Kannst du das ein ganz klein wenig idioten sicherer wiedergeben ? Also ich habe bisher verstanden das ich sonen http://www.ebay.de/itm/SainSmart-Mega-2560-R3-ATmega2560-16AU-ATMEGA16U2-USB-Cabe-For-Arduino-DE-/221779188167?pt=LH_DefaultDomain_77&hash=item33a311d9c7 und einen http://www.ebay.de/itm/ESP8266-Serielle-WIFI-Wireless-Transceiver-Module-Support-AP-STA-AP-STA-Modus-/161710439435?pt=LH_DefaultDomain_77&hash=item25a6b17c0b und die Klinkenbuchsen. Brauch man noch irgendwas dafür ? Was für Messfühler ? Auf der Grafik sind noch Widerstände wieviel Ohm brauchen die denn ?
 
OP
OP
G

grillmeister27

Militanter Veganer
Hallo Henry,
die Hardware passt soweit, du kannst natürlich auch einen UNO verwenden, ist dann noch billiger.
Meine Messfühler sind vom Maverick 732.
Die Widerstände an den Fühlern sind 22 kOhm und am Spannungsteiler (zur Bestimmung der Akkuspannung) links 2.2 kOhm und rechts 10 kOhm.
Man kann aber auch andere Fühler verwenden, hier müssen dann nur die Werte angepasst werden.

Ich hoffe das hilft weiter.

Grüße
Markus
 

Henry Der Rote

Vegetarier
Ok, Danke dann bestell ich die Sachen mal, und dann reden wir drüber wie ich die Messdaten ins Internet kriege das hab ich null verstanden ;). Kann ich die auch auf meine eigene Website senden lassen ? Klinkenbuchsen Mono oder Stereo ?
 

Henry Der Rote

Vegetarier
Da komm ich auf ne Werbeseite von Internetseite.de ? Domains habe ich bei Alfahosting, brauch keine kaufen ;) ;P. Ich kann das bestimmt auch mit nem Netzteil betreiben, oder ? Wieviel V sollte das denn haben ?
 

Henry Der Rote

Vegetarier
Ok, Netzteilhab ich inzwischen rausgekriegt sind wohl 9V gängig, bleibt die frage wie ich das ins Netz bekomme und kennt zufällig jemand nen compiler der c++11 kann?
 

QBorg

Grillkaiser
5+ Jahre im GSV
bleibt die frage wie ich das ins Netz bekomme
So, wie ich den Code durch's Überfliegen verstanden habe, wird da immer wieder ein GET-Request an einen im Code verankerten Webserver abgesetzt - das müsstest du dann natürlich an deinen Webserver anpassen und auch dafür sorgen, dass dein Server die gelieferten Rohdaten auch auswertet (durch weitere Programmierung auf deinem Server, z.B. über die Scriptsprache PHP und die Anbindung einer Datenbank wie z.B. MySQL).

In dem o.g. Code wird ein Request an http://199.199.199.199/datei.php geschickt mit den GET-Informationen Wert1, Wert2 und VCC - und natürlich lässt sich das im Quellcode dann auf deine Begebenheiten anpassen.
 

Henry Der Rote

Vegetarier
Ja, soweit hab ich das auch verstanden, nur was ich wo und wie scripten muss hab ich kein Plan meine HTML und PHP Kenntnisse sind sehr begrenzt und lange her ;). Eventuell kann mir da ja einer ein wenig näher erklären ;).
 

QBorg

Grillkaiser
5+ Jahre im GSV
Kommt ganz drauf an, was du letztendlich mit den Daten machen willst. Wenn du die Daten nur auf deiner Webseite mal kurz sehen willst, dann ist das in wenigen Zeilen erledigt.
Wenn du allerdings nen Temperaturverlauf aufzeichnen willst, das evtl. noch mit dynamisch generierten Grafiken aufpeppen möchtest, dazu noch eine Datenbank führen möchtest mit Fotos des Grillguts in den verschiedenen Garstadien (automatisch verknüpft mit der Temperaturkurve) und dazu noch ein Vergleich von anderen Kurven von anderen Sessions desselben Gerichts, dann könnte das schon "minimal" aufwendiger werden.
 

Henry Der Rote

Vegetarier
Hehe ;), Ich will Grillen ;P. Ne, die Situation ist folgende, ich Grille meist long jobs wenn mein Kumpel mal wieder im hier ist und der Wohnt ca. 50m weit weg. Also eigentlich in laufnähe, aber wenn ich da alle halbe Stunde rausstürme um zumir zulaufen um zugucken ob die GT noch gut ist und was die KT so macht, ist das für die anderen eher störend und ich verpass irgendwie immer die spannenden scenen wenn nen Film läuft. Also will ich eigentlich nur bei ihm auf ne www. seite klicken können wo dann die 2 Zahlen stehen ;), dann kann ich es die ganze Zeit beobachten wie es ansteigt. Wenn sich das Projekt dann weiterentwickelt, supi ;) aber zunächst würde mir einfach reichen die Temperaturen abrufen zukönnen ;) ;P.
 
Oben Unten