Hallo zusammen,
ich bin gerade an einem Projekt, bei dem ich eine Siemens SPS (mit 24V Digitalausgängen) mit einem Arduino (5V) verbinden möchte. Die Idee ist, dass der Arduino ein Signal an einem seiner digitalen Eingänge erkennt, sobald ein digitaler Ausgang der SPS aktiv wird.
Um eine galvanische Trennung zu erreichen, habe ich mich entschieden, Optokoppler zu verwenden. Der erste Test mit einem einzelnen Optokoppler hat perfekt funktioniert – das Signal wurde vom Arduino wie gewünscht erkannt.
Daraufhin habe ich das Ganze größer aufgebaut, um insgesamt 28 digitale Signale zu verarbeiten. Bisher habe ich davon 8 Optokoppler auf einer Platine zusammengelötet. Wenn ich die Platine nun teste, funktioniert es jedoch überhaupt nicht mehr – obwohl der Test mit einem einzelnen Kanal zuvor problemlos lief.
Ich habe zuerst nur einen Kanal auf der neuen Platine getestet – dieser hat wie im ersten Test funktioniert. Doch sobald ich mehrere oder alle anschließe, klappt es nicht mehr. Für mich ist das aktuell nicht nachvollziehbar. Warum funktioniert es mit einem Optokoppler, aber nicht mit mehreren?
Was mir außerdem auffällt: Auch wenn kein Ausgang der SPS aktiv ist, leuchten manche der Optokoppler-LEDs trotzdem – andere wiederum nicht. Wenn ich dann gezielt einen SPS-Ausgang aktiviere, passiert nichts – der Zustand ändert sich nicht, und der Arduino erkennt kein Signal.
Zur Stromversorgung: Ich habe den Arduino sowohl mit einem 12V-Netzteil (über den VIN-Pin) als auch testweise direkt über den USB-Anschluss am Laptop betrieben – in beiden Fällen zeigt sich jedoch kein Unterschied im Verhalten.
Im Anhang findet ihr:
-
Den Schaltplan
-
Ein Foto der Platine
-
Ein Bild, wie es aussieht, wenn sie in Betrieb ist
-
Den Sketch, mit dem ich die Eingänge am Arduino auslese
int taster1=21;
int taster2=22;
int taster3=23;
int taster4=24;
int tasterStatus1=0;
int tasterStatus2=0;
int tasterStatus3=0;
int tasterStatus4=0;
void setup() {
// put your setup code here, to run once:
pinMode(taster1, INPUT);
pinMode(taster2, INPUT);
pinMode(taster3, INPUT);
pinMode(taster4, INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
tasterStatus1=digitalRead(taster1);
Serial.print("Q4.1: ");
Serial.println(tasterStatus1);
tasterStatus1=digitalRead(taster2);
Serial.print("Q4.0: ");
Serial.println(tasterStatus2);
tasterStatus1=digitalRead(taster3);
Serial.print("Q4.3: ");
Serial.println(tasterStatus3);
tasterStatus1=digitalRead(taster4);
Serial.print("Q4.2: ");
Serial.println(tasterStatus4);
delay(2500);
Serial.println(" ");
}
Ich freue mich über jeden Hinweis oder Tipp – vielleicht habe ich irgendwo einen Denkfehler oder einen Lötfehler übersehen.
Viele Grüße
Cédric