Meinung zu Zeitstoppanlage

Sehr geehrte Community
leider bin ich erst neu im Arduino-Bereich und kenne mich von Null bis Basisgrundlagen aus :confused: . Allerdings habe ich schon so ein oder anderes in Richtung Programmierung gesehen.

Nun aber zu meinem Vorhaben:
Ich möchte gerne (wie so viele vor mir) eine Zeitmessung bauen (und habe schon fast alles in der Richtung aus dem Netz gelesen). Aufgrund der Umstände Außeneinsatz, Witterungsfest, weite Messstrecke usw. habe ich mich für eine Lösung per Funk entschieden (Xbee-Module vor derren Programmierung, es mir jetzt schon graut ^^).

Aufbau ist folgender:

  • Eine Startschranke (manuell) sendet Signal an Auswertplatine(mit dazugehöriger Zeitanzeige)
  • Eine Laserlichtschranke fürs Ziel (sendet ebenfalls an Auswertplatine)
  • Auswertplatine mit Zeitanzeige
  • Das ganze wird über Batterien/Akku versorgt

Mein Anliegen jetzt ist:
Könnt ihr mir bitte Tipps für mein Programm geben, bzw. was könnte ich anders machen bei meinem angehängten Zeilen?

im übrigen habe ich fast 1zu1 das Programm von jurs genutzt, ich hoffe dass ist nicht so verwerflich :frowning:

[code]
#define STARTSCHRANKE 2  // Startschranke
#define ZIELSCHRANKE 3   // Zielschranke
#define AUSLÖSEN         // Schranke ausgelöst
#define bool INPUT_PULLUP 
#define FREIGABE 4       // Freigabetaster für Strecke

void setup() 
{
  //lcd.begin(16,2);
  //lcd.print("Messbereitschaft");
  pinMode(5,OUTPUT);                //LED Strecke frei
  pinMode(STARTSCHRANKE,bool);      //Startschranke
  pinMode(ZIELSCHRANKE,bool);       //Zielschranke
  pinMode(FREIGABE,bool);           //Streckenfreigabe
  delay(10);
}

void showtime(long zeit, boolean endzeit)
{
  static int lastSecond=-1;
  char buf[17];
  int sekunden=zeit/1000;
  if (sekunden==lastSecond && !endzeit) return;                                
  lastSecond=sekunden;
  int tausendstel=zeit%1000;
  int minuten=sekunden/60;
  sekunden=sekunden%60;
  if (endzeit)
    snprintf(buf,sizeof(buf),"%2d:%02d,%03d",minuten,sekunden,tausendstel);
  else 
    snprintf(buf,sizeof(buf),"%2d:%02d",minuten,sekunden);
  lcd.setCursor(6,0);
  lcd.print(buf);
}

void loop() 
{
  if (STARTSCHRANKE & ZIELSCHRANKE & FREIGEBEN == true)                              //Wenn Startschranke+Zielschranke+Freigabe dann starte Zeitmessungsprogramm
  {
    digitalWrite (5,HIGH);                                                           //LED Strecke frei EIN
    while (digitalRead(STARTSCHRANKE)!=AUSLÖSEN) ;                                   // warten auf Unterbrechung der Startschranke
    unsigned long startZeit=millis();                                                // Jetzt wurde gestartet
    delay(10);
    lcd.clear();
    lcd.print("Zeit:");
    while (digitalRead(ZIELSCHRANKE)!=AUSLÖSEN) showtime(millis()-startZeit, false); // warten auf Unterbrechung der Stopp-Lichtschranke
    showtime(millis()-startZeit,true); // Endzeit anzeigen
  }
  
  else 
  { 
    digitalWrite (5, LOW);                                                           //LED Strecke frei AUS
  }
        
}

[/code]

h4nswurst:
.....
Könnt ihr mir bitte Tipps für mein Programm geben.....

Ja, wer Funk kennt, nimmt Kabel.

