Go Down

Topic: Temperatur Schaltung (Read 264 times) previous topic - next topic

dennis1005

Oct 12, 2017, 08:51 pm Last Edit: Oct 12, 2017, 11:01 pm by uwefed Reason: add CODE TAGS </>
Hallo zusammen,

ich bin neu hier und beschäftige mich seit ca. 1 Monat mit dem Arduino. Ich habe ein Arduino UNO und möchte damit einen Temperaturregler für minen 3 D Drucker bauen.

Zum Aufbau:

Ich verwende einen Max 6675
ein I2C Display
ein SRD 5 V Relais
und mein Arduino Board.

Der Max wird erkannt und gibt die Temperatur auch am Display aus, wenn die Temperatur über 100°C steigt, soll das Relais abgeschaltet werden, jedoch ignoriert das Board diesen Befehl.

das ist mein Sketch:
Code: [Select]
#include <Wire.h>
#include "max6675.h"
#include <LiquidCrystal_I2C.h>

int thermoDO = 7;
int thermoCS = 5;
int thermoCLK = 6;
int messwert=0;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
//int vccPin = 3;
//int gndPin = 2;
LiquidCrystal_I2C lcd(0x27, 16, 2);


void setup() {
 Serial.begin(9600);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 // use Arduino pins
 //pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
 //pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
lcd.begin();
 Serial.println("MAX6675 test");
 // wait for MAX chip to stabilize
 delay(500);
}

void loop() {
// basic readout test, just print the current temp
 
  Serial.print("C = ");
  Serial.println(thermocouple.readCelsius());
  // initialize the LCD
lcd.begin();

 // Turn on the blacklight and print a message.
 lcd.backlight();
 lcd.print("Temperatur");
  lcd.print(thermocouple.readCelsius());

  delay(1000);
if ("Temperatur" <100)
 {
 digitalWrite(12, LOW);
 }  
else{
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
}
  delay(500);
}



fehlt mir hier noch ein digital Read??
ich hab schon alles versucht und komm leider nciht weiter kann mir jemand helfen???

meister_q

Hallo Willkommen im Forum.

Setze deinen Code doch bitte in Codetags. Das geht im Editor mit dem Button </>.

2. Drücke doch in der Arduino Software Strg + T, dann rückt das Programm die Codezeilen automatisch ein, sodass wir diese besser lesen können.

Was mir aber spontan beim überfliegen auffällt ist folgendes:

Code: [Select]

if ("Temperatur" <100)


Müsste eher:
Code: [Select]

if (Temperatur <100)


ohne die "" heissen.

nix_mehr_frei

Hallo,

ich stehe zwar mit programmieren etwas auf Kriegsfu0, aber was mir auffällt, du initalisierst zwar
int messwert=0;
Nutzt den aber nie wieder.
Das Display steuerst du direkt mit
lcd.print(thermocouple.readCelsius());
an.
Logischer fände ich, wenn du irgenwo vor dem Displaygedöns z.B.
messwert=thermocouple.readCelsius() machen würdest,
im Displayteil dann lcd.print(messwert);
und hintenraus dann
if (messwert <100)

Kann sein, das ich irgenwo noch nen Syntaxfehler drin habe, aber da wird erst messwert initialisiert, dann wird messwert mit dem aus dem Max ausgelesenen Wert überschrieben, dann wird messwert angezeigt und dann verglichen und der digital Output dann gesetzt oder auch nicht.
Und mit der Zeile
lcd.write(0xD0 + 15);
knnst du noch das ° Zeichen auf dem Display darstellen  ;)
rot ist blau und Plus ist Minus

HotSystems

...jedoch ignoriert das Board diesen Befehl.

Welcher Befehl wird ignoriert ?
Das sind übrigens Anweisungen.

Quote
fehlt mir hier noch ein digital Read??
ich hab schon alles versucht und komm leider nciht weiter kann mir jemand helfen???
Zumindest fehlt das Auslesen des Sensors und die Übergabe in die zugehörige Variable.

