Seite 1 von 1

#1 Arduino und Schaltermatrix

Verfasst: 23.03.2015 22:17:35
von yogi149
Hi,

für die Homecockpits suchen wir noch eine elegante Lösung für große Schalterpanels.

Bei meiner EC-120 habe ich Glück, da kann ich das mit einer Taster-Matrix machen.
Matrix-5x5.PNG
Matrix-5x5.PNG (31.24 KiB) 2877 mal betrachtet
das funktioniert wohl eindeutig, aber ich brauche auch nur die Tastfunktion zum togglen der Funktion.
Somit brauche ich zur Erfassung von 25 Tastern nur 1 analog Eingang am Arduino.
(Das Programm dazu arbeitet Thomas gerade aus)

Bei den großen Overheadpanels der anderen Helis sind aber Schalter verbaut, da funktioniert die Art des Anschlusses wohl nicht. :(
Hat da jemand Ideen, wie man mit möglichst wenig Verkabelung so etwas realisieren kann?
Mein aktueller Lösungsansatz wäre eine Expander Karte mit 48 Eingängen über den I2C Bus zu machen.

#2 Re: Arduino und Schaltermatrix

Verfasst: 24.03.2015 08:05:49
von acanthurus
48 ist halt schon ne Nummer...
bis vielleicht 8 Schalter könntest du mit nem einzelnen (10 bit) ADC Eingang hinbekommen (WIderstandsreihe, sehr schick ist diese Variante: http://www.skillbank.co.uk/SignalConver ... R2RDAC.gif)
Wenn du diese Schalterzeilen dann auf der Plus-Schiene über einen einzelnen Schaltkanal reihenweise per Dezimalzähler (z.b. 4017) durchklickst, könntest du mit einem ADC, einem Schaltkanal (bzw. 2, sicherheitshalber für den Schaltkanal-Reset) bis zu 80 Schalter abfragen. Alternativ könnte man den Reset sparen und das üner eine RC-Kippstufe nach einem gewissen Intervall automatisch resetten - so wie bei den Kanaldekodern unserer alten 35MHz-Empfänger.
Der Verdrahtungsaufwand zum Panel wäre dann noch Plus, Masse, ADC und 1 bzw. max 2 Schaltkanäle für den 4017. Überschaubar, finde ich.

Ne Alternative eventuell, ZWEI Dezimalzähler (jeweils einen als Zeilen- und als Spaltentreiber) zu verwenden. Dann könnte man den ADC-Kanal durch einen Schalteingang ersetzen und sich vielleicht ne ganze Reihe an Widerständen sparen... das müsste ich aber erst mal durchdenken.

gruß
andi

#3 Re: Arduino und Schaltermatrix

Verfasst: 24.03.2015 09:10:54
von yogi149
acanthurus hat geschrieben:48 ist halt schon ne Nummer...
aber leider nicht so abwegig:
125.jpg
125.jpg (1.21 MiB) 2831 mal betrachtet

#4 Re: Arduino und Schaltermatrix

Verfasst: 24.03.2015 09:17:48
von acanthurus
Is mir klar, Jürgen.
Zu diesen beiden hier hab ich ne besondere Hassliebe entwickelt - allerdings in einer gänzlich anderen Konfiguration wie in dem Bild.

gruß
andi

#5 Re: Arduino und Schaltermatrix

Verfasst: 24.03.2015 14:02:46
von the-fallen
Eine Reihen-Zeilen - Matrix die das Endergebnis digitalisiert gibt es z.B. hier:
http://www.spikenzielabs.com/SpikenzieL ... hield.html

64Schalter, die dahinter liegende Elektronik ist nicht so kompliziert als dass man sie nicht auch auf eine Lochrasterplatine nachbauen könnte.

Ich würde das aber so abändern, dass die Reihen und Zeilen oder die Widerstandskaskade wie bei euch geplant einen Analogen Wert erzeugen und man braucht dann eben 2 Analogeingänge um 64 Schalter ab zu tasten.

Alternativ und eventuell auch flexibler ist man dann, wenn man das wie auf der Seite mit einem seperaten Prozessor digitalisiert und eben z.B. per i²c auslesen lässt. Dann kann man leichter mal eine komplette Baugruppe auswechseln ohne alles mit dem "Hauptprozessor" neu verdrahten zu müssen.

#6 Re: Arduino und Schaltermatrix

Verfasst: 24.03.2015 16:24:07
von acanthurus
So könnte würde das ggf. nach meiner Variante A aussehen. Ob das Zusammenschalten der OpAmp-Ausgänge so funktioniert wäre mal noch zu prüfen.
Auf der Softwareseite müsste man dann zunächst die Zeile anwählen ( n-1 Impulse auf den "Line select" Pin geben) und dann den A/D auslesen, um daraus die Schalterstellungen der gesamten zeile abzulesen. Anschließend reset-Impuls senden um das Ding wieder in den Anfangszustand zu versetzen.


gruß
andi

#7 Re: Arduino und Schaltermatrix

Verfasst: 24.03.2015 18:33:38
von adrock
...ich würd's ja digital mit einem 16-Bit parallel-in serial-out shift-register machen z.B. 74HC674.

EDIT: Gut den gibt's nicht mehr :-) Dann eben 2x 8-Bit a'la HC165 oder so, 29ct bei Reichelt.

#8 Re: Arduino und Schaltermatrix

Verfasst: 24.03.2015 18:36:40
von the-fallen
Wozu der Op-Amp? Der Wald-und-Wiesen-Arduino (323p oder 32u4) löst die Analogeingänge mit 10Bit auf (also 1024 Zustände).
Der Arduino Zero oder der Teensy3.1 sogar 12Bit. Müsste für 8 Schalter ja locker reichen für eine Kombination aus verschiedenen Pegeln die sich eindeutig zuordnen lassen.

Ansonsten eben wirklich das "absetzen" mit einem gesonderten Chip den man dann per i²C abfragt - und dann in Reihen und Zeilen-Schaltweise.

#9 Re: Arduino und Schaltermatrix

Verfasst: 24.03.2015 20:10:18
von tracer
yogi149 hat geschrieben:aber leider nicht so abwegig:
Halb OT: Der Flugsim kann das alles auch auswerten? :shock:

#10 Re: Arduino und Schaltermatrix

Verfasst: 25.03.2015 08:52:02
von Mataschke
Also ich würde für Xplane nen Teensyduino nehmen , da der schon bestimmte Libraries die benötigten I/O und ein Xplane Plugin für die Datarefs hat .

https://www.pjrc.com/teensy/td_flightsim.html

#11 Re: Arduino und Schaltermatrix

Verfasst: 25.03.2015 08:57:39
von acanthurus
Wozu der Op-Amp?
Primär mal zum entkoppeln der verschiedenen Zeilen, weniger zur Verstärkung.

#12 Re: Arduino und Schaltermatrix

Verfasst: 27.03.2015 09:13:38
von AM0K
tracer hat geschrieben:
yogi149 hat geschrieben:aber leider nicht so abwegig:
Halb OT: Der Flugsim kann das alles auch auswerten? :shock:
Natürelmoooo (wie der Franzose sagt :D)
Mataschke hat geschrieben:Also ich würde für Xplane nen Teensyduino nehmen , da der schon bestimmte Libraries die benötigten I/O und ein Xplane Plugin für die Datarefs hat .

https://www.pjrc.com/teensy/td_flightsim.html
Hab ich mir gerade mal angesehen und hab nach Lesen der Hauptseite schon fast (für mich) entschieden, dass das keine Option ist, weil:
- läuft nur über USB
- man soll "permanentes Schreiben" vermeiden um USB nicht zu überlasten (benötigen wir aber, warum dazu später mehr)
- es wird ein Plugin benötigt um auf die Datarefs zuzugreifen

Ich persönlich mache das lieber über ein Arduino (oder baugeleiches Board) mit Ethernet Shield, wo ich über UDP direkt mit X-Plane quatschen kann.
Dann kann ich nämlich meinen Hardwareschalterstellungen entsprechend sofort los "brüllen" und X-Plane in die korrekte Simulation der Schalter zwingen, während man bei der USB-Lösung (oder Plugins) nur auf die "Flanken" zurückgreifen kann (also Änderungszustände von Schaltern übermittelt).

Wenn ich jetzt aber den Simulator z.B. mit laufendem Motor starte, aber mein Battery Master Switch physikalisch auf OFF steht, bekomme ich dem X-Plane nur mitgeteilt in dem ich den Schalter auf On stelle und wieder auf OFF. Diesen "Sync" müsste ich für jeden Schalter separat machen ... nein Danke.

Bei meiner Variante übermittle ich in festgelegten Zyklen alle Schalterstellungen und im selben Beispiel würden beim Start des Simulators mit laufendem Motor sofort alle virtuellen Schalter auf die meinen physikalischen Schalterstellungen entsprechenden Positionen "hüpfen".

Außerdem verstehe ich nicht, warum man sich eine weitere Schicht (Plugin) zwischen die Kommunikation bauen (somal die Plugins unter verschiedenen Systemen wie Linux, Mac und Windows meistens Probleme machen) oder sich auf die Abhängigkeiten der fremden Libraries beschränken soll.

Nebenbei lernt man dabei auch noch etwas ;) und das macht mir am meisten Spass...

#13 Re: Arduino und Schaltermatrix

Verfasst: 02.04.2015 17:35:30
von AM0K
So, ... zur Abwechslung mal was konstruktives :)

