Hey Ho!
Bin ziemlicher Noob bezüglich Arduino und sketch.
Habe ein Mega2560 welches zwei DS18B20 ausliesst. Bei einer bestimmten
Temperatur (die von 3W LEDs)schaltet das Relais den Strom für die LEDS
ab. Funktioniert prima, nur schalten die Relais bei der selben Temp
wieder ein. Das ist zu kurz zum abkühlen der LEDs / Kühlkörper.
Also Beispiel: Bei >50 Grad Celsius schaltet das Relais die LEDs aus.
Sobald die Temp unter 50 Grad ist schalten die Relais gleich wieder ein,
nun dauert es nicht lange bis die LEDs wieder zu warm werden und das
Relais schaltet. Ich möchte dass sie wenigstens auf Bsp: 40 Grad
absinken....
Die LEDs bitte nicht verwechseln: Die 3Watt LEDs sind blau und grün.
deren Temp wird über je eine blaue und rote LED angezeigt...
Der Sketch im Anhang.
und hier:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(49, 48, 39,40,41,42,43,44,45,46,47);
int blueBLED = 27; // Temperatur für blaue LEDs ok
int blueRLED = 28; // Temperatur für blaue LEDs zu hoch
int greenBLED = 29; // Temperatur für grüne LEDs ok
int greenRLED = 30; // Temperatur für grüne LEDs zu hoch
// Datenkabel der Sensoren auf Pin 9 vom Mega
#define ONE_WIRE_BUS 50
// ONEwire bus _ alle Sensoren - ein Kabel
OneWire oneWire(ONE_WIRE_BUS);
// Signal an Dallas übergeben
DallasTemperature sensors(&oneWire);
// Adressen der Sensoren
DeviceAddress greenThermometer = { 0x28, 0xCF, 0x95, 0xCD, 0x04, 0x00, 0x00, 0xFA};
DeviceAddress blueThermometer = { 0x28, 0xF9, 0x4E, 0xCB, 0x04, 0x00, 0x00, 0x82 };
int blue = 31; // Output für Relais1 - IN1
int green = 32; // Output für Relais2 - IN2
float bluetemp = 0;
float greentemp = 0;
void setup(void)
{
// Start Sensoren
sensors.begin();
// 10bit Auflösung
sensors.setResolution(blueThermometer, 10);
sensors.setResolution(greenThermometer, 10);
// PINs von LEDs für Überwachung Temperatur als Ausgang setzen
pinMode(blueBLED, OUTPUT);
pinMode(blueRLED, OUTPUT);
pinMode(greenBLED, OUTPUT);
pinMode(greenRLED, OUTPUT);
// alle LEDs einschalten - Funktionstest
digitalWrite(blueBLED, HIGH);
digitalWrite(blueRLED, HIGH);
digitalWrite(greenBLED, HIGH);
digitalWrite(greenRLED, HIGH);
delay(2000);
//Display Hintergrundbeleuchtung ein
pinMode(38, OUTPUT);
digitalWrite(38,HIGH);
lcd.begin(20,4);
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Welcome to my");
delay(2000);
lcd.setCursor(2,1);
lcd.print("infintiy mirror");
lcd.setCursor(3,2);
lcd.print("microprocessor");
lcd.setCursor(5,3);
lcd.print("controlled");
delay(8000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("designed and built");
lcd.setCursor(8,1);
lcd.print("by");
lcd.setCursor(5,2);
lcd.print("MichelFibs");
delay(2000);
lcd.setCursor(4,3);
lcd.print("! have fun !");
delay(8000);
lcd.clear();
// PINS für Relais-Schalten als Ausgang setzen
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
float t1tempC = sensors.getTempC(blueThermometer);
float t2tempC = sensors.getTempC(greenThermometer);
if (tempC == -127.00) {
lcd.print("000");
} else {
// lcd.print(tempC);
// lcd.print("/");
bluetemp = (t1tempC);
greentemp = (t2tempC);
lcd.print(tempC);
}
}
void loop(void)
{
delay(2000);
sensors.requestTemperatures();
// Ausgabe Display
lcd.setCursor(0,0);
lcd.print("LED blue: ");
printTemperature(blueThermometer);
lcd.print(" 'C");
lcd.setCursor(0,1);
lcd.print("LED green: ");
printTemperature(greenThermometer);
lcd.print(" 'C");
lcd.setCursor(0,2);
lcd.print("Relais 1:");
lcd.setCursor(0,3);
lcd.print("Relais 2:");
// Schalten der Relais bei Übertemperatur
if (bluetemp >= 10 && bluetemp <= 30.9)
{
digitalWrite(blue, HIGH);
digitalWrite(blueRLED, LOW);
digitalWrite(blueBLED, HIGH);
lcd.setCursor(11,2);
lcd.print("on ");
}
if (bluetemp >= 31)
{
digitalWrite(blue, LOW);
digitalWrite(blueRLED, HIGH);
digitalWrite(blueBLED, LOW);
lcd.setCursor(11,2);
lcd.print("off");
}
if (greentemp >= 10 && greentemp <= 30.9)
{
digitalWrite(green, HIGH);
digitalWrite(greenRLED, LOW);
digitalWrite(greenBLED, HIGH);
lcd.setCursor(11,3);
lcd.print("on ");
}
if (greentemp >= 31)
{
digitalWrite(green, LOW);
digitalWrite(greenRLED, HIGH);
digitalWrite(greenBLED, LOW);
lcd.setCursor(11,3);
lcd.print("off");
}
}
Bitte um Hilfe! Habe nix vergleichbares über SUFU gefunden.
Danke
Projekt01.txt (3.53 KB)