Allerdings ist der Sketch schlecht lesbar, da die Code-Tags fehlen, aber das wurde dir ja schon geschrieben.
Also bitte machen.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

ardubu

ich denke mal eher so
if(thermocouple.readCelsius() >100)
{
}

HotSystems

ich denke mal eher so
if(thermocouple.readCelsius() >100)
{
}
Geht so auch.
Nur die variable "Messwert" hat er doch schon definiert, die kann er doch nehmen.
Evtl. will er den Wert ja noch weiter verwenden.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

DerLehmi

Mal abgesehen von den bisher genannten Problemen:
angenommen, das Relais befindet sich an Pin 12.
Ist die Temperatur kleiner als 100, dann schalte Pin 12 auf LOW, wenn nicht, dann schalte Pin 12 auf LOW. -->Geht ein Licht auf?^^

guntherb

Und noch was: LCD muss man meist nur einmal initialisieren, also
  lcd.begin();
lieber in setup(), nicht loop().
Grüße
Gunther

dennis1005

#8
Oct 13, 2017, 05:58 pm Last Edit: Oct 13, 2017, 07:52 pm by uwefed Reason: add code tags </>
So jetzt hab ich den Code nochmal eingefügt.

Code: [Select]
#include <Wire.h>
#include "max6675.h"
#include <LiquidCrystal_I2C.h>

int thermoDO = 7;
int thermoCS = 5;
int thermoCLK = 6;
int messwert=0;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
//int vccPin = 3;
//int gndPin = 2;
LiquidCrystal_I2C lcd(0x27, 16, 2);


void setup() {
 Serial.begin(9600);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 // use Arduino pins
 //pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
 //pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
lcd.begin();
 Serial.println("MAX6675 test");
 // wait for MAX chip to stabilize
 delay(500);
}

void loop() {
// basic readout test, just print the current temp
 
  Serial.print("C = ");
  Serial.println(thermocouple.readCelsius());
  // initialize the LCD
lcd.begin();

 // Turn on the blacklight and print a message.
 lcd.backlight();
 lcd.print("Temperatur");
  lcd.print(thermocouple.readCelsius());

  delay(1000);
if ("Temperatur" <100)
 {
 digitalWrite(12, LOW);
 }  
else{
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
}
  delay(500);
}


Wenn ich die "" bei der temperatur entferne bekomme ich einen fehler beim kompilieren.

ardubu

#9
Oct 13, 2017, 06:13 pm Last Edit: Oct 13, 2017, 06:18 pm by ardubu
versuch es mal so
Code: [Select]
#include <Wire.h>
#include "max6675.h"
#include <LiquidCrystal_I2C.h>

const byte thermoDO = 7;
const byte thermoCS = 5;
const byte thermoCLK = 6;
int messwert=0;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
//int vccPin = 3;
//int gndPin = 2;
LiquidCrystal_I2C lcd(0x27, 16, 2);


void setup() {
  Serial.begin(9600);
  pinMode(11, OUTPUT); //Relais ?
  pinMode(12, OUTPUT); //?
  // use Arduino pins
  //pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
  //pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
lcd.begin();
 // Turn on the blacklight and print a message.
lcd.backlight();
  Serial.println("MAX6675 test");
  // wait for MAX chip to stabilize
  delay(500);
}

void loop() {
// basic readout test, just print the current temp
   messwert = thermocouple.readCelsius();
   Serial.print("C = ");
   lcd.print("Temperatur");
   lcd.print(messwert);

   delay(1000);
if ("messwert" >100)
  {
  digitalWrite(12, HIGH);
  }
else{
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
}
   delay(500);
}

dennis1005

if(thermocouple.readCelsius() >100)

Das hat geklappt wunder bar vielen vieln Dank!

Serenifly

Studiere wie man Variablen verwendet. Was du willst ist sowas:

Code: [Select]

int temp = thermocouple.readCelsius();

Serial.println(temp);

if (temp > 100)
{
}

Go Up