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 :)
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?
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).
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.
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?
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!
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?
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.
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.
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
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?
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_
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?
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.