Brauche Hilfe bei Joystick- Sketch | kinetic sculpture | interactive art installation | GELÖST!

Liebe Community,

Ich will mit diesem Sketch per Joystick ein 4- fach - Relais Ansteuern. Den Werten des Potentiometers sind einzelne Relais zugeordnet. Wenn der Switch- Pin vom Joystick gedrückt wird sollen alle Relais gleichzeitig schalten.

Leider funktionert der Switch- Pin noch nicht richtig. Ich vermute, dass der Sketch einen Widerspruch beeinhaltet, weil der Sensorwert 0 beim Auslesen der Potentiometer und beim Drücken des Switch- Pins eine Bedingung erfüllt. Der Beweis dafür ist, dass wenn ich nur relais 1 und 2 ( bei denen der Sensorwert 0 keine Rolle spielt) per Switch- Pin schalte, alles funktioniert und sobald ich relais 3 oder 4 mit einbeziehe nicht mehr. Relais 3 und 4 scheinen dann wie wild an und auszuschalten.

Unten im Sketch seht ihr wo die Fehler liegen müssten. Ich würde mich extrem freuen wenn mir jemand helfen könnte!:slight_smile:

Mit freundlichen Grüßen Leonardo

Hier ist der Sketch:

int relaisEins = 8;
int relaisZwei = 9;
int relaisDrei = 10;
int relaisVier = 11;                                                                                
int SensorWert = 0;
int button= 2;


void setup() 
   {
    pinMode(relaisEins, OUTPUT);   
    pinMode(relaisZwei, OUTPUT);
    pinMode(relaisDrei, OUTPUT);
    pinMode(relaisVier, OUTPUT);
    pinMode(button, INPUT_PULLUP);
    Serial.begin(9600);
   }

void loop() 
{
  if (digitalRead(button) == LOW)                            //Hier ist das Problem
 {
   digitalWrite(relaisEins, HIGH);
   digitalWrite(relaisZwei,HIGH);
 }
        SensorWert = analogRead(A0);   
      Serial.print("X:"); 
      Serial.print(SensorWert, DEC);
      
      
            if (SensorWert > 1010) 
                {
                 digitalWrite(relaisDrei, HIGH);
                }
            
            if (SensorWert < 1010) 
                {
                 digitalWrite(relaisDrei, LOW);                        // und hier
                }
            
            if (SensorWert < 20) 
                {
                 digitalWrite(relaisVier, HIGH);                        // und hier
                }
            
            if (SensorWert > 20)
                {
                 digitalWrite(relaisVier, LOW);
                }
      
     
      SensorWert = analogRead(1); 
             
      Serial.print(" |Y:");      
      Serial.print(SensorWert, DEC);

      
      
            if (SensorWert > 1010) 
                {  
                 digitalWrite(relaisEins, HIGH); 
                }
            
            if (SensorWert < 1010) 
                { 
                 digitalWrite(relaisEins, LOW);  
                }
            
            if (SensorWert > 20) 
                {  
                 digitalWrite(relaisZwei, LOW); 
                }
            
            if (SensorWert < 20) 
                {  
                 digitalWrite(relaisZwei, HIGH); 
                } 
}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
So ist er auch auf portablen Geräten lesbar. Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Ok. Danke für die Info;)

Hallo,

Vorschlag.
Stecke die X/Y Abfrage in Funktion(en).
Frage den Taster intervallmäßig mittels millis ohne Blockierung ab. Ebenfalls in einer Funktion.

Wenn Taster gedrückt > alle Relais ziehen an und die X/Y Funktionen werden nicht aufgerufen.
Wenn Taster nicht gedrückt > Funktion(en) für X/Y aufgerufen.

Noch ein Tipp. Bau in der analogen Werteabfragen eine Hysterese ein. Ansonsten könnten die Relais irgendwann vielleicht flattern.

Lieber Doc_Arduino,

Danke für deine schnelle Hilfe!!! Der Tipp das Auslesen der X/Y Funktionen in eine Funktion einzubetten, war genial. Im Sketch hat dafür auch nur das else {} gefehlt.

Jetzt ist es so und funktionert wie gewünscht: Wenn der Schalter LOW ist dann alle Relais an, else { X/Y Werte auslesen }.

