Hoftorsteuerung als Anfängerprojekt

Guten Morgen
Habe seit einiger Zeit einen Arduino herumliegen und bisher leider nicht die Zeit bzw auch kein Projekt um ihn einzusetzen.
Nun habe ich begonnen einen Ersatz für unsere Hoftorsteuerung zu bauen, da diese recht anfällig ist.
Hier die Eckdaten: (Zeiten weichen vom Programm ab, wegen unnötiger Wartezeiten)
Irgendwie komm ich mit der while Schleife net klar, da ich ja einelne Vorgänge darin stoppen muss, andere sollen aber weiterlaufen?!?

Board: Nano-Baugleich
StromMessbausteine: ACS712 +-5A
Relais: 8-Fach Relais Modul
T1= Tor öffnen
T2= Tor schliessen
T3= Stop z.B. Nottaster/Lichtschranke
Relais1 bis 4: Strom für Motor
Relais5: LED AUF
Relais6: LED ZU

Tore öffnen:

Nach drücken der Taste T1 zieht das Relais1 und Relais5 an.
4 Sekunden verzögert das Relais3. Diese sollen so lange gezogen bleiben,
bis entweder die Taste T1 erneut gedrückt wird, die Taste T3 gedrückt wird,
oder eine maximale Zeit von 10 sekunden erreicht ist.
Vorher sollte jedoch einer der beiden Strommessbausteine (ACS712 +-5A) bei einem in Analogeingang
festgelegten Wert (z.B. 3 Ah) das jeweilige Relais (R1 oder R3) lösen.
Das jeweils andere Relais würde ebenfalls erst lösen,
wenn der festgelegte Wert überschritten ist.
Relais5 würde in diesem Fall erst nach 10 sekunden lösen.

Tore schliessen:

Nach drücken der Taste T3 zieht das Relais2 und Relais6 an.
4 Sekunden verzögert das Relais4. Diese sollen so lange gezogen bleiben,
bis entweder die Taste T2 erneut gedrückt wird, die Taste T3 gedrückt wird,
oder eine maximale Zeit von 10 sekunden erreicht ist.
Vorher sollte jedoch einer der beiden Strommessbausteine (ACS712 +-5A) bei einem in Analogeingang
festgelegten Wert (z.B. 3 Ah) das jeweilige Relais (R2 oder R4) lösen.
Das jeweils andere Relais würde ebenfalls erst lösen,
wenn der festgelegte Wert überschritten ist.
Relais6 würde in diesem Fall erst nach 10 sekunden lösen.

Hier mein "Ansatz":

const int R1 = 2 ;          //M1 K1
const int R2 = 3 ;          //M1 K2
const int R3 = 4 ;          //M2 K1
const int R4 = 5 ;          //M2 K2
const int R5 = 6 ;          //LED AUF
const int R6 = 7 ;          //LED ZU
const int T1 = 10 ;         //Taster AUF
const int T2 = 11 ;         //Taster ZU
const int T3 = 12 ;         //STOP
//const int strom1 = A0;      //Strommessbaustein 1
//const int strom2 = A1;      //Strommessbaustein 2
//const int strom3 = A2;      //Strommessbaustein 3
//const int strom4 = A3;      //Strommessbaustein 4
//const int maxstrom = 400;   //Strombegrenzung
int T1status = 0;
int T2status = 0;
int T3status = 0;

void setup() {

  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(R3, OUTPUT);
  pinMode(R4, OUTPUT);
  pinMode(R5, OUTPUT);
  pinMode(R6, OUTPUT);
  pinMode(T1, INPUT);
  pinMode(T2, INPUT);
  pinMode(T3, INPUT);
  
  //Alle Relais lösen wegen Umkehrung
  digitalWrite(R1, HIGH);
  digitalWrite(R2, HIGH);
  digitalWrite(R3, HIGH);
  digitalWrite(R4, HIGH);
  digitalWrite(R5, HIGH);
  digitalWrite(R6, HIGH);
}