Jürgen hatte ja sein Taster-Panel bereits feritg, also hab ich Ihm ein Sketch gebaut, mit dem er die Werte der einzelnen Tasten ausgeben konnte:

Code: Alles auswählen

const int AnalogPin = A7;
int Wert = 0;

void setup()
{
  Serial.begin(9600); 
}

void loop()
{
  Wert = analogRead(AnalogPin);
  Serial.println(Wert);
  delay(100);
}
Damit konnte er mir eine eindeutige Zuordnung der Tasten zu den Werten geben.
Dann habe ich mich auf die Suche nach der passenden Möglichkeit gemacht, die Funktionen in X-Plane zu schalten.
Ich finde es am einfachsten die entsprechenden Kommandos (Übersicht siehe: XplaneOrdner/Resources/plugins/Commands.txt) direkt über UDP an X-Plane zu senden.
Also gab es ein paar IF-Blöcke mit den passenden Werten welche dann das entprechende Command senden.

Leider kann man nicht alles über Commands regeln und leider sind auch die Commands nicht kosequent umgesetzt.
Beispiel:
Ich kann die Positionsbeleuchtung einschalten mit:

Code: Alles auswählen

sim/lights/nav_lights_on
Und ebenso wieder ausschalten mit:

Code: Alles auswählen

