Folienmatrix - einige Fragen dazu

Hallo zusammen!

Ich habe eine Idee für ein Arduino-Projekt, weiß aber ehrlich gesagt noch nicht so genau, wo ich anfangen soll. Deshalb frage ich hier einfach mal nach.

Es geht darum, ein Arduino dazu zu benutzen, Daten von einer anderen Hardware an meinen Rechner weiterzuleiten. Diese Daten kommen von so einer Folien-Matrix, wie sie auch in Computer-Tastaturen verbaut ist. Bei Google habe ich als Beispiel dieses Bild hier gefunden: Klick.

Die Matrix hat zwei Schichten und zwei Ausgangs-"Laschen" (ich weiß leider nicht, wie man die nennt). Jede dieser "Laschen" hat 10 Leiterbahnen.

Meine Fragen:

  • Wie funktionieren diese Folien-Matrizen? Um beim Beispiel der Tastatur zu bleiben: Woher weiß ich, welche Taste gedrückt wurde?
  • Wie krieg ich die mit einem Arduino verbunden? Ich gehe mal von Multiplexing aus?

Hat jemand schon einmal so ein Projekt gemacht und kann mir ein Beispiel geben? Das wäre super! Jede Art Hilfestellung, vom Link bis zum kompletten Tutorial ist herzlichst willkommen :)

Ich würde mich über eine Antwort sehr freuen!

Greets - Steps

Mir fällt in dieser Hinsicht als erstes Stichwort der Begriff "Tastaturcontroller" ein: http://www.indukey.com/temp/download/Keyboardcontroller_de.pdf

Absatz lesen: Vom Tastendruck zum Scancode http://de.wikipedia.org/wiki/Tastatur

PS/2 Keyboard Or Mouse: http://www.practicalarduino.com/projects/ps2-keyboard-or-mouse

Danke, das hilft mir schon mal ein kleines bisschen weiter.

Es geht mir zwar nicht direkt um eine Tastatur (war nur ein Beispiel), sondern generell um die Funktionsweise dieser Matrizen, aber da das Prinzip ja generell dasselbe sein dürfte, hilft's.

Seh ich das richtig, dass - vereinfact gesprochen - die Ermittlung des "gedrückten", also aktivierten, Sensors durch zwei Spannungsveränderungen geschieht?

Also angenommen, ich lausche an allen 20 Ausgängen, die meine Matrix hat (ob die alle belegt sind, weiß ich noch nicht), wohl oder übel via Input-Multiplexing, dann sollte ich bei Auslösung eines Sensors eine Veränderung an 2 Ports feststellen?

Seh ich das soweit richtig?

Danke nochmal!

Greets

Hey,

ich bin gerade an einem Projekt der deinem sehr Nahe kommt. Ich habe meine Dartscheibe an den PC gehängt. Die Signale kommen auch von einer Folienmatrix. Nur meine Folienmatrix ist 10x7.

Welchen Taste / bei mir Segment gedrückt wurde erkenne ich an der Kombination Eingang/Ausgang. Bei dem Beispielsketch lasse ich mir seriell den Pin des Eingangs und den Pin des Ausganges senden. Somit bin ich in der Lage dies Kombination zu definieren.

Bei deiner Folienmatrix wären es halt 10x10. Somit muss du 10 als Eingänge benützen und 10 als Ausgänge. Als Grundlage kannst ja meinen veröffentlichten Sketch verwenden. siehe http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1287128980.

Du solltest nur ein paar kleine Änderungen vornehmen. zum einem den Array int auf 10 erhöhen und du solltest natürlich die Pins von deinem Arduino verwenden bzw die wo du dafür vorgesehen hast. Wenn du ein Arduino Duemilanove hast langen die DigitalEingänge ohne zusätzliches Bauteil nicht. Aber ich habe schon Projekte gefunden die mittels einem Decoder das gelöst haben. Wie und was für einen der richtige für dein Projekt ist kann ich dir leider nicht sagen. (Ich habe den bequemeren Weg gewählt und habe einfach ein passenden Arduino mir zugelegt. Einen Arduino Mega).

Hoffe konnte dir ein wenig Helfen.

Gruß Patrick

Hey campergue!

Danke für deinen Tipp, das sieht schon sehr gut aus :) Die Software-Seite macht mir allerdings weitaus (!) weniger Sorgen als die Verkabelung an sich. Wäre es vielleicht möglich, dass du mal ein Foto machen könntest? Oder möchtest du das lieber nicht veröffentlichen?

Und ja, ich habe eine Duemillanove, also werd ich um's Multiplexen nicht herumkommen - Geld für ein Mega ist leider momentan nicht vorhanden. Ist aber weniger schlimm, so lern ich noch was dazu :)