Ich verwende gerne Funk, aber bei Zeitkritischen Dingen sind Kabel sicherer.

Da ich wie schon beschrieben das nicht anders machen kann, muss es wohl Funk werden

Hallo,
Welche Genauigkeit?

Funk geht sicherlich, wir haben z.b. Funklösungen von Tag Heuer im Einsatz.
Sowas schüttelt man aber nicht schnell aus dem Ärmel....

Oder nur Ergebnisse verschicken, d.h. synchrone uhren an den Lichtschranken und timestamps verschicken.

Grüsse
Christian

chris71:
Funk geht sicherlich, wir haben z.b. Funklösungen von Tag Heuer im Einsatz.
Sowas schüttelt man aber nicht schnell aus dem Ärmel....

Oder nur Ergebnisse verschicken, d.h. synchrone uhren an den Lichtschranken und timestamps verschicken.

Genau das ist der Punkt.

Ohne richtige Erfahrungen ist das ein Projekt welches schnell schief gehen kann.
Und kommerzielle Systeme sind da schon ein anderes Thema.

erstmal danke für eure Antworten, aber nein es soll nichts all zu professionelles werden, da ich dass privat für meinen Skiverein baue.

Die Tage sollten alle Shields kommen, dann kann ich genauer berichten wo es scheiert. Vorerst wäre es aber eine große Hilfe wenn mir jemand was zu meinem Code sagt

h4nswurst:
Vorerst wäre es aber eine große Hilfe wenn mir jemand was zu meinem Code sagt

Was soll man dazu sagen ?
Ich sehe nichts davon, dass es mit Funk arbeitet.

Vorerst wäre es aber eine große Hilfe wenn mir jemand was zu meinem Code sagt

gibt nicht so viel her.

  • Von welcher Streckenlänge reden wir hier?
  • Freie Sichtverbindung? Fresnel-Zone frei?

Zur Umsetzung:

  • Zum Anfang möglichst genaue Uhrzeit ermitteln (DCF77, NTP gegenüber SNTP vorziehen, nachlesen was GPS taugt.)
  • Events mit Zeitstempel verschicken
  • Reine Signal-Eintreffzeit nur als Backup vernehmen und nur als Gegencheck, ob die Uhren synchron sind.

Strecke um die 500 bis 800 Meter mit nur bedingt freier Sicht da Berge

Danke für eure Antworten ich werde jetzt mal sehen das das umsetze

h4nswurst:
Strecke um die 500 bis 800 Meter

2-3 Kabeltrommeln mit 2x1,5 mm²Litze.... :slight_smile:

im Ernst: pinMode(STARTSCHRANKE,bool);

kenne ich nicht, sicher das es das gibt?

Das 'auslösen' sollte über einen interrupt gehen, sonst misst du Fahrtzeit + loopdauer.

Grüsse
Christian

Man kann sich auch ein Klavier ans Knie nageln.

Gruß Tommy

Tommy56 wie darf ich das verstehen? Ist das Mist was ich da zusammengetextet habe und wenn, was wäre die Alternative? ???

h4nswurst:
Ist das Mist was ich da zusammengetextet habe und wenn, was wäre die Alternative? ???

Der "Text" sollte zumindest kompilierbar sein. Fehlermeldungen für den UNO:

Arduino: 1.8.13 (Windows 10), TD: 1.53, Board: "Arduino Uno"

C:\...\Test.ino:3:13: warning: ISO C++11 requires whitespace after the macro name

 #define AUSLÖSEN         // Schranke ausgelöst

             ^

Test_Forum:3:13: error: stray '\303' in program

 #define AUSLÖSEN         // Schranke ausgelöst

             ^

C:\...\Test.ino:41:42: note: in expansion of macro 'AUSL'

     while (digitalRead(STARTSCHRANKE) != AUSLÖSEN) ;                                 // warten auf Unterbrechung der Startschranke

                                          ^~~~