sim/lights/nav_lights_off
Was für Schalter schon mal nicht verkerht ist.

Jedoch hat Jürgen ja Taster welche bei dem Beispiel optimaler Weise einfach mit:

Code: Alles auswählen

sim/lights/nav_lights_toggle
um- (also aus- oder an-) geschaltet werden können.

Leider ist das wie schon erwähnt nicht konsequent für alle Funktionen umgesetzt worden.
Soll heißen: Speziell "toggle" ist nicht immer verfügbar, weshalb man auf "on" und "off" zurückgreifen muss.

Daher habe ich mir überlegt, ob es nicht schlauer ist (in Anbetracht der Tatsache, dass ja später auch noch Schalterpanels folgen) ausschließlich mit "on" und "off" zu arbeiten und das "toggle" in meinem Code bereitzustellen.

Dies bringt mir einen weiteren Vorteil:
Da Jürgens Taster ja beleuchtet sind und die LED den Zustand der jeweiligen Tasterfunktion (An/Aus) darstellen soll , könnte ich entweder einfach auf die X-Plane Datarefs (Übersicht siehe: XplaneOrdner/Resources/plugins/DataRefs.txt) zurückgreifen und dementsprechend die LED an oder aus schalten:

Code: Alles auswählen

sim/cockpit/electrical/nav_lights_on	int	y	bool	Navigation Light
Was aber bedingt, dass ich diese Dataref von X-Plane auch auslesen und auswerten muss, oder aber ich verlasse mich auf meinen selbst getoggelten Zustand.
Ein "Nachteil" (?) dabei wäre jedoch auch wieder, dass ich dann die Möglichkeit verliere, die Taster auch als solche zu benutzen und im Virtuellen Cockpit ebenfalls auf die Knöpfe drücken zu können ...


Um mal wieder die Kurve zu bekommen ... ein weiteres Problem was sich mir gerade darstellt ist:
Was passiert denn überhaupt, wenn mehrere Taster gleichzeitig gedrückt werden?

Momentan ist es (wie beim BU-USB-Board in der Schaltermatrix ohne Dioden) so, dass die Werte sich aufsummieren und durch den "falschen" Stromfluss ungewollte Werte übermittelt werden könnten (bzw. umgekehrt - der Strom nimmt natürlich immer den Weg des geringsten Widerstandes).
Zwar ist die Wahrscheinlichkeit bei dem Tasterfeld geringer, jedoch bringt uns das wieder zum Schalter-Feld...

Wenn wir also Dioden einsetzen um den Stromfluss (bzw. die Flussrichtung) zu kontrollieren, wären wir das Problem schon mal los.
Aber ich verstehe noch nicht ganz, wie ich eine Schalter-Matrix aufbauen müsste ?!?

Jede Reihe und jede Spalte auf einen Digial-Pin oder wie habt ihr euch das vorgestellt?

#14 Re: Arduino und Schaltermatrix

Verfasst: 02.04.2015 22:10:29
von Husi
Moin moin,

vorab, ich habe weder von dem X-Plane Sim eine Ahnung,noch von den geplanten Schalterfeldern.
Aber:
AM0K hat geschrieben:Jede Reihe und jede Spalte auf einen Digial-Pin oder wie habt ihr euch das vorgestellt?
Ich habe mit das als sogenannten bitCode vorgestellt. Im AutoCAD funktioniert das so:
Man hat eine menge Werte, die man in nur einer Zahl speichern will. Hier Schalterstellungen, die als eine Spannung erzeugt wird.

Beispiel:
0 alle Schalter aus.
1 erster Schalter an
2 zweiter Schalter an
4 dritter Schalter an
8 vierter Schalter an
16 fünfter Schalter an
32 sechster Schalter an
64 siebter Schalter an
128 achter Schalter an

jetzt schalten wir die Schalter 1, 4 und 5 an :arrow: 1 + 8 + 16 = 25 entspricht 9,8 % Spannung
schalter wir die Schalter 2, 5, 6 und 8 an :arrow: 2 + 16 + 32 + 126 = 176 entspricht 69 % Spannung
alle Schalter an :arrow: 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255 entspricht der 100 % Spannung

Somit kann man rückwärts aus der Spannung auch wieder die Stellung aller Schalter bestimmen. Je mehr Anteile man in diese Logig packt, umso besser und exakter müssen die einzelnen Teilspannungen "geeicht" sein.

Viele Grüße
Mirko