Forum: Mikrocontroller und Digitale Elektronik Temperaturgesteuerte RGB LED wie umzusetzen?


von FragMaster.ac.nsn (Gast)


Lesenswert?

Hi zusammen,

ich suche einen Bauplan oder Ideen für nachstehende Idee:

In meinem Computer werkelt seit kurzem eine Wasserkühlung. Ich dachte
mir, die Wassertemperatur nicht nur durch einfache LCDs oder Programme
abzulesen sondern optisch mit einer RGB LED oder einer blauen und roten
LED darzustellen.

Praktisch umgesetzt sollte es dann so ausschauen, dass ein RGB LED oder
eben 2 einzelne eingesetzt werden und diese der Wassertemperatur
entsprechend mit Strom versorgt werden. Je wärmer das Wasser je heller
die rote und dunkler die blaue. In Umkehrrichtung entsprechend
andersherum. Ist sowas generell im bezahlbaren Segment machbar oder
braucht es dafür extrem aufwendige Schaltungen und teuer Bauteile?

von Markus Kaufmann (Gast)


Lesenswert?

Es gibt im Prinzip zwei Lösungsansätze:
- Analog: Analoger Fühler, zwei OpAmps, einer mit positivem Ausgang für
die rote LED, einer mit invertiertem Ausgang für die blaue LED.
- Digital: Digitaler Temperaturfühler (z.B. DS1820), kleiner
Microcontroller (z.B: ATTiny-Serie von AVR) und daran dann die LEDs
anschließen.

Ich wäre für die digitale Lösung, da man dann ganz einfach auch so
Sachen wie z.B. blinkende LED als Warnhinweis ab einer bestimmten
Temperatur oder irgendwelche Gimmicks beim booten machen kann.

Bei Reichelt gibts so nette Bargraph-Anzeigen, z.B. die RGBG 1000, die
hat 7 grüne LEDs und 3 rote LEDs, wie wäre es damit?

Markus

von FragMaster.ac.nsn (Gast)


Lesenswert?

Im großen und ganzen sollte es in einem Ausgleichsbehälter verbaut
werden. Dort wären die beiden LEDs durch eine Linse ins Wasser
leuchtend platziert und das Wasser würde ähnlich einem Infrarotbild
entsprechend blau, blaurot gemischt und rot leuchten, nach Möglichkeit
mit feiner Nuancierung.

Ein OpAmp schaltet doch nur on/off oder sehe ich das falsch? Wichtig
ist mir, dass je nach Temperatur zu Beginn die rote aus ist und je
wärmer das Wasser wird, die Intensität der roten zu- und der blauen
ab-nimmt und bei einem festen Wert die blaue gänzlich abschaltet.

Praktisch gesehen wird folgendes Bauteil einer Wasserkühlung von innen
ausgeleuchtet:
http://www.aqua-computer-systeme.de/images/aquatube/1.jpg Das Bullauge
ist vorn im Rechner zu sehen und dann einen netten Farbwechsel darin zu
sehen je nach Temperaturwert wäre praktisch die Vollendung meiner
Kühlung.

von FragMaster.ac.nsn (Gast)


Lesenswert?

Noch ein Bild zur Verdeutlichung, lediglich mit grüner Ausleuchtung:
http://www.aqua-computer-systeme.de/images/aquatube/10.jpg

von Terimo (Gast)


Lesenswert?

Natürlich schaltet ein OP nicht nur einfach ON/OFF, dann wär es doch
kein Analoges IC mehr, sondern ein Digitales!

Man kann zwar einen OP auch so beschalten, dass er bei einem bestimmten
Schwellwert voll aussteuert, aber das hängt nicht vom OP sondern von
der äußeren Beschaltung ab.

von Matthias (Gast)


Lesenswert?

Hi

ATtiny12 plus einem Temperatursensor z.B. LM75
Kann ich dir entwickeln wenn du willst. Alles weitere per PM.

Matthias