void loop() {

  

  //Taster1 zum öffnen
  T1status = digitalRead(T1);
  while (T1status == HIGH) {   

    digitalWrite(R5, LOW);    //LOW heisst anziehen
    digitalWrite(R1, LOW);
    delay(2000);
    digitalWrite(R3, LOW);
    delay(3000);
    digitalWrite(R1, HIGH);    //HIGH heisst lösen
    digitalWrite(R3, HIGH);
    digitalWrite(R5, HIGH);
    T1status = digitalRead(T1);
  }


//Taster2 zum schliessen
  T2status = digitalRead(T2);
  while (T2status == HIGH) {     

    digitalWrite(R6, LOW);    //LOW heisst anziehen
    digitalWrite(R2, LOW);
    delay(2000);
    digitalWrite(R4, LOW);
    delay(3000);
    digitalWrite(R2, HIGH);    //HIGH heisst lösen
    digitalWrite(R4, HIGH);
    digitalWrite(R6, HIGH);
    T2status = digitalRead(T2);
  }


  //Stoppen bei Stromüberschreitung
  //int strom1 = analogRead(A0);
  //int strom2 = analogRead(A1);
  //int strom3 = analogRead(A2);
  //int strom4 = analogRead(A3);
  //maxstrom = 10;

  //if (strom1 > maxstrom) {
  //digitalWrite(R1, LOW);
  //} 
  //if (strom2 > maxstrom) {
  //digitalWrite(R2, LOW);
  //} 
  //if (strom3 > maxstrom) {
  //digitalWrite(R3, LOW);
  //}
  //if (strom4 > maxstrom) {
  //digitalWrite(R4, LOW);
  //} 

}

Tor2nano.ino (2.23 KB)

Wird so nicht klappen! Dein Arduino ist in jeder While-Schleife für 5 Sekunden ausser Betrieb genommen. Des weiteren bringt dir die While Schleife recht wenig, wenn das Taster sind. Nach jedem Loop fragt das Programm erneut den Status ab. Der bleibt bei einem Taster aber nicht bestehen, es sei denn man hält diesen gedrückt.

Schaue dir zu erst die Tutorials

Arduino Playground - HomePage (Entprellen von Tastern)

Hallo,
die Steuerung ans laufen zu bekommen, ist Dein kleinstes Problem.
Von Deinem automatisierten Hoftor geht eine Gefahr aus.
( einklemmen von Lebewesen, Fahrzeugen usw. )
Du musst die Steuerung so bauen, dass diese Gefahren nicht zu Schäden führen.
(Kontake für Endlagen, Druckleisten zum Abschalten, Kraftbegrenzung ... )
Das Ganze muss natürlich von Sachverständigen geprüft werden ...

Kurz gesagt: kaufe Dir eine fertige Steuerung, Du wirst Deines Lebens nicht mehr froh, wenn ein Kind verletzt wird

Gruss
Kurti

Kurz gesagt: kaufe Dir eine fertige Steuerung, Du wirst Deines Lebens nicht mehr froh, wenn ein Kind verletzt wird

Warum bei der kleinsten Schwierigkeit alles hin schmeißen ?

Eine Lichtschranke dazwischen geschaltet hilft schon mal für grundlegende Sicherheit.

Ich bin mir nicht ganz sicher, wofür er die Stromsensoren eingebaut hat. Vermutlich melden die sich bei Überlast. Aber kurti hat nicht ganz unrecht.

@Arty: Nur auf die Lichtschranke würde ich mich nicht verlassen. Ich kenn jetzt nicht den genauen Aufbau des Tores, wenn dieses aber Metallgitter sind und dann etwas den Kopf durchstecken kann, bringt ein anhalten nichts.

Sicherheitstechnisch würde ich da einiges investieren an Material. a) Lichtschranke b) Prellschutz über entsprechende feine Endschalter c) Stromüberwachung d) evtl. noch ein Bewegungssensor, der nicht das Tor erfasst.

Problem ist aber immer die Abnahme. Gibt genug Leute die hier meinen, mit dem Arduino alles machen zu wollen. Mit handelsüblichen Steuerung wirst du da deutlich weniger Probleme haben. Was man mit dem Arduino evtl. machen kann, ist die vorhande Steuerung zu protokolieren. Evtl. hat das bestehende System auch noch eine Ansteuerung für externe Hardware. Dann könntest du das alles zusätzlich einbauen. Aber nur unter den Umständen, dass die komplette Sicherheitseinrichtung unangetastet bleibt!

