Go Down

Topic: WS2812 , KFZ Fussraum LED Steuerung mit Türkontakt und Zentralverriegelung (Read 4210 times) previous topic - next topic

Akropolis

Mal als Anregung, was in Deine Richtung gehen könnte, einschließlich Verbesserungspotential:

WOW..  Ich hab zu Danken.. echt genial! Es läuft schon so wie ich es möchte.
zuerst mal noch alle neuen befehle nachlesen und dein Code Studieren :)

Delay könnte ich noch durch millis ersetzen? ist zwar momentan nicht störend die 5 sek Delay MCU Pause. Es bleibt bei nur der LED Steuerung für den Nano.
Langsam ist Präzise und Präzise ist schnell ;)

Akropolis

habe versucht nach dem die Leds rot leuchten diese Aus zu schalten, (ohne erfolg) bis er ZVOpen Kontakt wieder einen Impuls bekommen hat soll der LED Modus ja ruhen.. sonst Batt leer :D

andere Frage.. gibt es einen Ruhe oder Schlafmodus für den Arduino Nano? obwohl der Standbystrom ja nicht gefärlich werden sollte? Habe eine extra grössere Ah Auto Batt installiert für solche spielereien..
Langsam ist Präzise und Präzise ist schnell ;)

uwefed

Wenn alle LED die gleiche Farbe haben sollen hat die Ansteuerbibliothek eine Funktion um alle LED auf die gleiche Farbe zus etzen.

Grüße Uwe

uwefed

andere Frage.. gibt es einen Ruhe oder Schlafmodus für den Arduino Nano? obwohl der Standbystrom ja nicht gefärlich werden sollte? Habe eine extra grössere Ah Auto Batt installiert für solche spielereien..
Gibt es aber bein NANO wenig sinnvoll da nur der Controller fast nichts mehr verbraucht, die restliche Elektronik aber schon.
Nimm einen Arduino MINI oder MINI PRO. Da ist nur der Controller drauf den Du schlafen legen kannst.
Außerdem mußt Du einen Spannungswandler aussuchen der wenig Ruhestrom verbraucht wenn die 5V Verbraucher schlafen.

Grüße Uw

Akropolis

Wenn alle LED die gleiche Farbe haben sollen hat die Ansteuerbibliothek eine Funktion um alle LED auf die gleiche Farbe zus etzen.

Grüße Uwe
das macht sinn :) wen ich 40 leds nehme von vorteil anstatt viel tippen
Langsam ist Präzise und Präzise ist schnell ;)

Akropolis

Gibt es aber bein NANO wenig sinnvoll da nur der Controller fast nichts mehr verbraucht, die restliche Elektronik aber schon.
Nimm einen Arduino MINI oder MINI PRO. Da ist nur der Controller drauf den Du schlafen legen kannst.
Außerdem mußt Du einen Spannungswandler aussuchen der wenig Ruhestrom verbraucht wenn die 5V Verbraucher schlafen.

Grüße Uw
was verbraucht den noch strom am Nano? Betriebs LED und der Bootloader vlt?
Langsam ist Präzise und Präzise ist schnell ;)

uwefed

Die LEDs und der FT232 (USB-serial converter).
Der Bootlaoder ist Software und darum nichts physisches das Strom verbrauchen könnte.

Der MINI hat keinen USB-serial Converter. Zum Upload brauchst Du einen USB-serial Converter den Du am MINI anstecken mußt, oder Du machst den Upload mittels eines ISP-Programmers.

Grüße Uwe

Akropolis

Die LEDs und der FT232 (USB-serial converter).
Der Bootlaoder ist Software und darum nichts physisches das Strom verbrauchen könnte.

Der MINI hat keinen USB-serial Converter. Zum Upload brauchst Du einen USB-serial Converter den Du am MINI anstecken mußt, oder Du machst den Upload mittels eines ISP-Programmers.

