LED-Zustandsanzeige / Übersetzer

Hallo,

Ich brauche eine Schaltung bzw. Programm was mir den Zustand einer Alarmanlage anzeigt. Genauer
gesagt muss das Programm das leuchten bzw. blinken einer der Zustands-LED "übersetzten".

Folgende Zustände werden durch die eingebaute LED (Zone Status) angezeigt:

AUS --> unscharf
AN --> Austrittsverzögerung aktiv (60Sek.) / Fehler in Alarmzone durch offenes Fenster bzw. Tür
BLINKT --> Austrittsverzögerung aktiv (60 Sek.) / Alarmzonen OK
BLINKT 2 x pro Sekunde --> Alarmanlage scharf
BLINKT Schnell --> Alarmfall liegt vor.

Diese eingebaute LED hat einen weiteren Anschluss so dass man noch mehrere LEDs anschliessen kann z.B. in eine Wand oder ähnlches.
An diese Klemme möchte ich einen Optokoppler anschliessen so das der µC quasi mitlesen kann.

Die "dekodierten" Signale sollen entwerder auf mehrere LEDS, also z.B.

LED1 (grün) --> unscharf
LED2 (gelb) --> AVZ aktiv / Fehler in Alarmzone
LED3 (orange) --> AVZ aktiv / Alarmzonen OK
LED4 (Rot) --> Anlage scharf
LED5 (blau) --> Alarmfall liegt vor

Oder man lässt sich die Zustände auf einer LCD Anzeige anzeigen (16x1 oder so)

Desweiteren sollen durch die dekodierten Signale (Anlage scharf/Alarmfall liegt vor / unscharf ) weitere Aktionen ausgelöst werden. (Signal an GSM Sender)

Mir geht es aber erst mal um den Programmkern, also die "übersetzung" der LED Signale.

Wie kann man das am besten lösen?

LG

Indem Du als erstes für die verschiedenen Blinkzustände sehr genau die Zeiten ermittelst und Diese auf einem Zeitdiagramm darstellst. Je genauer, desto einfacher wird Dir später die Unterscheidung der Zustände.

Gruß Tommy

Nun ja eine Signal / Zeitangabe ist ja vorhanden (blinkt 2x pro Sekunde). Die anderen Signale sind entweder statisch (an/aus) oder blinken halt schneller als 2x in der Sekunde.

Mit diesen Angaben wirst Du nie ein lauffähiges Programm bauen können.

Was heißt 2 mal in der Sekunde? Alle halbe Sekunde, 1/10 Sekunde Abstand, wie lange. Du mußt das ermitteln, um die Zustände unterscheiden zu können.

Aber wenn Dir die Ermittlung dieser Zeiten schon zu viel ist, solltest Du das Projekt einstampfen, da es dann nicht realisierbar ist.
Du bist der Einzige, der vor der Kiste sitzt und diese Werte bestimmen kann.

Gruß Tommy

Bajazzo:
BLINKT --> Austrittsverzögerung aktiv (60 Sek.) / Alarmzonen OK
BLINKT 2 x pro Sekunde --> Alarmanlage scharf
BLINKT Schnell --> Alarmfall liegt vor.

Bajazzo:
Nun ja eine Signal / Zeitangabe ist ja vorhanden (blinkt 2x pro Sekunde). Die anderen Signale sind entweder statisch (an/aus) oder blinken halt schneller als 2x in der Sekunde.

Diese Aussagen wiedersprechen sich oder sind falsch beschrieben. Ich stimme daher Tommy zu.

Ich kann nur das widergeben wie es in der Beschreibung steht. ( Seite 14 )
http://www.produktinfo.conrad.com/datenblaetter/750000-774999/752181-an-01-ml-6_ZONEN_ALARMANLAGE_de_en_fr_nl.pdf

Wenn es nicht anders geht muss ich halt die Signale mal aufzeichnen.

Nur ein Gedanke .Weiß nicht ob sich ohne weiteres umsetzen läßt.
Wenn mann PWM benutzen würde hätte mann doch 5 verscheidene Spannungen für einen analoge Eingang und könnte die dann weiterverarbeiten. Oder liege ich mit meiner idee total daneben?

mfg
Thorsten4171

Hi

Schnelles Blinken mit 50% und langsames Blinken mit 50% ergibt in beiden Fällen ca. 50% Spannung - denke, So kommen wir nicht ans Ziel.
Es muß klar sein, wie schnell 'schnell' nun ist bzw. wie die einzelnen Zeiten der Blink-Sequenzen aussehen.

