Go Down

Topic: Schrankbeleuchtung - Arduino hängt sich auf (Read 3010 times) previous topic - next topic

karatebietz

Hey folks!

Kurzes Update von mir:

Mit nur einem Schaltkreis und "and" durch "&&" Ersetzung ist genau das gleiche Problem wieder aufgetreten. Wieder nach ca. 1.5 Tagen (genau kann ich es nicht sagen, da ich zwischendurch auf Arbeit bin ;))
Zuvor hatte ich den Schalter relativ oft in verschiedenen Intervallen betätigt - ohne Ergebnis. D.h. das ganze ist wohl ziehmlich sicher ein Zeitproblem?!

PIN 13 hat dabei nicht mehr geleuchtet, d.h. da lief nix mehr beim Arduino Nano...

Ein kurzes Resetknopfdrücken und alles lief wieder 1a  :smiley-confuse:

HiDAS liest sich aber nicht nach einem Arduino-Hänger - nach einer Spannungswiederkehr muß der Arduino 'neu booten' und mit dem Sketch von Vorne anfangen, also bei DIr dann wohl Hochdimmen, da die Türen (noch) offen sind.

Spaßeshalber einen Kondensator am Arduino zwischen +5V und GND einsetzen?

Ist das, um Spannungsschwankungen abzufangen?! Welche Kondensatorgröße würdest Du da empfehlen?
(Mal ganz kindlich naiv gefragt: Wieso hilft hier ein "Reset" beim Arduino, wenn der Arduino kurzzeitig zu viel/wenig Spannung sieht? Und ein Netzsteckerziehen nicht?!)

Danke euch! (mal wieder :) )

HotSystems

Da wir noch keine Bauteilwerte haben, können wir schlecht was dazu sagen.

Also bitte Bauteildaten liefern.

Ist der gepostete Sketch noch aktuell ?
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Doc_Arduino

#17
Nov 01, 2018, 09:00 pm Last Edit: Nov 01, 2018, 09:02 pm by Doc_Arduino
Hallo,

wird wohl dann eher an der Spannungsversorgung liegen. Nur leider sagst du nicht wie du deinen Nano versorgst. Wie genau und womit erzeugst du die 5V aus den 24V? Welche Leistung hat das Netzteil und welche Leistung haben die LED Streifen? Verkabelung? Klingeldraht oder armdicke Kupferschienen?

Beim Reset wird die Versorgungsspannung anscheinend ausreichend stabil sein. Beim Stecker raus/rein eben nicht.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

HotSystems

@TO
Ist es jetzt so schwer, die nötigen Informationen zuliefern ?
Wie sollen wir helfen, wenn du die Fragen nicht beantwortest ?
Du sitzt allein vor deiner merkwürdigen Schaltung.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

wno158

Ich hätte da mal eine naive Hardware-Frage an die Experten:
Verschiebt der TO nicht mit den INPUT_PULLUP für die Schalter den GND für den Step-Down-Regler?

Wer weiß, was der dann damit macht - vielleicht stellt er die Arbeit ein. Das würde zumindest das Erlöschen der BUILTIN-LED im Fehlerfall erklären.


Gruß Walter
Gruß Walter

HotSystems

Neee, da wird nix verschoben. Zumindest nicht der GND. Die Pullups legen nur ständig einen definierten Wert auf den Eingang.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

gregorss

Ich tippe auf ein Problem mit der Energieversorgung. Ein unterversorgter Nano zeigte hier erst kürzlich einen ebenso seltsamen Hänger.

Gruß

Gregor
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

HotSystems

Schade, dass hier keine Informationen mehr kommen.
Ich hätte zu gerne gewusst, wo das Problem liegt.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

uwefed

Wenn der Fehler alle 1-2 Tage auftritt, ist es schwierig nach 1.nem Tag zu antworten.
Grüße Uwe

HotSystems

Wenn der Fehler alle 1-2 Tage auftritt, ist es schwierig nach 1.nem Tag zu antworten.
Grüße Uwe
Da hast du Recht.
Es geht hier aber um Fragen, die schon länger gestellt wurden.
Und du weist ja, ich bin sehr ungeduldig ;)
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

