LED Steuerung mit ESP8266 Fehler nach Reperatur

Hallo liebe Coder,

ich hatte vor Jahren meiner Freundin ein selbstgebautes Herz mit LED Beleuchtung geschenkt. Nach einiger Zeit ist leider das Kabel von der Buchse abgerissen. Nach dem erneuten Löten leuchtete es nur noch in der Farbe Weiß.

Aufbau ist 12V-RGB-LED mit ESP8266 und Step-Down-Wandler, Widerstände und Transistoren.

Folgende Sachen habe ich überprüft:

  • neuer ESP mit alter Programmierung / LED leuchten Weiß
  • neuer ESP ohne Programmierung / LED leuchten Weiß
  • ohne ESP - Pin 5Vin nach D1/D2/D3/D5/D6 und D7 verbunden / LED leuchten in den korrekten Farben

Somit scheint das Board keinen Fehler zu haben. Warum die LED`s jetzt alle gleichzeitig leuchten verstehe ich nicht.

Programm war das Gleiche. Dann nur alle Pins auf LOW gestellt ohne weiteren Code, bzw Code nur mit Setup und Loop und es leuchten immer alle LED`s.

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

const char* ssid = "WiFii";
const char* password = "xxxxxxxxxxxxx";  

// Port für den Server
WiFiServer server(80);

// Variabel für die Webseitenantwort
String header;

// Status der einzelnen Variabeln auf der Hohmpage
String blau1PinStat = "off";
String rot1PinStat = "off";
String gruen1PinStat = "off";
String blau2PinStat = "off";
String rot2PinStat = "off";
String gruen2PinStat = "off";


/* 
PinBelegung D1 MIni ESP8266

D0 = 16 HIGH beim booten / kein PWM und I2C
D1 =  5 HIGH beim booten / 
D2 =  4
D3 =  0
D4 =  2 Kann nicht botten wenn auf LOW
D5 = 14 SPI
D6 = 12 SPI
D7 = 13 SPI 
D8 = 15 SPI / Kann nicht booten wenn auf HIGH 
RX =  3 HIGH beim booten / Serieller Pin zum Senden von Daten 
TX =  1 HIGH beim booten / Serieller Pin zum Empfang von Daten
A0 = nur Eingang
*/

const int blau1Pin = 14;
const int rot1Pin = 12;
const int gruen1Pin = 5;
const int blau2Pin = 4;
const int rot2Pin = 0;
const int gruen2Pin = 13;

int rot = 0;
int gruen = 0;
int blau = 0;
int farbe = 0;

int schleife = 1;


// Aktuelle Zeit
unsigned long currentTime = millis();
// Zeitwert
unsigned long previousTime = 0;
// Zeitdifferenz die vergehen soll
const long timeoutTime = 50;


void herz(int frb1, int frb2, int frb3, int frb4, int frb5, int frb6) {
  analogWrite(rot1Pin, frb1);
  analogWrite(gruen1Pin, frb2);
  analogWrite(blau1Pin, frb3);
  analogWrite(rot2Pin, frb4);
  analogWrite(gruen2Pin, frb5);
  analogWrite(blau2Pin, frb6);
  delay(10);
}

void farbWechsel() {
    farbe++;
  
  int y = farbe / 255;
  int z = farbe % 255;

  switch (y) {
    case 0:  // von weiß nach rot
      herz(255, 255 - z, 255 - z, 255, 255 - z, 255 - z);
      break;
    case 1:  // von rot nach
      herz(255, z, 0, 255, z, 0);
      break;
    case 2:  // von  nach gruen
      herz(255 - z, 255, 0, 255 - z, 255, 0);
      break;
    case 3:  // von gruen nach
      herz(0, 255, z, 0, 255, z);
      break;
    case 4:  // von nach blau
      herz(0, 255 - z, 255, 0, 255 - z, 255);
      break;
    case 5:
      herz(z, 0, 255, z, 0, 255);
      break;
    case 6:
      herz(255, z, 255, 255, z, 255);
      break;
    case 7:  // von weiß nach rot
      herz(255, 255 - z, 255 - z, 255, 255 - z, 255 - z);
      break;
  }
}

void aus(){
  analogWrite(rot1Pin, 0);
  analogWrite(gruen1Pin, 0);
  analogWrite(blau1Pin, 0);
  analogWrite(rot2Pin, 0);
  analogWrite(gruen2Pin, 0);
  analogWrite(blau2Pin, 0);
}


