Multitouch Table FH Ingolstadt: Unterschied zwischen den Versionen

 
(25 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
= Git-Repository =
 
We created a Git repository for our Multitouch Table Project which contains schematics and layouts for the electronics as well as the source files for our software.
 
You can [http://git.bingo-ev.de/fh-in/mtt-projekt.git/ view the repository online] or clone it using the following command (read-only access):
 
git clone http://git.bingo-ev.de/git/fh-in/mtt-projekt.git
 
= Hardware =
 
 
Total falsches 3D-Modell: [[File:Mtprojekt-fh-sketchup.skp]] - korrekte version folgt ;)
 
== MTT-Construction ==
 
[[Datei:MTT Contruction.JPG|thumb]]
[[Datei:MTT-Construction2.JPG|thumb]]
 
=== General Remarks ===
 
In principle the Multitouch Table (MTT) consists in a box with the multi-touch screen mounted on top in the shape of a cube. For more extensive service work the touch screen can be simply removed from the top.
Smaller service adjustments on components like mirror, camera, or beamer can be accomplished
via a second service opening on the back of the table.
The size of the lower body is defined by the distance of the beamer and the actual size of the touch screen in order to achieve
a non-distorted picture. In this respect the actual shape of the lower body may differ when using different components.
 
 
=== Box ===
 
All parts for side walls were manufactured using 16mm 3-layer-laminated sheets of wood and for bottom was using 19mm 3-layer-laminated sheets to guarantee maximum stiffness of the corpus. The only exceptions are the square-shaped timber pieces which serve as support for the bottom- and touch screen glass plate.
 
The cover plate of the service opening on the back is mounted with a hinge band on the bottom and a latch on the top which allows the door to be opened and folded down.
A glued wood molding at the inner side of the opening serves as the body stop. Additionally, an air intake filter was installed into the back door. To prevent an overheating of the beamer two ventilators are installed on the side of the beamer’s ventilator air exhaust.
At last four wheels were screwed on to the bottom plate.
 
The electrical supply for all individual components is realized with a rubber sheathed cable for light mechanical stress (3x1,5 mm²). This cable feeds four on the bottom plate mounted sockets inside, of which two can be shut off. The remaining two sockets for beamer and ventilator cannot be turned off in order to allow a period of continued ventilation to cool the beamer down.
 
The beamer mount consist of a piece of L-shaped bent 2mm thick sheet metal, which is mounted perpendicular onto the center of the front wall and can be tilted. The beamer hangs on an 8mm threaded rod. A lock nut serves to secure and arrest the beamer in its position.
 
The reflecting mirror is mounted in the center position on the bottom board. Fine tuning of the mirror is achieved by changing the angle via a threaded rod and a butterfly nut.
 
 
=== Touch Screen ===
 
Four 20 cm long square-shaped timber pieces were glued to the four corners inside of the touch screen frame. They ensure primarily a tight fit of the touch screen with the lower frame, and secondly protect the circuit boards installed on its backside. The top cover frame is made out of stainless steel. It protects the LEDs and is secured in its place at the corners of the frame. This completes the project.
 
During every state of the development and construction of the MTT achieving a maximum light density has been a major objective to reach a best quality product.
 
== Electronics ==
All electronics hardware in this project was designed using the free [http://gpleda.org/ gEDA] suite which provides tools for creating schematics and board layouts.
 
We have created two boards for the Multitouch Table which are described in the following sections. You can download all files from our git repository (not public yet, needs some cleanup ;-) ).
 
=== VSync Processing Board ===
When everyone is done setting up their area, you can tap the START button to start the game.
 
=== GameplayLogicsimulator ===
Digital Technologies are highly interesting but sometimes really confusing, especially while learning the basics.
To understand how combinatorial circuits with some logic gates work, building the circuit would be helpful.
Unfortunately you'll need hardware, switches, LEDs, wires and maybe some other stuff. Furthermore, it's pretty hard to "look inside" the circuit, and maybe there are mistakes inside it.
 
I decided to develop an application, where you can "touch" all the hardware you need to do exactly this, and where you can make all the connections without soldering.
-> TODO <-
 
'''Implemented features:'''
== Gatterzeux ==
 
- most common gates (AND, OR, XOR, ...)
== das vom Ben ==
 
- a selection window for the gates with a slider for the number of Inputs
== virtual band markus ==
 
- Inputbuttons on the gates you can activate by touching it. The colour (red/grey) indicates the state.
== das vom lugge ==
 
- the output of the gates is red / grey, indicating, wether the logical condition is true or false
== das vom huebi ==
 
- you can have several instances of the same gate with a different number of Inputs at one time.
gabs noch was?
 
- you can move and scale the gates as you wish
 
'''Not yet Implemented:'''
 
- the possibility to connect the gates.
 
 
That means, at the moment you can only try out different types of gates and see how they react on activating their Inputs.
 
Unfortunately I'm no professional in developing GUIs, so the sourcecode may be confusing. The time has come for a new version.
 
== Swing + MT4J ==
[[Datei:Mttproject-mt4j-swingtexture.png|300px]]
 
MT4J offers the possibility to integrate Swing Components and thereby enables the user
to include existing applications or single Swing components.
To display these components, MT4J provides a SwingTextureRenderer-Object.
In a sample application, the SwingTextureRenderer was added to a MTTextKeyboard as a child
component, PersistentContentPane is a Swing object:
 
public void addImage(PersistentContentPane cp) {
swing_app = cp;
str = new SwingTextureRenderer(app, swing_app);
str.scheduleRefresh();
final MTImage m = new MTImage(app, str.getTextureToRenderTo());
m.setPositionRelativeToParent(new Vector3D(100, -100, 0));
this.addChild(m);
}
 
During the evaluation of the SwingTextureRenderer, especially 2 things were of great interest:
# which rendering update frequency is necessary, to provide a smooth user experience, is the
#:performance of SwingTextureRenderers sufficient for that
# how is it possible, to forward MT4J user input to the swing application
 
concerning 1.
An update-rate of 150ms has proven to be appropriate, however higher rates were possible as well,
100ms and even below.
A possible pitfall is the code-location, in which the scheduleRefresh-method of SwingTextureRenderers (str)
is invoked. The method may only be called in the updateComponent-method of its parent-object (in this case:
MTTextKeyboard)
 
@Override
public void updateComponent(long timeDelta) {
if (str != null) {
totalDelta += timeDelta;
if (totalDelta >= 150) {
totalDelta = 0;
str.scheduleRefresh();
}
}
super.updateComponent(timeDelta);
}
 
 
concerning 2.
In the example only keyboard input was considered, meaning that touch-gestures on a Swing-component were
no forwarded to swing as mouse event.
As a first step, the objective was setting the focus to the Swing-component, which was supposed to process the key events.
In the following, the events were just pushed into the event queue.
 
protected void onKeyboardButtonClicked(MTKey clickedKey, boolean shiftPressed) {
/* submitKeyEvent(char newChar) */
final String newChar = clickedKey.getCharacterToWrite();
Toolkit toolkit = Toolkit.getDefaultToolkit();
EventQueue queue = toolkit.getSystemEventQueue();
try {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
swing_app.getEditorWindow().getTextPane().requestFocusInWindow();
queue.postEvent(new KeyEvent(swing_app.getEditorWindow().getTextPane(),
KeyEvent.KEY_TYPED,
System.currentTimeMillis(),
0,
KeyEvent.VK_UNDEFINED,
newChar));
}
});
} catch (Exception ex) {
}
System.out.println(newChar);
}
 
