Go Down

Topic: Brauche Hilfe für Spiel (Read 4397 times) previous topic - next topic

Chinacracker

Hallo,

Ich habe schon ein paar Dinge mit Arduino gemacht, bin aber neu damit und ich bräuchte eure Hilfe. Mein Sohn wünscht sich zu Weihnachten einen „Tresor". Er ist 5 und ich möchte eher keine Zahlen verwenden, also kein Codeschloss im Sinne 5 mal Knopf 1 drücken und 2 mal Knopf 2 drücken oder ähnliches um ein Magnetschloss zu öffnen. Dazu gibt es genügend Anleitungen und damit hätte ich auch programmiertechnisch kein Problem.

Ich möchte Kippschalter verwenden, da diese rumliegen und mein Sohn mag solche Schalter. Diese sind On/off/on. Ich könnte nun eine einfache Reihenschaltung machen, und daraus aus den jeweils 2 On Positionen meiner 4 Schalter eine Kombination machen. 2 hoch 4 sind aber nur 16 Möglichkeiten und das ist mir dann doch zu wenig. Mehr Schalter will ich nicht verwenden. 3 hoch 4 wären dann schon einige mehr. Dazu würde ich gerne „off" also gar kein Signal mit dazu nehmen. Die 4 Schalter sollen also ein Relais mit Magnetschloss bemühen, wenn z.b. 1 auf oben on, 2 auf unten on, 3 auf off und 4 wieder auf oben on steht.

Mit Arduino habe ich nun das Problem, dass ein eingeschaltet bleibender Schalter ( verbleibt auf on) ja kein Signal ausgibt, sondern nur dann, wenn er wieder ausgeschaltet wird. Gibts da grundsätzlich eine geeignete Programmierung um mein Vorhaben zu realisieren? Ich habe bisschen was mit den analogen Inputs gefunden, aber da habe ich ja nur 6 inputs. Gerne würde ich die digital ins benutzen, da ich mit den analogen noch nichts bisher gemacht habe.

Ich würde mich sehr über eure Hilfe freuen. Ein fertiger Code inkl. Schaltbild wäre traumhaft! Bin berufstätig und habe nicht so viel Zeit leider. Trotzdem möchte ich meinem Sohn einen langen Wunsch erfüllen.

Herzliche Grüße,

Chinacracker

gregorss

... Er ist 5 und ich möchte eher keine Zahlen verwenden ...
Möglicherweise verstehe ich Dich falshc. Du hast 4 Schalter, die jeweils 3 Zustände annehmen können. Du benötigst für die vier Schalter doch nur vier Analogeingänge. Wenn Du jeweils eine der AN-Positionen mit einem Widerstand versiehst, kannst Du mit einem Schalter problemlos drei klar unterscheidbare Zustände an den Analogeingängen erzeugen: AN--AUS--„Dazwischen".

HTH

Gregor
Mir wird übel. (Uwe)

Chinacracker

Hallo Gregorrs,

danke für deine schnelle Antwort. Du hast schon richtig verstanden. Wie gesagt, mit analog in tue ich mich noch schwerer. Hättest du mir dazu eine kleine Schaltskizze bzw. wie müsste ich das programmieren. Gibts da ev. ein ähnliches Beispiel?

Tausend Dank!

SkobyMobil

Hallo,
ein Schalter hat 3 Zustände. Als Kontakt eine Wurzel, und zwei Kontake an.
Also 4 Schalter mit zusammen 8 Kontakten on.
Das sind 8x8 Möglichkeiten.

Auf die Wurzel legst Du 5v.
Die 8 on-Kontakte auf D0 bist D7.
Die Eingänge fragst Du auf High/Low ab.

Ein Port sollte so "aussehen" wenn alle LOW

00000000

oder wenn geschaltet ist…

00011011

Oder habe ich da einen Denkfehler?

Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

gregorss