void setup() {
  Serial.begin(115200);

  // Pin als Ausgang festlegen
  pinMode(rot1Pin, OUTPUT);
  pinMode(gruen1Pin, OUTPUT);
  pinMode(blau1Pin, OUTPUT);
  pinMode(rot2Pin, OUTPUT);
  pinMode(gruen2Pin, OUTPUT);
  pinMode(blau2Pin, OUTPUT);


  // Ausgangspin auf LOW und HIGH setzen
  digitalWrite(rot1Pin, HIGH);
  digitalWrite(gruen1Pin, LOW);
  digitalWrite(blau1Pin, LOW);
  digitalWrite(rot2Pin, HIGH);
  digitalWrite(gruen2Pin, LOW);
  digitalWrite(blau2Pin, LOW);

  // Wifi starten
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  ArduinoOTA.setHostname("ESP8266Herz");
  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH) {
      type = "sketch";
    } else {  // U_FS
      type = "filesystem";
    }

    // NOTE: if updating FS this would be the place to unmount FS using FS.end()
    Serial.println("Start updating " + type);
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });

  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) {
      Serial.println("Auth Failed");
    } else if (error == OTA_BEGIN_ERROR) {
      Serial.println("Begin Failed");
    } else if (error == OTA_CONNECT_ERROR) {
      Serial.println("Connect Failed");
    } else if (error == OTA_RECEIVE_ERROR) {
      Serial.println("Receive Failed");
    } else if (error == OTA_END_ERROR) {
      Serial.println("End Failed");
    }
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  digitalWrite(rot1Pin, LOW);
  digitalWrite(gruen1Pin, HIGH);
  digitalWrite(blau1Pin, LOW);
  digitalWrite(rot2Pin, LOW);
  digitalWrite(gruen2Pin, HIGH);
  digitalWrite(blau2Pin, LOW);

  
}



void loop() {
  ArduinoOTA.handle();
  switch (schleife){
    case 0:
      aus();
      break;
    case 1:
      if (currentTime + timeoutTime < millis()) {
        currentTime = millis();
        if (farbe < 2040){
          farbWechsel();
        }
        else{
          farbe = 0;
          farbWechsel();
        }
      }
      break;
    
  }
}

Lötbrücke irgendwo am PCB nach der Reparatur.

Welches Kabel, welche Buchse ?
Da hast du evtl. etwas falsch angelötet.

Danke für die Antwort.

Buchse für die Spannungsversorgung. 12V Eingang. In dem Fall würde überhaupt nichts leuchten.

Ok, dann zeig uns bitte ein Schaltbild, wie du alles verdrahtet hast.
Wir möchten auch sehen, wie du die Leds ansteuerst.
12 Volt Led an ESP8266 ist nicht trivial.

Ich hoffe es ist so korrekt wiedergegeben. An der Verdrahtung hatte ich ja nichts geändert und es funktionierte ja bereits über mehrere Monate ohne Probleme. Hatte eine Klemmbuchse mit 2 Drähten an eine Buchse 5.5 angeschlossen und dort sind die Drähte abgegangen.

Ein Bild sagt mehr als 1000 Worte

Altes Ostfriesen-Sprichwort :wink:

Was genau soll Heater sein ?

Das ist dann starker Zufall, da du die Transistoren falsch anschließt.
Vermutlich reicht die Basisspannung nicht, um diese sauber durchzusteuern.

Der Emitter des NPN muss auf GND und die Leds in die Kollektorleitung.
Das wird vermutlich bei den von dir verwendeten Leds schwer gehen.

Und ich vermisse Vorwiderstände für die Leds.

Bedingt durch Toleranzen und Spannungs- und Temperaturunterschiede wir der Fehler verursacht worden sein.

Heater sollen die Widerstände darstellen. Wie gesagt ist der Schaltplan schnell zusammengeschustert. Vorwiderstände müssen keine sein, da es sich hier um LED-Stripes handelt und dort alles entsprechend verlötet ist. Versorge alles per 12V und gehe über den Step-Down-Wandler mit 5V an den Arduino. Dieser steuert über die Transistoren dann die 12V Versorgung der LED-Stripes an.

Es hat ja alles über Monate funktioniert und ich habe nur den Stecker der Stromversorgung repariert Platine wurde nicht verändert und nach Prüfung ist sie voll funktionsfähig.

Darum stehe ich hier vor einem riesen Rätsel.

Die Begründung habe ich dir in Post # 8 geschrieben.
Schließe die Transistoren und Leds richtig an und es wird funktionieren.

Da hast du oben aber etwas anderes geschrieben.

