Sensorik

Aus Kicker
Zur Navigation springenZur Suche springen

Sensorik der gegnerischen Spielfiguren

Um die Mögloichkeit zu haben das später eine Spielstrategie zu entwickeln ist es wichtig zu wissen wo und wie die Gegnerfiguren stehen. Dieses soll nach Möglichkeit absolut geschen um Kalibrirungen am Anfang zu vermeiden und einen "einfachen" Plug&Play-Betrieb zu realisieren. Als Problem gestaltet sich wie auch bei den Antrieben, dass rotatorische und lineare Bewegung gleichzeitig erfasst werden müssen. Daher scheiden einfache Absolut-Dreh-/Winkelgeber aus, da das Gehäuse immer mitgeführt werden müsste. Nach ersten Überlegungen über eine gleichzeitige Bewegung in zwei Achsen wurden wir auf das System der guten alten Kugelmaus aufmerksamm. Doch stellte sich leider herraus, das hier keine Absolutwert-Fähigkeit vorliegt. Desweiteren sollte die Sensorik den Spieler in keinster Weise behindern geschweigeden die Bewegung der Stangen beinträchtigen.

Linearbewegung

Zur Messung der Stangeverschiebung bieten sich daher folgende Lösungen an:

Messung mittels Ultraschall:
z.B. Waycon UFA 1002/1003:
Messbereich: 1000mm
Genauigkeit: 1,5mm
Reaktionszeit: 100ms
allerdings ist die sehr lange Reaktionszeit zu beachten!

Messung mittels Triangulationslaser:
z.B. Waycon LAS T-500:
Messbereich: 100-600mm
Genauigkeit: 2mm
Reaktionszeit: 0,9ms

Messung mittels Induktivität:
Die Spielstange taucht in eine Luftspule ein und verändert dadurch die Induktivität der Spule. Dieses kann recht einfach durch Beschaltung als Hoch- oder Tiefpass gemessen werden.

Rotationsbewegug

Zur messung des Drehwinkels gibt es ebenfalls verschiedene Ansätze:
Auf das Ende einer Spielstange wird eine dünne runde Scheibe montiert auf die durch ein Muster z.B. ein kleiner und ein großer Punkt aufgebracht wird. Dieses Muster kann man dann mittels einer billigen Webcam aufnehmen und von einem Algorhtmus analysieren lassen. Desweiteren kann man in die Scheibe einen Binärcode (z.B. 4 Bit) reinstanßen und die Stellung mit IR-Dioden und Fototransistoren aufnehmen. Dabei ist darauf zu achten, das immer nur eine IR-LED und ein Fototransistor aktiv sind, da es sonst durch die starke Streuung des Infrarotlichts zu inkosistenten Daten kommt wenn die Scheibe nahe der IR-LEDs steht.
Zeichnung der Inkrementalscheibe
Hier das kleine Asamblerprogramm für einen Atmel (z.B. Atmega8 mit 4MHz):

         .NOLIST                    ; List-Output unterdrücken
 .INCLUDE <m8def.inc>       ; das gibt es für jeden Controllertyp
 .LIST                      ; List-Output wieder aufdrehen
 .CSEG                      ; was nun folgt, gehört in den FLASH-Speicher

.equ TFLAG = 0
 ;------------------------------------------------------
 ;     Start Adresse 0000
 ;------------------------------------------------------
 RESET:
     rjmp INIT           ; springen nach "INIT"




 .ORG INT_VECTORS_SIZE    ; dadurch haben wir für die Vektoren Platz gelassen
 INIT:  
 ;------------------------------------------------------
 ;     INITIALIZE
 ;------------------------------------------------------
		ldi r24,high(RAMEND)     ;Stack Pointer setzen 
		out SPH,r24              ; "RAMEND" ist in m8def.inc (s.o.) festgelegt
		ldi r24,low(RAMEND)      ; 
		out SPL,r24              ;


 ;------------------------------------------------------
 ;   eigene Initialisierungen
 ;------------------------------------------------------

;Status LED an Port B 5, Starttaster an Port B 4
;Fototransistoren Port B 0-3, IRLED Port C 0-3, LED für Anzeige Port D 0-7

                ;configuration der Datadirection Register der I/O Ports
		clr 	r16
		ldi	r18, 0b11111111
		out	DDRD,	r18
		ldi	r18, 0b00100000
		out	DDRB, r18
		ldi	r18, 0b00011111
		out	PORTB, r18
		ldi	r18, 0b00000000
		out	PORTC, r18
		clr	r18
		clr	r17



LOOP1:	
		sbis  	PINB,4     ;überprüft ob der Starttaster einmal gedrückt wurde, wenn nicht wird die nächste Anweisung übersprungen
		rcall	LOOP2
		rcall	LOOP1

                ;Ab hier Endlosschleife

LOOP2:	        sbi	PORTB, PB5          ;Einschalten der Staus-LED
LOOP3:
                ;Anfang für 1. LED
		sbi	PORTC, PC0  ;Anschalten der IR-LED	
		cbi	PORTD, PD0  ;löschen des alten Wertes
		in	r17, PINB   ;einlesen des neuen Wertes vom Fototransistor in das Register 17
		sbrc	r17,0       ;üerspringt die nächste Anweisung wenn Bit 0 im Register 17 "NULL" ist
		sbi	PORTD, PD0  ;setzt das entsprechen Bit im Port D für die Visualisierung der Stellung
		cbi	PORTC, PC0  ;Schaltet die IR-LED aus

                ;Anfang für 2. LED		
		sbi	PORTC, PC1	
		cbi	PORTD, PD1
		in	r17, PINB
		sbrc	r17,1
		sbi	PORTD, PD1
		cbi	PORTC, PC1

                ;Anfang für 3. LED		
		sbi	PORTC, PC2	
		cbi	PORTD, PD2
		in	r17, PINB
		sbrc	r17,2
		sbi	PORTD, PD2
		cbi	PORTC, PC2

                ;Anfang für 4. LED		
		sbi	PORTC, PC3	
		cbi	PORTD, PD3
		in	r17, PINB
		sbrc	r17,3
		sbi	PORTD, PD3
		cbi	PORTC, PC3
		rjmp	LOOP3



Kombinationen beider Bewegungen

Ein Ganz anderer Ansatz ist die Verwendung von Hallsensoren. Dabei werden kleine Magnete auf dem Stagenende befestigt und eine Art Röhre üder das Ende gestülbt und an dem Kicker befestigt. In dieser Röhre sind nach innen hin Hallsensoren befestigt, die das Magnetfeld der Magnete dedektiert. Die Sensoren müsssen über die komplette verfahrstecke der Stange und rundrum um die Stange angebracht werden, so das eine Art Schlauch aus Hallsensoren gibt. Auch diese Methode ist Absolutwert-gebend. Leider gibt es soetwas nicht frei auf dem Markt zu kaufen und müsste daher selbst hergestellt werden. Mit dieser Methode kann gleichzeitig die Längs- und Drehbewegung ermittelt werden.


to be continude