karatebietz

Hey guys,

Sorry, dass ihr warten musstet. Aber ich bin beruflich derzeit sehr eingespannt/unterwegs. Aber nun ist ja Freitag ;)

Also hier nun die Komponenten, die ich verbaut habe:

- LED-Streifen: Je Schaltkreis 5 Streifen á 14 weiße LEDs (24Vdc)
- Widerstände: jeweils 10kOhm
- Transistoren: TIP120 (Datenblatt TIP 120)
- Netzteil: 24V mit 1.0A und max. 24W (SYS 1308-2424-W2E - kam mit den LED-Streifen zusammen)
- Kabel: 2x0.14mm² Zwillingslitze (Genau genommen überwiegend diese hier: ZL214SWW)
- Step-Down: Sollte ein "Pololu 5V Step-Up/Step-Down Voltage Regulator S18V20F5" sein. Ganz sicher bin ich hier leider nicht, da mir die Typenbezeichnung auf der Platine nicht eindeutig erscheint und ich die Verpackung nicht mehr habe (Hier finde ich alle diese hier:reg14a 0J7765). Gegeben wurde er mir aber als "5V-Output für Arduino" und am Ausgang liegen laut Multimeter zumindest "4.98" V an. Falls es euch hilft: Hier noch 2 Bilder ;)


Der Code ist im Wesentlichen noch derselbe (außer, dass 1 Schaltkreis auskommentiert wurde und "and" zu "&&" wurde - und PIN13 nach Empfehlung aktiviert wurde). Vollständigkeitshalber aber hier nochmal richtig:


Code: [Select]



//-----------------------------------------------------
//Schaltkreise 1 und 2 sind identisch und unterscheiden sich nur durch Zahl 1 bzw. 2
//-----------------------------------------------------

#define Transistor1 3 //Transistor für Schaltkreis 1 an PIN 3 angeschlossen (=PWM-Pin)
#define Transistor2 5
#define Schalter1 10   //Schalter für Schaltkreis 1 an Pin 10
#define Schalter2 8


boolean SwitchWasClosed1 = true;    //registriere, ob Schalter schon länger offen ist
boolean SwitchWasClosed2 = true;

unsigned long startMillis1; //Startzeit für neue Periode
unsigned long startMillis2;
unsigned long startFadeDownMillis1; //Startzeit für Fadingeffekt (Nur bei Licht-Aus)
unsigned long startFadeDownMillis2;

byte brightness1 = 0; //Anfangshelligkeit
byte brightness2 = 0;


//Diese Parameter sind für beide Schaltkreise gleich und bleiben konstant

const unsigned long fadingPeriod = 15; //Verzögerungszeit für Fading - je groesser, desto langsamer
const unsigned long maxPeriod = 720000; //Maximale Leuchtdauer (in ms) -> 12 min
byte maxBrightness = 250; // maximale Helligkeit (255=max)




void setup() {
  // put your setup code here, to run once:

  pinMode(Transistor1, OUTPUT);
  pinMode(Transistor2, OUTPUT);
  pinMode(Schalter1, INPUT_PULLUP);
  pinMode(Schalter2, INPUT_PULLUP);
  startMillis1 = millis(); //initial Startzeit;
  startMillis2 = millis();
  startFadeDownMillis1 = millis();   //initiale Startzeit für downfading (damit es überhaupt losgeht)
  startFadeDownMillis2 = millis();
  pinMode(LED_BUILTIN, OUTPUT);
}




void loop() {
  // put your main code here, to run repeatedly:

  digitalWrite (LED_BUILTIN, ((int)millis() & 0x200) != 0 ); // blinkt mit 1,024 Hz - zum Debugging: Läuft Arduino noch?
  schalter1();    //Durchführung/Überwachung von Schalter 1
  //  schalter2();    //Durchführung/Überwachung von Schalter 2
}


//___________________________Schalter 1___________________________


