Pages: [1] 2   Go Down
Author Topic: Projektvorstellung: Geschwindigkeitsanzeige am Kicker / Tischfussball  (Read 2855 times)
0 Members and 1 Guest are viewing this topic.
Germany, Osnabrück
Offline Offline
God Member
*****
Karma: 25
Posts: 572
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi zusammen,
ich wollte hier ein Projekt vorstellen, dass ich in meinen Semesterferien im Laufe einer Hausarbeit für das Studium erstellt habe.



Aufgabenstellung:
Messung der Geschwindigkeit eines Balles auf einem Tischfussball / Kicker / Kickertisch bei der verschiedene Dinge über ein LCD eingestellt werden können.

Inhaltsverzeichnis des Projektes:
1. Aufgabenstellung
2. Einführung
3. Hardware im Detail + Kostenberechnung
4. Software im Detail
5. Messungen um die Genauigkeit zu bestimmen
6. Ergebnisse
7. Zeitaufwand
8. Interpretation der Ergebnisse
9. Quellen

Downloads:
Das Projekt als PDF kann man hier herunterladen:
http://jomelo.de/r/arduino/kicker/hausarbeit_embedded.pdf
Das gesamte Projekt mit allen Verdrahtungsplänen einschließlich Software und erstellter Bibliotheken befindet sich hier:
http://jomelo.de/r/arduino/kicker/hausarbeit_embedded_geschwindigkeitsanzeige_kicker.rar

Funktionsbeschreibung:
Die Geschwindigkeit kann über verschiedene Wege mit der Hilfe von Lichtschranken ermittelt werden.
1. Möglichkeit:
Messung mit zwei Lichtschranken in dem Abstand zwischen den Lichtschranken bekannt ist. (Abstand L1 <-> L2)
2. Möglichkeit:
Messung mit einer Lichtschranke in dem die Größe des zu messenden Objektes bekannt ist. (Objekt Größe)
3. Möglichkeit:
Messung mit zwei Lichtschranken in dem die Größe des zu messenden Objektes bekannt ist. (Objekt Größe)
Aus den beiden Geschwindigkeit wird der Mittelwert gebildet.
4. Möglichkeit:
Messung mit zwei Lichtschranken in dem die Größe des zu messenden Objektes und der Abstand zwischen den beiden Lichtschranken bekannt ist. (Abstand L1 <-> L2) && (Objekt Größe)
Aus den drei Geschwindigkeit wird der Mittelwert gebildet. Somit kann die Messung noch genauer vorgenommen werden.

Die verschieden Möglichkeiten können über ein LCD Menü eingestellt werden auf das ich weiter unten eingehe.

Die Geschwindigkeiten werden mit einer Genauigkeit von zwei Nachkommastellen gemessen.

Die beste Geschwindigkeit wird dauerhaft unter der aktuellen und zuletzt Gemessenen Geschwindigkeit als Vergleichswert angezeigt.
Die besten 3 Geschwindigkeit werden nicht flüchtig gespeichert und können auch zu späteren Zeitpunkt über den Menüpunkt "Bestenliste" eingesehen werden.

Unter den Einstellungen kann man die Objekt größe sowie den Abstand zwischen den Lichtschranken einstellen. Die Einstelung lässt einen Bereich zwischen maximal 99,999 cm und minimal 0,009 cm zu.
Je nachdem wieviele Lichtschranken eingesteckt und welche Einstellungen getroffen werden ergeben sich oben die 4 Möglichkeiten wie die Geschwindigkeit bestimmt wird.

Die Lichtschranken lassen sich während des Betriebes an und ab stecken. Es wird solange man im Hauptmenü ist und die Messung neu startet die richtige Möglichkeit aus automatisch ausgewählt.

Damit die Lichtschranken (Infrarot) leichter genau eingestellt werden können, gibt es im Menü die Funktion Kalibrierung. Hierbei wird überprüft ob die Lichtstrecke zwischen den Lichtschranken in Ordnung ist. Wenn ja wird "ok" angezeigt. Wenn dies nicht der Fall ist, wird "nicht ok" angezeigt.
Im nächsten Punkt der Kalibrierung muss man objekte durch die Lichtschranken ziehen. Jedes Objekt wird gezählt. Wenn bei schnellen Bewegungen der Counter nicht hochzählt sind die Lichtschranken nicht genau justiert und müssen genauer eingestellt werden.
Wenn die Kalibrierung nicht erfolgreich abgeschlossen wird, kann keine genaue Geschwindigkeit gemessen werden.