Das intervallmäßige Abfragen des Tasters mittels millis ohne Blockierung ist meines Erachtens nicht notwendig, weil die Funktion Wenn der Schalter LOW ist dann alle Relais an, else { X/Y Werte auslesen } ja im void loop- Teil des Sketches steht und der Taster damit ohnehin ständig neu abgefragt wird.

Eine Hysterese wird, wie ich gerade gelesen habe, genutzt um bei leichten Mess- Schwankungen zum Beispiel ein ständiges An- und Ausschalten eines Relais zu verhindern. Gerade funktioniert alles wie gewünscht und ich werde den Sketch denke ich erstmal so lassen. Kann es trotzdem passieren, dass die Relais irgendwann anfangen zu flattern? Wenn ja werde ich das mit dem Einbauen der Hysterese bei der analogen Werteabfrage auf jeden Fall mal ausprobieren!

Hier nochmal der verbesserte Programmcode

 pinMode(relaisEins, OUTPUT);   
     pinMode(relaisZwei, OUTPUT);
     pinMode(relaisDrei, OUTPUT);
     pinMode(relaisVier, OUTPUT);
     pinMode(button, INPUT_PULLUP);
     Serial.begin(9600);
    }
 
void loop() 
{
   if (digitalRead(button) == LOW)
  {
    digitalWrite(relaisEins, HIGH);
    digitalWrite(relaisZwei,HIGH);
    digitalWrite(relaisDrei, HIGH);
    digitalWrite(relaisVier,HIGH);
  }
  else{
         SensorWert = analogRead(A0);   // Auslesen des Wertes, der an A0 anliegt. Hier : VRx - X-Achse
       
       Serial.print("X:");  // Darstellung des Wertes im Seriellen Monitor
       Serial.print(SensorWert, DEC); // Darstellung des Wertes als Dezimalzahl
       
       
             if (SensorWert > 1010)  // Wenn der Wert größer als 1010 ist, dann...
                 {
                  digitalWrite(relaisDrei, HIGH); // ...soll ledLinks leuchten
                 }
             
             if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
                 {
                  digitalWrite(relaisDrei, LOW); // ...soll ledLinks nicht mehr leuchten
                 }
             
             if (SensorWert < 20)  // Wenn der Wert größer als 20 ist, dann...
                 {
                  digitalWrite(relaisVier, HIGH); // ...soll ledRechts leuchten
                 }
             
             if (SensorWert > 20)  // Wenn der Wert kleiner als 20 ist, dann...
                 {
                  digitalWrite(relaisVier, LOW); // ...soll ledRechts nicht mehr leuchten
                 }
       
      
       SensorWert = analogRead(1); // Auslesen des Wertes, der an A1 anliegt. Hier : VRy - Y-Achse
              
       Serial.print(" |Y:");      
       Serial.print(SensorWert, DEC);

       
       
             if (SensorWert > 1010) // Wenn der Wert größer als 1010 ist, dann...
                 {  
                  digitalWrite(relaisEins, HIGH); // ...soll ledOben leuchten
                 }
             
             if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
                 { 
                  digitalWrite(relaisEins, LOW);  // ...soll ledOben nicht mehr leuchten
                 }
             
             if (SensorWert > 20) // Wenn der Wert größer als 20 ist, dann...
                 {  
                  digitalWrite(relaisZwei, LOW); // ...soll ledUnten leuchten
                 }
             
             if (SensorWert < 20) // Wenn der Wert kleiner als 20 ist, dann...
                 {  
                  digitalWrite(relaisZwei, HIGH); // ...soll ledUnten nicht mehr leuchten
                 } 
                 }
}

Das Einbringen der Hysterese in deinen Sketch ist doch ganz einfach: Du darfst bei deinen '>' und '<' Abfragen nur nicht den gleichen Wert nehmen. Also z.B.

if (SensorWert > 1050)
...
...
if (SensorWert < 980)
...
...

Das Flattern ohne Hysterese passiert, wenn Du deinen Joystick so hältst, dass er Werte genau beim Umschaltpunkt liefert.

Ach, okay das ist ja wirklich simpel. Danke:)

Hallo,