Test_Forum:3:14: error: stray '\226' in program

 #define AUSLÖSEN         // Schranke ausgelöst

              ^

C:\...\Test.ino:41:42: note: in expansion of macro 'AUSL'

     while (digitalRead(STARTSCHRANKE) != AUSLÖSEN) ;                                 // warten auf Unterbrechung der Startschranke

                                          ^~~~

Test_Forum:41:46: error: stray '\303' in program

     while (digitalRead(STARTSCHRANKE) != AUSLÖSEN) ;                                 // warten auf Unterbrechung der Startschranke

                                              ^

Test_Forum:41:47: error: stray '\226' in program

     while (digitalRead(STARTSCHRANKE) != AUSLÖSEN) ;                                 // warten auf Unterbrechung der Startschranke

                                               ^

Test_Forum:3:13: error: stray '\303' in program

 #define AUSLÖSEN         // Schranke ausgelöst

             ^

C:\...\Test.ino:46:41: note: in expansion of macro 'AUSL'

     while (digitalRead(ZIELSCHRANKE) != AUSLÖSEN) showtime(millis() - startZeit, false); // warten auf Unterbrechung der Stopp-Lichtschranke

                                         ^~~~

Test_Forum:3:14: error: stray '\226' in program

 #define AUSLÖSEN         // Schranke ausgelöst

              ^

C:\...\Test.ino:46:41: note: in expansion of macro 'AUSL'

     while (digitalRead(ZIELSCHRANKE) != AUSLÖSEN) showtime(millis() - startZeit, false); // warten auf Unterbrechung der Stopp-Lichtschranke

                                         ^~~~

Test_Forum:46:45: error: stray '\303' in program

     while (digitalRead(ZIELSCHRANKE) != AUSLÖSEN) showtime(millis() - startZeit, false); // warten auf Unterbrechung der Stopp-Lichtschranke

                                             ^

Test_Forum:46:46: error: stray '\226' in program

     while (digitalRead(ZIELSCHRANKE) != AUSLÖSEN) showtime(millis() - startZeit, false); // warten auf Unterbrechung der Stopp-Lichtschranke

                                              ^

C:\...\Test.ino: In function 'void showtime(long int, boolean)':

Test_Forum:32:3: error: 'lcd' was not declared in this scope

   lcd.setCursor(6, 0);

   ^~~

C:\...\Test.ino: In function 'void loop()':

Test_Forum:38:38: error: 'FREIGEBEN' was not declared in this scope

   if (STARTSCHRANKE & ZIELSCHRANKE & FREIGEBEN == true)                              //Wenn Startschranke+Zielschranke+Freigabe dann starte Zeitmessungsprogramm

                                      ^~~~~~~~~

C:\...\Test.ino:38:38: note: suggested alternative: 'FREIGABE'

   if (STARTSCHRANKE & ZIELSCHRANKE & FREIGEBEN == true)                              //Wenn Startschranke+Zielschranke+Freigabe dann starte Zeitmessungsprogramm

                                      ^~~~~~~~~

                                      FREIGABE

Test_Forum:3:15: error: 'SEN' was not declared in this scope

 #define AUSLÖSEN         // Schranke ausgelöst

               ^

C:\...\Test.ino:41:42: note: in expansion of macro 'AUSL'

     while (digitalRead(STARTSCHRANKE) != AUSLÖSEN) ;                                 // warten auf Unterbrechung der Startschranke

                                          ^~~~

C:\...\Test.ino:3:15: note: suggested alternative: 'SE'

 #define AUSLÖSEN         // Schranke ausgelöst

               ^

C:\...\Test.ino:41:42: note: in expansion of macro 'AUSL'

     while (digitalRead(STARTSCHRANKE) != AUSLÖSEN) ;                                 // warten auf Unterbrechung der Startschranke

                                          ^~~~

Test_Forum:41:48: error: expected ')' before 'SEN'

     while (digitalRead(STARTSCHRANKE) != AUSLÖSEN) ;                                 // warten auf Unterbrechung der Startschranke

                                                ^~~