von Peter D. (peda)


Lesenswert?

Ein MC (z.B ATTINY15) sollte es auf alle Fälle sein.

Das Auge nimmt die Helligkeit nämlich logarithmisch war, d.h. um
sichtbare Helligkeitsänderungen zu erzeugen, mußt Du sie logarithmisch
abstufen und das geht am einfachsten mit einer Wertetabelle im MC.

Nichtlineare Funktionen mit Analogrechnern macht heute keiner mehr,
weil zu teuer.

Als Sensor ist der DS18B20 (Transistorbauform) wesentlich besser zu
montieren als der LM75 (SMD-IC).

Peter

von FragMaster.ac.nsn (Gast)


Lesenswert?

Hui, so langsam bin ich als blutiger Etechnik Amateur mit den
Bezeichnungen überfordert. Offenbar scheinen die genannten Chips
programmierbar zu sein.

Was die einzelnen Bauteil leisten kann ich mir zwar aus Datenblättern
entnehmen, aber die Umsetzung der Schaltung wird mich sicher
überfordern. Wäre super wenn mir da einer Hilfestellung zu dem
geplanten Projekt geben könnte.

Zur Info:
Das Wasser hat ein Temperaturspektrum von min. 10° C bis 60° C. Im
Normalfall ist das Wasser beim starten des Rechners zimmerwarm, also um
die 20° und steigt dann fortwährend im Betrieb nicht über 50° hinaus.

von Melinamell (Gast)


Lesenswert?

Hallo zusammen,
ich studiere Wirtschaftsingenieurwesen und bin nun im dritten Semester.
In der Uni habe ich ein Semester lang Elektrotechnik gehabt, jedoch kein 
Programmieren.
Nun ist unser Dozent auf die Idee gekommen, wir könnten uns das 
Programmieren bis zum nächsten Semester ja mal eben selber beibringen 
und eine Wetterstation bauen...
Meine Bauteile sind folgende:
- Node MCU
- DHT 22
- DS18B20
- MPL3115A2
- RGB LED
Die Hardware ist so weit fertig und ich konnte mit der Arduino IDE (ja, 
viele finden die sch***e, mir bleibt derzeit aber nichts anderes über 
als vollkommen ahnungslose) bereits die Sensoren einzeln und 
mittlerweile auch gemeinsam auslesen. So weit so gut. Auch die 
Datenübertragung bzw. der Datenabruf über eine IP-Adresse klappt 
mittlerweile.
Meine letzte Aufgabe ist nun:
Die RGB-LED soll unter 18°C blau, über 22°C rot und dazwischen grün 
blinken.
Mein Code ist grob ohne die anderen Sensoren folgender (kann sein, dass 
ich noch was beim Löschen vergessen habe):
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;
void setup() {
Serial.begin(115200);
sensors.getAddress(insideThermometer, 0);
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
Wire.begin(); sensors.begin();
}
void loop() {
delay(500);
sensors.requestTemperatures();
float tempC = sensors.getTempC(insideThermometer);
Serial.print("Temperature(DS1820): ");
Serial.print(tempC);
Serial.println("*C ");
}
die RGB-LED zum blinken bekomme ich damit:
int redPin = D5, greenPin = D6, bluePin = D8;
void setup() {
pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, 
OUTPUT);
}
void loop() {
digitalWrite(redPin, LOW); delay(500);
digitalWrite(redPin, HIGH); delay(500);
digitalWrite(greenPin, LOW); delay(500);
digitalWrite(greenPin, HIGH); delay(500);
digitalWrite(bluePin, LOW); delay(500);
digitalWrite(bluePin, HIGH); delay(500);
}
Ich habe mein Glück versucht, die RGB-LED je nach Temperatur blinken zu 
lassen, aber es nicht geschafft.. Ich hoffe sehr, dass ihr mir helfen 
könnt!
Ich danke euch bereits im Voraus und bitte auch noch einmal zu bedenken, 
dass ich eine absolute Anfängerin bin. Also bitte Verständnis dafür 
zeigen :)
Liebe Grüße,
Melina