#4
Nov 17, 2017, 02:06 am Last Edit: Nov 17, 2017, 02:11 am by gregorss
...
Oder habe ich da einen Denkfehler?
...
Wenn ich verstehen würde, was Du meinst, könnte ich Dir eine ordentliche Antwort geben :-)

Für den Chinakracher:



Das sind allerdings mehr als nur 1 Widerstand je Schalter. Zur Erklärung: Links befindet sich ein Widerstand, der die Leitung „hochzieht", wenn der Schalter in der mittleren Position ist (wie gekritzelt, analogRead() ergibt 1023). Wenn der Schalter nach links geschaltet wird, wird der Analogeingang mit GND verbunden (analogRead() ergibt 0). In der rechten Position ist er mit einem Spannungsteiler verbunden (das ist die „Dazwischen-Position"). Für die Widerstände nimmst Du einfach 3 gleiche Werte (z. B. 10 kOhm), dann kommst Du ungefähr auf 1023--0--512).

Gruß

Gregor
Mir wird übel. (Uwe)

agmue

#5
Nov 17, 2017, 10:29 am Last Edit: Nov 17, 2017, 10:33 am by agmue
Oder habe ich da einen Denkfehler?
Ich denke, ja, da ich nichts von PullUp oder PullDown lese.

Meine Variante: alle acht Eingänge mittels INPUT_PULLUP auf HIGH legen und die Wurzel an GND. Aktiv ist dann LOW, alle in Mittelstellung 11111111.

@gregorss: Mit INPUT_PULLUP kannst Du den linken Widerstand sparen, dürfte die Meßwerte nur geringfügig stören. Da nutzt man ja eh einen Wertebereich.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

SkobyMobil

Hallo,
na, er hat doch vier Schalter.
Diese Schalter haben 4 Eingänge, die Wurzel.
Diese Schalter haben 8 Ausgänge.
Wenn ich 8 Ausgänge habe, dann kann ich 64 Zustände erstellen.
8 Ausgänge auf 8 digitale Eingänge.

Für Schalter A, B, C und D

0-1-0 A
0-1-0 B
0-1-0 C
0-1-0 D

jetzt hast Du an acht digitalen Eingängen LOW

0-1-1 A
0-1-0 B
0-1-0 C
0-1-0 D

jetzt hast Du an sieben digitalen Eingängen LOW, und an einem HIGH
alles klar?
So meinte ich das, vier Wiederstände reichen.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

gregorss

#7
Nov 17, 2017, 01:02 pm Last Edit: Nov 17, 2017, 01:45 pm by gregorss
@gregorss: Mit INPUT_PULLUP kannst Du den linken Widerstand sparen, dürfte die Meßwerte nur geringfügig stören. Da nutzt man ja eh einen Wertebereich.
Uh, ja. Nachts um 2 Uhr bin ich normalerweise nicht mehr in der Lage, intellektuelle Höchstleistungen zu vollbringen.

Statt der zwei Widerstände könnte Chinakracher auch einen Trimmer benutzen.

Gruß

Gregor

PS: Offensichtlich kann ich auch mittags ziemlich dämlich sein. Statt des Spannungsteilers am rechten Kontakt genügt 1 Widerstand gegen GND. Der Spannungsteiler wird durch den genannten Widerstand und den Pull-up-Widerstand gebildet.

PPS: Ein Beispiel für eine Anwendung eines Analog-Eingangs befindet sich hier.
Mir wird übel. (Uwe)

agmue

Auf die Wurzel legst Du 5v.
Für Schalter A, B, C und D in Mittelstellung off

0-1-0 A
0-1-0 B
0-1-0 C
0-1-0 D

jetzt hast Du an acht digitalen Eingängen LOW
Nö, die Eingänge hängen in der Luft und betätigen sich als Elektronenfänger. Daher benötigst Du für jeden Arduino-Eingang einen PullDown-Widerstand. Acht Eingänge, acht Widerstände.