Grüße Uwe
acj ja du hast recht.. ich meinte ntürlich den ic baustein als bootloader :D ok hab mir mal mini s bestellt :) USBasp hab ich auch. Danke für die Infos
Langsam ist Präzise und Präzise ist schnell ;)

Akropolis

Ich krieg es nicht hin... duck :( nach paar stunden Lesen und Testen..

Wie schafft man es? Nachdem die LEDs Rot leuchteten (ZVClose),
-die Leds dauerhaft aus sind, anstatt auf weiss gedimmt zurück zu springen,
-bis das ZVOpen Signal wieder erkannt wird
-und erst dann wieder auf weiss gedimmt oder halt wen TK (Türkontakt) erkannt wird auf weiss hell sich einschalten.

Code: [Select]
#include <Adafruit_NeoPixel.h>
#include <Bounce2.h>
Bounce debTK = Bounce();
const byte TK = 7; //Das Wort „TK Türkontakt" steht jetzt für den Wert 7.
Bounce debZVOpen = Bounce();
const byte ZVOpen = 8; //Das Wort „ZVOpen Zentralverriegelungs Impuls oeffnen" steht jetzt für den Wert 8.
Bounce debZVClose = Bounce();
const byte ZVClose = 9; //Das Wort „ZVClose Zentralverriegelungs Impuls schliessen" steht jetzt für den Wert 9.

const byte LEDFussraum = 6;// LED Fussraum Bel.=Pin6
#define NUM_LEDS 6 // ws2812 LEDS conected
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS, LEDFussraum, NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode(TK, INPUT_PULLUP); //Der Pin mit dem TK Anschluss (Pin 7) ist jetzt ein Eingang.
  debTK.attach(TK);
  debTK.interval(30);
  pinMode(ZVOpen, INPUT_PULLUP); //Der Pin mit dem ZVOpen Anschluss (Pin 8) ist jetzt ein Eingang.
  debZVOpen.attach(ZVOpen);
  debZVOpen.interval(30);
  pinMode(ZVClose, INPUT_PULLUP); //Der Pin mit dem ZVClose Anschluss (Pin 9) ist jetzt ein Eingang.
  debZVClose.attach(ZVClose);
  debZVClose.interval(30);
  strip1.begin();
}

void farbausgabe(byte r, byte g, byte b)
{
  for (byte j = 0; j < NUM_LEDS; j++)
  {
    strip1.setPixelColor(j, strip1.Color(r, g, b));
  }
  strip1.show();
}

void loop() {
  debTK.update();
  debZVOpen.update();
  debZVClose.update();
  bool verzoegerung1 = 0;
  bool verzoegerung2 = 0;
  byte r, g, b;

 if (debTK.read())
  { r = g = b = 30; // weiss gedimmt
  }
 if (debZVClose.fell())
  { r = 255; g = b = 0; // Rot
    verzoegerung2 = 1;
  }
 if (debZVOpen.fell())
  { r = 0; g = 255; b = 0; // Gruen
    verzoegerung1 = 1;
  }
 if (!debTK.read())
  { r = g = b = 255; // weiss hell
  }
 
  farbausgabe(r, g, b);
 if (verzoegerung1)
  {
    delay(5000);
    verzoegerung1 = 0;
  }
 if (verzoegerung2)
  {
    delay(8000);
    verzoegerung2 = 0;
  } 
 }
Langsam ist Präzise und Präzise ist schnell ;)

Tommy56

Teile das Problem doch erst mal auf.

1. Prüfe, ob Du alle Eingangssignale (TK usw.) sauber bekommst.
2. Erstelle einen Sketch mit dem Du in einzelnen Funktionen den gewünschten Zustand Deiner LED abbildest.

Wenn das beides funktioniert, dann kannst Du es zusammen packen.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Akropolis

Teile das Problem doch erst mal auf.