von Joachim S. (oyo)


Lesenswert?

Melinamell schrieb:

> Meine letzte Aufgabe ist nun:
> Die RGB-LED soll unter 18°C blau, über 22°C rot und dazwischen grün
> blinken.
> Mein Code ist grob ohne die anderen Sensoren folgender (kann sein, dass
> ich noch was beim Löschen vergessen habe):

> void loop() {
> delay(500);
> sensors.requestTemperatures();
> float tempC = sensors.getTempC(insideThermometer);
> Serial.print("Temperature(DS1820): ");
> Serial.print(tempC);
> Serial.println("*C ");
> }
> void setup() {
> [...]
> void loop() {
> digitalWrite(redPin, LOW); delay(500);
> digitalWrite(redPin, HIGH); delay(500);
> digitalWrite(greenPin, LOW); delay(500);
> digitalWrite(greenPin, HIGH); delay(500);
> digitalWrite(bluePin, LOW); delay(500);
> digitalWrite(bluePin, HIGH); delay(500);
> }
>
> void setup() {
> [...]

Wieso hast Du zweimal loop() und zweimal setup()?

> Ich habe mein Glück versucht, die RGB-LED je nach Temperatur blinken zu
> lassen, aber es nicht geschafft.. Ich hoffe sehr, dass ihr mir helfen
> könnt!
> Ich danke euch bereits im Voraus und bitte auch noch einmal zu bedenken,
> dass ich eine absolute Anfängerin bin. Also bitte Verständnis dafür
> zeigen :)

Ich frage mich gerade, wo da nun konkret Dein Problem liegen könnte - 
das erwähnst Du leider nicht.

Denn dem Code-Fragment nach zu schliessen hast Du es ja bereits 
geschafft, die RGB-LED in rot, grün und blau blinken zu lassen; 
weiterhin hast Du es offenbar bereits geschafft, die aktuelle Temperatur 
als float-Wert auszulesen.
Wo also liegt Dein Problem, ist Dir die "if"-Anweisung schlicht 
unbekannt?

von Ralf G. (ralg)


Lesenswert?

Joachim S. schrieb:
> Wo also liegt Dein Problem

Er wollte einfach mal was an einen 14 Jahre alten Thread anhängen!?

von Martin K. (maart)


Lesenswert?

Zumindest hat er die Suchfunktion benutzt.

von Manfred (Gast)


Lesenswert?

Melinamell schrieb:
> Die Hardware ist so weit fertig und
> ich konnte mit der Arduino IDE
> bereits die Sensoren einzeln und
> mittlerweile auch gemeinsam auslesen.
> So weit so gut. Auch die Datenübertragung bzw. der
> Datenabruf über eine IP-Adresse klappt mittlerweile.
Damit bist Du schon erheblich weiter als die Masse der Fragesteller hier 
- klingt gut.

> [Arduino IDE]
> (ja, viele finden die sch***e, mir bleibt derzeit
> aber nichts anderes über als vollkommen ahnungslose)
Die sind doof, Arduino hat seine Berechtigung und es ist keine Schande, 
das zu benutzen.

Du hast Meßwerte, ein paar Abfragen "if temperatur größer als gehe zu 
Unterprogramm rot" bekommst Du sicher auch hin?

Implementiere dabei eine Hysterese: If größer 22° Rot ein, aber erst if 
kleiner 21,5° blinken, sonst flattert die Umschaltung im Grenzbereich. 
Für solche Spielereien (Übung) hatte ich mir ein Drehpoti an einen 
Analogpin gehängt und meine LEDs damit durchgespielt.

Ohne Deine Software im Detail zu begucken: Die "delay" sind kritisch, 
weil während dieser Zeit nichts anderes getan werden kann.

Suche mal im Internet nach "Arduino Blink ohne delay".

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.