Nun habe ich begonnen einen Ersatz für unsere Hoftorsteuerung zu bauen, da diese recht anfällig ist.

Vielleicht auch erstmal herausfinden, warum die alte Hofsteuerung anfällig ist. Vllt sind da irgendwelche Sicherheitsketten unvollständig.

Du musst aber auch bedenken, dass die Lichtschranke vom Programm abgefragt werden muss.
Wenn er mit delay arbeitet, dann ist der Arm auch mit delay eingeklemmt :wink:

Des weiteren ist eine horizontal angebrachte Lichtschranke dafür ungeeignet und schützt nicht!
Es müsste eine Bumperleiste sein, die die gefahrbringende Bewegung sicher abschaltet.
Dh. wenn ein Kind unter deiner Lichtschranke liegt, und nicht erfasst wird, ist das unzulässig.
Senkrechte Lichtschranke macht wg Verschmutzung keinen Sinn.

patman,
ich halte das Projekt nicht für Anfängertauglich und schließe mich kurti an.

ICH habe nie gemeint dass EINE Lichtschranke ausreicht oder kompletten Schutz bietet, sondern nur als grundsätzliches SIcherheitsmerkmal dienen könnte.

Bisher weiss ja auch noch niemand, wie groß das Tor (physikalisch) und der Antrieb (elektrisch)sind.
Und Stromsensoren sind ja wohl schon vorhanden bzw. eingeplant, die kann man dann ja auch abfragen.
Natürlich hängt der µc (bei einem normalen delay(x)) dann, aber da findet sich auch eine Lösung mit Millis() oder withoutDelay oder so 8)
Evtl. kann man aus dem vorhanden Antrieb (Steuerung) einige Teile (Komponenten) verwenden - denn auch eine gekaufte Steuerung ist nur ein µc mit Hardware dran XD

Wow hier gehts ja rund. :grin:
Also für mich ist die Steuerung eher das größere Problem.
Die Stromsensoren dienen zur Krafterfassung und Abschaltung der Torflügel in BEIDE Richtungen. Sowohl in Endlage als auch bei Hindernissen.
Dies ist bei der original Steuerung ebenfalls so gelöst.
Der Eingang T3 soll später mit zwei Lichtschranken belegt werden, deshalb soll bei diesem Eingang alles stoppen.
Das Tor ist ein Jägerzauntor mit ca 1.2m höhe. Wird allerdings nicht unbeaufsichtigt betrieben, sodass ein eingreifen jederzeit möglich wäre.
Mein Problem im Moment ist hauptsächlich die while-schleife zu stoppen mit T3 und dann einelne Motoren zu stoppen wenn die eingestellte Stromstärke erreicht ist.
Die While schleife läuft nach antasten von T1 1x bis zum Ende durch...

Deshalb hatte ich auch direkt in meinem ersten Post auf Blink Without Delay Tutorial verwiesen :wink:

Und mir ist bewusst, dass du die Lichtschranke nicht als einziges Sicherglied siehst.

Den Endpunkt solltest du, auch wenn bislang so scheinbar gelöst, nicht allein über den Strom erfassen können. Endschalter zusätzlich mit dran :wink:

Schau dir mal die Graph/PAP/Schrittketten an. Damit kannst du deine Aufgabe am einfachsten erfüllten. Hier mal ein kleiner Pseudocode ohne Garnatie auf Funktionalität. Achtung: Beta, es könnte kleine Kätzchen töten. ]:smiley:

Tore öffnen:

Nach drücken der Taste T1 zieht das Relais1 und Relais5 an.
4 Sekunden verzögert das Relais3. Diese sollen so lange gezogen bleiben,
bis entweder die Taste T1 erneut gedrückt wird, die Taste T3 gedrückt wird,
oder eine maximale Zeit von 10 sekunden erreicht ist.
Vorher sollte jedoch einer der beiden Strommessbausteine (ACS712 +-5A) bei einem in Analogeingang
festgelegten Wert (z.B. 3 Ah) das jeweilige Relais (R1 oder R3) lösen.
Das jeweils andere Relais würde ebenfalls erst lösen,
wenn der festgelegte Wert überschritten ist.
Relais5 würde in diesem Fall erst nach 10 sekunden lösen.