Ach ja, eine Gegenleistung (falls noch notwendig) hätt ich auch noch: du hast anscheinend noch einige Fragen zur Software-Seite - da könnt ich dir helfen.

Greets

Schau mal auf diese Seite: http://www.bku.krefeld.schulen.net/projekte/zeit/hardware.htm#tastatur

Es ist richtig, dass die Reihen und Spalten einer Tastatur enkodiert werden sollten, weil Du sonst zu viele Anschlusspins verbrauchen würdest. Welche Enkoder infrage kommen, hängt wesentlich von Deiner Tatstatur ab. Aber denk mal drüber nach, ob Du nicht einen einer alten PC-Tastatur nehmen kannst. Dazu gibt es viele Schaltungen. http://www.marjorie.de/ps2/ps2_keyboard.htm http://www.indukey.com/temp/download/Keyboardcontroller_de.pdf http://www.indukey.com/temp/download/Keyboardcontroller_de.pdf

usw. Wenn Du uns mal genauere technische Daten verrätst, können wir Dir besser weiterhelfen!

Hey,

klar kann ich ein Foto machen aber bitte nicht wundern bin ein Kaufmann also mehr provisorisch wie recht! Suche mal meine Cam aus der Schublade!

und wegen Software vielen dank könnte ich echt hilfe gebrauchen zumindestens rein mal als orientierung zumindestens.

ich melde mich bald wieder mit link zum foto!

gruß Patrick

Hey,

hier der Link zu den bilder

http://www.campergue.de/dart1.jpg http://www.campergue.de/dart2.jpg http://www.campergue.de/dart3.jpg

Hoffe du kannst was damit anfangen!

Gruß Patrick

Danke für die Fotos, campergue! Ich hab in deinem Post mal ein bisschen Beispielcode zum Auslesen des seriellen Ports gepostet, vielleicht hilft dir das weiter?

Seh ich doch richtig, dass du einfach nur die 20 Konnektoren der Matrix an dein Board angeschlossen hast? Sind das alles Outputs (also angeschlossen an Inputs)? Das kann man leider auf den Bildern nicht sehen/erkennen.

Witzigerweise habe ich die Matrix übrigens auch aus einem alten Dartboard g

Ich hab gerade mal ein wenig gesucht, da ich ja die Inputs multiplexen werde müssen. Kennt sich jemand damit aus? Oder anders gesagt: Kann ich dieses IC hier benutzen? Link.

So, und da ich eh gerade auf der Suche bin: wonach muss ich suchen, wenn ich Sockel für die Laschen der Matrix besorgen will? Würde die Platine des Dartboards ungern zerstören, sondern auf einer gesonderten Platine zwei Sockel befestigen (so wie auf campergue's Fotos zu sehen). Wie heißen diese Sockel?

Ansonsten schonmal vielen Dank an alle :)

Greets

Bei dieser Folientastatur steht das es sich bei dem Anschluss um eine Buchsenleiste handelt. Könnte sein das auf dem Fotos solche Anschlüsse zu sehen sind: http://www.conrad.de/ce/de/product/709948/FOLIENTASTATUR-1X12/SHOP_AREA_17386&promotionareaSearchDetail=005

Hmm, ich glaub ich hab ein (!) passendes Bauteil gefunden (mit 20 statt 10 Ports): Link. Da werde ich wohl noch mal suchen müssen oder bei Gelegenheit nochmal im Laden vorbeischauen...

Nennt sich "Steckkarten-Verbinder" oder auch "Steck-Verbinder". Werde mich mal weiter schlau machen - für Hinweise bin ich aber weiterhin sehr dankbar!

Greets

Blöd ist nur der Hinweis: "Dieser Artikel ist nur noch so lange Vorrat reicht erhältlich. "

Also entweder ein Auslaufprodukt oder Conrad nimmt es aus dem Programm aufgrund zu geringer Verkäufe !

Japp - und die Bezeichnung scheint auch nicht gerade allgemeingültig zu sein. Bei anderen Anbietern findet man darunter jedenfalls nichts. Wie gesagt, nächste Woche (hoff ich) schaff ich's auch mal wieder zu Conrad, dann frag ich mal nach.

Was mir gerade einfiel: Irgendwie muss ich die Matrix doch mit Strom versorgen, oder? Kriegt man irgendwie einfach raus, welche der Leiterbahnen für die Stromversorgung da ist und welche für den Output zuständig sind?

Greets

Gibt es in Bezug auf die Tastatur kein Datasheet ? Bei Conrad gibt es bei vielen Produkten Downloadinformationen mit einer ausführlicheren Artikelbeschreibung vom Hersteller selber.

Guten morgen,

also zu der Matrix. Du hast doch 2 Folien. 1 Folie nimmst als Eingange und die andere nimmst als Ausgänge. und dabei spielt es keine Rolle welche du als Ausgang und welche als Eingänge definierst.