wegen Relaisflattern. Relais sind träge, deswegen wird man das nicht mitbekommen wenn der Tasterkontakt prellt. Während der Prellzeit springt der Code ständig zwischen if und else (read Taster) hin und her und will im dümmsten Fall die Relais zwischen high und low umschalten. Deswegen meine Empfehlung den Taster zu entprellen. Ist auch gleichzeitig die Beste Übung den Umgang mit millis statt delay zu erlernen.

Theseus erklärt millis()
http://forum.arduino.cc/index.php?topic=400102.msg2752141#msg2752141

GuntherB - BlinkwithoutDelay - Die Nachtwächtererklärung
http://forum.arduino.cc/index.php?topic=423688.0

Ein einfaches 'delay(10);' am Ende des loop täte es in diesem Fall aber zum Entprellen auch :wink:

Hallo,

kann man sicherlich machen und wäre ausreichend. Ich selbst bin nach eigener Erfahrung der Meinung das man so früh wie möglich den Umgang mit millis erlernen sollte. Wieviele Neulinge kommen mit Sketchen mit gefühlt Tausenden delays drin um die Ecke und müssen auf millis umbauen, weil sonst nichts mehr geht. Dann stehen sie erstmal dumm da und fangen bei Null an ihr Programm zu ändern. Ich sage mir millis gehört zu den absoluten Grundlagen. Klare Funktionen statt ellenlange loop und millis und das Gröbste ist gegessen. Damit kann man sehr viel erschlagen. Der ganze Rest hat dann Zeit. delay nehme ich nur für irgendwelche Tests. Meine Meinung. :wink:

Es gibt ein neues Problem:)

Ich habe die Hardware auf eine gelochte Metallplatte geschraubt. Diese habe ich dann dann in einem MDF- Sockel versteckt, so dass nur noch der Joystick oben herausschaut (siehe Bilder).

Problem:

Die einzelnen Relais schalten beim Bewegen des Joysticks wie gewünscht. Wenn ich aber den SW- Taster des Joysticks betätige (Reindrücken des Joysticks) gibt es Probleme. Am Anfang funktioniert meistens alles ein paar mal wie gewünscht, d. h alle Relais schalten beim Reindrücken Ein und beim Loslassen wieder Aus. Früher oder später scheint der SW- Taster aber zu klemmen. Das äußert sich so, dass die Relais beim Loslassen des SW- Tasters mal dauerhaft An bleiben, oder die Relais beim Reindrücken des SW- Tasters plötzlich nicht mehr An schalten. Was mich wundert: Wenn ich das Netzeil der Hardware kurz raus und wieder reinstecke, funktionert alles wieder ein paar mal wie gewünscht und dann treten wieder die eben genannten Probleme auf.

Lösungsansätze:

  1. Kann es sein, dass es zu einem Spannungsaustausch unter den einzelnen Teilen der Hardware kommt und der Fehler daher resultiert? Ich habe zwar durch Gummiabstandhalter versucht die einzelnen Teile von der Metallplatte zu isolieren, aber vielleicht leiten die Schrauben ja den Strom. Ich könnte die Metallschrauben durch Plastikschrauben ersetzen...

  2. Die Steckdose in der das Netzteil der Hardware steckt ist nicht geerdet, aber wenn man den Arduino UNO mit Batterie betreibt, ist das ja auch nicht der Fall. Ich könnte die Steckdose erden...

  3. Bringt es vielleicht etwas die Metallplatte zu erden auf der die einzelnen Teile der Hardware festgeschraubt sind?

  4. Der Joystick ist vermutlich einfach kaputt gegangen und der SW- Schalter klemmt. Ich habe mir gerade ein paar neue bestellt und werde ihn einfach mal austauschen, ich denke das ist die Lösung des Problems.

Habt ihr einen Tipp?

Ich denke, dass der SW- Schalter einfach klemmt, weil ich die Lösungsansätze 1- 3 jedoch auch nicht wirklich ausschließen kann, würde ich mich sehr darüber freuen, was ihr darüber denkt.

Herzliche Grüße Leonardo

Ich sehe weder Bilder noch Sketch. So ist alles Rumstochern im Nebel. Wenn der Schalter kaputt wäre, würde es mich wundern, dass es nach Unterbrechen der Stromzufuhr wieder eine Weile funktioniert.
Was hast Du da für eine Steckdose und ein Netzteil :o . Wobei die meisten Stecker-Schaltnetzteile schutzisoliert sind und eh keinen Schutzleiteranschluß haben.