switch(modus) {
case 0:
if(digitalRead(T1) == true) {
digitalWrite(R1, HIGH);
digitalWrite(R5, HIGH);
previousMills = millis()
modus++;
}
break;

case 1:
if(millis() - previousMillis > 4000) {
digitalWrite(R3, HIGH);
previousMillis = millis();
modus++;
}

case 2:
if(digitalRead(T1) == true || digitalRead(T3) == true || millis() - previousMillis > 10000) {
digitalWrite(R3, LOW);
modus++;
}

case 3:
....

Also mir sind einige Hoftore mit elektrischem Antrieb bekannt, die ausschließlich mit Endtastern und Stromsensoren als Sicherheitsmerkmale daherkommen. Gut, diese sind zum Teil schon mehrere Jahre in Betrieb und stellen bei weitem nicht das technisch Machbare dar. Aber hier geht es um einen Hoftorantrieb, nicht um einen Gebäudeabschluss, wo noch mehr Sicherungs- und Sicherheitsaspekte einfließen.
Wenn der Antrieb also immer selbst überwacht wird, sehe ich da überhaupt keine Probleme. Da es nach Angabe des Threaderstellers ein Jägerzaun mit 1,20m Höhe ist, kann man auch von beiden Seiten den Schwenkbereich der oder des Torfflügels einsehen.

Hi sschultewolter.
Danke für die Tipps. werd mich da jetzt erstmal reinarbeiten müssen.
Enschalter kommen leider nicht in Frage, da ich dort keine weiteren Kabel verlegen kann und auch keine Möglichkeit habe an den Schubstangen Endschalter zu befestigen. Spricht aber doch auch nichts gegen die alleinige Abschaltung durch die Erreichung eines Maximalstromes oder?
Ja die Kätzchen wären platt... ]:smiley:

A.R.Ty:

Kurz gesagt: kaufe Dir eine fertige Steuerung, Du wirst Deines Lebens nicht mehr froh, wenn ein Kind verletzt wird

Warum bei der kleinsten Schwierigkeit alles hin schmeißen ?

Eine Lichtschranke dazwischen geschaltet hilft schon mal für grundlegende Sicherheit.

Um das Tor sicher zu machen braucht menn viel Erfahrung. Bei einem Komerziellen Produkt hat der Hersteller diese Erfahrung un die ist in das Produkt eingeflossen.
Grüße Uwe

Doch ich sehe in der Begrenzung des Maximalstroms ein Problem. Im Winter oder bei schlechteren Witterungsverhältnissen laufen diese deutlich schlechter. Somit wird mehr Strom benötigt. Wenn du Pech hast, schalten die Geräte hast, bevor das Tür geschlossen ist, weil deine Toleranzwerte zu kanpp sind.

Was sind dass denn genau für Motoren? Sind dass diese Stangenantriebe? Wenn ja, haben die doch min. 2 Spannungsversorgungen (AUF/ZU). Würde somit zumindest die Möglichkeit bestehen, mit einem Endschalter vorort den Motor in einer Richtung Spannungsfrei zu schalten, wenn dieser seinen Endpunkt erreicht hat.

Aber ein gut gemeinter Rat, mach sowas nicht selber.

Dass ich das Tor im Winter nicht als Schneeschieber benutzen kann ist klar. Die Reibungsunterschiede durch Temperaturdifferenzen würde ich vernachlässigen, da dies bei der alten Steuerung auch kein Problem war.
Die Antriebe sind innenliegende Spindelkolben, welche von einem 12V Motor angetrieben werden.
Anschlüsse: 2 Drähte, welche sich in der Polung Abwechseln/Tauschen bei auf/zu Fahrt. deshalb auch 4 Relais.
Im Ruhezustand sind alle Leitungen - Gepolt.

Soo.
Hab mich jetzt mal bischen durchgekämpft:
Das Programm tut was es soll. Kann jederzeit mit T3 gestoppt werden.
Muss nur noch was einbauen, damit T1 während dem Laufen nicht mehr Anspricht, da sich die Zeit sonst wieder
verlängert. (Bounce)?
Jetzt das Problem. Nach 30 sekunden läuft es nicht mehr.
Wenn T1 gedrückt wird, ziehen R1 R3 R5 solange an. Beim Loslassen gehen sie wieder aus?!? Warum??