Über eine Tastatur lässt sich ein Menü mit verschiedenen Ebenen bedienen. Hinter jedem Button befindet sich entweder eine neue Ebene oder eine Funktion die Ausgeführt wird. Die Menü Struktur ist wie folgt aufgebaut:
1. Start
2. Bestenliste
3. Information
4. Einstellungen
4.1. Objekt Länge
4.2. Abstand Lichtschranke 1 zu Lichtschranke 2 (L1<->L2)
4.3. Kalibrierung
4.4. Bestenliste zurücksetzen.
4.5. Werkseinstellungen

Um alle Details des Projektes zu verstehen oder um es nachbauen zu können sollte man sich das oben verlinkte PDF Dokument durchlesen. Alles (Verdrahtungspläne, Libs, Software, Kosten, Bilder) befindet sich in diesem Dokument.

Es hat sich am Ende des Projektes herausgestellt, dass sich nicht nur die Geschwindigkeit von Bällen gut bestimmen lassen, sondern von beliebigen Objekten (RC - Autos, Fahrrädern, ...).
Der Messbereich liegt zwischen 0,01 - 99,99 km/h.
Mit einer Maximalen Abweichung von
2,5 %  ab 90 km/h
1,5 %  ab 60 km/h
0,5 %  ab 50 km/h
<0,5 % unter 50 km/h

Es befindet sich sehr viele Bilder zu allen Schritten im PDF Dokument.

Falls Fragen offen sind werde ich die auch beantworten.


Zum Abschluss noch ein paar Bilder:

Hauptmenü


Geschwindigkeitsmessung mit einer Lichtschranke


Objektgröße verstellen

Erklärung wie es geht

Durchführung


« Last Edit: January 14, 2013, 05:58:27 am by Jomelo » Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Jomelo,

herzlichen Dank für die Vorstellung Deiner Hausarbeit.
Ich habe mal einen kurzen Blick hinein geworfen und denke ich werde bei der Programmierung viel lernen können für eigene Projekte.

Einige grundsätzliche Fragen hätte ich:
- wird die Hausarbeit benotet ?
- auf was wird geachtet ?
- ist Rechtschreibung wichtig für die Benotung ?
- ist die Verarbeitungsqualität der Baugruppen relevant ?

nochmals Danke
Kurti
« Last Edit: September 29, 2011, 04:12:18 am by kurti » Logged

Es gibt nur 10 Arten von Menschen: die, die das Binär-System verstehen und die, die es nicht verstehen.

Germany, Osnabrück
Offline Offline
God Member
*****
Karma: 25
Posts: 572
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Kurti,

also zu deinen Fragen:
zu 1:
Jap, die Hausarbeit wurde benotet, sie ersetzt eine Klausur und gibt 5 Credits. Die Note ist mit relative gut ausgefallen. Abzüge an der Note gibt es fast immer.

zu 2:
Bei einer Hausarbeit gehen viele Dinge mit in die Bewertung ein. z.B.:
- ordentliches Aussehen
- die Qualität und Art wie die Aufgabe gelöst wurde
- wie man an die Aufgabe herangeht
- ... alles was man sich sonst auch noch vorstellt kann

zu 3:
Ich denke die Rechtschreibung spielt auch eine Rolle, aber inwiefern das die Note nach unten ziehen kann weiß ich nicht.
Man versucht ja immer alle Fehler zu finden.

zu 4:
Die Verarbeitungsqualität ging in diesem Fall nicht mit in die Benotung ein.
Die Hausarbeit wurde im Fach "Embedded Systems" geschrieben. In diesem Fach liegt der Schwerpunkt auf der Software in Kombination mit dem Verwendeten Kontroller.
Ich durfte mir einen Kontroller aussuchen und hätte z.B. auch einen Infinion Chip mit 40 Mhz  und einem "Real Time OS" nehmen können.
Aus dem Grund habe ich erst eine Messung durchgeführt, wie schnell der Interrupt reagiert und welche Abweichungen bei hohen Geschwindigkeiten entsteht vom Kontroller her entstehen.

Im laufe der nächsten Woche werde ich nochmal ein Beispielprogramm zur  LcdMenu2 Klasse vorstellen. Das beinhaltet auch die Funktions Abwicklung mit Abbruchkriterien.
Man ruft über das Lcd eine Menüpunkt auf und das Programm bleibt dann immer in diesem Menupunkt.  
« Last Edit: May 28, 2013, 03:14:20 am by Jomelo » Logged

Germany
Offline Offline
Edison Member
*
Karma: 44
Posts: 2261
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Schöne Projektvorstellung! Ich denke nicht, dass die Rechtschreibung sehr stark eingeflossen ist, schließlich ist das keine Bachelor-, Master- oder Diplomarbeit. Einige kleine Fehler sind mir aufgefallen, selbst hier auf dem Display "Kalibrirung" statt "Kalibrierung". Passiert schon mal, ich nehme mich da auch nicht aus.

Glückwunsch zur guten Note! Schade, dass mit der Messeinrichtung nicht mehr richtig gespielt werden kann, wenn du das noch hinbekommst, bist du der Größte! smiley-grin
« Last Edit: September 29, 2011, 02:44:23 am by sth77 » Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Full Member
***
Karma: 3
Posts: 174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Jomelo,
herzlichen Glückwunsch zur guten Benotung.

Im laufe der nächsten Woche werde ich nochmal ein Beispielprogramm zur  LcdMenu2 Klasse vorstellen. Das beinhaltet auch die Funktionsabwicklung mit Abbruchkriterien.
Man ruft über das LCD einen Menüpunkt auf und das Programm bleibt dann immer in diesem Menüpunkt. 

darauf freue ich mich schon

Gruss
Kurti
Logged

Es gibt nur 10 Arten von Menschen: die, die das Binär-System verstehen und die, die es nicht verstehen.

Germany, Osnabrück
Offline Offline
God Member
*****
Karma: 25
Posts: 572
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@sth77
Ich habe zu diesem Projekt noch eine kleine Erweiterung gebaut, die ich im Moment noch privat teste. Die Lichtschranke wurde durch einen Laserpointer und einen Fototransitor ersetzt, damit größere Genauigkeiten erreicht werden. (Infrarot lässt sich so schlecht justieren).
Das ganze wurde dann in einen alten Kneipenkicker eingebaut. Die Lichtstrecke befindet sich hinter der Torlinie im Tor. Dadurch ist der normale Spielbetrieb wieder gesichert.