Hallo,

muss Microbahner unterstützen. Wir sehen leider nicht was du siehst. Allgemein vermute ich einen Fehler im Aufbau wenn ich Metallplatte und Metallschrauben höre. Oder deine Platine verträgt die Belastung vom drücken nicht. Leiterbahn gerissen, kalte Lötstelle, Kurzschluss oder was weiß ich. Hatte auch schon ein benachbartes LED glimmen weil Rückseite nicht richtig gereinigt war nach dem löten.

Bilder als Anhang ranhängen.

Bei wenigen und kleinen Bildern:
Nach anhängen Bild URL kopieren, Beitrag modifieren und mit Insert Image als Link unterm Text einfügen.

Ich sehe weder Bilder noch Sketch. So ist alles Rumstochern im Nebel.

Sorry! Nachdem mir beim Versuch vier Bilder anzuhängen (GIF- Datei, 9000KB) die Fehlermeldung "413 Request Entity Too Large" angezeigt, habe ich die Bilder jetzt einfach bei abload.de hochgeladen und sie mit Insert Image als Link eingefügt.

Ich hoffe auf den Bildern wird der Aufbau der Arduino Hardware auf der gelochten Metallplatte gut genug dargestellt.

Der Sketch ist der Gleiche geblieben, also der letzte der von mir gepostet wurde ( siehe verbesserter Programmcode).

Wenn der Schalter kaputt wäre, würde es mich wundern, dass es nach Unterbrechen der Stromzufuhr wieder eine Weile funktioniert.
Was hast Du da für eine Steckdose und ein Netzteil :o . Wobei die meisten Stecker-Schaltnetzteile schutzisoliert sind und eh keinen Schutzleiteranschluß haben.

Da hast Du Recht MicroBahner, ich bin jetzt auch davon überzeugt, dass der SW- Taster nicht physisch klemmen kann.

Das Netzteil für die Arduino Hardware (Gleichstrom: 5 V/ 1A) steckt in einer Dreichfachsteckdose, bei der das Kabel abgezwickt wurde, um sie mit einem zwei poligen Kabel (d.h ohne Erdung) bis zur Steckdose zu verlängern.

Allgemein vermute ich einen Fehler im Aufbau wenn ich Metallplatte und Metallschrauben höre. Oder deine Platine verträgt die Belastung vom drücken nicht. Leiterbahn gerissen, kalte Lötstelle, Kurzschluss oder was weiß ich. Hatte auch schon ein benachbartes LED glimmen weil Rückseite nicht richtig gereinigt war nach dem löten.

Danke Doc_Arduino, ich glaube jetzt auch, dass der Fehler im Aufbau liegt. Vor dem Verschrauben der Hardware auf der Metallplatte hat ja auch alles wunderbar funktioniert. Das Anschrauben der Platinen an die Metallplatte mit den Gummiabstandhalterungen hat diese teilweise auch leicht verbogen. Gut möglich, dass hierbei eine Leiterbahn gerissen ist. Es kann gut sein, dass ich die Schrauben ein bisschen zu stark angezogen habe, ich bin nicht davon ausgegangen, dass die Platinen so empfindlich sind, aber vermutlich sind sie es:D.

Vielen Dank für Eure Antworten, ich habe gestern Plastikschrauben bestellt und alle verbauten Komponenten noch einmal. Ich werde erstmal die Metallschrauben durch die Plastikschrauben ersetzen, vielleicht funktioniert dann schon alles wieder wie gewünscht. Wenn nicht dann tausche ich den Arduino UNO aus ( wegen evtl. gerissener Leiterbahn) und wenn es dann immer noch nicht geht den Joystick. Und spätestens dann sollte alles wieder funktionieren!:slight_smile: Ich lasse Euch wissen was der Fehler war;)

Herzliche Grüße Leonardo

Ich habe gerade den Arduino UNO durch einen Neuen ausgetauscht. Hier lag der Fehler;). Wie dieser Ausfall zustande kam weiß ich nicht, aber ich denke da gibt es zahlreiche Möglichkeiten, wie Doc_Arduino schon sagte:

Leiterbahn gerissen, kalte Lötstelle, Kurzschluss oder was weiß ich.

Ist es möglich, dass es einen Kurzschluss auf dem Arduino UNO gab und er dadurch den Schaden genommen hat, weil die Metallplatte auf der er aufgebaut war Strom geleitet hat? Ich habe mal irgendetwas von einer Sicherung auf dem Arduino UNO gelesen, die dann ja eigentlich den Schaden verhindern sollte. Ich werde die Metallschrauben vorsichtshalber durch Plastikschrauben ersetzen;)

Die Sicherung schützt nur vor zu hoher Gesamtstromaufnahme und das auch nicht in Nullzeit.

Gründe für sonstiges Versterben gibt es viele. Metallplatte als Auflage ist eine sehr schlechte Idee.

Gruß Tommy

Hallo,

wenn ich das Metallgerüst sehe wird mir schwindelig. Rechts gehen 230V ran? Wenn ja > Panikmodus! Überdenke den Aufbau grundlegend. Isolation ist das Zauberwort. Das Metallgerüst kann man als Grundgerüst nehmen, ja, aber dann muss alles andere sicher darauf isoliert befestigt werden. Isoliermatten oder nochmal Plasteplatten drauf oder ähnlich nicht leitende Materialien. Kabelbefestigungen! Nur die ca. 5mm Leiterplattenabstand reichen nicht! Im besten Fall kommt der FI. Im dümmsten Fall sucht sich der Strom einen anderen schmerzhaften Weg.
Bitte so nicht weitermachen.

Danke für Eure Antworten,

Ihr habt Recht. Das war waghalsig! Ich werde die Hardware morgen auf eine Holzplatte aufschrauben, das ist vermutlich das Einfachste und sicher ist es auch.

Der Fehler ist noch nicht behoben

Ich habe übrigens die Steuerung immer erst auf eine Holzplatte aufgeschraubt, um zu testen ob alles funktioniert. Da ging auch immer alles. Bei ständigem Drücken des SW- Tasters in kurzen Intervallen haben alle 4 Relais zusammen brav ein- und ausgeschaltet. Die 4 Relais fingen immer erst an zu "hängen", wenn die Steuerung auf die Metallplatte aufgeschraubt war.

Gestern habe ich die fehlerhafte Steuerung von der Metallplatte genommen und wieder auf die Holzplatte geschraubt und die sie hat auch dort nicht richtig funktioniert. Dann wusste ich, dass der Fehler beim Mikrocontroller liegen muss und ich habe diesen ausgetauscht. Dann hat es auf der Holzplatte wieder funktioniert.
Nach dem Aufbau auf die Metallplatte gab es dann aber die gleichen Probleme wie vorher. Da wurde mir klar, dass das Problem doch beim Aufbau liegen muss (vermutlich ein "Strom- Leck" (ein Kurzschluss?). Und dann habe ich die folgende Entdeckung gemacht:

Es kam bei zwei relais bei den Verlötstellen der Anschlussleisten zu einem Kontakt mit der Metallplatte ( siehe Bilder oben). Kann es sein, dass dabei das 4- fach- relais oder sogar der daran angeschlossene Mikrocontroller einen Schaden genommen hat? Ich habe beim Bedienen der Steuerung des Öfteren mal die Metallplatte berührt und nie einen Stromschlag bekommen, was ja eigentlich dagegen spricht, dass hier der Fehler liegt. Sorry nochmal, dass ich so unvorsichtig war, das wird nicht wieder vorkommen!

Fehlerbehebung durch Entprellen des SW- Tasters?

Dann habe ich mich daran erinnert, dass mir Doc_Arduino geraten hat den SW- Taster im Sketch zu entprellen. Ist es auch denkbar, dass das "Hängen" beim parallelen Ein- und Ausschalten der 4 Relais durch das Prellen des SW- Tasters ausgelöst wird? Ich habe deshalb versucht den SW- Taster im Sketch mit millis zu entprellen. Ist das richtig so? Den Hinweis mit der Hysterese habe ich übrigens auch berücksichtigt;).

">

int relaisEins = 8;
int relaisZwei = 9;
int relaisDrei = 10;
int relaisVier = 11;                                                                                
int SensorWert = 0;
int tasterPin= 2;

// Festlegen der Variablen

int tasterStatus= HIGH; // aktuelles Signal vom EingansPin
int tasterGedrueckt= 0; // abragen ob der Taster gedrueckt war


unsigned long tasterZeit= 0; // Zeit beim Drücken des Tasters
unsigned long entprellZeit= 10; //Zeit für Entprellung; reicht das?


 
void setup() 
    {
     pinMode(relaisEins, OUTPUT);   
     pinMode(relaisZwei, OUTPUT);
     pinMode(relaisDrei, OUTPUT);
     pinMode(relaisVier, OUTPUT);
     pinMode(tasterPin, INPUT_PULLUP); // PULLUP bedeutet hier, dass der Taster beim Loslassen durch interne Pull_Up Widerstände immer wieder HIGH wird
     Serial.begin(9600);
    }
 
void loop() 
{
  tasterStatus=  digitalRead(tasterPin);
  
   if (tasterStatus == LOW)
   {
    tasterZeit= millis(); //aktualisierte tasterZeit
   tasterGedrueckt= 1; // speichert, dass Taster gedrueckt wurde
   }
   // wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war...

   if((millis()-tasterZeit>entprellZeit)&& tasterGedrueckt==1) //wenn die tasterZeit größer ist als die festgelegte entprellZeit und der taster gedrueckt ist
   
  {
    digitalWrite(relaisEins, HIGH);
    digitalWrite(relaisZwei,HIGH);
    digitalWrite(relaisDrei, HIGH);
    digitalWrite(relaisVier,HIGH);
    tasterGedrueckt=0; // der Taster wird wieder auf 0 zurückgesetzt
  }
  else{
         SensorWert = analogRead(A0);   // Auslesen des Wertes, der an A0 anliegt. Hier : VRx - X-Achse
       
       Serial.print("X:");  // Darstellung des Wertes im Seriellen Monitor
       Serial.print(SensorWert, DEC); // Darstellung des Wertes als Dezimalzahl
       
       
             if (SensorWert > 1010)  // Wenn der Wert größer als 1010 ist, dann...
                 {
                  digitalWrite(relaisDrei, HIGH); // ...soll relaisDrei anschalten
                 }
             
             if (SensorWert < 940) // Wenn der Wert kleiner als 1010 ist, dann...
                 {
                  digitalWrite(relaisDrei, LOW); // ...soll relaisDrei ausschalten
                 }
             
             if (SensorWert < 20)  // Wenn der Wert kleiner als 20 ist, dann...
                 {
                  digitalWrite(relaisVier, HIGH); // ...soll relaisVier anschalten
                 }
             
             if (SensorWert > 90)  // Wenn der Wert größer als 20 ist, dann...
                 {
                  digitalWrite(relaisVier, LOW); // ...soll relaisVier ausschalten
                 }
       
      
       SensorWert = analogRead(1); // Auslesen des Wertes, der an A1 anliegt. Hier : VRy - Y-Achse
              
       Serial.print(" |Y:");      
       Serial.print(SensorWert, DEC);

       
       
             if (SensorWert > 1010) // Wenn der Wert größer als 1010 ist, dann...
                 {  
                  digitalWrite(relaisEins, HIGH); // ...soll relaisEins anschalten
                 }
             
             if (SensorWert < 940) // Wenn der Wert kleiner als 1010 ist, dann...
                 { 
                  digitalWrite(relaisEins, LOW);  // ...soll relaisEins ausschalten
                 }
             
             if (SensorWert > 90) // Wenn der Wert größer als 20 ist, dann...
                 {  
                  digitalWrite(relaisZwei, LOW); // ...soll relaisZwei ausschalten
                 }
             
             if (SensorWert < 20) // Wenn der Wert kleiner als 20 ist, dann...
                 {  
                  digitalWrite(relaisZwei, HIGH); // ...soll relaisZwei anschalten
                 } 
                 }
}

Probleme bei der Stromversorgung?

Könnte das "Hängen" beim zeitgleichen Schalten aller 4 relais auch mit einer schlechten Stromversorgung zusammenhängen? Ich betreibe die gesamte Hardware gerade über ein Netzteil von Rossmann (eingestellt auf 5 Volt und max. 1A).