Grüße
Patrick

PS: LOW und HIGH sind vertauscht wegen der Relaisplatine!! :blush:

const int R1 = 2 ;          //M1 K1
const int R2 = 3 ;          //M1 K2
const int R3 = 4 ;          //M2 K1
const int R4 = 5 ;          //M2 K2
const int R5 = 6 ;          //LED AUF
const int R6 = 7 ;          //LED ZU
const int T1 = 10 ;         //Taster AUF
const int T2 = 11 ;         //Taster ZU
const int T3 = 12 ;         //STOP
//const int strom1 = A0;      //Strommessbaustein 1
//const int strom2 = A1;      //Strommessbaustein 2
//const int strom3 = A2;      //Strommessbaustein 3
//const int strom4 = A3;      //Strommessbaustein 4
//const int maxstrom = 400;   //Strombegrenzung
int T1status = false;
int T2status = false;
int T3status = false;
int previousMillis = 0;
int auf = false;              //Tor in AUF Bewegung
int zu = false;               //Tor in ZU Bewegung

void setup() {

  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(R3, OUTPUT);
  pinMode(R4, OUTPUT);
  pinMode(R5, OUTPUT);
  pinMode(R6, OUTPUT);
  pinMode(T1, INPUT);
  pinMode(T2, INPUT);
  pinMode(T3, INPUT);
  //pinMode(strom1, INPUT);
  //pinMode(strom2, INPUT);
  //pinMode(strom3, INPUT);
  //pinMode(strom4, INPUT);
  
  //Alle Relais lösen wegen Umkehrung
  digitalWrite(R1, HIGH);
  digitalWrite(R2, HIGH);
  digitalWrite(R3, HIGH);
  digitalWrite(R4, HIGH);
  digitalWrite(R5, HIGH);
  digitalWrite(R6, HIGH);
}

void loop() {
  
  
  int modus = T1status == true;
  
  switch(modus) {
case 0:
if(digitalRead(T1) == true) {
digitalWrite(R1, LOW);
digitalWrite(R5, LOW);
previousMillis = millis();
auf = true;
modus++;
}

case 1:
if((millis() - previousMillis > 2000) && (auf == true)) {
digitalWrite(R3, LOW);
modus++;
}

case 2:
if(digitalRead(T3) == true || millis() - previousMillis > 5000) {
digitalWrite(R3, HIGH);
digitalWrite(R1, HIGH);
digitalWrite(R5, HIGH);
auf = false;
modus++;
}


  }
}

Du bist dann im unbekannten Modus, da modus > deines höchstes case ist. Einfach nach dem 2. case

default:
mode = 0;
[code]

[/code]

ALso ich hab das jetzt mal so umgesetzt:

const int R1 = 2 ;          //M1 K1
const int R2 = 3 ;          //M1 K2
const int R3 = 4 ;          //M2 K1
const int R4 = 5 ;          //M2 K2
const int R5 = 6 ;          //LED AUF
const int R6 = 7 ;          //LED ZU
const int T1 = 10 ;         //Taster AUF
const int T2 = 11 ;         //Taster ZU
const int T3 = 12 ;         //STOP
//const int strom1 = A0;      //Strommessbaustein 1
//const int strom2 = A1;      //Strommessbaustein 2
//const int strom3 = A2;      //Strommessbaustein 3
//const int strom4 = A3;      //Strommessbaustein 4
//const int maxstrom = 400;   //Strombegrenzung
int T1status = false;
int T2status = false;
int T3status = false;
int previousMillis = 0;
int auf = false;              //Tor in AUF Bewegung
int zu = false;               //Tor in ZU Bewegung

void setup() {

  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(R3, OUTPUT);
  pinMode(R4, OUTPUT);
  pinMode(R5, OUTPUT);
  pinMode(R6, OUTPUT);
  pinMode(T1, INPUT);
  pinMode(T2, INPUT);
  pinMode(T3, INPUT);
  //pinMode(strom1, INPUT);
  //pinMode(strom2, INPUT);
  //pinMode(strom3, INPUT);
  //pinMode(strom4, INPUT);
  
  //Alle Relais lösen wegen Umkehrung
  digitalWrite(R1, HIGH);
  digitalWrite(R2, HIGH);
  digitalWrite(R3, HIGH);
  digitalWrite(R4, HIGH);
  digitalWrite(R5, HIGH);
  digitalWrite(R6, HIGH);
}