Wenn du auch eine Folienmatrix einer Dartscheibe hast kann es sein das deine Matrix keine 10x10 sondern eine andere.

Bisher habe ich folgende Dart Matrixarten gesehen: - 4x20 - 7x10 - 8x16

Die Folienmatrix an sich benötigt keine Stromversorgung.

Zu den Folien Kontaktstecker : Ich habe Sie von der Platine runtergeholt. einen Bericht aus 2007 hat die jemand von http://de.farnell.com/ sich besorgt.

Ich würde mich sehr freuen wenn ich bezüglich der Matrixart bescheid bekäme wenn es doch so ist wie du beschrieben hast.

Gruß Patrick

Morgen!

Das mit den 10x10 habe ich nur vermutet, weil eben von jeder der Folien 10 Leiterbahnen ausgehen (in die Platine). Fotos kommen bald (evtl. erst nächste Woche, die Zeit ist knapp), vielleicht hilft das weiter :slight_smile:

Also, nur noch mal zur Klärung, damit ich weiß, dass ich das auch richtig verstanden habe:

Ich habe 10 + 10 Anschlüsse an den Matrizen (jeweils 10 auf einer Folie). Die 10 Anschlüsse einer Folie verbinde ich mit Output-Ports meines Arduino und schalte sie auf HIGH. Die anderen verbinde ich mit Input-Ports meines Arduino und lese die Werte kontinuierlich aus. Daraus kann ich den aktivierten Sensor ermitteln. Richtig?

Greets

hey

also fast :

10 Output und High schalten ja. die anderen zehn an Input ja aber PUT UP wiederstände setzen. Die Ermittlung erfolgt dadurch das du einen OUTPUT Port nach dem anderen auf LOW setzt und die anderen bleiben dabei auf HIGH und die INPUT abfrägst. Wenn ein INPUT Port den Zustand LOW hat ist ein Kontakt entstanden.

int out[10] = {40,41,42,43,44,45,46,47,48,49};
int in[7] = {22,23,24,25,26,27,28};

void setup() {
Serial.begin(9600);
for (int i=0; i < 10; i++) {
pinMode(out*, OUTPUT); // 10 OUTPUT definieren*
}
for (int i=0; i < 7; i++) {
pinMode(in*, INPUT); // 7 INPUT DEFINIEREN*
digitalWrite(in*, HIGH); // HIER PULL UP Widerstand setzen*
}
}
void loop() {
for (int o=0; o < 10; o++) {
* digitalWrite(out[o], LOW); // hier ein OUTPUT auf LOW setzen*

* for (int i=0; i < 7; i++) {*
_ int test = digitalRead(in*); // hier den INPUT einlesen*_

* if (test == LOW) { // wenn INPUT LOW dann sende Seriell*
_ Serial.println(in*);
Serial.println("-");
Serial.println(out[o]);
delay(1000); // damit die Ausgabe auf einmal begrenzt ist!!
}
}
digitalWrite(out[o], HIGH); // den OUTPUT wieder auf HIGH setzen*

}
}
Jetzt alles klar?
gruß Patrick_

Jetzt alles klar?

Fast :D

10 Output und High schalten ja. die anderen zehn an Input ja aber PUT UP wiederstände setzen. Die Ermittlung erfolgt dadurch das du einen OUTPUT Port nach dem anderen auf LOW setzt und die anderen bleiben dabei auf HIGH und die INPUT abfrägst. Wenn ein INPUT Port den Zustand LOW hat ist ein Kontakt entstanden.

Bis auf den Pull up Widerstand versteh ich das. Denn damit hab ich bisher leider gar nicht gearbeitet. Setz ich jetzt zwischen die Kontakte der Folie, die an meinen Inputs hängen und die Inputports einfach einen Widerstand? Pull up Widerstände sind - soweit ich glaube zu wissen - doch eigentlich nur Widerstände, die dafür sorgen, dass ich einen sauberen Read bekomme, oder?

Ergo: Ich nehme einen Widerstand und hänge den zwischen Inputport und Matrix-Leiter?

Ansonsten alles klar, der Code auch! Danke!

Greets

Der interne 20k Pullup der Atmega Reihe wird in Arduino mit HIGH/LOW gesetzt.

http://arduino.cc/en/Reference/DigitalWrite

Hallo

nein, Diese PULL Up Funktion macht dein Arduino. Du setzt dabei nur in der void setup() die INPUT auf HIGH und somit sind deine INPUTS mit PULL UP widerstände versehen.

Du gehts ganz normal direkt auf Eingänge und Ausgänge ohne zwischenbauteile. Ausser in deinem Fall der Decoder.

gruß patrick