Pages: [1]   Go Down
Author Topic: Wie kann ich ein Stromstoßschalter erstellen?  (Read 1213 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ich wollte mit dem Arduino Uno einen Stromstoßschalter bauen. Wie bekomme ich das hin? Oder wie erstelle ich eine Flankenauswertung (von LOW nach HIGH)?
 

Vielen Dank im voraus

arokh12
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das ist sehr einfach, speichere einfach den letzten Zustand eines digitalen Eingangs, vergleiche den neuen Zustand mit dem gespeicherten, wenn er sich geändert hat und der neue Zustand HIGH ist, hattest Du eine steigende Flanke. Wenn der Eingang per Taster bedient wird, solltest Du ihn noch entprellen, sprich, nach der letzten Flanke ignorierst Du für einen gewisse Zeit weitere Flanken (im einfachsten Fall).
Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1125
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:

boolean laststate=false;        // letzter Speicherwert aus zyklus davor
boolean actstate=false;        // actueller Status
boolean togglestate=false;    // dein zu toggelender Wert

void setup(){
// deine Ein und ausgänge
}

void loop(){
actstate=digitalRead(DeinEingang);              // Den Aktuellen Wert einlese
if (actstate==true&&laststate==false){           // Wenn der aktueller Zustand HIGH ist und beim letzten durchlauf Low ist ist ein Flankenwechsel
togglestate=!togglestate;                             // invertiern des statues
laststate=true;                                          // Der letzte Zustand des Pines ist high hier läuft er nicht mehr hin ausser man lässt den Taster los
}
if (actstate==false){                                  // Wenn der Taster losgelasen wurde ist auch der letzte Pinstatus LOW
laststate=false;
}
}


Das ist der einfachste weg
Gruß
Der Dani


Edit: SP1 für den Code eingepflegt  smiley
« Last Edit: July 02, 2013, 08:31:55 am by volvodani » Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Offline Offline
Sr. Member
****
Karma: 8
Posts: 359
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

wofür brauchst du das in deinem Code?

togglesate=!togglestate;

abgesehen vom Schreibfehler :-))
 
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:

boolean laststate=false;        // letzter Speicherwert aus zyklus davor
boolean actstate=false;        // actueller Status
boolean togglestate=false;    // dein zu toggelender Wert

void setup(){
// deine Ein und ausgänge
}

void loop(){
actstate=digitalRead(DeinEingang);              // Den Aktuellen Wert einlese
if (actstate==true&&laststate==false){           // Wenn der aktueller Zustand HIGH ist und beim letzten durchlauf Low ist ist ein Flankenwechsel
togglesate=!togglestate;                             // invertiern des statues
laststate=true;                                          // Der letzte Zustand des Pines ist high hier läuft er nicht mehr hin ausser man lässt den Taster los
}
if (actstate==false){                                  // Wenn der Taster losgelasen wurde ist auch der letzte Pinstatus LOW
laststate=false;
}
}


Das ist der einfachste weg
Gruß
Der Dani

Danke für eure Hilfe. Es funktioniert super.

In der Zeile (siehe unten) ist ein kleiner Schreibfehler. Es fehlt beim ersten togglestate ein t.

togglestate=!togglestate;                             // invertiern des statues

Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1125
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das: togglestate=!togglestate; dreht bei einer boolean Variable den Status um also toggelstate ist gleich nicht togglestate.
Wenn togglestate high war wird er zu nicht(!) high also low und umgekehrt.


Man kann es z.B. wie aus dem Beispiel BlinwitouDelay anweden
org:
Code:
if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);

macht das hier:
Code:
if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;   
    // if the LED is off turn it on and vice-versa:
      ledState =!ledState;
    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
Der Invertiert einfach die Variable:
Gruß
Der Dani
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Offline Offline
Faraday Member
**
Karma: 104
Posts: 3614
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich glaube die Verwirrung war dass du da rumtoggelst, aber die Variable in dem Beispiel nie verwendet hast smiley
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2983
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ein Stromstoß-Schalter ist entweder ein oder aus, braucht aber weder in der einen noch in der anderen Stellung selber Energie. Nur zum Umschalten.
Und bleibt ohne Stromversorgung in seiner letzten Stellung.

Oder hab ich da was anderes im Kopf?

Mit "togglestate" hat das ganze nur am Rande zu tun, denke ich.
Und mit Arduino ist das so nicht zu machen.
Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1125
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Es hing hier um die Fuktionalität eines stromstoßschalters und um die flankenerkennung und die ist in dem Code enthalten. Und die Variable Toggelstate verhält sIch in dem Beispiel wie das henannte relais
Gruß Der Dani
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Ein Stromstoß-Schalter ist entweder ein oder aus, braucht aber weder in der einen noch in der anderen Stellung selber Energie. Nur zum Umschalten.
Und bleibt ohne Stromversorgung in seiner letzten Stellung.

Zumindest nach Wikipedia ist ein bistabiler Wechselschalter, der über eine steigende Flanke des Eingangssignals schaltet bereits ausreichend, dass so ein Ding als Stromstoss-Schalter bezeichnet wird. Es steht nicht davon, dass er in den beiden Stellungen keine Energie brauchen darf. Das ist meiner Meinung nach auch nur bei der mechanischen Variante der Fall, im elektronischen Fall wird immer etwas Energie verbraucht.

Dafür allerdings einen Arduino einzusetzen macht höchstens wegen der Lernerfahrung einen Sinn.
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2983
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke, pylon. Wohl eher meine Assoziation mit "Stromstoß". Da höre ich das Relais heftig klacken, und brummen solange der Taster gedrückt ist ;-)
Und dass bei Spannungs-Wiederkehr nicht mit AUS begonnen wird , ist oft eher ein tolerierter Nebeneffekt solcher mechanischen Dinger. 

Quote
im elektronischen Fall wird immer etwas Energie verbraucht.
Dafür allerdings einen Arduino einzusetzen macht höchstens wegen der Lernerfahrung einen Sinn.

Klar. So was elektronisch zu bauen, wäre auch sehr lehrreich.
-->   http://danyk.cz/zap-vyp_en.html
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2983
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn man "Stromstoss-Schalter" mit "toggle latch button" übersetzt, findet man auch dieses hübsche Video von Dave Jones


der eine Schaltung wie in meinem vorigen Post, unterhaltsam herleitet.

Ein gesperrter Transistor und ein 1M Widerstand brauchen nicht soo viel Strom. Einen Arduino zu verwenden, ist allerdings in der Tat etwas abwegig.
Logged

Pages: [1]   Go Up
Jump to: