WirelessWInspect
From [WearLab]
Andreas Kemnade & Ruediger Leibrandt
Informationen zur Wireless-Version des bewährten WInspect-Handschuh's.
Fehlerprotokolle bitte unter WinspectFehler eingeben!!!
Produzierte Handschuhe und Armbänder tragen Seriennummern. Bitte tragt den Aufenthaltsort der Handschuhe unter WInspectHandschuhSerienNummern ein.
Holger
WInspect steht für "Tragbares Inspektions Assistenzsystem" ( Wearable Inspection Assistant )
WirelessWInspect basiert auf der SCIPIO-Platine ( Semi-Complexe Intelligente Prgrammierbare I/O Platine )
Der WInspect ist eine Kombination aus Mobilcomputer ( Xybernaut ), head mounted display ( HMD ) und einem speziellen Handschuh. Der Handschuh verfügt über einen RFid-Scanner, drei Steuertasten, einem 1- / 2-Achsen Lagesensor sowie, in der Wireless-Version, ein Bluetooth-Modul.
Messe-Relevantes für Platinen-Revision 1.1:
Hinweis 1 : Bei einem Batteriewechsel benötigt der Mikrocontroller etwas Zeit, um sich mit dem Bluetoothmodul zu synchronisieren, und dieses braucht dann etwas Zeit, die Verbindung zum Hostcomputer aufzubauen. Dieser Vorgang kann zwischen 5 ( kurze Distanz, keine Störquellen ) und 30 ( Stahlbleche verhindern Sichtverbindung, z.B. Monitor mit internen Schirmblechen ) Sekunden dauern. ISt die Unterbrechung zu kurz, können sich ausserdem unter Umständen die Kondensatoren auf der Platine nicht vollständig entladen, weshalb beim Batteriewechsel bitte, bitte 10 Sekunden gewartet werden sollte, bevor das System wieder eingeschaltet wird.
Hinweis 2 : Die rote LED zeigt an, das das System unter Spannung steht, d.h. eingeschaltet ist.
Hinweis 3 : Um die Position der Auslösetaste ( aka Button 2 / analog linker Mausknopf ) vom Zeigefinger zum Mittelfinger zu wechseln müssen mit einem Lötkolben an Port SV5 die Pins 4 und 5 miteinander getauscht werden. Zählweise: entgegen dem Uhrzeigersinn, startend bei dem mit "1" markierten Pin; Pins 1-3 sind in diesem Szenario die Masse-Pins. Einfach erhitzen, herausziehen, und an neuer Stelle wieder einlöten.
Contents |
Spezifikationen SCIPIO-Platine:
PIC16F88 basiertes multifunktionales, variables Steuerungssystem mit 1* serieller und 2* 3-Draht-I/O Schnittstellen.
Kernsystem: PIC16F88 : -> 7-Kanal 10-Bit A/D-Wandler, UART, PWM-Generator, 2V-6V Versorgungsspannung, In-Circuit-Programming möglich, geringer Stromverbrauch, interner Oszillator, keine externen Komponenten für grundsätzliche Funktion benötigt. 2*8 frei programmierbare I/O-Pins, 7168 Bytes EEPRom Programmspeicher, 256 Bytes EEPRom-Datenspeicher, 368 Bytes SRAM
Steuerungsrezeptoren: 2-Achsen Neigungssensor und 3 Tasten : -> kann vollständig eine reguläre Computermaus ersetzen, Funktion wie Grafiktablet (Absolute Positionierung)
Primärinterface: MAX232 - serielles Interface : -> Universelles serielles Interface für direkte, seriell-Bluetooth- und seriell-WLAN-Verbindungen. TX, RX, GND und an RI ( Pin 9 ) 5V
Sekundärinterfaces: 2* Hilfsinterfaces - direkte Verbindung mit dem PIC16F88 : ->ein Interface dient der In-Circuit-Programmierung und verfügt über einen Pulsweitenmodulations-Ausgang um Servo's und I/O-Subsysteme anzusteuern bzw. Daten entgegen zu nehmen. 3 I/O-Pins, 1* PWM-Ausgang, Masse und 5V. Das zweite Interface verfügt über 3* I/O-Pins, Masse und 5V sowie über einen OpAmp-entkoppelten Eingang, um analoge Signale verarbeiten zu können.
Versorgung der Platine in Abhängigkeit von den externen Komponenten mit Lithium-Knopfzellen, NC-Akkus oder 5V-Festspannung von extern.
RFid-Interface : RF-ID-Reader MR-1000
Bluetooth-Interface: PromiESD
Der Wireless-WInspect basiert auf eine SCIPIO-Platine mit einem seriellen Bluetooth-Interface und einem RFID-Scanner, das ganze eingebaut in einem schweren Arbeitshandschuh. Als Taster kommen REED-Relais, daß sind durch externe Magnete betätigte Schalter, zum Einsatz. Der Magnet zum Betätigen der "Taster" sitzt im Daumen des Handschuhs, die REED-Relais in den Seiten von Zeige-, Mittel-, und Ringfinger. Der Kontakt im Ringfinger entspricht der mittleren Maustaste und aktiviert den RFid-Scanner, während die beiden anderen der Menuesteuerung dienen.
Schnittstellenprotokoll:
Die Schnittstelle zum RS232-Bluetooth-Adapter wird mit 38400 baud 8n1 betrieben. Es wird alles in Blöcken von 2 Byte übertragen, wobei im ersten Byte angegeben wird, welche Art von Daten im zweiten Byte folgen. Es ist folgendes vergeben (ASCII-Code der folgenden Buchstaben):
-> A: X-Koordinate
-> B: X-Koordinate (wenn größer als 256)
-> C: Y-Koordnate
-> D: Y-Koordinate (wenn größer als 256)
-> E: Tasten (Bit 0-2)
-> F: RFID
-> G: Auxillary analog input
-> H: Z-Koordinate
-> I: Z-Koordinate (wenn größer als 256)
Physikalische Schnittstellen:
Die Platine verfügt über mehrere Schnittstellen, SV1 bis SV5, die im folgenden beschrieben werden:
SV1 ist die Programmierschnittstelle um den Mikrokontroller programmieren zu können. Neben der Funktion als Programmierstecker kann SV1 auch auch als ein Satz von 3 GPIO-Pins und einem GP-Output-Pin angesehen werden. Je nach Jumperstellung und Bestückung oder Version der Scipio-Platine kann SV1 auch ein 3-Draht serielles RS232 Interface sein.
Die Pinbelegung ist wie folgt: 1: +5V / VCC 2: 0V / GND 3: invertiert RB3 vom µC, reiner Ausgang, Pulsweitenmodulations-Ausgang 4: RB7 vom µC, I[[/O]], Programmieren: Daten 5: MEMCLR / RA5 vom µC, analogtauglicher I[[/O]], Reset, Programmieren: Schreibspannung 6: RB6 vom µC, I[[/O]] Programmieren: Clock
SV2 ist ein sekundärer GPIO-Port mit 3 analogtauglichen GPIO-Pins und einem analog-tauglichen, per CMOS-Operationsverstärker entkoppelten Input-Pin.
Die Pinbelegung ist wie folgt: 1: +5V / VCC 2: 0V / GND 3: RA0 vom µC, analogtauglich, I[[/O]] 4: RA1 vom µC, analogtauglich, I[[/O]] 5: RA3 zum µC, analogtauglicher Input-Pin, entkoppelt über CMOS-Operatiosverstärker 6: RA2 vom µC, analogtauglich, I[[/O]]
SV3 ist der für den Anschlus eines Neigungssensors vorbereitete Port. 1 analogtauglicher Input, 4 digitale Outputs.
Die Pinbelegung ist wie folgt: 1: n.a. 2: RA4 zum µC, analogtauglicher Input-Pin, entkoppelt über CMOS-Operationsverstärker 3: doppelt invertiert RA6 vom µC, gepuffert über Schmitt-Trigger CMOS Logik-Gatter 4: invertiert RA6 vom µC, gepuffert über Schmitt-Trigger CMOS Logik-Gatter 5: doppelt invertiert RA7 vom µC, gepuffert über Schmitt-Trigger CMOS Logik-Gatter, halbe Frequenz von Pin 3 für Sensoransteuerung 6: invertiert RA7 vom µC, gepuffert über Schmitt-Trigger CMOS Logik-Gatter, halbe Frequenz von Pin 4 für Sensoransteuerung
SV4 ist die Schnittstelle zum Bluetooth-Modul. Je nach Bestückung oder Version der Scipio-Platine kann es entweder ein 3-Draht serielles RS232 Interface sein, oder ein Zweidraht-TTL Interface.
Die Pinbelegung ist wie folgt: TTL: 1,2,4,6,7,8,9,10: n.a. 3: TX 5: RX 11: +5V / VCC 12: 0V / GND Oder: RS232: 1,4,5,6,7,8,9,10: n.a. 2: TX 3: RX Pin 5 muss manuell mit GND verbunden werden.
SV5 ist die Schnittstelle zu den Tastern, den Bedienelementen. Im Falle des Wireless WInspect drei Reed-Relais an den Fingerseiten. Natürlich kann SV5 auch als 3-Draht Schnittstelle konfiguriert werden. Generell stellt SV5 drei GPIO-Pins zur Verfügung.
Die Pinbelegung ist wie folgt: 1,3,5: GND 2: RB4 vom µC, Taste 1 / Linke Maustaste (für Rechtshänder) 2: RB0 vom µC, Taste 2 / Rechte Maustaste (für Rechtshänder) 2: RB1 vom µC, Taste 3 / Mittlere Maustaste (für Rechtshänder)
Grundsätzlich sind alle SCIPIO-Platinen identisch, was Soft- und Hardware angeht. Allerdings sind durch die unterschiedlichen Anforderungen an die Schnittstellen SV4 (TTL/RS232) und SV1 (Programmierung/RS232/TTL) folgende Varianten möglich:
Kein RS232 vorgesehen: Auf solchen Platinen ist der MAX232 im Layout nicht vorhanden. Dementsprechend sind für SV1 keine Jumper zur Umschaltung vorgesehen und auch nicht für SV4. SJ1 bis SJ7 exisitieren nicht im Layout
Platine RS232-tauglich, aber nicht bestückt: Betrifft derzeit SCIPIO V1.1 Platinen. Jumperstellungen in TTL-Pegel-Stellung ( SV4: Jumper-Pads jeweils in Stellung 2-3 , 1 frei ; im Schaltplan nachvollziehbar / kontrollierbar. SV1: Jumperpads jeweils in "prg"-Stellung gebrückt ). Pin 8 mit Pin 9 und Pin 7 mit Pin 10 am MAX232-Lötfeld verbunden.
Jumperstellungen für SV1: SJ1 3-2 SJ2 3-2 SJ3 2-1 SJ4 2-1 SJ5 egal
Platine RS232-tauglich und bestückt: MAX232 bestückt, Ladekondensatoren für MAX232 bestückt, Jumper für SV4 in Stellung 1-2 / 1-2, Pad 3 jeweils frei. Wenn SV1 nicht als zweiter serieller Port konfiguriert ist muss SJ5 unbedingt komplett geschlossen werden, da ansonsten der MAX232 Störungen bis in den HF-Bereich produzieren könnte.
Jumperstellungen für SV1: Jumper: RS232: TTL[[/Programmieren]]: SJ1 1-2 2-3 SJ2 1-2 2-3 SJ3 2-3 1-2 SJ4 2-3 1-2
Andere Pins & Pads, und ihre Funktionen:
JP1: Dient der nachträglichen Umschaltung zwischen 5V Fremdspeisung ( JP1 offen, Spannungsversorgung erfolgt über EXPWR / JP2 durch extern aufbereitete 5V ) oder aber der Versorgung über die On-Board 5V Spannungsversorgung ( JP1 geschlossen ).
JP2: EXPWR: Externe 5V Spannungsquelle, z.B. über ein Gerät, das die SCIPIO-Platine als Bluetooth-Interface benutzt.
LED: Anschluss für eine LED, die parallel zum PWM-Ausgang an SV1 arbeitet. Dient dem Debuggen, als Status-LED oder Funktionskontrolle.
Supportmodule:
Programmierstecker: 5-Poliger Pfostenstecker ( Männchen ) auf 2*3 poligen Pfostenstecker ( Weibchen ) Funktion: Verbindet SV1 mit einem beliebigen zur Programmierung von PIC-µC geeigneten Gerät. Pinbelegung:
SV1: Prg.-Stecker: 1 3 2 1 3 4 4 5 5 6 2
Die Zählweise der Pins am Programmierstecker ist dabei identisch mit der an einem Sub-D 9-Pol-Stecker: Von Links nach Rechts; Kunststoff-Führungsnut oben; die Kontakte / Pins gucken einen an.
An einem System um die Orientierung / Ausrichtung des Neigungssensors festzulegen, wird noch gearbeitet.
Die Benutzeroberfläche ist in Java implementiert worden. Sie wird als das Projekt "Winspect Wireless" bei auriga.wearlab.de gehostet (http://auriga.wearlab.de/projects/winspect2/). Die Software ist aus dem CVS zu bekommen:
CVSRepository auriga.wearlab.de:/sfhome/cvs/winspect2 Modul winspect
Vorbereiten der Datenbank
1. Datenbank und Benutzer anlegen
mysql -uroot -p mysql> CREATE DATABASE winspect; Query OK, 1 row affected (0.15 sec) mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> GRANT ALL ON winspect.* TO winspect@'localhost'; Query OK, 0 rows affected (0.00 sec)
!!! Bei manchen JRE klappt kein Verbindungsaufbau zu localhost. Abhilfe schafft die IP oder der Rechnername !!!
2. Passwort setzen und aktivieren
midi@micado:~> mysqladmin -uwinspect -hlocalhost password winspect; midi@micado:~> mysqladmin -uroot -p flush-privileges
Vorbereiten des Quellcodes
- Die Datei winspect/src/tzi/winspect/winspect.properties an die Einstellungen der Datenbank anpassen
- Die Datei winspect/src/tzi/UserInput/FileTransponder/fileTransponder.properties an den Barcodescanner anpassen
Kompilieren der Software:
- Nach dem auschecken in das Verzeichnis winspect wechseln
- Das script INSTALL ausführen um die Umgebungsvarriablen zu setzen
- In das Verzeichnis src wechseln
- make sql prepare all start
sql: füllen der leeren Datenbank
prepare: Verzeichnisse anlegen und .propoerties anlegen
doc: javadoc erzeugen
all: kompilieren
start: programm starten
clean: sauber machen des src/
realclean: clean + doc löschen + class löschen
rebuild: realclean prepare all
run: all start
Starten des Systems:
1. Einschalten, 2. Abwarten bis die Bluetooth-Verbindung da ist. 3. Bluetooth-RS232-Adapter aufstecken.
Beschreibung des Startvorgangs:
Auf dem winspect wird in /etc/init.d/start-winspect
der Xserver gestartet und daraus dann /home/winspect/.xsession.
Dort wird der Window-Manager ratpoison gestartet und ein xterm geöffent, in dem das Skript /home/winspect/start-winspect.sh gestartet wird. Dort wird der winspect-Maustreiber und das Java-Programm gestartet.
In der /etc/bluetooth/hcid.conf ist /usr/bin/bluez-pin-list als PIN-Helper eingetragen. Das Skript liest aus /etc/bluepinlist die PINs aus, so dass man sie nicht von Hand eingeben muss.
Xscipio Maustreiber
Der Maustreiber ist im CVS-Modul aux enthalten. Er muss gegen die Bibliotheken X11, Xtst und bluetooth gelinkt werden, also gcc -o xscipio xscipio.c -lX11 -lXtst -lbluetooth
Auf auriga.wearlab.de kann man folgendermaßen die Ipaq-Version kompilieren:
arm-linux-gcc -o xscipio xscipio.c -I /usr/local/arm-devel/arm-linux/X11R6/include/ -DDISABLE_UDEV_IFACE -L /usr/local/arm-devel/arm-linux/X11R6/lib -lX11 -lXtst -lXext -lbluetooth
Aufruf üblicherwesie:
xscipio :Scipio 1 /tmp/rfid/tag x11
In der syslog.conf sorgt folgende Zeile für ein getrenntes Logging:
local1.* -/var/log/xscipio.log
Ipaq-Installation
In /etc/rc2.d/S99x wird /usr/local/bin/start-winspect.sh gestartet.
Dort wird ein eventuell laufendes winspect beendet und darauf gewartet, dass in Socket 0 (der Xserver erkennt in Socket 1 keine Karte!) eine PCMCIA-Karte steckt. Wenn eine Karte erkannt wurde, wird der Xserver Xfbdev-new gestartet und bluetooth aktiviert. Anschließend wird der Xscipio Maustreiber gestartet. Die erkannten RFID-Tags werden in die Datei /tmp/rfid/tag geschrieben. Das Winspect java-Programm wird aus dem Skript /ext/winspect/winspect gestartet.
Die Bluetooth-PINs werden genauso wie auf dem MA4 eingestellt. Man muss darauf achten, dass hciattach in der SCHED_RR scheduling policy (Realtime-Modus) läuft Andernfalls läuft Bluetooth sehr instabil.
Auf dem Ipaq muss der Xserver Xfbdev-new gestartet werden: Xfbdev-new -card pcmcia -screen 640x480x8x60 Der Maustreiber muss gestartet werden mit dengleichen Parametern wie auf dem MA4. Um die Winspect-Java-Software zu starten, gibt es /ext/winspect/start.sh
Der Patch für den Xserver von freedesktop.org, der standardmäßig bei familiar benutzt wird, befindet sich auf, http://auriga.wearlab.de/~andi/voyager.diff
Der Xserver, der bei Familiar 0.7.2 standardmäßig dabei ist, crasht beim Laden von bestimmten Fonts, die eigentlich nur java benutzt, mit der Folge dass man keine Java-Anwendungen auf dem IPAQ starten kann. Das liegt dann an der libXfont. Wenn der Fehler auftritt, hilft folgender Patch: http://auriga.wearlab.de/~andi/xfont.diff
Data Services
Zusätzlich zum DBService gibt es jetzt ein XMLService.
[#logging]
Logging
Der Winspect loggt jetzt Änderungen der Maustasten, um überbrüfen zu können, ob es Probleme bei dem JNI Interface gibt, mit dem die Mausdaten abgefragt werden.
Das Logverzeichnis und der Mauslog Dateiname können in der Datei
tzi/config.properties
eingestellt werden. Die Datei wird automatisch bei einem make prepare in das class/tzi Verzeichnis kopiert.
TODO
Neue Winspect Aufgaben Liste (02.2005)
25.10. Interne Deadline 2.11. Müssen wir unbedingt hiermit fertig sein.
Java Programm (Midi's Tasks)
- Weissen Hintergrund schwarz färben, so dass er im HMD nicht blendet. Unter Windows wurde das damit geregelt, dass das Thema "Kontrast Schwarz" für den gesamten Desktop verwendet wurde.
- Umlaute werden nicht dargestellt.
- RFID Tags werden vom Programm nicht erkannt. Vielleicht guckt es an einer anderen Stelle, als sie vom Handschuh-Treiber gespeichert werden?
-> erledigt
- Die Auswahlliste bewegt sich sehr ruckelig auf und ab. Woran kann das liegen? Was kann man dagegen tun?
- Startprobleme: manchmal startet das W2inspect Programm einfach nicht.
- Wenn es auf dem MA IV einwandfrei läuft: Portierung auf unseren PdaWearable ! Wenn es nicht klappt, dann zeigen wir die Demo auf dem MA IV.
PdaWearable (Andis Tasks)
- Handschuh anschließen, an MA IV und PDA -> erledigt
- Xserver Xipaq reparieren: der verträgt sich leider nicht mit Java-Programmen. Der Xfbdev funktioniert in der neuen Version mit Java, kann dafür aber nur das LCD und nicht die HP VGA Karte ansteuern. Alternativ dazu könnte man VNC benutzen. --> Xfbdev ist gepatched und zeigt auf dem externen Display an
- Suspend funktioniert nicht. Der PDA geht nach dem Suspend nicht mehr an.
- PromiESD konfigurieren --> PromiESD wird automatisch konfiguriert, so dass es mit der PIN 0000 Verbindungen aufnimmt
und mit 38400 Baud arbeitet. Dazu werden folgende AT-Befehle verwendet:
AT+BTNAME="Scipio"
AT+BTMODE,3
AT+BTSCAN,3,0
AT+UARTCONFIG,38400,n,1
ATZ
Platine V2-002 hat zusätzlich eine PIN eingestellt.
Handschuh (Rüdigers Tasks)
- PromiESD anschließen, sobald es geliefert ist. -->erledigt
- Alles schön vernähen ;-)
Insgesamt
- Dreimal testen.
Steuerung der Scipio-Platine per Bluetoth
Die Scipio-Platine lässt sich zur Laufzeit in gewissen Grenzen konfigurieren. Die entsprechenden Befehle sind mit einem Newline-Zeichen am Ende zu übertragen. Es dürfen keine Backspace-Zeichen darin auftauchen.
Einschalten des 1Wire-Bus-Modus
Um 1wire-Bus-Befehle senden zu können, muss einmal
1WIRE
gesendet werden. Danach kann folgendermaßen im Binärmodus weitergearbeitet werden:
0x90 Zurücksetzen in den normalen Modus 0xa0 1wire-Bus-reset, 1 wird zurückgesendet, falls sich ein Gerät auf dem Bus befindet, ansonsten wird 0 gesendet 0xc0 ein Byte vom 1wire-Bus lesen 0x80 xx ein Byte auf den 1wire-Bus schreiben
Einschalten des Programmier-Modus
Um eine zweite Scipio-Platine, die mit dem Sci2Sci-Adapter verbunden ist, programmieren zu können, wird die Platine in den Programmier-Modus geschaltet:
PROGEXT
In diesem Modus gibt die Platine keine Sensordaten zurück. Die weiter Benutzung ist im Program a PIC Microcontroller -HOWTO beschrieben.
Das dazu verwendete Protokoll ist in Scipio-Programmiermodus beschrieben Die benötigten Programme befinden sich im aux-Modul genauso wie der der xscipio-Maustreiber. Die Sourcen für den PIC können mit
make pic
übersetzt werden.
Konfiguration der übertragenen Daten
Nach dem Einschalten wird alles übertragen. Einstellungsmöglichkeiten:
PROTOCOL data ON|OFF
wobei data folgendes sein kann
SENDX x-Achsen-Daten SENDY y-Achsen-Daten SENDZ z-Achsen-Daten (Ab Version 2.0) SENDB Button-Zustand SENDRFID RFID-Daten SENDTYPE Type-Byte SENDAUXIN Analog-Daten vom Auxillary input (RA3) (ab Version 1.1, z.Zt. auf V2-005)
Default (nach dem ersten Verbindungsaufbau) ist: SENDX,SENDY,SENDB,SENDRFID SENDTYPE auf ON, SENDAUXIN auf off.
Konfiguration des Summers
Einstellungsmöglichkeiten
SOUND event freq duration
Freq gibt die Frequenz indirekt (als Teiler von einer vorgegebenen Frequenz) als Dezimalwert an. duration gibt die Dauer an (Bereich 0-127, wobei >128 den Ton ausschaltet) event kann folgendes sein:
CONN wenn das [[PromiESD]] den String CONNECT gesendet hat DISCONN wenn das [[PromiESD]] den String DISCONNECT gesendet hat. RFID wenn ein RFID-Tag gescannt wurde BUTTON wenn eine der Reed-Kontakte betätigt wurde ATTENTION wenn die Zeichenkette ATTENTION gesendet wird (Ab 2.3)
Versionsausgabe
VERSIONMAJOR gibt die Major-Version als einzelnes Byte aus VERSIONMINOR gibt die Minor-Version als einzelnes Byte aus.
siehe auch: WinspectFehler, Xscipio Maustreiber, XMLService
