LED Lampe mit Arduino steuern und dimmen

Ich möchte einen Tageslichtwecker mit dem Arduino bauen. Das Programm funktioniert, nur brauche ich noch eine gescheite Lampe. Ein LED Strip ist mir von dem Lichtstrom her zu schwach, weil ich ja von dem Licht aufwachen will. Außerdem wäre mir das zu teuer für ca. 15m (einmal ums Zimmer an der Decke). Also möchte ich eine einzelne Lampe nehmen, die das licht schön verteilt, mit ca. 2700 -3500K, diese Lichttemperatur soll anscheinend am besten den Sonnenaufgang simulieren. Nun bin ich aber relativ unwissend in dem Thema und weiß nicht, wie ich mit den 5V von Arduino eine solche Lampe mit z.B. 230V steuern oder dimmen soll. Geht das und was benötige ich damit es funktioniert?

If you have the skill set you can make a light dimmer that will control a mains light such as a flood light in the temperature you want. Note the light will not be even through out your room. I do not think it is possible to do the even lighting with a single light source for your room.

Wenn Sie über die erforderlichen Fähigkeiten verfügen, können Sie einen Lichtdimmer herstellen, der ein Netzlicht wie einen Fluter in der gewünschten Temperatur steuert. Beachten Sie, dass das Licht nicht gleichmäßig in Ihrem Zimmer sein wird. Ich glaube nicht, dass es möglich ist, eine gleichmäßige Beleuchtung mit einer einzigen Lichtquelle für Ihren Raum zu erreichen.

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

1 Like

Viele LED Leuchtmittel sind nicht dimmbar weil die Elektronik in den Leuchtmitteln dies nicht vorgesehen hat.

Grüße Uwe

Um mit schwachem Signal starke Lasten zu steuern, kann man mit einem PWM Ausgang des Arduino einen MOSFET ansteuern. Digitaler PWM Ausgang des Arduino an die BASIS des MOSFET und im DRAIN/SOURCE Kanal die 230V Lampe einbauen. Detailierte Schaltungen dafür findest Du überall im Onkel Google Shop.

Nennt sich bie MOSFETs Gate, und übliche MOSFET sind nicht für 230V AC geeignet.

Ob deine LED Konstantstromquelle, die aus 230V AC einen Konstantstrom von z.B. 350 mA bei angepasster Spannung (12 .. 80 V DC) macht, es verträgt, die Ausgangsseite per PWM abgeschaltet zu bekommen, wird dir keiner sagen können, der diese Stromquelle nicht explizit als dimmbar (wie?) verkauft.

Meines Wissens gibt es MOSFET die bis 1000V und bis 100A vertragen, und wenn es um eine Lampe geht die einen LED-Strip ersetzt, kann man davon ausgehen, dass es sich um DC (Gleichstrom) handelt. Vieleicht geht ja ein IRFP460 (500V / 20A)

Würdest Du dafür, ohne Info zur Lampe, wirklich Deine Hand ins Feuer legen?

Gruß Tommy

Selbst die für 12 V ausgelegt sind haben einen Gleichrichter Glättungskondensator und Konstantstromquelle drin. Alte 12 Systeme haben einen 230V -12V Trafo und darum Wechselspannung (zB bei mir im Bad, installation ca 2000) . Erst neuere Installationen haben ein Switchingnetzteil weil billiger als ein Trafo.

Dann hast Du den Arduino auf Netzpotential. Also fliegt bei Anschluß an USB im besten Fall der FI, der PC raucht ab oder Du stellst die Pantoffel auf.
Solche Ratschläge sind gefährlich und unqualifiziert und an Unkundige gerichtet unzulässig, unbedacht und unbedacht.

@TO
Es gibt regelbare Lampen für Hausautomatisation. Hol Dir solche und steuere sie fern. Es gibt auch Projekte zur Fernsteuerung über Arduino.

Grüße Uwe

1 Like

Geht nicht, ist kein Low Level Mosfet