Nachtrag:
Im übrigen kannst du deinen Fehler auch messtechnisch ermitteln.
Miss mal die Spannung über jeweils eine Led wenn der Transistor durchschaltet. Die liegt vermutlich über 2 Volt und ist damit zu hoch um den Transistor richtig durchzusteuern.

Danke für die vielen Ratschläge. Werde die kommenden Tage mal einiges durchtesten und mich dann zurückmelden.

Naja....mit dem Testen ist das so eine Sache.
Ich würde einfach mal genau nachmessen und anhand des Ergebnisses alles "richtig" bauen.

Ich hoffe mehrere Fehler im Schaltplan sind den nachlässig erstellten Schaltplan geschuldet.

Der Step down ist (laut Schaltbild) falsch angeschlossen und nicht für 5V.

Bist Du sicher daß die RGB Streifen einen gemeinsamen Minuspol haben? Wenn ja ist die ganze Ansteuerung durch die Transistoren falsch (kann nicht funktioneren)

Bitte kontrolliere und korrigiere den Schaltplan, damit wir sicher sind, Dir Schaltungsfehler aufzuzeigen und nicht Zeichenfehler des Schaltplans.

Grüße Uwe

Es funktioniert wieder. :slight_smile:

Was den obigen Schaltplan angeht, so habe ich den selben Fehler gemacht wie bei dem Entwurf der Schaltung. Der 12V RGB Streifen kommt vor die Transitoren. Also +12V, dann LED und anschließend an den Kollektor um zum Schluss mit dem Minus-Pol verbunden zu werden. Der Step-Down-Wandler ist aus Ermangelung der Programmkenntnis von dem Schaltungsplan der Verkehrte. Uwe du hast es vollkommen korrekt erkannt.

So nun zu meinem Ergebnis. Durch das viele Probieren ist einiges fehlerhaft gewesen.

  • Step-Down-Wandler verkehrt eingestellt.
  • 1 Transistor defekt
  • Multimeter lassen sich keine Widerstände mehr messen
  • Lötbrücke auf der Platine

Die Ursache konnte ich leider nicht finden, bin aber froh das es jetzt wieder funktioniert und zwar so wie der Ursprungszustand war läuft es wieder.

Kann es sein, dass du dich mit deinem Usernamen auch vertan hast ?
Sollte der nicht besser "farig" heißen ?
Mir kommt dein kompletter Thread mittlerweile sehr unverständlich bis unüberlegt vor.
Von was für Kondensatoren schreibst du und wie genau sieht dein Schaltbild denn nun tatsächlich aus.
Dieses wirre hin und her ist nicht zu verstehen.

Und schön, dass du uns mit deinen falschen Angaben versucht hast in die Irre zu treiben.

Ja, flarig bitte zeichne ein neues Schaltbild das die Korrekturen enthält und der jetzigen Schaltung entspricht.

Grüße Uwe

Hallo Uwe,
füge doch bitte noch ein @flarig ein.
Ohne dem, weiß er nicht, dass er gemeint ist.

Sorry, aber das bezweifel ich immer noch, auch weil du kein richtiges, aktuelles Schaltbild zeigst. Denn so, wie du schreibst (Ursprungszustand) kann es nicht funktionieren.
Also bitte zeige uns den neuen, reparierten Zustand.

Das passiert, wenn die falsch angeschlossen (dein Schaltbild) werden.

@Hotsystems entschuldige bitte die Missverständnisse, aber ich bin extrem knapp mit der Zeit und einem Kleinkind nebenbei ist es nicht unbedingt einfach es in Ruhe zu machen. Den Kondensator habe ich oben korrigiert und wieder einen Transistor draus gemacht. Mein Fehler in der Hektik.

Hier per Paint das Schaltbild so wie es vor dem Fehler und auch wieder nach dem behobenen Fehler ist.

Ich vermute mal, dass durch das abmontieren und wieder anbringen an der Wand, irgendwo der Fehler verursacht wurde. Hatte die 2 Tage über stückweise die Schaltung zerlegt und wieder zusammengebaut. Danach lief es wieder einwandfrei.

Wie ihr auch anhand des Codes sehen könnt bin ich noch beim programmieren um die Funktionen so zu schreiben wie ich sie brauche.

Ich danke für eure Geduld und Hilfe. Es war nie meine Absicht eure Zeit zu verschwenden.

Ok, so sieht es auch verständlich und fast richtig aus.
Allerdings gehören zu einem endgültigen Schaltbild auch alle Werte bzw. Bauteilnamen sowie die GPIO Nummern.

Und wo bekommst du 320 Volt her ?

2 Likes