Ein Problem wird werden, Das mit genügend 'Luft' zu programmieren, daß das langsame Blinken auch noch mit 430ms statt den erhofften 500ms richtig erkannt wird.

MfG

Hätte jetzt gedacht blinkt 7mal/s über Optokoppler c aufladen dann zb. 3V. Blinkt 2mal/s an C nur zb.2,5V
Schade eigentlich hörte sich für mich im ersten Moment gut an.
Danke für den Hinweis.

mfG

Bajazzo:
Ich kann nur das widergeben wie es in der Beschreibung steht. ( Seite 14 )
http://www.produktinfo.conrad.com/datenblaetter/750000-774999/752181-an-01-ml-6_ZONEN_ALARMANLAGE_de_en_fr_nl.pdf

Wenn es nicht anders geht muss ich halt die Signale mal aufzeichnen.

Genau das sage ich Dir doch seit Posting #2.

Gruß Tommy

Ich dachte da mehr daran die Impulse pro Sekunde zu zählen. Das schnelle blinken ist definitiv mehr als 2 mal pro Sekunde. Ich muss aber zugeben das es mir wohler wäre wenn ich die Signalzeiten wüsste.
Die Anlage selbst ist in einem Wanderheim installiert und auch nicht "mal eben" erreichbar. Läuft ja auch soweit. Nur einige Personen (älteres Semester) die den Wochenenddienst übernehmen kommen mit der Anlage nicht ganz klar, kommen mit den Signalen halt nicht zurecht. Da hatte ich halt die Idee die LED-Signale zu "übersetzen". und auf einem Display anzuzeigen oder halt durch einzelne Leds.

Wenn dies ein falscher Ansatz ist sagt es mir bitte.

Ein Beispielsketch zum zählen ist dies:

// Impulszähler
// Gibt die Impulse pro Sekunde 
// des Spannungsignals an Pin 7 aus 
//-------------------------
int pin = 7;
unsigned long N;          //Anzahl der Impulse
unsigned long T;          //Zeitintervall in us
unsigned long time;       //Startzeit
 
void setup(){
  Serial.begin(9600);
  pinMode(pin, INPUT);
  T = 1e6;
}
 
void loop(){
  N = 0; 
  time = micros();
  do{  
     if (pulseIn(pin, HIGH)>0) N++;
    }
  while( micros() < (time+T) ); 
  Serial.println(N);
}

Mich hat die Variante Impuls in Spannung nicht losgelassen.Bin auf den LM2907 gestoßen.
Ein f/U Konverter.Werde mal so ein Teil ordern kostet nur ein paar cent und experimentieren.

Tommy56:
Was heißt 2 mal in der Sekunde? Alle halbe Sekunde, 1/10 Sekunde Abstand, wie lange. Du mußt das ermitteln, um die Zustände unterscheiden zu können.

Zwei Wechsel von High nach Low (oder von Low nach High) in einer Sekunde.

Das ist völlig unabhängig vom Tastverhältnis.

Bajazzo:
Ich dachte da mehr daran die Impulse pro Sekunde zu zählen.

Das wäre auch mein Ansatz. Du misst mit Hilfe von millis() jeweils in einem Interval von einer Sekunde. In der Zeit zählst du die Flankenwechsel. Du liest den digitalen Eingang und vergleichst mit dem vorherigen Zustand. Beim Wechsel zählst du hoch. PulsIn ist dafür nicht geeignet, da es blockiert (ähnlich wie delay) bis ein Signal kommt oder eine Sekunde abgelaufen ist. Am besten prüfst du den Zustand der Alarmanlage zweimal hintereinander, damit es durch Zustandswechsel während der Messung nicht zu Fehlmeldungen kommt.

Bajazzo:
Ich dachte da mehr daran die Impulse pro Sekunde zu zählen. Das schnelle blinken ist definitiv mehr als 2 mal pro Sekunde. Ich muss aber zugeben das es mir wohler wäre wenn ich die Signalzeiten wüsste.

Abläufe, die Dein Gehirn intuitiv erfaßt, sind per Programm manchmal nur schwer faßbar. Was Dein Auge sieht, wird durch mehrere Filter gejagt, einer Mustererkennung unterzogen und mit Deinen Erfahrungen verglichen. Zumindest könnte man sich das in einem Computermodell so vorstellen.

Beim Arduino mußt Du kleinere Brötchen backen und ermittelte Signalzeiten vergleichen.

Bajazzo:
Die Anlage selbst ist in einem Wanderheim installiert und auch nicht "mal eben" erreichbar.