Einen LED-Strip will der TO ja nicht, stattdessen eine "solche Lampe mit z.B. 230V steuern oder dimmen"
Da ist keine Rede von Gleichstrom, sondern von Lampen mit eingebautem Netzteil.
Wenn dieses dimmbar mit einem externen PWM-Signal oder einer steuerbaren Kleinspannung (0-10V) wäre und nicht auf einen alten Phasenanschnitt-Dimmer vor der Primärseite abgestimmt ist, wäre das kein sehr großes oder gefährliches Experiment.

Aber der Tip von @uwefed, einer fernsteuerbaren Lampe die Fernbedienung per Arduino unterzujubeln, ist sicher besser.

Hallo,
vielleicht hast du schon eine Lösung für dein Projekt gefunden und umgesetzt.
Falls nicht hätte ich eventuell eine Lösung zur Dimmung einer Led-Lampe und
die könnte andere User vielleicht auch interessieren.

Um im Garten die Wege, den Teich, Hütte usw. zu erhellen, verwende ich
Einbaustrahler (Led Panel Lights).
Die gibt es recht günstig, hauptsächlich über Ebay, im Internet.
Die sind meist für Netzspannung (AC 85-265 V) ausgelegt und alle
nicht dimmbar.
Um das zu ändern kaufte ich Led-Spots (3 W), die mit einem beigefügtem Led-Driver betrieben werden.
In meinem Beispiel wandelt dieser die Netzspannung 230V in DC 9-12 V, 280mA um und speist
damit das über einen handelsüblichen Hohlstecker verbundene "Led Panel Light" (steht so auf dessen Gehäuserückseite).
Weiter ist noch der Spannungsbereich, AC 85-265 V, aufgedruckt.
Aber in diesem Fall ist was drauf steht nicht drin - 15 Leds am Rand und sonst keine Elektronik.

Mit einer, mittels PWM steuerbaren Konstantstromquelle von KT-Elektronic und einem Fritz-Box-Netzgerät (12 V) als Stromquelle
für die Led, habe ich via Webserver mit ESP32 die Led gedimmt.
Um eine halbwegs gleichmäßige Helligkeitssteuerung zu erhalten erstellte ich durch Versuche eine
für meinen Fall geeignete optisch lineare PWM-Tabelle (wie auch im beigefügtem Sketch).
Funktioniert perfekt.

Der Haken beim Kauf der Led Panel Lights ist, dass keine technischen Angaben über den beigefügten Led Driver gemacht
werden. Hier ein paar Tips, um Fehlkäufe möglichst zu vermeiden:

  1. Darauf achten, dass die Led über einen beigefügten Led Driver gespeist wird. Es gibt auch welche ohne.
    Da steht dann meist irgendwo "direkt verdrahtet" o.ä.

  2. Die DC-Spannung der Led-Driver variiert je nach Hersteller etwas. Bei einer 3 Watt Led beispielsweise etwa zwischen 7-12 V.
    Je höher die Leistung, desto höher die benötigte Versogungsspannung. Bei 8 Watt Leds liegt sie schon bei etwa 30 V
    und darüber, wodurch die Grenze der max. laut Hersteller angegeben Spannungsfestigkeit der Konstantstromquelle (30 V bei KT)
    erreicht wird.

  3. Wie könnte ich das passende Led Panel finden?
    Auf den Abbildungen der Leds kann man die Led Driver sehen, leider jedoch nicht die technischen Daten (DC Spannung) ablesen.
    Doch der Verkäufer von Led Panel verkauft auch diverse Led Driver und so kann man über das Aussehen des Gehäuses des Drivers
    und der Watt Angabe den verwendeten Driver mit großer Wahrscheinlichkeit finden und die technischen Daten ablesen.

  4. Die Konstantstromquellen von KT-Elektronic gibt es mit verschiedenen max. Lastströmen zwischen 100-1000mA, 30V
    Selbstverständlich gibt es noch viele andere Hersteller von Konstandstromquellen. Die von KT habe ich schon mehrfach
    erfolgreich eingesetzt, die Beschreibung ist vorbildlich und der Preis für mich in Ordnung, weshalb ich sie empfehlen kann.

Es gibt von diesen Led Panel Lights auch welche, deren Farbtemperatur gedimmt werden können soll.
Leider steht nicht dabei, wie das technisch funktioniert. Achtung, hier sind auch welche ohne Driver, direkt verdrahtet.
Habe jetzt solche Lampen bestellt und möchte versuchen, neben der Helligkeit, auch die Farbtemperatur mit Arduino
kompatibler Hardware zu dimmen. Bin gespannt, was geht.

Vielleicht kannst du und/oder der eine oder andere User den beigefügten Sketch verwenden.`

[code]
/*Dieser Sketch dimmt eine Led von "0" bis max. Wert.
  Dabei wird, solange der Schalter oder ein Taster den "switchPin" 
  auf LOW hält, der PWM-Wert entsprechend "pwmtable" alle drei Sekunden erhöht
  bis der höchste/letzte Wert erreicht ist.
  Mit "switchPin" HIGH wird der PWM-Wert wieder auf "0" gesetzt.
  Zur kontrolle des Dimmvorganges erfolgt eine Ausgabe des aktuellen PWM-Wertes
  am seriellen Monitor.
  Um den Sketch übersichtlicher und einfacher zu gestallten, könnte, solange 
  der Sketch auf die Dimm-Funktion begrenzt ist, zur Umsetzung des Intervalles 
  auch Delay verwendet werden.
  Die Sketch-Infos und den Schätzwert des Heapspeichers integriere ich zur
  besseren Übersicht standartmäßig in jedes Projekt. 
  Die Werte in "pwmtable" und "interval" sind nur ein Beispiel und können den
  jeweiligen Erfordernissen angepasst werden.
  Getestet mit einem Arduino UNO.
*/
#include <Arduino.h>
extern int __heap_start, *__brkval;
int freeMemory() {
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

// Optisch lineare PWM-Tabelle mit 11 Werten
const int pwmtable[] = {0, 15, 30, 55, 95, 155, 245, 350, 505, 720, 1023}; // Ursprünglich für einen ESP32 erstellt
const int numValues = sizeof(pwmtable) / sizeof(pwmtable[0]);

const int ledPin = 9;     // PWM-fähiger Pin
const int switchPin = 2;  // Schalter oder Taster (halten)

int currentIndex = 0;
unsigned long previousMillis = 0;
const unsigned long interval = 3000; // 3 Sekunden Intervall

void setup() {
  Serial.begin(9600);
    delay(100);
    Serial.println();
    Serial.println("_______________________________");
    Serial.println(__FILE__);                           // Dateiname
    Serial.println(__DATE__);                           // Erstellungsdatum
    Serial.println(__TIME__);                           // Erstellungszeitpunkt
    Serial.println("_______________________________");
    Serial.println("Projekt: Wakeup Light");            // Projektname
    Serial.println("_______________________________");
    Serial.println("Free memory check:");
    Serial.print("Free memory: ");
    Serial.print(freeMemory());
    Serial.println(" Bytes");
    Serial.println("_______________________________");

  pinMode(ledPin, OUTPUT);
  pinMode(switchPin, INPUT_PULLUP); // Schalter-Pin mit Pull-Up-Widerstand

  Serial.println("======= Setup abgeschlossen. Starte loop. =======\n");
}

void loop() {
  unsigned long currentMillis = millis();
  int switchState = digitalRead(switchPin);

  if (switchState == LOW) {
    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
        
      if (currentIndex < numValues - 1) {
        currentIndex++;
        Serial.print("currentIndex: ");
        Serial.print(currentIndex);
        Serial.print(" | PWM-Wert: ");
        Serial.println(pwmtable[currentIndex]);
      } else {
        currentIndex = numValues - 1; // Maximaler Wert erreicht
      }
    }
  } else {
    currentIndex = 0; // PWM-Wert auf 0 setzen
  }

  int pwmValue = pwmtable[currentIndex];
  // Der Arduino UNO hat eine Auflösung von 8-Bit, die Tabelle 10.Bit. Deshalb muss der PWM-Wert 
  // auf 8-Bit (0-255) skaliert oder die Tabelle müsste auf 8-Bit (Werte von 0-255) geändert werden.
  analogWrite(ledPin, map(pwmValue, 0, 1023, 0, 255)); 
}

[/code]