Wenn die SPS Pulldown Widerstände an den Eingängen hat, dann kannst Du den ULN2803 nicht verwenden. Dieser ist ein Array von 8 Darlington Transistoren mit offenen Kollektor die den Ausgang auf Masse ziehen. Der ULN2803 hat eigentlich keine Versorgungsspannung; das + pin ist Für die Schutzdioden notwendig wenn man Spulen ansteuert.
Der A2981 oder UDN2981 ist das was Du brauchst. Dieser zieht den Ausgang auf + Versogungsspannung.
http://www.allegromicro.com/en/Products/Motor-Driver-And-Interface-ICs/High-and-Low-Side-Drivers/UDx2981-2.aspxFür beide gilt: die notwendigen Widerstände sind integriert; Du kannst die Arduino-Ausgänge direkt an die Eingänge des UDN / ULN anschließen.
Eine komerzielle SPS ist vom Hersteller getestet und auch durch den vielfachen Einsatz sind noch die allerletzten Fehler aufgedeckt worden. Außerdem kontrolliert der Hersteller in der Planung/Vorproduktion auch alle erdenklichen Störeinflüsse bzw Umweltparameter. Das sind alles Dinge die Du nicht machen kannst. Weißt Du ob Deine Schaltung/Programmierung bei Hitze/Kälte Feuchtigkeit das macht was sie soll?
Dein Wissen von Elektronik-Programmierung ATmega-Architektur wird (leider) lückenhaft bis inexistent sein. So schleichen sich einfach Fehler aus unwissen ein. Glaub nicht, nur weil ich das schreibe, weiß ich soviel mehr.
Viele Grüße Uwe