Oder Wurzel an GND und die internen PullUps nutzen, macht den geringsten externen Aufwand.

Statt der zwei Widerstände könnte Chinakracher auch einen Trimmer benutzen.
Zwei 4,7kOhm (das zehnfache der internen PullUps) sollten genügen. Den Vorteil des Trimmers sehe ich nicht, außer er fällt zufällig auf die Platine ;)
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

SkobyMobil

Hallo,
hast Recht,  Acht Eingänge, acht Widerstände.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

guntherb

#10
Nov 17, 2017, 01:51 pm Last Edit: Nov 17, 2017, 02:22 pm by guntherb
Wenn ich 8 Ausgänge habe, dann kann ich 64 Zustände erstellen.
In diesem Falle nicht korrekt.
Wenn alle 8 Eingänge unabhäng wären, ja.
Aber so haben wir kein binäres System, in dem zwei Werte existieren, sonder ein "terziäres" System, in dem 4 Schalter je 3 Werte annehmen können, 3^4=81 Möglichkeiten.

Beschalten könnte man das so:
Grüße
Gunther

agmue

Der Spannungsteiler wird durch den genannten Widerstand und den Pull-up-Widerstand gebildet.
Wobei mir gerade Zweifel kommen, ob der interne PullUp den Kondensator vom analogen Eingang auch schnell genug auflädt :-[

Wenn ich irgendwo eine 50kOhm rumfliegen habe ...
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Chinacracker

Hallo ihr lieben,

toll, dass meine Aufgabe wohl auch für Denksport sorgt und ein bisschen Anregung findet. Ich habe einige gleiche Widerstände rumfahren. Ich bin von dem ganzen nun aber ein bisschen durcheinander. Was ist denn nun die richtige Lösung. Ich habe ein Breadbort...könnte mir das jemand da ein bisschen einzeichnen? Wie ich das dann programmieren muss habe ich noch keinen Durchblick. Ich weiß eure Hilfe sehr zu schätzen.

Herzliche Grüße!

gregorss

... Was ist denn nun die richtige Lösung. ...
Ich habe das mal schnell ausprobiert. Um ein klares „Dazwischen" zu erzeugen, brauchst Du zwei Widerstände je Schalter, die Du so anschließt, wie ich oben gekritzelt habe (die beiden kleinen, für den Spannungsteiler). Die Widerstände müssen nicht unbedingt gleich groß sein, ich habe zwei 4,7 kOhm-Widerstände benutzt.

Wenn der interne Pullup-Widerstand am Analog-Pin aktiviert ist, kannst Du Dir den externen (links der große) Widerstand sparen.

Der Sketch, mit dem ich das auf die Schnelle probiert habe, sieht so aus:

Code: [Select]

const byte switchPin=A0;

void setup()
{
  Serial.begin(9600);
  pinMode(switchPin, INPUT_PULLUP);
}

void loop()
{
  delay(1000);
  Serial.println(analogRead(switchPin));
}


Die ausgegebenen Werte waren 1022, 550 und 0.

Gruß

Gregor

Mir wird übel. (Uwe)

Chinacracker

Hallo Gregor,

schön! Ich danke dir schon mal vielmals. Könntest du das noch ein bisschen weiter ausführen wie ich das auslese und als if Aufbau realisiere. Kann ein Beispiel sein, dass ich dann als Schema für weitere Schalter erweitere. Wie gesagt, sind analoge Eingänge und die Befehle dazu Neuland. Wenn ich ein Beispiel habe, dass ich mit diesem Schema dann selbst schreiben kann, wäre ich super happy. Wenn jemand Lust hat mir einen Fritzing Schaltplan zu basteln gebe ich einige Biere aus! Vielleicht gibt es ja noch andere Väter die das mal nachbauen wollen.

Herzliche Grüße und echt vielen vielen Dank! Er wird sich freuen!


Go Up