Bei dem Mikrocontroller, den ich davor in der Steuerung hatte, gab es zwei 5 Volt Ausgänge und ich konnte den 5 Volt Eingang des 4- fach- relais mit dem Mikrocontroller versorgen. Jetzt gibt es nur noch einen 5 Volt Ausgang am Mikrocontroller und deshalb sieht der Schaltplan jetzt so aus:

Hat jemand Verbesserungsvorschläge?

Herzliche Grüße Leonardo

Hallo,

die Bilder in #10 kann ich öffnen. Die Bilder in #17 nicht.
Habe mal eins von #10 genommen und hier wie immer eingebunden.


Funktioniert.

Hallo,

wegen Entprellung ein klein wenig umgebaut. Kompiliert aber nicht getestet.

const byte relaisEins = 8;
const byte relaisZwei = 9;
const byte relaisDrei = 10;
const byte relaisVier = 11;
const byte tasterPin = 2;
unsigned int SensorWert;

void setup()
{
  pinMode(relaisEins, OUTPUT);
  pinMode(relaisZwei, OUTPUT);
  pinMode(relaisDrei, OUTPUT);
  pinMode(relaisVier, OUTPUT);
  pinMode(tasterPin, INPUT_PULLUP); // PULLUP bedeutet hier, dass der Taster beim Loslassen durch interne Pull_Up Widerstände immer wieder HIGH wird
  Serial.begin(9600);
}

void loop()
{

  if ( updateTaster(tasterPin) )
  {
    digitalWrite(relaisEins, HIGH);
    digitalWrite(relaisZwei, HIGH);
    digitalWrite(relaisDrei, HIGH);
    digitalWrite(relaisVier, HIGH);
  }
  else
  {
    SensorWert = analogRead(A0);   // Auslesen des Wertes, der an A0 anliegt. Hier : VRx - X-Achse

    Serial.print("X:");  // Darstellung des Wertes im Seriellen Monitor
    Serial.print(SensorWert);   // Darstellung des Wertes als Dezimalzahl


    if (SensorWert > 1010)  // Wenn der Wert größer als 1010 ist, dann...
    {
      digitalWrite(relaisDrei, HIGH); // ...soll relaisDrei anschalten
    }

    if (SensorWert < 940) // Wenn der Wert kleiner als 1010 ist, dann...
    {
      digitalWrite(relaisDrei, LOW); // ...soll relaisDrei ausschalten
    }

    if (SensorWert < 20)  // Wenn der Wert kleiner als 20 ist, dann...
    {
      digitalWrite(relaisVier, HIGH); // ...soll relaisVier anschalten
    }

    if (SensorWert > 90)  // Wenn der Wert größer als 20 ist, dann...
    {
      digitalWrite(relaisVier, LOW); // ...soll relaisVier ausschalten
    }


    SensorWert = analogRead(1); // Auslesen des Wertes, der an A1 anliegt. Hier : VRy - Y-Achse

    Serial.print(" |Y:");
    Serial.print(SensorWert);



    if (SensorWert > 1010) // Wenn der Wert größer als 1010 ist, dann...
    {
      digitalWrite(relaisEins, HIGH); // ...soll relaisEins anschalten
    }

    if (SensorWert < 940) // Wenn der Wert kleiner als 940 ist, dann...
    {
      digitalWrite(relaisEins, LOW);  // ...soll relaisEins ausschalten
    }

    if (SensorWert > 90) // Wenn der Wert größer als 90 ist, dann...
    {
      digitalWrite(relaisZwei, LOW); // ...soll relaisZwei ausschalten
    }

    if (SensorWert < 20) // Wenn der Wert kleiner als 20 ist, dann...
    {
      digitalWrite(relaisZwei, HIGH); // ...soll relaisZwei anschalten
    }
  }
}


// ****** Funktionen ******

bool updateTaster (const byte pin)
{
  static unsigned long last_ms = 0;
  bool state = false;

  unsigned long ms = millis();

  if (ms - last_ms >= 20) {
    last_ms = ms;
    state = !(digitalRead(pin));    // negiert, positiv Logik
  }

  return state;
}

Zu deiner Hardware kann ich nichts sagen. Blick da nicht durch. Nur das du ganz vorsichtig sein solltest.
Teste das alles erstmal mit 12 oder 24V= bevor das an 230V~ soll.