Forum

Einloggen | Registrieren | RSS  

Sel(R)

E-Mail

Radebeul,
08.10.2016,
10:21
 

bitte Hilfe: Arduino nano... (Elektronik)

Hallo,

ich bin zu blöd.

Zusammenstricken des Programms bekomme ich irgendwie hin. Aber ich schaffe die Befehle nicht.

Wenn ein DIP-Schalter betätigt wird (Schließer), dann sollen ein oder mehrere Relais anziehen (habe mir eine Wertetabelle gemacht). Ich bekomme die Befehle dafür einfach nicht hin. Könnt ihr mir mit einem einführenden Gedanken den Start erleichtern?

Das solls werden:
Habe 6pol-Mäuseklavier. Damit möchte ich die Relais schalten, die wiederum die Widerstände schalten. Alle Widerstände sind in Reihe geschalten (1 Ohm, 1 Ohm, 2 Ohm, 4 Ohm, 8 Ohm, 10 Ohm). Die Relais brücken im Ruhezustand diese Widerstände, also habe ich theoretisch null Ohm (kommt nicht haargenau drauf an). Die Schalter des Mäuseklaviers haben die Werte 1-2-4-8-16 und 0,5 (Ohm). Je nachdem, welchen Schalter ich betätige (=entsprechende Relais ziehen an und geben Widerstand frei) habe ich meine Ohmwerte. Diese sind dann 0,5 Ohm (die beiden 1 Ohm parallel) und dann 1 Ohm bis 26 Ohm in Ein-Ohm-Schritten. Ich muß immer nur die Werte der Schalter addieren.

LG Sel

xy(R)

E-Mail

08.10.2016,
11:20

@ Sel

bitte Hilfe: Arduino nano...

switch / case

Man könnte sicherlich einen hübschen Algorihtmus finden, aber wenn der Platz reicht, dann ist Q&D der bessere Weg.

BernhardB(R)

Berlin,
08.10.2016,
13:15
(editiert von BernhardB
am 08.10.2016 um 13:25)


@ Sel

bitte Hilfe: Arduino nano...

» Je nachdem, welchen Schalter ich betätige
» (=entsprechende Relais ziehen an und geben Widerstand frei) habe ich meine
» Ohmwerte. Diese sind dann 0,5 Ohm (die beiden 1 Ohm parallel) und dann 1
» Ohm bis 26 Ohm in Ein-Ohm-Schritten. Ich muß immer nur die Werte der
» Schalter addieren.

Hi,

wenn ich Dich recht verstehe, hast Du einen vorgegebenen Widerstandswert zwischen 0 und 26 Ohm und willst ermitteln, welche Relais dafür anzusteuern sind.
Da der Arduino von Haus aus ohnehin erst mal seine Ausgänge einzeln mit digitalWrite() steuert, solltest Du vielleicht mal nach "sukzessive Approximation" googeln. Mit diesem Algorithmus sollte sich eine einfache Lösung programmieren lassen: Berechnen, welcher Widerstandswert sich ergibt, wenn das höchstwertige Relais gezogen hat. Ist der berechnete Wert kleiner als der gewünschte, zusätzlich das nächst niederwertigere Relais einbeziehen, neu berechnen... usw., bis der Wert schließlich zu groß ist. Dann das zuletzt gezogene Relais wieder aus, und erst jetzt die Relais tatsächlich in der Realität schalten.
War der erste berechnete Wert dagegen zu groß, dann das 10 Ohm- Relais wieder aus und das nächstniedrigere (8 Ohm) ein; dann weiter wie schon oben beschrieben.

Gruß
Bernhard

geralds(R)

Homepage E-Mail

Wien, AT,
08.10.2016,
17:33
(editiert von geralds
am 08.10.2016 um 18:18)


@ Sel

Arduino nano...Version... Schalter, Relais

Hi,

welche Version deines Nano? - Schaltplan? welcher µC?
- Den Schaltplan deiner Vorstellung?
- welche Relais, wie verdrahtet?

-> Vorschlag:
Tasten als Matrix - dabei die Sperrdioden nicht vergessen.
Tasten als DAC - Analogspannung in den µC einlesen, mit Algor auswerten....
Tasten seriell einlesen, dazu extern einen Par-Ser_Wandler nehmen...


Ähnlich auch auf Ausgang..
einen Ser-Par_Wandler nehmen mit dem die Relais angesteuert werden (ULN_Treiber nach Ser_Par_W zu den Relais).
http://forum.arduino.cc/index.php?topic=138456.0

Was willst haben?
http://www.arduino-projekte.de/index.php?n=74

So manche Infos sind leider recht ungenau...

Gerald
---

--
...und täglich grüßt der PC:
"Drück' ENTER! :wink: Feigling!"

bastelix(R)

08.10.2016,
23:10

@ Sel

bitte Hilfe: Arduino nano...

» Hallo,
»
» ich bin zu blöd.
»
» Zusammenstricken des Programms bekomme ich irgendwie hin. Aber ich schaffe
» die Befehle nicht.
»
» Wenn ein DIP-Schalter betätigt wird (Schließer), dann sollen ein oder
» mehrere Relais anziehen (habe mir eine Wertetabelle gemacht). Ich bekomme
» die Befehle dafür einfach nicht hin. Könnt ihr mir mit einem einführenden
» Gedanken den Start erleichtern?
»
» Das solls werden:
» Habe 6pol-Mäuseklavier. Damit möchte ich die Relais schalten, die wiederum
» die Widerstände schalten. Alle Widerstände sind in Reihe geschalten (1 Ohm,
» 1 Ohm, 2 Ohm, 4 Ohm, 8 Ohm, 10 Ohm). Die Relais brücken im Ruhezustand
» diese Widerstände, also habe ich theoretisch null Ohm (kommt nicht
» haargenau drauf an). Die Schalter des Mäuseklaviers haben die Werte
» 1-2-4-8-16 und 0,5 (Ohm). Je nachdem, welchen Schalter ich betätige
» (=entsprechende Relais ziehen an und geben Widerstand frei) habe ich meine
» Ohmwerte. Diese sind dann 0,5 Ohm (die beiden 1 Ohm parallel) und dann 1
» Ohm bis 26 Ohm in Ein-Ohm-Schritten. Ich muß immer nur die Werte der
» Schalter addieren.
»
» LG Sel

Kannst du die Schaltung mal skizzieren? Ich kann mir grad nicht vorstellen wie du auf 26 Ohm kommst wenn die beiden 1 Ohm via Relais parallel geschaltet werden. Wäre auch nicht schlecht, wenn du deine Wertetabelle einstellst.

So vom Code her (ich geh mal davon aus, dass du mit dem Arduino die Relais schalten möchtest) könntest du z.B. so etwas machen (vorsicht Pseudocode, und die 0,5 Ohm werden nicht berücksichtigt)

int[] relais_pin = { ... }
int[] widerstand_wert = {1, 2, 4, 8, 10}
int[] schalter_pin = { ... }
int[] schalter_wert = {1, 2, 4, 8, 16}

for (int i=0; i<5; i++) {
if (digitalRead(schalter_pin[i]) == HIGH) {
summe += schalter_wert[i]
}
}

for (int i=4; i>=0; i--) {
if (widerstand_wert[i] <= summe) {
digitalWrite(reails_pin[i], HIGH)
summe -= widerstand_wert[i]
} else {
digitalWrite(reails_pin[i], LOW)
}
}

Nur so als Denkanstoß, das kann man noch schöner machen. Dazu müsste man aber die Schaltung genauer kennen ;-)