Die Tore werden erfasst und ein Spiel nach Zeit ist auch möglich. Die Bodenplatte wurde durch eine Plexiglasplatte ersetzt, die über RGB Led`s von der Seite indirekt in verschiedene Farben beleuchtet werden kann. Jede Spielseite so wie die Torbereiche sind einzelne Schaltkreise, so dass bei einem Hattrick von einem Spieler gewisse Effekte gezeigt werden könne.

Als Basis dient hier der AtMega 1280. 

Das ganze ist leider so auf den Kicker abgestimmt das es nicht in jeden Kickertisch eingebaut werden kann.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Also ich habe auch vor eine Geschwindigkeitsmessung für ein kicker zu bauen. Hab aber ein bischen andere Teile. Nämlich einen adruino mega, ein lcd keypad shield, ir led undSFH300 NPN-Silizium Fototransistoren. Ich habe mir jetzt mal deine Arbeit angeschaut und finde sie sehr gut für mich auch als Grundlage allerdings habe ich zu dem adruino text noch eine Frage welche Lib ist dieinclude <LCDMenu2.h>? denn immer wenn ich deine Code mal überprüfe kommt bei mir: no matching fundtion for call to 'Menu::Menu(const char[22])'. Ja gut das wären meine ersten Frage und würde noch gerne hören ob die Teile gut geeignet sind oder eher nicht. Danke schon mal smiley
Logged

Offline Offline
Faraday Member
**
Karma: 79
Posts: 2716
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das Menü gibt es als eigenständiges Projekt:
http://forum.arduino.cc/index.php?topic=73816.0

Beachte dabei, dass sich da wahrscheinlich inzwischen einiges geändert hat.

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Also ich habe mittlerweile eine Menüführung fertig gestellt welche auch problemlos funktioniert. Allerdings habe ich nun Probleme mit den Lichtschranken und zwar weiß ich nicht wirklich was ich da in den Programtext zu schreiben habe und wie ich meine Teile stecken muss eine kleine Hilfe wäre echt super. Danke  smiley-draw
Logged

Germany, Osnabrück
Offline Offline
God Member
*****
Karma: 25
Posts: 572
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Da ich im Moment keine Details zu dem Projekt habe kann ich nur einfach ein paar Vorschläge geben.
Die Vorschläge verwenden Pseudo-Code der so direkt nicht lauffähig ist, dieser soll nur darstellen wie du es machen könntest.

Verwendest du eine Lichtschranke oder zwei Lichtschranken auf einer Seite ?
Bei einer Lichtschranke kann man die Unterbrechungszeit messen. Bei zwei Lichtschranken kann man mit beiden die Unterbrechungszeit messen und die Zeit Differenz zwischen den Lichtschranken. Dann würde man auf drei Werte kommen die gemittelt werden könnten. 

Jede Lichtschranke wird mit einem Interrupt Pin vom Arduino verbunden. (Achte auf die Ausgangsspannung, es sollte ein digitales Signal angeschlossen werden, keine 12V oder ähnliches). Der Interrupt kann bin  "on_change" so konfiguriert werden, dass dieser bei jedem Flankenwechsel eine Funktion aufruft. In dieser Funktion (Interrupt Handler) kannst du dann z.B. mit millis() die Zeit zwischen zwei Flankenwechseln messen. Werte die kleiner 1ms und größer 500ms sind, sind Fehlerwerte. In der Interrupt Funktion sollte keine Seriellen oder Displayausgaben stehen, da diese sehr langsam sind und die Funktion möglichst schnell abgearbeitet werden soll.

Beispiel-PseudoCode:
Code:
uint8_t intH_licht_1_status = 0; //0=start zeit messen // 1 = end zeit messen
unsigned long licht_1_start_time = 0;
uint16_t licht_1_time = 0;

void intHandler_Lichtschranke_1()
{
  if(intH_licht_1_status == 0 && licht_1_time == 0) {
    intH_licht_1_status = 1;
    licht_1_start_time = millis();
    //funktion hier beenden
    return;
  }
  else if(intH_licht_1_status == 1 && (millis()-licht_1_start_time) > 1 && (millis()-licht_1_start_time) < 500 && licht_1_time == 0) {
    //end wert setzen
    intH_licht_1_status = 0;
    licht_1_time = millis()-licht_1_start_time;
  }
  else if((millis()-licht_1_start_time) < 500)
  {
     //fehler zeit diff zu groß messung zurücksetzen
     intH_licht_1_status = 0;
     licht_1_time = 0;
  }
}

Die Funktion muss bei der Initialisierung des Interrupts angegeben werden.

Sobald eine Zeit gemessen wurde, steht diese in der Variable licht_1_time.  Wenn man nun die Variable auf 0 setzt wird die Messung erneut aktiviert und der Wert überschrieben.

Ich hoffe das Hilft dir ein wenig weiter. Für mehr Lichtschranken kann die Funktion kopiert werden oder es kann geschickt mit Referenzen gearbeitet werden, damit der Code nicht zu groß wird.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Also ich verwende zwei Lichtschranken meine Frage wäre jetzt noch wie muss ich das ganze schalten die ir led auf einen digitalwert high würde ich mal sagen und dann noch den fototransistor auf analog Input oder wie ich hab davon einfach ka im Moment.
Logged

Germany, Osnabrück
Offline Offline
God Member
*****
Karma: 25
Posts: 572
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dann solltest du dich noch ein wenig mit den Grundlagen der Analogelektronik beschäftigen.

Vcc = 5V
Die IR Diode sollte dauerhaft über einen Widerstand an Vcc liegen.
Der Fototransistor kann zwischen Vcc und Gnd liegen und sollte ein Widerstand im zweig haben, damit kein direkter Kurzschluss entsteht.
Von dort kannst du dann auch das digitale Signal abzwacken und zum Arduino schicken. Hier am besten auch noch einen Widerstand einsetzen.
Das wäre die kürzeste Variante, je nachdem wie schnell dein Fototransistor schaltet oder die Kurve des Transistors ansteigt/schwankt benötigst du noch Filter / Verzögerungs Elektronik.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Also ich glaube ich verstehe jetzt einiges mehr allerdings würde ich mich freuen wenn du mir hier kurz helfen könntest. Da ist das Datenblatt von meinem Fototransistor http://www.stanford.edu/class/ee122/Parts_Info/datasheets/sfh300.pdf. Kannst du mir sagen was für Widerstände und welchen sonstigen Teile ich mir noch dazu besorgen sollte?
Logged

Germany, Osnabrück
Offline Offline
God Member
*****
Karma: 25
Posts: 572
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi, das weiß ich so nicht.
Ich verwende immer Standardelemente. Wenn ich dann doch mal eine neuen Fototransistor verwende dann Baue ich mir die Schaltung auf einem Steckbrett auf und mess die Signalverläufe mit einem Ossi, so dass ich mir sicher sein kann, das es auch läuft.
Stell die Frage doch für alle allgemein anstatt in diesem Thread, vielleicht wurde das Bauelement schon von jemandem verwendet.
Logged

Offline Offline
Faraday Member
**
Karma: 79
Posts: 2716
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Einfach eine Emitterschaltung damit aufbauen. 10k für den Kollektorwiderstand sind da üblich. Beachte dabei das das ein Inverter ist.

Hier:
http://www.mikrocontroller.net/attachment/90046/SFH300_UART.JPG
Logged

Pages: [1] 2   Go Up
Jump to: