MCP23017 und Relais funktioniert nicht zusammen

Hallo zusammen,
ich habe 3 polige Kippschalter mit 2 Positionen und möchte diese verwenden um meine relais zu schalten. Leider hab ich an meinem Arduino keinen Platz mehr, weshalb ich mir ein MCP23017 gekauft habe. Ich habe alles wie folgt angeschalten (hier nur 2 Kippschalter eingezeichnet, eigentlich habe ich 4)

Ich habe nun folgendes Problem: wenn ich nur den arduino über USB anschließe dann scheint alles zu funktionieren. Das sehe ich daran, dass die lämpchen am Relais passend an und aus gehen, jenach dem welcher Schalter gedrückt wird. Da aber die externe Stromversorgung noch aus ist, hört man natürlich nicht das typische "klackern" der relais.

So, wenn ich jetzt die externe 5v stromversorgung für die Relais anmache (6V), dann passiert folgendes. Ich kann ein paar mal die schalter drücken und es passiert das richtige. Allerdings nach ein paar mal funktioniert entweder gar nichts mehr, d.h. das relai schaltet gar nicht mehr oder es schalten plötzlich mehrere gleichzeitig. Ich vermute ich habe irgendetwas falsch angeschlossen und es liegt nicht am Code, denn wenn ich die Kippschalter direkt am Arduino anschließe ohne MCP dann funktioniert auch alles soweit. Nur leider brauche ich die Pins am Arduino für etwas anderes:/

Habt ihr eine Idee woran das liegen könnte? Eigentlich ist doch alles mit derselben Masse verbunden

Leider nein, denn ich verstehe dein Problem nicht und kann deine Schaltung nicht lesen.
Deine Leitungen gehen kreuz und quer und sind dadurch nicht zu verfolgen. Verwende mal gerade und rechtwinklige Leitungsführungen, so wie es üblicherweise auch gemacht wird.

Und mit Wechselspannung arbeiten die Relais def. nicht.

Ich habe versucht, dein Schaltbild zu verstehen, allerdings verstehe ich nicht, was die Widerstände an den Schaltern machen sollen. Im übrigen sind das einpolige Schalter, nicht 3polig.

Wozu überhaupt ein UNO, du kannst doch die Relais auch direkt mit den Schaltern steuern. Da brauchst du keinen Uno.

Verkabelung ist falsch und/oder Fehler im Sketch.

Übrigens zwei Schalter und vier relais... das geht locker am Uno. Aber dazu müsstest erst mal beschreiben was das ganze werden soll und welcher Funktionalitäten erwünscht sind.

sorry hätte es gleich gescheit machen sollen, Ich hoffe jetzt ist es besser gelungen.

Ich weiß dass ich dazu kein UNO bräuchte aber ich würde es dennoch gerne verstehen warum das nicht geht. Die widerstände bei den schaltern hab ich vergleichbar zu hier https://funduino.de/nr-5-taster-am-arduino gemacht, wie bei einem normalen taster.
Sorry die Wechselspannungangabe war falsch

Ich habe den Fehler zumindest etwas eingrenzen können und zwar spielt das Relay verrückt, sobald man die externe Stromversorgung für die Magnetventile anmacht. Aber habe extra die Masse davon auch verbunden mit dem arduino und über eine GUI bzw. ohne MCP funktioniert alles. Ich versteh das einfach nicht

auf der Zeichnung ist nicht klar, ob beide GND/5V Rails miteinander verbunden sind.
Sind sie das? Wenn ja - warum hast du das nicht eingezeichnet?
Nachbessern.

Wie ist der UNO versorgt? der hat momentan keinen Anschluss an eine Spannungsquelle.

Die Relais haben lt. Zeichnung nichts mit dem MCP zu tun, also liegt deren Fehler irgendwo im Geheimen.

Vollständigen Schaltplan und Echtbilder posten aus denen JEDE EINZELNE VERBINDUNG hervorgeht

Sketch posten. evtl. auch eine kompilierfähige Minimalvariante - nur Schalter auslesen - Relais schalten

welche Ground Verbindung meinst du genau?:slight_smile: also sowohl GND am Relay, als auch beide GND der externen Stromversorgungen sind am GND des Arduino (bereits im Bild)

grafik

UNO und MCP23017 wollen mit 5 V versorgt werden, nicht 6 V.

Was ist "JD-VCC" am Relaismodul? Welches Relaismodul verwendest Du?

Wir können aber nicht erkennen, wie dein MCP gesteuert (Code) wird.
Da wird dann auch dein Fehler liegen.
Und die Widerstände an den Schaltern sind jetzt auch richtig eingezeichnet.
Auch da fehlt die Info wie die abgefragt werden.

GND kannst du so echt nicht stecken am breadboard. Oder hast du Jumperkabel mit drei Kabelenden? Wie ist die 5 V versorgung auf beiden Rails gemacht worden?

das jd vcc ist nochmal eine separate möglichkeit die Logikschaltung des Relais nicht über den Arduino zu steuern: SRD-05VDC-SL-C sind Relay (4 module) von dem her der Arduino und MCP sollten eigentlich die 5v bekommen

Die Abfrage mache ich nach diesem Schema:


#include <Wire.h>
#include <Adafruit_MCP23X17.h>

Adafruit_MCP23X17 mcp1;
int switches_mag[] = {3, 4};
int switches_mag_flags[] = {0, 0};
int valves[] = {2, 4};

void checkMags(){
 for(int i=0;i<2;i++){
  int currFlag = mcp1.digitalRead(switches_mag[i]);
  Serial.println(currFlag);
  if(currFlag != switches_mag_flags[i]) {
    switches_mag_flags[i] = currFlag;
    if(currFlag == 1){
      digitalWrite(valves[i], LOW);
    }else{
      digitalWrite(valves[i], HIGH);
    }
  }
 }
}

void setup()
{   
    
    Serial.begin(115200);
    mcp1.begin_I2C(0x20);
   for(byte i = 0; i<2; i++) {
    mcp1.pinMode(switches_mag[i], INPUT);
    switches_mag_flags[i] = 0;
   }
   for(byte i = 0; i<2; i++) {
    pinMode(valves[i], OUTPUT);
   }
}

void loop()
{   
    //int a = mcp1.digitalRead(8);
    //Serial.println(a);
    checkMags();
}

ja habe jumperkabel mit 3 kabelenden. Die relais sind so gemacht, dass sie die 5v vom arduino in vcc bekommen und die logikspannung über den jd-vcc und das externe 6V netzteil bekommen. Das Problem tritt aber auch auf wenn man das 6v externe Netzteil weglässt und das relais direkt über den Arduino betreibt, also jd-vcc auch mit 5V des arduino betreibt

grafik

Wie steckt der Jumper bei JD-VCC und VCC?

Na dann ist dein Uno aber schon defekt. 6 Volt auf den Pins mag dieser überhaupt nicht.

aber die jd vcc liegt doch nicht am arduino an oder? zumindest dachte ich das immer :smiley:

um weitere fehlerquellen auszuschließen hab ich nun den jumper geschlossen und auf das 6v externe spannungsgerät verzichtet. DAvor war es so gelöst dass wir den jumper entfernt haben und an einen der freien pins dann die Spannung des externen stromgeräts angeschlosen haben

das verrückte ist, ich kann mit der schaltung oben immer so 4-5 mal den schalter drücken und alles funktioniert, dann plötzlich passiert nichts mehr. Wenn ich alles vom strom nehme und neu starte, dann geht es wieder 4 5 mal. Aber es funktioniert stabil wenn ich das MCP komplett weglasse und direkt PINS am Arduino nutze :unamused:

das hier steht bei der library in github dabei, aber ich weiß nicht ob das das problem ist: "Some people have reported an undocumented bug that can potentially corrupt the I2C bus. It occurs if an MCP230XX input pin state changes during I2C readout. This should be very rare. For more information, see this forum post and this knowledge base article."

Dann solltest du auch nicht Logikspannung schreiben.