Guten Morgen, Ich habe auf einem Bauernhof ein Programm für automatische Fütterung von Ziegen installiert. Leider scheint es so, als würde der Arduino Mega 2560 teilweise Programmzeilen überspringen. Dazu gibt es 2 brisante Beispiele: 1) Während des Melkbetriebes bleibt das Karussell manchmal einfach stehen und de LED leuchtet blau. um das Karussell aber wieder wegfahren zulassen muss der Stoptaster aber 2 mal gedrückt werden statt nur einmal Entprellung beginnt ab Zeile 534 die Variable „Var_KarusellStop“ wird im Melkbetrieb (state = 2) in Zeile 875 abgefragt und der Motor ausgeschaltet. Die Variablen „EntprellenStopTaster“, „Var_KarusellStopAlt“ usw. werden komischerweise nicht verändert(siehe Foto Debugger). 2) Der im Nebenraum stehende PC sendet dem Mega die Futtermege zu jeder Ziege bzw bietet einige Einstellungen wie zum Beispiel das der Futterschneck auf Dauerlauf geschaltet wird (falls er einmal leer gelaufen ist..) Als Bestätigung, das der Arduino alles Richitg erledigt hat, sollte er dem PC eine Antwort senden, in diesem Beispiel sendet er "Dauerlauf ein" und "DA" abwechselnd wie es sich gehört - schaltet den schneck aber nie ein... Im Programm ab Zeile 479 + Foto SchneckDauerlauf Weiters noch im Anhang der ganz aufbau des Karussells mit allen Sensoren. Schaltkasten Alle 230V & 400 V Leitungen gehen oben Hinein/Hinaus – alle Signalleitungen (Taster, geber…) sind geschiermt und gehen unten Hinein/Hinaus Arduino und RFID Reader werden mit 12V DC versorgt, Relais mit 9V DC (habe dort den einen Rückschlag vermutet – hat aber nichts geändert)
Für den Schaltkasten sollte man jemanden züchtigen. Aber ordentlich. Hast du WIKRLICH Lüsterklemmen auf nen Euro-Stecker gemacht? Und dann der restliche Verhau mit irgendwelchen Arduino Boards und Lochrastern. Dich sollte man nichts für den produktiven Einsatz, und dann noch an LEBEWESEN, machen lassen. Dein Programm ist genau so Pfusch. Kannst du nur Pfusch?
Thomas Kloiber schrieb: > Als Bestätigung, das der Arduino alles Richitg erledigt hat, sollte er > dem PC eine Antwort senden, in diesem Beispiel sendet er "Dauerlauf ein" > und "DA" abwechselnd wie es sich gehört - schaltet den schneck aber nie > ein... Warum sollte der das auch tun? Oliver
Der Code ist zum umfangreich, um ihn mal eben schnell per Sichtkontrolle zu prüfen. An den Fotos sehe ich allerdings relativ dünne Käbelchen zur Stromversorgung, die anscheinen nicht sternförmig zu einem Masse-Punkt am Arduino Board zusammen laufen. Das ist vor allem für die GND Leitungen wichtig. Ändere das. Dann würde ich die Steckverbindung der Stromversorgung am Arduino Board durch eine gelötete oder geschraubte Verbindung ersetzen. Sehe ich es richtig, dass das größere Netzteil dein Arduino Board versorgt und das kleinere die Relais? Im Prinzip ist das eine gute Idee, aber mir stellt sich die Frage, was sonst noch alles an den großen Netzteil hängt. Ich würde alle größeren Verbraucher (Motoren, Relais, Lichterketten) an das Zweit-Netzteil hängen damit das Arduino Board von allen bösen Störungen fern gehalten wird. Denn großartige Filter enthält es ja leider nicht. Diese Relais sind meiner Meinung nach nicht geeignet, da sie nur auf 1500V isolieren. Hier wären nach VDE 4000V angebracht. Vermutlich ist das jedoch derzeit nicht dein Hauptproblem.
Cyblord -. schrieb: > Hast du WIKRLICH Lüsterklemmen auf nen Euro-Stecker gemacht? Und du meinst, dass die Steckdose einen besseren Kontakt hat ? > Und dann der restliche Verhau mit irgendwelchen Arduino Boards und > Lochrastern. Dich sollte man nichts für den produktiven Einsatz, und > dann noch an LEBEWESEN, machen lassen. 3D-Printer werden auch mit Arduino Boards gemacht. Das übersteigt natürlich deine Fähigkeiten bei weitem, deswegen auch dein idiotischer Kommentar über Arduino Boards und Lochraster.
:
Bearbeitet durch User
Du könntest ein Schaltschrank taugliches Arduino MEGA einsetzen das Schutz gegen elektrostatische Entladung eingebaut hat z.B. https://www.conrad.de/de/sps-steuerungsmodul-controllino-maxi-pure-100-100-10-12-vdc-24-vdc-1595716.html https://www.conrad.de/de/sps-steuerungsmodul-controllino-mega-pure-100-200-10-1595718.html
Thomas Kloiber schrieb: > Ich habe auf einem Bauernhof ein Programm für automatische Fütterung von > Ziegen installiert. Leider scheint es so, als würde der Arduino Mega > 2560 teilweise Programmzeilen überspringen. Mal ganz sicher nicht. Aber du hast hier mehrere Probleme. Dein Programm hat keine gescheite Struktur! Du hast ALLES als eine MEGA-Funktion in deine Loop() Funktion geschrieben! Das ist sehr schwer nachvollziehbar und damit auch schwer analysierbar. Ebenso ist eine Fehlersuche deutlich erschwert. Du solltest das umstrukturieren und in sinnvolle Funktion packen. Dann sieht man eher durch und es wird einfacher und damit weniger fehleranfällig. Strukturierte Programmierung auf Mikrocontrollern
Marc V. schrieb: > Cyblord -. schrieb: >> Hast du WIKRLICH Lüsterklemmen auf nen Euro-Stecker gemacht? > > Und du meinst, dass die Steckdose einen besseren Kontakt hat ? Irrelevent. Da gehört ein Hutschienennetzteil mit passenden Klemmen rein und kein Steckernetzteil. > 3D-Printer werden auch mit Arduino Boards gemacht. Die sind ja auch von Pfuscher für Pfuscher, äh Maker. Interessiert uns hier aber nicht. Das ist nämlich kein 3D Printer fürs Kinderzimmer. > Das übersteigt natürlich deine Fähigkeiten bei weitem, deswegen auch > dein idiotischer Kommentar über Arduino Boards und Lochraster. Natürlich. Ich könnte NIE einen Arduino Board absolut amateurhaft SO in einen Schaltschrank bauen und dann nicht funktionierenen Pfusch-Code dafür schreiben. Übersteigt meine Fahigkeiten. Sorry.
:
Bearbeitet durch User
>An den Fotos sehe ich allerdings relativ dünne Käbelchen zur >Stromversorgung, die anscheinen nicht sternförmig zu einem Masse-Punkt >am Arduino Board zusammen laufen. Das ist vor allem für die GND >Leitungen wichtig. Ändere das. Masse Punkt mitten über dem Board oder ist das egal wo? Und dabei Alle GND Pins des Boards + Netzeil-GND verbinden? >>Leider scheint es so, als würde der Arduino Mega >>2560 teilweise Programmzeilen überspringen. >Mal ganz sicher nicht. Dann bitte ich dich, mir zu erklären wie es sein kann, dass lt. Bild "Debugger" die Variable "EntprellenStopTaster" 0 sein kann (in der Spalte Max) und trotzdem die Variable "D" 37 ist - außerdem sollte dann auch die Variable "C" 36,37 oder 38 sein, oder? Weiters ist die Variable "A" auch 0, was zwar dafür spricht das "EntprellenStopTaster" richtigerweise 0 ist, aber nicht dass "D" 37 ist - zur info-laut "millis()" lief dabei das Programm noch nicht lange und es wurde der Stoptaster auch nicht gedrückt >Sehe ich es richtig, dass das größere Netzteil dein Arduino Board >versorgt und das kleinere die Relais? Im Prinzip ist das eine gute Idee, >aber mir stellt sich die Frage, was sonst noch alles an den großen >Netzteil hängt. Ich würde alle größeren Verbraucher (Motoren, Relais, >Lichterketten) an das Zweit-Netzteil hängen damit das Arduino Board von >allen bösen Störungen fern gehalten wird. Denn großartige Filter enthält >es ja leider nicht. Auf dem 12V Netzteil hängt der Mega, der RFID Reader und ein Kapazitivsensor(nicht ab Bild) diese wurden aber alle schon abgehängt - ohne Erfolg >Aber du hast hier mehrere Probleme. Dein Programm hat keine gescheite >Struktur! Du hast ALLES als eine MEGA-Funktion in deine Loop() Funktion >geschrieben! Das ist sehr schwer nachvollziehbar und damit auch schwer >analysierbar. Ebenso ist eine Fehlersuche deutlich erschwert. Du >solltest das umstrukturieren und in sinnvolle Funktion packen. Dann >sieht man eher durch und es wird einfacher und damit weniger >fehleranfällig. Das Programm lief vorher ca 3 Monate lang ohne Reset ohne Motoren im Test.. Dabei hatte ich diese Problem nicht. Für eine Umstrukturierung bitte ich um ein Programm das deinen Vorstellungen entsprechend programmiert ist.
Thomas schrieb: > Dann bitte ich dich, mir zu erklären wie es sein kann, dass lt. Bild [...] Ein Controller ist nur so schlau wie sein Programmierer ;)
Thomas schrieb: > Masse Punkt mitten über dem Board oder ist das egal wo? Möglichst nahe an dem Punkt, wo du das Netzteil anschließt. Also momentan noch die Steckbuchse, die du durch etwas festeres austauschen sollst. Es könnte hilfreich sein, eine Menge Debug Meldungen hinzuzufügen (z.B. hinter jedem if und else) und diese mit Zeitstempel in eine Datei aufzuzeichnen.
>Ein Controller ist nur so schlau wie sein Programmierer ;)
und du anscheinend nicht schlauer als ich ;)
aber wieso funktioniert es dann ohne Motoren?
Thomas schrieb: >>Ein Controller ist nur so schlau wie sein Programmierer ;) > und du anscheinend nicht schlauer als ich ;) > > aber wieso funktioniert es dann ohne Motoren? Vielleicht weil deine horrende Verkabelung und deine Hobbyplatine für diese Umgebung nicht geeignet sind? Dein schlechter Code verhindert eben auch eine schnelle Fehlersuche. Liegts an der HW oder der SW? Wäre die SW sauberer, ließe sich die Frage schneller beantworten. Es kann auch eine Kombination sein: Ein schlecht beschalteter Eingang/Sensor liefert durch anlaufende Motoren falsche Daten ans Programm. Programm macht daraufhin Unsinn. ICH würde bei einer passenden Stromversorgung nebst ordentlicher Verkabelung mit passenden Querschnitten anfangen. Das ist das A und O. Von da aus kann man dann weiter machen.
:
Bearbeitet durch User
Thomas schrieb: >>Aber du hast hier mehrere Probleme. Dein Programm hat keine gescheite >>Struktur! Du hast ALLES als eine MEGA-Funktion in deine Loop() Funktion >>geschrieben! Das ist sehr schwer nachvollziehbar und damit auch schwer >>analysierbar. Ebenso ist eine Fehlersuche deutlich erschwert. Du >>solltest das umstrukturieren und in sinnvolle Funktion packen. Dann >>sieht man eher durch und es wird einfacher und damit weniger >>fehleranfällig. > > Das Programm lief vorher ca 3 Monate lang ohne Reset ohne Motoren im > Test.. Dann war das nur ein halber Test. Vermutlich hast du ein EMV-Problem, die Motoren spucken dir in die Suppe und deine Entprellung wird ausgehebelt. > Dabei hatte ich diese Problem nicht. Für eine Umstrukturierung > bitte ich um ein Programm das deinen Vorstellungen entsprechend > programmiert ist. Du meinst ein Beispiel? Ok, etwa so. Allerdings ist dort keine statemachine drin, die als Vorbild dienen könnte. Die gibt es aber im gleichnamigen Artikel. Oder wie im Artikel Multitasking. Beitrag "Re: I2CLCD Library für HD44780 LCDs" Bist du der OP? Dann sollte man aber bitte schön IMMER unter dem gleichen, idealerweise angemeldeten Namen schreiben.
erstmal gratulation das du das nach unten geschreibe in einer funktion so lange durchgehalten hast ^^ sowes hab ich auch noch nicht gesehen. Man kann da vieles umbauen und in funktionen umlagern. Das macht die ganze sache übersichtlicher , zumal sich einige teile stark ähneln. Es gibt auch lokale Variablen. zB bei der Eepromgeschichte
1 | void EEPROMWritelong(int address, long value) |
2 | {
|
3 | //Write the 4 bytes into the eeprom memory.
|
4 | EEPROM.write(address , (value & 0xFF) ); |
5 | EEPROM.write(address + 1, ((value >> 8) & 0xFF) ); |
6 | EEPROM.write(address + 2, ((value >> 16) & 0xFF) ); |
7 | EEPROM.write(address + 3, ((value >> 24) & 0xFF) ); |
8 | }
|
9 | |
10 | long EEPROMReadlong(long address) |
11 | {
|
12 | long value = 0; |
13 | value = EEPROM.read(address); |
14 | value |= (EEPROM.read(address + 1)<<8); |
15 | value |= (EEPROM.read(address + 2)<<16); |
16 | value |= (EEPROM.read(address + 3)<<24); |
17 | return value; |
18 | }
|
wenn man das so weiter führt kann man minimum 50% der globalen variablen wegwerfen. in jedem Status setzt du die 3 strings immer zurück. Wenn man die auswertung in eine extrafunktion auslagert kannst du das am ende vor dem rücksprung erledigen. Gleichzeitig sind die stati insgesammt deutlich kürzer und wiederholen sich stellenweise sogar -> weniger code die 3 strings ..
1 | if (Serial2.available() > 2) |
2 | {
|
3 | Empfangen = Serial2.readStringUntil(':'); |
4 | Empfangen1 = Serial2.readStringUntil(':'); |
5 | Empfangen2 = Serial2.readStringUntil(':'); |
6 | }
|
auf was wartetst du hier genau? Was sendest du dem arduino? "xx:yy:zz\r\n" ? Wenn ja dann würde ich nur auf das \r\n triggern
1 | for (Hilfsvariable = 0; Hilfsvariable < 11; Hilfsvariable++) |
lokale variable :
1 | uint8_t i; |
2 | for (i= 0; i< 11; i++) |
LOOOOOOOOOOOOOOOOOL Der traut sich tatsächlich, Bilder von diesem Schaltkasten hier anzuhängen? Sorry, aber schalte die Scheiße ab und lass das von jemandem machen, der Ahnung davon hat und vor allem weiß, was er tut. Ansonsten werden sich Deine Ziegen bald als Brathähnchen verkaufen lassen nachdem die Feuerwehr wieder weg ist. Versicherung zahlt bei so einem Pfusch übrigens auch keinen Cent.
Cyblord -. schrieb: > Natürlich. Ich könnte NIE einen Arduino Board absolut amateurhaft SO in > einen Schaltschrank bauen Arduino Board ist eigentlich ziemlich gut bis gut gemacht, kein Grund ihn so anzuspucken. Das gleiche gilt für Lochraster wenn es anständig gemacht wird. Das die Verkabelung Pfusch ist, gebe ich allerdings zu. > und dann nicht funktionierenen Pfusch-Code > dafür schreiben. Übersteigt meine Fahigkeiten. Sorry. ob der Code Pfusch ist oder nicht, will ich gar nicht beurteilen, wird wahrscheinlich so sein. Die Behauptung vom TO, dass der MEGA Programmzeilen überspringt ist auf jeden Fall Blödsinn.
:
Bearbeitet durch User
Hi >Arduino Board ist eigentlich ziemlich gut bis gut gemacht, kein > Grund ihn so anzuspucken. Stimmt. Ziemlich gut kastriert das Board. MfG Spess
gdfgsdgsg schrieb: > Es gibt auch lokale Variablen. > zB bei der Eepromgeschichte > void EEPROMWritelong(int address, long value) > { > //Write the 4 bytes into the eeprom memory. > EEPROM.write(address , (value & 0xFF) ); > EEPROM.write(address + 1, ((value >> 8) & 0xFF) ); > EEPROM.write(address + 2, ((value >> 16) & 0xFF) ); > EEPROM.write(address + 3, ((value >> 24) & 0xFF) ); > } > > long EEPROMReadlong(long address) > { > long value = 0; > value = EEPROM.read(address); > value |= (EEPROM.read(address + 1)<<8); > value |= (EEPROM.read(address + 2)<<16); > value |= (EEPROM.read(address + 3)<<24); > return value; > } Tipp: Sowas muss man mit Arduino nicht tun! Denn so gehts auch:
1 | #include <EEPROM.h> |
2 | long value = 4711L; |
3 | |
4 | struct
|
5 | {
|
6 | long value; |
7 | // hier weitere Dinge im EEPROM
|
8 | } EEMEM imEEPROM; |
9 | |
10 | |
11 | // in einer Funktion:
|
12 | EEPROM.put((int)&imEEPROM.value,value); // schreiben |
13 | EEPROM.get((int)&imEEPROM.value,value); // lesen |
Die Adressberechnung kann man so dann auch noch dem Kompiler überlassen
>ICH würde bei einer passenden Stromversorgung nebst ordentlicher >Verkabelung mit passenden Querschnitten anfangen. Das ist das A und O. >Von da aus kann man dann weiter machen. Querschnittswunsch? ich meine Telefonkabel sollten für die kleinen Stöme die der µC liefert reichen - wenn nicht wären sie schon längst verschmort >Ein schlecht beschalteter Eingang/Sensor liefert durch anlaufende Motoren >falsche Daten ans Programm. Programm macht daraufhin Unsinn. Ich bin der Meinung dass ich das so ausschließen kann. Es ist zwar absolut richtig, dass der µC vorallem beim anlaufen Signale erhält - das ist aber der Grund warum nicht auf die erste fallende Flanke der Taster/Schalter geschaltet wird. Da mein code anscheinend Pfusch ist, möchte ich zu meiner Verteidigung sagen, dass ich mir Programmieren selbst beigebracht habe (klar sieht man dass, aber die meisten hätten vermutlich schon lange aufgegeben) >Es gibt auch lokale Variablen habe einmal gehört, dass so ev. einige Variablen doppelt angelegt werden und dann die flasche ausgelesen werden kann. und ich sah keinen Nachteil alle Variablen einfach zu machen. lieg ich da Falsch? vor wenigen Stunden getestet - Alle motoren von den Schützen abgeklemmt und alles Funktioniert wie am Schnürchen. ankelemmt = gleiches Problem >Vermutlich hast du ein EMV-Problem bin seither auch der Meinung, aber kann es sein, das µC dadurch in irgendwelche Zeilen hüpft? und wie schirme ich die am besten ab?
>dass ich mir Programmieren selbst beigebracht habe
Mein Professor sagte zu mir, dass JEDER Mensch auf der Welt
programmieren kann. >>*Gute<< (effiziente) Programmierer findet man aber
selten.
Dein Code ist sehr unübersichtlich. Wenn ich in deinem Code "den einen
Fehler" suchen müsste der das alles verursacht was dir passiert dann
würde ich nach einer halben Stunde das Handtuch schmeissen aus Frust und
Verzweiflung weil dein Code nicht systematisch durchgearbeitet werden
kann. Ich würde mich ständig im Kreis drehen. Daher bringt es hier gar
nichts den Quellcode anzuhängen, da sich niemand durcharbeiten wird.
Es besteht nur aus haufenweisen if-Abfragen: sowas ist als
Spaghetti-Code bekannt.
*"gut": Strukturiertes Programmieren, effizent, gut dokumentierter Code
(Variablennamen, Kommentare), einfache Portabilität, erweiterbar und
wartbar durch Dritte (z.B. Mitarbeiter aus einem Unternehmen wenn man
z.B. krank ist) ohne notwendige Einweisung in den Code durch dich selber
Thomas schrieb: >>Vermutlich hast du ein EMV-Problem > bin seither auch der Meinung, aber kann es sein, das µC dadurch in > irgendwelche Zeilen hüpft? µC kennt keine Zeilen, kann also auch keine überspringen. > und wie schirme ich die am besten ab? Metal Gehäuse für Arduino Board. Abgeschirmte Kabel (und ordentlich verlegen). Elkos und Entstörkondensatoren verwenden.
:
Bearbeitet durch User
Thomas schrieb: > Querschnittswunsch? ich meine Telefonkabel sollten für die kleinen Stöme > die der µC liefert reichen - wenn nicht wären sie schon längst > verschmort Es geht nicht um die Belastbarkeit der Leitungen, sondern um den Spannungsabfall. Fehlfunktion sind zu erwarten, wenn GND Pegel zwischen Modulen um mehr als 0,5V unterschiedlich sind, weil die Pegel von digitalen Signalen aus Sicht des Empfängers um eben diesen Wert vom Soll abweichen. Wenn der Sender z.B. LOW mit 0,2V sendet und das GND Potential des Empfängers um 0,5V nach unten verschoben ist, das "sieht" dieser ein Signal mit 0,7V, was er unter Umständen nicht mehr zuverlässig als LOW verarbeitet. Dazu kommt, das Spannungen unterhalb von GND und oberhalb von VCC ab einer gewissen Stromstärke einen Latch-Up Effekt auslösen können. Der betroffene Eingang blockiert sich dann selbst und es fliesst so lange ein erhöhter Strom, bis die Stromversorgung unterbrochen wird. Manche Chips gehen dabei kaputt, andere erwärmen sich nur harmlos. Dabei kommt es nicht nur auf den Gleichtstrom an, sondern auch auf HF Anteile, die dazu überlagert sind. Für HF ist jede Leitung wesentlich hochohmiger, als für Gleichstrom. Eine verdrillte Telefonleitung hat zum Beispiel einen Wellenwiderstand von ca. 100 Ohm! Da kann schon der Lichtbogen einer startenden Leuchtstoffröhre ganz erhebliche Spannung induzieren.
>Alle motoren von den Schützen abgeklemmt und alles Funktioniert wie am Schnürchen
Wäre ja alles zu einfach auf der Welt wenn der Betrieb im Feld genauso
wäre wie im störungsfreien Labor.
Nicht umsonst geben Unternehmen tausende Euros aus für EMV-Prüfungen um
ein "CE-Zeichen zu bekommen und das Produkt auf dem Markt vertreiben zu
dürfen.
Ja: Du hast ein enormes EMV-Problem und EMV ist Voodoo und kann man
nicht aus Büchern lernen, sondern erfordert jahrelange
Praxis-Erfahrungen.
Die Grundlagen des EMV Voodoos kannst du hier nachlesen: https://www.sieb-meyer.de/tl_files/media/Produkte/Downloads/EMC_EMV/Deutsch/EMV_Geraeteaufbau.pdf Danach kommt die Erfahrung.
Thomas schrieb: >>Ein schlecht beschalteter Eingang/Sensor liefert durch anlaufende Motoren >>falsche Daten ans Programm. Programm macht daraufhin Unsinn. > > Ich bin der Meinung dass ich das so ausschließen kann. 1. Fehler! Siehe Fehlersuche >>Es gibt auch lokale Variablen > habe einmal gehört, dass so ev. einige Variablen doppelt angelegt werden > und dann die flasche ausgelesen werden kann. und ich sah keinen Nachteil > alle Variablen einfach zu machen. lieg ich da Falsch? Du liegst falsch. Think global, act local ist auch bei der Programmierung das Mittel der Wahl. Dadurch verhindert man Unübersichtlichkeit und komische Quereffekte. Man sollte möglichst wenige, globale Variablen nutzen. > vor wenigen Stunden getestet - Alle motoren von den Schützen abgeklemmt > und alles Funktioniert wie am Schnürchen. ankelemmt = gleiches Problem >>Vermutlich hast du ein EMV-Problem > bin seither auch der Meinung, aber kann es sein, das µC dadurch in > irgendwelche Zeilen hüpft? Kann sein, ist hier aber eher nicht der Fall. > und wie schirme ich die am besten ab? Du mußt erstmal eine systematische Fehlersuche betreiben, ehe du da was "abschirmen" kannst. EMV ist zwar logisch, aber trotzdem komplex. Man muss erstmal rausfinden, an welcher Stelle die böse Störung zuschlägt. Bei Einschalten oder Ausschalten welches Motors? Dann kann man weiter suchen, wie die Störung einkoppelt. Viele Sachen sind leitungsgebunden, da hilft eine Blechdose so gut wie gar nicht. Es kann aber auch ein Motor sein, der durch seinen Anfahrstrom ein Netzteil kurz in die Knie zwingt. Dann macht deine CPU einen Reset und rennt wieder vom Anfang los. Wenn du 230VAC bzw. 400VAC Motoren direkt mit Schützen schaltest, wirst du wohl auch Snubber brauchen, denn ohne die funkt es schon ganz ordentlich.
Stefanus F. schrieb: > Dabei kommt es nicht nur auf den Gleichtstrom an, sondern auch auf HF > Anteile, die dazu überlagert sind. Für HF ist jede Leitung wesentlich > hochohmiger, als für Gleichstrom. Eine verdrillte Telefonleitung hat zum > Beispiel einen Wellenwiderstand von ca. 100 Ohm! Da kann schon der > Lichtbogen einer startenden Leuchtstoffröhre ganz erhebliche Spannung > induzieren. Kaum. Denn gerade verdrillte Leitungen haben sehr kleine effektive Querschnittsflächen. Du malst mal wieder den Teufel an die Wand.
Falk B. schrieb: > Stefanus F. schrieb: >> Dabei kommt es nicht nur auf den Gleichtstrom an, sondern auch auf HF >> Anteile, die dazu überlagert sind. Für HF ist jede Leitung wesentlich >> hochohmiger, als für Gleichstrom. Eine verdrillte Telefonleitung hat zum >> Beispiel einen Wellenwiderstand von ca. 100 Ohm! Da kann schon der >> Lichtbogen einer startenden Leuchtstoffröhre ganz erhebliche Spannung >> induzieren. > > Kaum. Denn gerade verdrillte Leitungen haben sehr kleine effektive > Querschnittsflächen. Du malst mal wieder den Teufel an die Wand. Ich bezog mich auf unsymmetrisch betriebene Leitungen, zum Beispiel eine für GND und die andere für das Signal. Hätte ich hinschreiben sollen. Und nein, ich male den Teufel nicht an die Wand. Meine Hobbyschaltungen haben bisher alle tadellos viele Jahre lang funktioniert - auch in Industrie-Anlagen. Keine einzige wurde je reklamiert. Denn ich habe diesen EMV Kram vor 30 Jahren in einer ordentlichen Berufsausbildung gelernt und einigermassen korrekt angewendet. Wie krass sich schlechte Masseführung auswirken kann, könnt ihr in diesem Thread in Bildern sehen: Beitrag "Oszi Tastkopf <> Schaltungsmasse" Oder auch hier: Beitrag "Fehler im Datenblatt oder schlechte Messung?"
Falk B. schrieb:
> Bei Einschalten oder Ausschalten welches Motors?
Beim Karussell Motor nur beim einschalten (400VAC 0,2kW) und beim
Schneckmotor beim Ausschalten (400VAC 0,5kW)
Wie wärs mit galvanischer Abtrennung deiner Eingänge z.B mit Optokopplern oder Koppelrelais um dein offensichtliches EMV-Problem zu lösen.
Frank S. schrieb: > Wie wärs mit galvanischer Abtrennung deiner Eingänge z.B mit > Optokopplern oder Koppelrelais um dein offensichtliches EMV-Problem zu > lösen. Jaja, der Optokopplerwahn mal wieder. Der Heilsbringer schlechthin. Was für ein Irrtum! Solange der Koppelpfad nicht mal ansatzweise nachgewiesen ist, ist das alles nur ein Schuß ins Blaue.
Thomas schrieb: > Falk B. schrieb: > >> Bei Einschalten oder Ausschalten welches Motors? > > Beim Karussell Motor nur beim einschalten (400VAC 0,2kW) und beim > Schneckmotor beim Ausschalten (400VAC 0,5kW) Was zum Geier ist ein Schneckmotor? Einer der Firma Schneck? Nun, da kommen wir der Sache schon mal näher. Zunächst sollte man prüfen, ob der uC einen Reset hinlegt. Das geht einfach, indem man zum Start einen Text per UART ausgibt "Hallo Reset" oder die LEDs in einer eindeutigen Weise schaltet bzw. blinken läßt. Wenn das nicht der Fall ist, wird es wohl in eine Signalleitung reinspucken und falsche Signale vorgaukeln. Hier spielen 3 Dinge eine Rolle. 1.) Leitungs- und Masseführung; dafür braucht es einen Verdrahtungsplan, ggf. auch eine Skizze des realen Aufbaus mit ein paar Längenangaben (1m Sensorkabel oder 10m Sensorkabel?) Zu jedem Taster/Schalter etc. muss sowohl das Signal aus auch die zugehörge Masse direkt hingehen! Wenn man da die Masse spart und über mehrere Taster zieht, die weit verteilt sind (>20cm), spannt man sich Koppelschleifen auf, in die Störungen gut und gern einkoppeln. 2.) Eingangsfilter auf deiner Schaltung (Hardware), -> Schaltplan; Auf deinem Schaltkastenbild sehe ich nur ein winziges Stück Lochrasterplatine mit fast nix drauf und Kabelsalat. Da fehlt mindestens ein gescheiter RC-Filter für jeden Sensor/Tastereingang. Der macht dann auch gleichzeitig eine Entprellung. Der Pull-Up R1 sollte eher niederohmig sein, so 1-5k. https://www.mikrocontroller.net/articles/Entprellung#Einfacher_Taster 3.) Entprellung per Software. Deine Software sehen wir, wenn gleich nicht wirklich durch 8-0 Weiterhin hilft es ungemein, wenn der Steuerungsablauf durch eine gescheit aufgebaute, lesbare Statemachine gebildet wird. Denn dann sieht man sofort, daß diese wegen der falschen Signale in den falschen Zustand springt. Dabei sollte man mit einem enum arbeiten, welcher mit sinnvollen Namen die States benennt, dann braucht man nämlich keine zusätzlichen Kommentare. Siehe Artikel Statemachine.
Arduino Fanboy D. schrieb: > Tipp: > Sowas muss man mit Arduino nicht tun! > > Denn so gehts auch:#include <EEPROM.h> > long value = 4711L; > > struct > { > long value; > // hier weitere Dinge im EEPROM > } EEMEM imEEPROM; > > // in einer Funktion: > EEPROM.put((int)&imEEPROM.value,value); // schreiben > EEPROM.get((int)&imEEPROM.value,value); // lesen > Die Adressberechnung kann man so dann auch noch dem Kompiler überlassen ^^ ok das es das schon fertig gibt war mir nicht bewusst. kenne die arduino umgebung nur von unseren Praktikanten die kommen damit recht brauchbar klar.
Noch ein Tipp zur Software. Du musst die einzelnen Aufgaben in einzelne Funktionen auslagern. Dabei ist es wichtig, daß diese Funktion nur das machen, was sie WIRKLICH sollen. D.h. ein Funktion zur Entprellung tut eben nur das und greift NICHT in den Steuerablauf ein! Diese Funktion entprellt nur die Eingänge und gibt sie entprellt über Variablen weiter! Das gleiche für deinen Befehlsdekoder am UART. Nur die Ablaufsteuerung in Form einer FSM steuert die Ausgänge und greift dabei auf die entprellten Eingänge und dekodierten Befehle zu! Deine Loop() sieht dann ca. so aus. Den Watchdog brauchst du nicht, das ist nur ein Würg-Around für schlechte Software.
1 | void loop() { |
2 | UART_COM(); |
3 | Entprellung(); |
4 | Verarbeitung(); |
5 | }
|
Diese einzelnen Funktionen könnte man sogar in einzelne .cpp Files stecken, wie es bei Profis gemacht wird.
Marc V. schrieb: > Metal Gehäuse für Arduino Board. > Abgeschirmte Kabel (und ordentlich verlegen). > Elkos und Entstörkondensatoren verwenden. So einfach kann das sein, muss aber nicht ;) Generell ist es im günstigsten Fall die zweitbeste Idee, eine empfindliche Stelle zu schirmen. Besser ist es, eine Störung dort zu bekämpfen, wo sie entsteht. Beides ist aber ohne Erfahrung wenig aussichtsreich und es macht MMN erst recht keinen Sinn, den TO jetzt zu Experimenten mit Kondensatoren zu animieren. Und ein Metallgehäuse mag schön und oft sinnvoll für HF-Baugruppen sein, ist aber nicht nötig für ein Controllerboard.
Falk B. schrieb: > Was zum Geier ist ein Schneckmotor? ein Motor mit Schneckengetriebe (Umgangssprache) Falk B. schrieb: > Nun, da kommen wir der Sache schon mal näher. > Zunächst sollte man prüfen, ob der uC einen Reset hinlegt. Das geht > einfach, indem man zum Start einen Text per UART ausgibt "Hallo Reset" > oder die LEDs in einer eindeutigen Weise schaltet bzw. blinken läßt. Nein, er führt keinen Reset durch. - er verändert nur einzelne Variablen(ohne Code davor bzw danach auszuführen) kann es sein, dass durch EMV der Speicher des Arduinos Variablen verändert/kippt? Falk B. schrieb: > Wenn das nicht der Fall ist, wird es wohl in eine Signalleitung > reinspucken und falsche Signale vorgaukeln Wenn mir ausschließlich NUR der "Stoptaster" Probleme bereitet, kann der "Fehler" trotzdem auch bei anderen Signalleitungen liegen?
Thomas schrieb: > Nein, er führt keinen Reset durch. - er verändert nur einzelne > Variablen(ohne Code davor bzw danach auszuführen) kann es sein, dass > durch EMV der Speicher des Arduinos Variablen verändert/kippt? Unsinn. Nein das kann NICHT sein. Jetzt strukturiere dein Programm mal ordentlich und stell es hier nochmal, als Code nicht als Bild, ein. Dann kann man auch was dazu sagen.
:
Bearbeitet durch User
Thomas Kloiber schrieb: > Während des Melkbetriebes bleibt das Karussell manchmal einfach > stehen und de LED leuchtet blau. um das Karussell aber wieder wegfahren > zulassen muss der Stoptaster aber 2 mal gedrückt werden statt nur einmal Da dass anscheinend von Bedeutung ist, muss man "manchmal" auf "manchmal ABER NUR beim ausschalten des Motors mit Schneckengetriebe" ändern. (blieb in den letzten Tagen ca 20 mal stehen, dabei wurde der Motor 150mal Ein/Aus geschalten) 2 mal gedrückt heißt, dass der Arduino kein LOW an der Signalleitung vom Stoptaster erhalten hat - sonst müsst man nur einmal drücken, um wieder loszufahren
Du solltest dir auch mal klar machen welche globalen Zustände dein Controller intern überhaupt verwalten muss. Diese kannst du dann auch einfach mal dauernd über UART ausgeben. Damit siehst du, was der Controller so denkt was da draussen eigentlich abgeht. Aber auch dafür muss man sich erst mal im Kopf und dann im Code etwas ordnen. Schon mal eine Zustandsdiagramm gesehen? Kannst du so was für deine Anlage malen?
Thomas schrieb: > kann es sein, dass durch EMV der Speicher des Arduinos > Variablen verändert/kippt? Kann sein, ist aber sehr unwahrscheinlich. Ich würde zuerst alle anderen möglichen Ursachen in Betracht ziehen.
Thomas schrieb: > NUR beim ausschalten des Motors Klingt nach EMV-Problem durch induktive Störungen. Hast du Snubber an deinen Relais verbaut? Ist das eigentlich deine Eigenkonstruktion und gehörend die Ziegen dir oder hast du das verkauft?
Udo S. schrieb: > Hast du Snubber an deinen Relais verbaut? Nein, habe habe ich nicht - lediglich das Relais Shield mit einem zweiten Netzteil versorgt. Udo S. schrieb: > Ist das eigentlich deine Eigenkonstruktion und gehörend die Ziegen dir > oder hast du das verkauft? Ja, Eigenkonstruktion für Zuhause - alles was irgendwie mit Strom zu tun hat habe ich (18 Jahre) gemacht bzw. war vorher schon.
Thomas schrieb: > Udo S. schrieb: >> Hast du Snubber an deinen Relais verbaut? > > Nein, habe habe ich nicht - lediglich das Relais Shield mit einem > zweiten Netzteil versorgt. Warum gönnst du dir nicht eine Logo oder S7-1200 und ein paar richtige Hutschienenrelais und ein Industrienetzteil und machst diesem Graus ein Ende? So eine Mini-SPS wurde genau für Leute erfunden die nur so programmieren können wie du. Also gar nicht. Ein Arduino-Relais-Shield in so einen Schaltschrank auf ne Hutschiene gedübelt ist echt nicht schön. Schau dir doch mal die obere Hälfte an und vergleiche mit der unteren Hälfte. Oben professionell, unten Bastler-Pfusch. Willst du das wirklich? Willst du das in 5 Jahren nochmal durchschauen wenn da irgendwas nicht mehr geht (Falls du es jemals zum laufen bekommst.)? Was ist wenn sich das mal ein Fachmann anschauen muss weil du gar keine Zeit mehr hast oder im KH liegst oder sonst was? Das ist doch kein Jugend-Forscht Projekt, das soll doch wohl über längere Zeit zuverlässig laufen und wird ja wohl gewerblich genutzt.
:
Bearbeitet durch User
Thomas schrieb: >> Was zum Geier ist ein Schneckmotor? > > ein Motor mit Schneckengetriebe (Umgangssprache) Dachte ich mir schon. > Nein, er führt keinen Reset durch. - er verändert nur einzelne > Variablen(ohne Code davor bzw danach auszuführen) Naja, bei dem Kauderwelsch von "Struktur" ist das keine Kunst > kann es sein, dass > durch EMV der Speicher des Arduinos Variablen verändert/kippt? Theoretisch möglich, praktisch aber eher SEEEEEHR Unwahrscheinlich. Denn einzelne Bits kippen eher bei ionisierender Strahlung als bei EMV. >> Wenn das nicht der Fall ist, wird es wohl in eine Signalleitung >> reinspucken und falsche Signale vorgaukeln > > Wenn mir ausschließlich NUR der "Stoptaster" Probleme bereitet, kann der > "Fehler" trotzdem auch bei anderen Signalleitungen liegen? Kann sein.
Was kann man machen? Man baue sich ein minimales Testprogramm, das im 1-10s Takt den "Schneckmotor" ein- und aus schaltet. Im gleichen Programm muss dann auch der GLEICHE Code zur Entprellung der Eingänge laufen, auch wenn die Ergebnisse nicht weiter verwendet werden. Dann sieht man aber, in welche Eingänge was reinkoppelt. Dazu braucht man aber eine Funktion zur Entprellung, die wie schon geschrieben NUR entprellt und nicht weiter direkt in die Steuerung reingreift.
Hallo Thomas, aus meiner Sicht gibt es ein paar augenscheinliche Mängel: Es fehlen RC-Glieder zur Entstörung der Schützspulen. Ohne diese kann bereits das Ein- und Ausschalten der Schütze Probleme verursachen. Es fehlen wahrscheinlich auch 3-phasige Motorentstörglieder. Es fehlt ein Steuertrafo, welcher bei Verwendung von mehr als einem Schütz zwingend vorgeschrieben ist. Hier hast du weiterhin das Problem, dass jeder Spike, welcher durch das Schalten der Motoren entsteht, ohne jede Dämpfung in das Netzteil des Arduino einkoppelt. Wahrscheinlich hast du die Taster Melkbetrieb, Zurück und Stop direkt mit 5V beschaltet und auf die Eingänge des Arduino geführt. Dies ist aber deshalb ungünstig, weil die Leitungen wie Antennen wirken und die Störimpulse bis zu den Eingängen gelangen. Obwohl die Kollegen oben anderer Meinung sind, solltest du die Taster mit 24V beschalten und über Interfacerelais oder Optokoppler auf den Arduino führen, dann hast du diese Fehlerursache sicher ausgeschlossen. Wurde für den Stopp-Taster ein Öffner verwendet? Ausser das dies eine Vorschrift (Drahtbruchsicher) ist, hat es noch weitere Vorteile. Wie wurde der Personenschutz (Bedienpersonal) und der der Tiere realisiert? Sind z. B. Sicherheitseinrichtungen gegen Quetschung vorhanden? Ich sehe weiterhin weder Not-Aus-Taster für den Gefahrenfall noch einen Hauptschalter. Viel Glück und Grüße Otto
Falk B. schrieb: > Man baue sich ein minimales Testprogramm, das im > 1-10s Takt den "Schneckmotor" ein- und aus schaltet. Danke für den Tipp, werde ich morgen machen. Habe den Arduino heute den ganzen Tag lang mit Metall abgeschirmt und es gab keine Probleme - kaum klemmte ich die Erdung von der Schirmung ab hüpfte die Variable auf 1.. Cyblord -. schrieb: > Du solltest dir auch mal klar machen welche globalen Zustände dein > Controller intern überhaupt verwalten muss. Diese kannst du dann auch > einfach mal dauernd über UART ausgeben. Es verändert sich NUR die StopVariable - alle anderen machen was sie sollen. Das gleiche Programm läuft übrigens seit vorgestern wieder in meiner Wohnung (klar ohne Starkstromleitungen in der nähe) aber trotzdem ohne Probleme
Thomas schrieb: > Falk B. schrieb: > >> Man baue sich ein minimales Testprogramm, das im >> 1-10s Takt den "Schneckmotor" ein- und aus schaltet. > > Danke für den Tipp, werde ich morgen machen. > > Habe den Arduino heute den ganzen Tag lang mit Metall abgeschirmt und es > gab keine Probleme - kaum klemmte ich die Erdung von der Schirmung ab > hüpfte die Variable auf 1.. Ahhhh, ich glaube dein Steckernetzteil ist schuld. Das hat nämlich keine Schutzerde. Die holst du dir zufällig irgendwo rein. Das ist aber schlecht. Du brauchst eine DIREKTE, SOLIDE Verbindung von der Arduino-Masse nach PE! Ebenso dein 2. Netzteil für deine Relais. Diese Billig-China-Dinger sind sowieso ein schlechter Witz! Dort hat man Billigst-Relais verbaut, die einen sehr geringen Kriechweg zwischen Steueranschluß und Schaltkontakten haben. Mit dem Optokoppler meint man, die Isolationsfestigkeit zu erhöhen. Aber Murks bleibt Murks. Tu dir einen Gefallen und beschaff dir gescheite Relais mit ordentlichen Abständen. Dann braucht es auch keine Optokoppler und kein 2. Netzteil. > Das gleiche Programm läuft übrigens seit vorgestern wieder in meiner > Wohnung (klar ohne Starkstromleitungen in der nähe) aber trotzdem ohne > Probleme Nett, aber weniger als die halbe Wahrheit.
Falk B. schrieb: > Man baue sich ein minimales Testprogramm, das im > 1-10s Takt den "Schneckmotor" ein- und aus schaltet. Hab ich gerade 30min lang getestet (ohne PE anzuschließen, oder Bleche im Schaltkasten) - es wurden keine Variablen verändert. ich habe dem uC auch zählen lassen wie oft er verschiedene Eingänge als LOW erkennt - waren beim Stoptaster in den 30 min 75 Durchläufe - alle anderen lagen bei max 20. Weiters habe ich gerade ein Mini Programm geschrieben, dass einfach in jeden Futterstand Futter hineinschmeißt (= Schneckmotor einschaltet), bin gespannt was sich dabei rausstellt.
Thomas schrieb: > Falk B. schrieb: >> Man baue sich ein minimales Testprogramm, das im >> 1-10s Takt den "Schneckmotor" ein- und aus schaltet. > > Hab ich gerade 30min lang getestet (ohne PE anzuschließen, oder Bleche > im Schaltkasten) - es wurden keine Variablen verändert. ich habe dem uC > auch zählen lassen wie oft er verschiedene Eingänge als LOW erkennt - > waren beim Stoptaster in den 30 min 75 Durchläufe - alle anderen lagen > bei max 20. Wie ist das zu verstehen? Es wurden in 30min 75x LOW erkannt, obwohl keiner gedrückt hat? Ist das nicht eher ein Fehler? > Weiters habe ich gerade ein Mini Programm geschrieben, dass einfach in > jeden Futterstand Futter hineinschmeißt (= Schneckmotor einschaltet), > bin gespannt was sich dabei rausstellt. Ja, aber schließe erstmal PE sauber an deinen Arduino an! Siehe mein anderer Beitrag!
Falk B. schrieb: >> auch zählen lassen wie oft er verschiedene Eingänge als LOW erkennt - >> waren beim Stoptaster in den 30 min 75 Durchläufe - alle anderen lagen >> bei max 20. > > Wie ist das zu verstehen? Es wurden in 30min 75x LOW erkannt, obwohl > keiner gedrückt hat? Ist das nicht eher ein Fehler? Ja, das würde mich auch interessieren. Pull-Up am Taster ? Frag doch mal die Taster in der Timer ISR ab und warte in loop() nur auf gesetzte Flags - ist übersichtlicher und sicherer auf jeden Fall. Für seriellen Empfang und Wiegand getrennte Funktionen vorsehen, in loop() nur eine Statemachine und schon wird es viel übersichtlicher.
Da gehen doch rot-schwarze Kabel vom Arduino zum Relais-Modul. Hast du damit die beiden Netzteile parallel geschaltet?
Falk B. schrieb: > Wie ist das zu verstehen? Es wurden in 30min 75x LOW erkannt, obwohl > keiner gedrückt hat? Ist das nicht eher ein Fehler? Ja, richtig verstanden Marc V. schrieb: > Pull-Up am Taster Ja, sind 4k7 gegen 5V
Thomas schrieb: > Falk B. schrieb: >> Wie ist das zu verstehen? Es wurden in 30min 75x LOW erkannt, obwohl >> keiner gedrückt hat? Ist das nicht eher ein Fehler? > > Ja, richtig verstanden Na immerhin ein eindeutiges Ergebnis! Schließ PE an den Arduino an und test nochmal. Denn durch das undefinierte Massepotential am Arduino können die tollsten Dinge passieren, vor allem weil in den meisten dieser Netzteile Y-Kondensatoren von L und N gegen die Ausgangsmasse geschaltet sind. Dort huschen Störungen liebend gern drüber!
Versuch mal, die beiden Lüsterklemmen am Eurostecker zu tauschen. Dadurch geht der Y-Kondensator vielleicht ja an den Nullleiter, so dass das 50Hz Brummen nicht mehr in die Schaltung gerät. Übrigens: Das Foto sieht einfach geil aus! Im Ernst: Hast du einen Schaltplan davon? Oder ein Blockschaltbild oder Prinzipzeichnung oder hingerotzte Skizze oder so? Selbst etwas in dieser Art könnte schon ein wenig Klarheit bringen: https://xkcd.com/730/ Und vielleicht entdeckst du beim Zeichnen ja selbst das Problem...
Eingänge mit Taster und Schalter würde ich etwa so entstören:
1 | ____ 100Ω 100nF |
2 | GND |---- ----[===]---+------||------| |
3 | | |
4 | | 4,7kΩ |
5 | +----[===]-----o 5V |
6 | | |
7 | | 47kΩ |
8 | +----[===]-----o µC Eingang |
Der 47kΩ Widerstand schützt den µC vor Überspannung. Jemand anders empfahl Optokoppler, das ist auch eine gute Lösung:
1 | _____ 2,2kΩ |
2 | 24V o---- ----[===]------|>|------| GND |
3 | ______ |
4 | / \ |
5 | 5V o---[===]--------+----/ \>----| GND |
6 | 4,7kΩ | |
7 | +-----||--------| GND |
8 | | 100nF |
9 | | |
10 | o µC Eingang |
Der Vorteil ist, dass du so die "empfindlichen" 5V von den externen Kabeln fernhalten kannst.
Stefanus F. schrieb: > Eingänge mit Taster und Schalter würde ich etwa so entstören: Jaja, und noch so ein "Expertentip". Der Rest der Welt macht das anders, und das aus gutem Grund. https://www.mikrocontroller.net/articles/Entprellung#Einfacher_Taster Denn dann hat man einen echten Tiefpaß vor dem Eingang, der sowohl gegen HF als auch sehr gut gegen ESD schützt. Vor allem weil es immer ein hochohmiges Längselement gibt (R2) und ein HF-mäßig niederohmiges Querelement (C1). Und zwar genau DORT, wo es am wirksamsten ist, direkt am uC-Pin! Aber das hast du ja alles schon vor langer Zeit in der Le(e)hre gelernt und immer wieder erfolgreich umgesetzt . . .
Werden Bauernhöfe nicht durch Gewerbeaufsicht/BG überprüft?. Wenn die den Schaltkasten sehen werden sie die Stilllegung veranlassen. Bitte mach das neu. Thomas
Thomas schrieb: > Werden Bauernhöfe nicht durch Gewerbeaufsicht/BG überprüft?. > Wenn die den Schaltkasten sehen werden sie die Stilllegung veranlassen. Die ordnen eher das komplette Niederbrennen an. Sicher ist sicher.
Dafür gibt es eine simple Lösung: Schaltkästen mit undurchsichtigem Deckel :-)
Falk B. schrieb: > Schließ PE an den Arduino an und test nochmal. hab ich Heute gemacht - waren deutlich weniger.. es wurde aber trotzdem noch 20x LOW erkannt
Thomas schrieb: > Falk B. schrieb: >> Schließ PE an den Arduino an und test nochmal. > > hab ich Heute gemacht - waren deutlich weniger.. es wurde aber trotzdem > noch 20x LOW erkannt Na dann pack an die Eingänge eine Hardwareentprellung wie hier schon gefordert. Beitrag "Re: Arduino Mega für Programm nicht richtig aus" R1 = 4k7 R2 = 22k C1 = 100nF
:
Bearbeitet durch User
Also wenn ich den Drahtverhau sehe möchte ich echt keine Ziege sein! So etwas kann man auch ordentlich aufbauen. Gerade bei Projekten wo Leistungselektronik und µC bzw. Logikschaltungen eingesetzt werden ist Spannungsversorgung und Kabelführung extrem wichtig. Längere Zuleitungen zu den Sensoren / Aktoren sollten geschirmt sein. Den Schirm nicht als Masseleitung benutzen, sondern nur einseitig mit Masse verbinden. Nächste Sache ist die Stromversorgung. Logikschaltungen - auch der Arduino - sollten eine eigene Spannungsversorgung erhalten. Ob man da Hutschienennetzteile oder Steckernetzteile verwendet ist erst mal egal. Allerdings der Anschluß des Steckernetzteils mit Lüsterklemmen ist ein Nogo. Wenn man schon Steckernetzteile vorsieht, dann gehört da eine Hutschienensteckdose hin. Den Relais würde ich eine eigene Stromversorgung spendieren. Werden mehrere Sachen über eine Stromversorgung betrieben, dann sollte am Spannungseingang ein Elko und ein Kerko vorgesehen werden. In hartnäckigen Fällen kann man auch noch über eine Ferritdrossel in der Spannungszuführung nachdenken. Bei großen induktiven Lasten (Motoren 400V/>0,1kW sind große induktive Lasten) können auch noch Netzfilter vor den Netzteilen für Logikeinheiten/µC erforderlich werden. Die Leitungen der Sensoren werden auch nicht so wild wie bei Dir am Arduino angesteckt/geklemmt. Da sollte man über eine passende Interfaceplatte mit passenden Steckern oder Printklemmen nachdenken. Auf diese Interfaceplatte gehören dann auch alle für die Entstörung der Signale erforderlichen Bauelemente. Wenn das dann alles klar ist, macht man sich erst mal einen ordentlichen Plan vom mechanischen Aufbau. Übrigens gibt es auch für den Arduino passende Hutschienengehäuse. Zu Deinem Code: Ohne das ich ihn jetz bis ins Detail studiert habe sieh er schon etwas chaotisch aus und ich möchte dort nicht unbedingt Fehlersuche betreiben. Dein Code ist quasi unwartbar. Allerdings scheint das derzeit Dein geringstes Problem zu sein, da er ja nach Abklemmen der Verbraucher zu funktionieren scheint - Deine Aussage. Also bringe erst mal den elektrischen/mechanischen Aufbau in Ordnung.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.