Unfortunately, this solution turned out to be a dead end.
The events could't be dispatched/processed by the Swing-component.
A possible way to go, is sending the event not to the Swing-component (e.g. JFrame) itself but to the
underlying document-object.
 
protected void onKeyboardButtonClicked(MTKey clickedKey, boolean shiftPressed) {
/* submitKeyEvent(char newChar) */
final String newChar = clickedKey.getCharacterToWrite();
try {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
swing_app.getEditorWindow().getTextPane().replaceSelection(newChar);
swing_app.getEditorWindow().getTextPane().updateUI();
}
});
} catch (Exception ex) {
}
System.out.println(newChar);
}
 
 
= Links =
* [[FTIR_Multitouch_Table]] (german)
 
[[Category:Projekt]]
 
= Verantwortliche =
Projekt der Fakultät Elektrotechnik und Informatik an der Hochschule für angewandte Wissenschaften Ingolstadt.
 
'''betreuender Professor:'''
Prof. Dr. Bernhard Glavina
 
'''mitwirkende Studenten:'''
Tanja Grotter (Projektleiterin),
Fabian Hübner,
Daniel Lohr,
Thomas Jakobi,
Markus Platzdasch,
Daniel Reinhard,
Sebastian Burkhart,
Thomas Kolb,
Benjamin Sackenreuther
0

Bearbeitungen