Test_Forum:41:51: error: expected ';' before ')' token

     while (digitalRead(STARTSCHRANKE) != AUSLÖSEN) ;                                 // warten auf Unterbrechung der Startschranke

                                                   ^

Test_Forum:44:5: error: 'lcd' was not declared in this scope

     lcd.clear();

     ^~~

Test_Forum:3:15: error: 'SEN' was not declared in this scope

 #define AUSLÖSEN         // Schranke ausgelöst

               ^

C:\...\Test.ino:46:41: note: in expansion of macro 'AUSL'

     while (digitalRead(ZIELSCHRANKE) != AUSLÖSEN) showtime(millis() - startZeit, false); // warten auf Unterbrechung der Stopp-Lichtschranke

                                         ^~~~

C:\...\Test.ino:3:15: note: suggested alternative: 'SE'

 #define AUSLÖSEN         // Schranke ausgelöst

               ^

C:\...\Test.ino:46:41: note: in expansion of macro 'AUSL'

     while (digitalRead(ZIELSCHRANKE) != AUSLÖSEN) showtime(millis() - startZeit, false); // warten auf Unterbrechung der Stopp-Lichtschranke

                                         ^~~~

Test_Forum:46:47: error: expected ')' before 'SEN'

     while (digitalRead(ZIELSCHRANKE) != AUSLÖSEN) showtime(millis() - startZeit, false); // warten auf Unterbrechung der Stopp-Lichtschranke

                                               ^~~

Test_Forum:46:50: error: expected ';' before ')' token

     while (digitalRead(ZIELSCHRANKE) != AUSLÖSEN) showtime(millis() - startZeit, false); // warten auf Unterbrechung der Stopp-Lichtschranke

                                                  ^

exit status 1

stray '\303' in program



Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Also ja, das ist "Mist", sagt der Kompiler. Und wenn Du Dir keine Mühe gibst, dann erlischt mein Verlangen, Dir zu helfen.

Oder Du bist tatsächlich so weit weg von der Lösung, daß Du Dich mit diesem Projekt gewaltig überhebst und zunächst die Grundlagen der Sprache lernen mußt.

Du wolltest eine Meinung, meine kennst Du nun :slight_smile:

Ich sehe nichts davon, dass es mit Funk arbeitet.

Also muss ich meine Anmerkung nochmals wiederholen.

Wo ist in deinem Sketch etwas von einer Funkverbindung zu sehen.

Irgendwie verstehe ich dein Projekt bzw. dein Vorhaben nicht, da ich nicht erkennen kann, was dein Sketch machen soll.

@agmue oha ja well danke :frowning: , das werd ich mir gleich mal vorknöpfen. Da ich das wo wie beschrieben aufgeschnappt habe, habe ich mich damit nicht weiter beschäftig :facepalm:

"...daß Du Dich mit diesem Projekt gewaltig überhebst... " ja den Eindruck habe ich auch langsam. Ziemlich frustrierend, aber kein Grund für mich das über den Haufen zu schmeißen. @agmue

@HotSystems Funk ist noch nichts drinnen, weil ich nicht weiß ob überhaupt die Zeitnahme so passen würde :wink: , aber ich habe von vorherigen Posts etwas rausgelesen mit dem ich mich jetzt erst mal beschäftige.

schon mal Danke an euch alle für eure Hilfe/Meinungen egal welcher Art :slight_smile:

h4nswurst:
Ziemlich frustrierend, aber kein Grund für mich das über den Haufen zu schmeißen. @agmue

Wenn es Dir gelingt, den Frust in Motivation zu wandeln, kann es was werden. Es wird nur etwas Zeit benötigen. Oder wie es ein kleines grünes Männchen formulieren würde: "Viel lernen Du mußt, noch ein langer Weg vor Dir liegt!"

Die Geduld sei mit Dir :slight_smile: