Info
Dieses Projekt widmet sich der Entwicklung eines lowcost 2d-Touchfelds. Damit soll man fast jede solide Oberfläche in ein Eingabefeld verwandeln können. Das ganze basiert auf der Bestimmung der Position von Vibrationen mit Hilfe von Piezo-Sensoren. Man klebt z.B. 3 sensoren auf einen tisch, dann tippt man irgendwo zwischen den sensoren mit dem Finger und berechnet mit den Laufzeitunterschieden der Vibrationen die Position.
Die Idee stammt von diesem Projekt: Slashdot-Artikel
Aufbau
Drei Sensoren nehmmen die Vibrationen auf. Ein Operationsverstärker pro Sensor verstärkt die Signale. Ein AVR wertet diese Signale aus und überträgt die Laufzeitunterschiede an ein Programm im Zieldevice.
Lokalisations-Software
Benutzt wird das sogenannte Hyperbelverfahren, für welches mindestens 3 Sensoren notwendig sind. Um je 2 der Mikrophone wird eine Hyperbel errechnet. Auf diesen Hyperbeln liegen alle Punkte die von den betroffenen Mikrophonen den selben (gemessenen) Laufzeit-Unterschied voneinander haben.
Soweit ist schon alles objektorientiert in JavaCode implementiert, muss aber wohl in C / Bascom 'übersetzt' werden, da eine Ausgabe aller Messwerte über die RS232 (serielle) Schnittstelle viel zu langsam ist!
Im Endeffekt werden wohl nur die "Klicks" relativ zu den Mikrophonen an das Zieldevice weitergeleitet. Wer sich gut mit Lösungen von etwas komplexeren Gleichungen auskennt, darf sich gerne melden :)
Es gilt nun noch den Schnittpunkt der Hyperbeln auszurechnen, also (gleichzusetzen oder ähnliches und) nach x aufzulösen ( a, b, p sind bekannt):
- Hyp1: y = sqrt(-a + b² (x-p)²)
- Hyp2: y = sqrt((x² +a) / b²) + p
Lösung
(sagt Derive)
x = (√((b + 1)·(b - 1)·(a·(b^2 + 1)^2 + b^2·p^2·(b^2 - 1))) - b^2·p·(b^2 - 1))/((b + 1)·(1 - b)·(b^2 + 1)) ∨
x = (√((b + 1)·(b - 1)·(a·(b^2 + 1)^2 + b^2·p^2·(b^2 - 1))) + b^2·p·(b^2 - 1))/((b + 1)·(b - 1)·(b^2 + 1)) ∨
x = (√(a·(b + 1)·(b - 1) + b^2·p^2) - b^2·p)/((b + 1)·(1 - b)) ∨
x = (√(a·(b + 1)·(b - 1) + b^2·p^2) + b^2·p)/((b + 1)·(b - 1))
Formel als Bild (klick me): Datei:Loesung.gif
Status Hardware:
- Sensoren wurden gekauft.
- Prototyp einer Operationsverstärkerschaltung existiert und wartet darauf vervielfertigt zu werden.
Beteiligte User:
Status Software Controller:
- Die Auslieferung der Messwerte hat begonnen :)
'touchsensor versuch 1
$regfile = "m32def.dat"
$baud = 9600
$crystal = 2000000
'long ist nicht wirklich gut in nem controller
'aber egal erstmal
Dim Aktiv As Long
Dim Inaktiv As Long
'das adc zeugs einstellen
Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word , Channel As Byte
Channel = 0
'gibt die anzahl der messungen während eines peaks
'und der pause danach aus
Do
W = Getadc(0)
If W > 4 Then
Do
W = Getadc(0)
Incr Aktiv
Loop Until W < 4
Print "a" ; Aktiv
Aktiv = 0
Else
Do
W = Getadc(0)
Incr Inaktiv
Loop Until W > 4
Print "i" ; Inaktiv
Inaktiv = 0
End If
Loop
End
'beispiel output
'i3300 'lange pause
'i9 'störungen?
'i5 'störungen?
'a30 'klopfen start
'a18
'i10
'a89
'a20
'a442
'a100
'a105
'i9
'a107
'i3
'a99
'i17
'a71
'i13
'a111
'a281
'i8
'a142 'klopfen ende
'i15313 'lange pause
'a57 'mausklick start
'a266
'...
Fortlaufende News:
- 20.01.2007
Ein Klopfen mit einem Sensor kann sehr sicher festgestellt werden. Mit leichten Verbesserungen sollte die Hardwareseite keine Probleme mehr machen. Wir habe uns entschieden erstmal die Variante mit der Peak-Detection umzusetzen.
- 12.01.2007
Den Testaufbau an einen Mega32 gehängt und ein wenig mim Bascom rumgespielt. Ich glaub der Chip hat ein Problem. Bei nem Takt über 2Mhz bekomm ich keine gescheite serielle Verbindung mehr hin.
- 11.01.2007
Ersten Testaufbau für die Verstärkerschaltung(noch nicht mit dem "Wunsch-OpAmp") getestet, auf dem Messgerät sehen die Daten schon verwertbar aus. Getestet wurde bis jetzt nur in der Ebene und nicht an der Wand.
- 09.01.2007
3 verschiedene Sensoren gekauft und erste vorsichtige Messungen durchgeführt.