1. Prüfe, ob Du alle Eingangssignale (TK usw.) sauber bekommst.
2. Erstelle einen Sketch mit dem Du in einzelnen Funktionen den gewünschten Zustand Deiner LED abbildest.

Wenn das beides funktioniert, dann kannst Du es zusammen packen.

Gruß Tommy
Der code Funktioniert ja soweit.. Ich teste es nicht im Auto sondern zuhause in der Werkstatt.

Wen ich die Kontakte anspreche mit 5V Reagieren alle und schalten wie Sie sollen, bis auf mein genanntes Problem oder eher Wunsch :D
Langsam ist Präzise und Präzise ist schnell ;)

Verzweifler

Noch mal so nebenbei zum Stromsparen:

Jede WS2812 haben so ~1mA Stromverbrauch, auch wenn sie nicht leuchten.

Die Leds müssten also per FET oder Relais vom Strom genommen werden.

Akropolis

Fahrzeugkontakte lassen sich mittels Kleinrelais oder Optokoppler gefahrlos an den Arduino anschließen. Da mechanische Kontakte prellen, vermisse ich Gegenmaßnahmen.
Du willst es, Du kriegst es! Aus Faulheit lasse ich die Höflichkeit mal verkümmern.


Irgendwie bist du der, der sich mit deinem Code auskennt und Helfen Kann :D
Ich habe wirklich viel probiert mit bounce2 befehlen oder Variablen getestet, Entweder bin ich noch viiiiel zu blöd, es ist nicht einfach oder  oder oder

Code: [Select]
if (debZVClose.fell())
  { r = 255; g = b = 0; // Rot
    verzoegerung2 = 1;
  }
 else if (debZVClose.fell())
  { r = g = b = 0; // Rot
  }


schon zu schwer :D ?! :/   das Ausschalten der Leds klappt nicht.. Springt im Code immer wieder zurück auf weiss gedimmt. 

zusätzlich habe ich noch den Pin Zündplus eingefügt, anhand dieses Signals möchte ich dem Arduino sagen, der am Dauerplus angeschlossen ist, schalte nach dem ZVClose Rot leuchten ein Arduino Board Pin High und aktiviere damit ein Relais welches die Leds vom Netz trennt :) ähnlich wie ein nachlauf Relais.

die Bounce Library ist schlecht erklärt finde ich :) Das habe ich auf anderen seiten gefunden:
fell() and rise() are also filtered.

read() returns the filtered state of the input : HIGH or LOW

fell() returns 1 if the filtered state went from HIGH to LOW since the last update. Returns 0 if not.

rose()  returns 1 if the filtered state went from LOW to HIGH since the last update. Returns 0 if not.

If you are only interested in state changes use fell() and rose().
Langsam ist Präzise und Präzise ist schnell ;)

Akropolis

Code: [Select]
if (debZVClose.fell())
  { r = 255; g = b = 0; // Rot
    verzoegerung2 = 1;
    r = g = b = 0; // Rot
  }


Warum geht das nicht ? ON/OFF schaltung

so überspringt er ON und geht direkt OFF wen der ZVClose Kontakt sein signal bekommt!
Die verzögerung nimmt er allerdings noch mit.. 8 Sek. OFF und geht dann wieder auf weiss gedimmt zurück.

Es liegt wohl an dem ablauf der IF befehle?

Hilfeeeeee
Langsam ist Präzise und Präzise ist schnell ;)

Akropolis

OT: das wird nicht rot:

Code: [Select]

r = g = b = 0; // Rot



soll es dort auch nicht... sollen OFF sein. fehlt das wort OFF nur

Code: [Select]

r = g = b = 0; // Rot OFF



Code: [Select]
if (debZVClose.fell())
  { r = 255; g = b = 0; // Rot
    verzoegerung2 = 1;
    r = g = b = 0; // Rot OFF
  }
Langsam ist Präzise und Präzise ist schnell ;)

Go Up