void schalter1() {
  if (digitalRead(Schalter1) == LOW)  //Zusatz if-Bedingung wird benötigt um Timer neu zu setzen + Zustand zwischen fading an und fading aus zu unterscheiden (sonst Licht-An-Licht-Aus-Loop)
  {
    if (brightness1 > 5) //wenn Licht vorher an war, fading Licht aus (sonst tue nichts)
    {
      fadeDown1();
    }

    if (brightness1 <= 5) //Wenn Licht dunkel genug, schalte ganz aus und setze Variablen auf default zurück
    {
      SwitchWasClosed1 = true; // Schalter war zu --> "fading an" Schleife wird als nächstes durchlaufen
      digitalWrite(Transistor1, LOW);  //Setze Transistor auf definierten Wert "0" zurück
      brightness1 = 0; //setze Anfangsbrightness wieder auf 0
    }
  }

  else //Wenn Schalter geschlossen wird, mache Licht an
  {
    //if (brightness1 <= maxBrightness and SwitchWasClosed1 == true and millis() - startMillis1 >= fadingPeriod) //wenn erfüllt: noch keine mximale Helligkeit + Schalter gerade geöffnet worden + Zeit für nächsten Fading-Schritt
    if (brightness1 <= maxBrightness && SwitchWasClosed1 == true && millis() - startMillis1 >= fadingPeriod) //wenn erfüllt: noch keine mximale Helligkeit + Schalter gerade geöffnet worden + Zeit für nächsten Fading-Schritt
    {
      analogWrite(Transistor1, brightness1); //setze Helligkeit
      brightness1++; //erhöhe Helligkeit (bis Maximum erreicht ist)
      startMillis1 = millis();  //setze aktuelle Zeit als neue Startzeit (um Fading zu erzielen)
    }


    if (millis() - startMillis1 >= maxPeriod) //wenn die maximale Wartezeit vorüber ist (Tür ist zu lange offen geblieben), wieder Licht aus (mit fading)
    {
      SwitchWasClosed1 = false;  //Sage, dass Schalter offen stehen geblieben ist -> lasse Licht aus (sonst loop im fading)

      fadeDown1();

      if (brightness1 <= 5) //Wenn minimale Helligkeit erreicht, muss Transistor auf LOW gezogen werden, sonst glimmen die LED weiter
      {
        digitalWrite(Transistor1, LOW);
      }

    }
  }


}


void fadeDown1() //Funktion zum Ausdimmen der LED an Schalter 1
{
  if (millis() - startFadeDownMillis1 >= fadingPeriod and brightness1 > 5)
  {
    analogWrite(Transistor1, brightness1); //setze Helligkeit
    brightness1--; //erhöhe Helligkeit bis Maximum erreicht
    startFadeDownMillis1 = millis();  //setze aktuelle Zeit als neue Startzeit fuer Downfading

  }
}

/*

  //___________________________Schalter 2___________________________


  void schalter2() {
  if (digitalRead(Schalter2) == LOW)  //Zusatz if-Bedingung wird benötigt um Timer neu zu setzen + Zustand zwischen fading an und fading aus zu unterscheiden (sonst Licht-An-Licht-Aus-Loop)
  {
    if (brightness2 > 5) //wenn Licht vorher an war, fading (sonst tue nichts)
    {
      fadeDown2();
    }

    if (brightness2 <= 5) //Wenn Licht dunkel, schalte ganz aus und setze Variablen auf default zurück
    {
      SwitchWasClosed2 = true; // Schalter war zu --> "fading an" Schleife wird als nächstes durchlaufen
      digitalWrite(Transistor2, LOW);  //Setze Transistor auf definierten Wert "0" zurück
      brightness2 = 0; //setze Anfangsbrightness wieder auf 0
    }
  }

  else //Wenn Schalter geöffnet wird, mache Licht an
  {
    if (brightness2 <= maxBrightness and SwitchWasClosed2 == true and millis() - startMillis2 >= fadingPeriod) //wenn erfüllt: noch keine mximale Helligkeit + Schalter grade geöffnet worden + Zeit für nächsten Fading-Schritt
    {
      analogWrite(Transistor2, brightness2); //setze Helligkeit
      brightness2++; //erhöhe Helligkeit bis Maximum erreicht
      startMillis2 = millis();  //setze aktuelle Zeit als neue Startzeit
    }


    if (millis() - startMillis2 >= maxPeriod) //wenn die maximale Wartezeit vorüber ist, wieder Licht aus (mit fading)
    {
      SwitchWasClosed2 = false;  //Sage, dass Schalter offen stehen geblieben ist -> lasse Licht aus (sonst loop im fading)

      fadeDown2();

      if (brightness2 <= 5) //Wenn minimale Helligkeit erreicht, muss Transistor auf LOW gezogen werden, sonst glimmen die LED weiter
      {
        digitalWrite(Transistor2, LOW);
      }

    }
  }


  }


  void fadeDown2() //Funktion zum Ausdimmen der LED
  {
  if (millis() - startFadeDownMillis2 >= fadingPeriod and brightness2 > 5)
  {
    analogWrite(Transistor2, brightness2); //setze Helligkeit
    brightness2--; //erhöhe Helligkeit bis Maximum erreicht
    startFadeDownMillis2 = millis();  //setze aktuelle Zeit als neue Startzeit fuer Downfadi



Beste Grüße - ich hoffe, das hilft euch wieder ein Stück weiter :)

HotSystems

#26
Nov 02, 2018, 10:26 pm Last Edit: Nov 02, 2018, 10:47 pm by HotSystems
Hast du denn mal den Strom gemessen, den deine Leds brauchen ?
Und nochmal der Tipp:
Setze einen Mosfet ein und du hast weniger Probleme.
Ich vermute, der Ausgang des Atmega328 wird überlastet. Auch wenn es erstmal nicht danach aussieht.

Edit:
Und damit du siehst, du bist nicht allein da. Ich habe seit heute Nachmittag, ca. gegen 14:00 Uhr einen Test mit einem Uno, deinem ersten Sketch, 2 Taster und 2 Leds laufen. Das ganze an 5 Volt.

Damit möchte ich prüfen, ob der Fehler am Sketch oder an deinem Aufbau (Hardware) liegt.

Zumindest kann ich feststellen, ob der Sketch fehlerfrei läuft oder sich aufhängt.
Ich werde berichten.


Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

HotSystems

1. Zwischenmeldung zu obigem Problem.

Bei mir läuft der Sketch am Uno seit dem einschalten fehlerfrei.

Und ich warte immer noch auf die Beantwortung meiner letzten Frage.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Doc_Arduino

#28
Nov 04, 2018, 11:37 am Last Edit: Nov 04, 2018, 11:44 am by Doc_Arduino
Hallo,

ohne Kenntnis der Leistungsaufnahme der LED Streifen fällt die Netzteilbeurteilung schwer.
Die Basisvorwiderstände deiner TIP120 sind 10k ?
Der 5V Pololu Regler ist aus meiner Sicht okay.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

karatebietz

Moin!

Wie cool, dass Du den Sketch in Realität nachprüfst! Danke!!! :)

Ich hatte gestern vergeblich versucht den Strom zu messen und wollte es heute nochmal in Ruhe machen. Aber irgendwie zeigt das Multimeter immer nur 0mA an. Da die LEDs leuchten, kann das ja nicht so ganz richtig sein :P Oh man...wie der erste Mensch :D Ich bin da also dran - kriege bloß keine belastbare Zahl...warum auch immer  :smiley-confuse:

Ich hab von nem Freund hier 2 MOSFETs bekommen, die da noch rumflogen. Mal ganz naiv gefragt: Kann ich die einfach stumpf gegen die Transistoren von mir tauschen oder muss da noch anderes rein/ausgetauscht werden? Sind "P36nf06" (wohl die hier: P36NF06)
Hintergrund ist, dass ich (dummerweise) schon alles auf eine Lochplatine gelötet habe und im Schrank alle Kabel etc. verlegt habe ::) (Ging ja eigentlich schon alles...vermeintlich... :smiley-sad: )


Die Basiswiderstände deiner TIP120 sind 10k ?
Jupp, die Widerstände sind 10k - zumindest war das meine Absicht und sagt auch das Multimeter ;)


Ich mach mich gleich noch mal ans Strommessen - kann ja eigentlich nicht so schwer sein  :smiley-confuse:  ::)

Viele Grüße,
Christian

Go Up