void loop() {
  //if(digitalRead(T1) == true){
   // T1status == true;}
  
  int modus = T1status == true;
  
switch(modus) {  
  case 0:
    if(digitalRead(T1) == true) { 
    digitalWrite(R1, LOW);
    digitalWrite(R5, LOW);
    previousMillis = millis();
    auf = true;
    modus++;
    }

  case 1:
    if((millis() - previousMillis == 2000) && (auf == true)) {
    digitalWrite(R3, LOW);
    modus++;
    }

  case 2:
    if(digitalRead(T3) == true || millis() - previousMillis == 5000) {
    digitalWrite(R3, HIGH);
    digitalWrite(R1, HIGH);
    digitalWrite(R5, HIGH);
    auf = false;
    modus++;
    }

  case 3:{
    modus=0;
    }
}
}

Jetzt passiert folgendes:
Nach den 30 sekunden schaltet T1: R1 und R5 endlos ein, bis T3 gedrückt wird... :0
Bei default statt case3 übrigens das selbe...

  int modus = T1status == true;

Was soll das bedeuten? Das scheint mir Müll zu sein! Raus damit.

modus gehört in den Global Vars und wird nicht mit irgendeinem Taster gesetzt!
int modus;
oder im loop
static int modus;

:blush:
Ja wusste net wie ich dieses Modus deklarieren soll...
Hab leider auch nirgends ein ähnliches Beispiel gefunden. Meist geht das über map, was hier aber net hilfreich ist...

const int R1 = 2 ;          //M1 K1
const int R2 = 3 ;          //M1 K2
const int R3 = 4 ;          //M2 K1
const int R4 = 5 ;          //M2 K2
const int R5 = 6 ;          //LED AUF
const int R6 = 7 ;          //LED ZU
const int T1 = 10 ;         //Taster AUF
const int T2 = 11 ;         //Taster ZU
const int T3 = 12 ;         //STOP
//const int strom1 = A0;      //Strommessbaustein 1
//const int strom2 = A1;      //Strommessbaustein 2
//const int strom3 = A2;      //Strommessbaustein 3
//const int strom4 = A3;      //Strommessbaustein 4
//const int maxstrom = 400;   //Strombegrenzung
int T1status = false;
int T2status = false;
int T3status = false;
int previousMillis = 0;
int auf = false;              //Tor in AUF Bewegung
int zu = false;                //Tor in ZU Bewegung
int modus;

void setup() {

  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(R3, OUTPUT);
  pinMode(R4, OUTPUT);
  pinMode(R5, OUTPUT);
  pinMode(R6, OUTPUT);
  pinMode(T1, INPUT);
  pinMode(T2, INPUT);
  pinMode(T3, INPUT);
  //pinMode(strom1, INPUT);
  //pinMode(strom2, INPUT);
  //pinMode(strom3, INPUT);
  //pinMode(strom4, INPUT);
  
  //Alle Relais lösen wegen Umkehrung
  digitalWrite(R1, HIGH);
  digitalWrite(R2, HIGH);
  digitalWrite(R3, HIGH);
  digitalWrite(R4, HIGH);
  digitalWrite(R5, HIGH);
  digitalWrite(R6, HIGH);
}

void loop() {
  
  
switch(modus) {  
  case 0:
    if(digitalRead(T1) == true) { 
    digitalWrite(R1, LOW);
    digitalWrite(R5, LOW);
    previousMillis = millis();
    auf = true;
    modus++;
    }

  case 1:
    if((millis() - previousMillis == 2000) && (auf == true)) {
    digitalWrite(R3, LOW);
    modus++;
    }

  case 2:
    if(digitalRead(T3) == true || millis() - previousMillis == 5000) {
    digitalWrite(R3, HIGH);
    digitalWrite(R1, HIGH);
    digitalWrite(R5, HIGH);
    auf = false;
    modus++;
    }

  default:{
    modus = 0;
    }
}
}

So habs geändert. Immer noch das gleiche Problem...
Ich hab das gefühl dass es an dem Millis liegt?!? find aber den Fehler net.