Dann solltest Du mit einem zweiten Arduino die Anlage simulieren, um Dein Programm auf dem Schreibtisch testen zu können. Um die Zeiten eines Leuchtturms, den ich nachgebaut habe, zu ermitteln, nutzte ich ein Video. Mit einem Videobearbeitungsprogramm kann man schön Zeiten messen.

Bajazzo:
Wenn dies ein falscher Ansatz ist sagt es mir bitte.

Nö, ist grundsätzlich schon machbar, nur möglicherweise etwas aufwändiger, als Du derzeit denkst, weil Du keine Fehlinformationen liefern willst.

Daran, das ich die Signale mit einem 2. Arduino simuliere; habe ich auch schon gedacht.
Das Programm soll natürlich mehrere Durchläufe machen bevor es zur Info Ausgabe kommt.
Was mir mit dem Auge aufgefallen ist das die High-Signale (Led an) gleich lang ist egal ob es schnell oder
langsam blinkt, unterscheiden tut es sich demnach nur duch die pausenzeiten.
Ich werde trotzdem mal die einzelnen Zustände abfilmen (Gute Idee agmue! ) und auch messen. Ich möchte ja nicht hoffen dass das leuchten ansich nicht auch noch eine Art PWM ist, nur das man es mit dem Auge halt nicht wahr nimmt.
Falls sich jemand für den Schaltplan interessiert:
http://www.produktinfo.conrad.com/datenblaetter/750000-774999/752181-sp-01-en-6_ZONEN_ALARMANLAGE.pdf

So, ich habe mal die Blink Signale der Status LED ausgemessen und dabei ist mir aufgefallen
das das Auslesen mit ein oder zwei Sekunden nicht möglich ist ohne Fehlinformationen auf dem Display
auszugeben.
Ich muss eine Messzeit von 4 Sekunden nutzen um eindeitige Informationen zuordnen zu können.
Auf dem ersten Bild sind die Signale dargestellt.
Auf dem 2. Bild habe ich mal versucht die Fehler die auftreten können bei längeren oder kürzeren
Messzeiten darzustellen.

Ich habe vor nur die Impulse 4 Sekunden lang zu zählen und je nach Anzahl die entsprechende Info auszugeben.
Die Fehlinformation ist nur zwischen "Austrittsverzögerung aktiv" und " System hat Alarm gespeichert ".
Also der Arduino sieht eine steigende Flanke --->Timer wird gestartet läuft 4 Sekunden --->Je nach Anzahl wird die Information ausgegeben.

Würdet Ihr es ebenso machen also die Impulse eine Zeit lang zu zählen? Oder würdet Ihr noch die Pausenzeiten mit einbeziehen?

Ein weiteres Problem habe wahrscheinlich ich bei der Umsetzung von "Austrittsverzögerungaktiv / Zonen NICHT OK " da liegt ein Dauersignal (60Sek) an. Ich nehme aber an das die Impulszählschleife mit steigender Flanke anfängt zu zu laufen und ein Dauersignal als "1" ausgibt. Bin mir aber momentan nicht sicher.

Bajazzo:
nformationen zuordnen zu können.
Auf dem ersten Bild sind die Signale dargestellt.
Auf dem 2. Bild ...

Welche Bilder?

Hi

Nach spätestens 600ms kann klar sein, was die LED Da vorblinkt, mit etwas mehr Zeit ginge Folgendes:
Du erfasst die AN bzw AUS-Zeiten.
Wenn die AN-Zeit 280 ist: Austrittsverzögerung aktiv
Sonst muß die AN-Zeit 120 sein und Du misst die AUS-Zeit.
Bei >3 Auszeiten von 120 'am Stück':Alarm-Modus
Bei Auszeit-Maximum von 1500: Alarm gespeichert
Bei Auszeit-Maximum von 1750: System aktiv

Lasse etwas Luft bei der Erkennung der Impulszeiten.
Da wir zwischen 120 und 280 nur 160ms 'Luft' haben, würde ich hier auf die Mitte, 80, gehen.
40ms...200ms : 120er Impuls
200ms...360ms: 280er Impuls
1420ms...1580ms: 1500er Impuls
1670ms...1830ms: 1750er Impuls
Alles, was drunter, dazwischen oder drüber liegt: Fehlmessung

MfG

Hi, ja das ist natürlich auch eine Möglichkeit. Ich habe mich da wohl zu sehr auf das Impuls zählen konzentriert. Im einem Beitrag vorher wurde ja der Vorschlag gemacht das man mehrere Zählphasen durchlaufen sollte damit es keine Fehlinfos gibt. Das hat mich wohl dazu gebracht so zu denken.
Aber die Impus/Pausen Zeiten zu nutzen ist denke ich bessere Wahl.