gear7lover's neuer SL

Das wären 5 Relais in weiss (Versorgung Arduino, Versorgung alle anderen Verbraucher, Hupe, weiss grad nicht, Reserve) mit je einer Freilaufdiode über der Spule.
Dann Konstantstromquellen (schwarz, beschriftet) für Scheinwerfer, Blinker links, Blinker rechts, Rücklichter, Bremslichter, Lichtkanone, jeweils über den Dimmanschluss per Arduino PWM angesteuert.
Dann noch Servostromversorgung 5V mit PTC Sicherung 0.5 A. Im Fall er blockiert ist wird er irgendwann schlapp bevor er sich frittiert.
Dann noch 5 Eingänge vom 5-Wege-Taster. Aus Einschaltgründen muss ich den mit Batteriespannung betreiben und jeden Ausgang dann per Zenerdiodenschaltung auf 5V einbremsen um die Arduino Eingänge zu schützen. Und natürlich Pulldown Widerstände weil die Eingänge sonst "floaten".
Und noch 3 Analogeingänge für Umgebungslicht (von oben) Blendlicht (von vorne) und Temperatur der LED Platine vom Scheinwerfer.
Ausgänge für Fernlichtanzeige (blau), Blinker links, rechts, normale Lichtanzeige (grün), Piepser
Alles was nicht Arduino ist hat eine Schraubklemme für Plus und Minus nebeneinander. Im Fall von Reihenschaltung mehreren Lampen für dieselbe Funktion (Blinker, Rücklichter, Bremslichter) Gibt es noch Klemmen für den Mittelanschluss. So hat jeder Verbraucher seinen eigenen Plus und Minus. Das erspart mir den komplizierten Kabelbaum a la KFZ wie das die Drontener gerne machen. Und das Löten an den unmöglichsten Stellen im VM.

Edit Strom und Spannungsanzeige hätts dann auch noch.
Nein Tacho, GPS-Ortung, Keyless go per Bluetooth, Leistungsmessung, ferngesteuerte Alarmanlage und sonstiges hab ich mir bewusst verkniffen. Bin doch kein Spielkind. :ROFLMAO:
 
Zuletzt bearbeitet:
Das braucht kein Mensch ... Ok, wenn Du das willst, sieht es anders aus. Spielkinder halt ... ;).
 
Faszinierend! (y)(y)(y)
Bei sovielen einfarbigen Kabeln hätte ich den Überblick verloren und wenn da jemals was später nicht funktionieren sollte, ich glaube nicht, dass ich da in endlicher Zeit wieder durchblicken würde, geschweige denn den Fehler finden könnte :eek:.
 
Ich glaub jetzt kommts gut.
Aufregende 1483 Zeilen. Wenn Dir langweilig wird, lass einen Obfuscator drüber laufen und finde den Bug. Oder hast Du den schon eingesetzt :unsure: :rolleyes:
Sorry, aber ich kriege Schluckbeschwerden bei solchen Code-Müllhalden. Schön, wenn es trotzdem funktioniert.
Bei den Kabeln sehe ich eher kein Problem.
 
Da ist eigentlich kein Gerümpel drin. Ist ja nicht aus Bausteinen zusammenkopiert wo 90% Ballast dabei ist. Das ist genau für den Zweck Zeile für Zeile geschrieben. Es ist nur aufgrund meiner Unkenntnis unorthodox und sicher zuweilen umständlich. An den Variablennamen erkennt man die Entstehungsgeschichte. Wenn ich es nochmal machen müsste würde ich sie indizieren, so dass sie nach jedem Rechenschritt am Ende eine höhere Nummer bekommen. So gibt es die Schlafaugenabblendstellung, die wird leuchtweitekorrigiert, dann aufgeblendet, dann vom Lichthupensignal übersteuert, dann verzögert, dann ggf zusätzlich gewartet bis die Lampe abgekühlt ist, dann langsam wieder geschlossen, mit Zwischenwerten ... irgendwann kommt dann ein Servosignal heraus.
Die ganzen Verläufe und Abläufe (dimmen, Schlafaugenbewegung führen, brauchen halt immer Zeitabhängige Formeln und gefühlte 25 Zustandsabfragen bevor der nächste Ablauf starten kann.
Tasten sind mehrfachbelegt, je nachdem wie lange man sie drückt.
Dann hatte ich noch den Ehrgeiz nicht in jedem Loop-Durchlauf auf die Ausgänge zu schreiben, sondern nur wenn sie sich ändern.

Ich hab nicht das Gefühl dass das jemand auch nur annähernd versteht, der das nicht wirklich gründlich anschaut.
 
Ich hab nicht das Gefühl dass das jemand auch nur annähernd versteht, der das nicht wirklich gründlich anschaut.
Solange Du mit Akribie und Fleiß die Loop im Griff hast und Deine Anforderungen an Priorisierung oder Timings sich nicht ändern, erfüllt der Code seinen Zweck. Ich kenne Softwareprojekte, die in diesem Stil geschrieben ganze Serverfarmen beschäftigen ( und talentfreie Softwareingenieure dazu).
Die Arduino-Programmierung ermöglicht auch den Einsatz von Objekt-Orientierung. Einfachst ausgedrückt könntest Du damit die Funktionalität z.B. des Klappscheinwerfers zusammenfassen. Anstatt eine Herde zwar eindeutig benamter, aber unübersichtlicher Variablen zu führen, werden z. B: alle Funktionen die den Klappscheinwerfer zugeordnet sind, einem Klappscheinwerfer-"Objekt" delegiert. In diesem Objekt werden die Status, wie "ist beim Auf/Zu-klappen" oder "Strom auf 4 Watt" geführt. Wie eine Matrjoschka-Puppe kann man dieses Vorgehen auch für Subfunktionen wie die vielen Timer-Steuerungen anwenden und somit ineinander verschachteln. Ganz nebenbei erledigen sich dabei die Redundanzen der vielen Zustandsvariablen.
Oder kurz Zusammengefasst: Mit Objektorientierung erhöht sich die Lesbarkeit durch eine nachvollziehbare Struktur und vor allem die Flexibilität bei Änderungen durch Features oder der Beseitigung von Bugs.
 
Mhm das ist glaub ich was ich mit unorthodox meinte. Leute die sowas ständig machen würden sich Bausteine machen die sie dann beim nächsten 50 Projekten verschieden kombinieren können. Mich stören dabei die vielen Schachteln, da sind mehr Verpackung und Aufrufe als Inhalt. Aber ich mach das ja auch nicht zum Brötchen verdienen. Für mich ist's ein one-off. Es tut mir nix wenn das später nicht für Wiederverwertung für das nächste Projekt geeignet ist. Es sind alles globale Variablen und ein einziger Loop, der von oben nach unten abgearbeitet wird. Erschwerend kommt hinzu dass fast alles zusammenhängt. Selbst die Blinkerhelligkeit hängt mit Tag und Nacht zusammen. Es wäre einigermassen schwierig das in unabhängige Bausteine zu zerlegen. Ein Beispiel für einen unabhängigen Baustein wäre der Beep-Handler. Viel mehr weitere Auskopplungen sind mir aber nicht in den Sinn gekommen.

[Anekdote] Hatte mal Gelegenheit ein Startup-Cluster bei Paris zu besuchen die Aufträge aus der Autoindustrie ausführen. Die hatten die Show-Effekte für die Las Vegas Motorshow in einem 1er BMW zu machen. Die haben alle Leuchten, das Armaturenbrett, die Spiegel und den zugehörigen Kabelbaum ausgebaut und danebengelegt. Unterstützung durch BMW: Null. Ein Auto ab Band und fertig. Da arbeitet ein Team ein paar Monate (und das nicht 9 to 5) an so einem Käsdreck. Das Auto kannst nach der Show wegwerfen, nicht mehr zum fahren zu gebrauchen. [/Anektdote]
 
Priorisierung oder Timings
Die Zyklusdauer ist hinreichend kurz. Es werden keine Interrupts gebraucht. Es gibt keine Funktionen die wegen Prozessorüberlast warten müssten.
Das ist sehr angenehm das man sich um Speicherplatz und Rechengeschwindigkeit keine Gedanken machen muss. Da ist hinreichend Bumms dahinter.

Ein Fragezeichen ist noch Kondenswasserbeschlag. Wenn es fertig ist werd ich das in Platinenschutzlack ersäufen (Relais sind waschdicht). Aber ob meine Analogwerte bei aller Feuchtigkeit noch hinreichend genau sind? Oder ob ein 10kOhm Pulldown am Digitaleingang stärker ist als Feuchtigkeit? Nach meiner beruflichen Erfahrung kann ein nasser Stecker schon mal LEDs zum Leuchten bringen, also mehrere mA Kriechströme ausmachen. Wenn es dumm läuft muss ich die Widerstände tauschen um robustere Signale zu bekommen.
 
PCB kannst du nach Auftrag einer guten Platinenbeschichtung auch untertauchen ohne Funktionsstörungen, inklusive Mikrocontroller. Problematisch sind offene Pfostenleisten / Klemmsteckverbinder / Flachbandleitungen, diese bestenfalls aussparen und am Übergang mit einem modellierbaren Dichtmittel (Elektroniksilikon bspw. - ja, schweineteuer, dichtet jedoch und lässt sich wieder abknubbeln) abdichten.

Alles, was oberhalb von 8-10 mA für Signalfunktionen bedingt, wird durch Kriechströme selten beeinträchtigt. Pull-down oder im Fall von Masseschaltung Pull-up ist ohnehin empfehlenswert und funktioniert zuverlässig, da Weg des geringsten Widerstands selten in X cm entfernten Wassertropfen zu finden ist.

Beeinflussende Faktoren bei Steckverbindern sind vielfältig aufgrund deren Tendenz, einmal kapillar aufgenommene Feuchtigkeit auch beizubehalten. Montage, Hohlraumversiegelung, Oxidschutz, Strombelastung und Zeit zum Trocknen tragen Relevanz. Allerdings empfiehlt es sich nicht, Steckverbinder mit Lack zu bearbeiten, sollte dies notwendig sein. Lieber Kontaktfett, Vaseline, Gummi- oder Silikondichtung.. alles wieder entfernbar und eine dauerhaltbare Lösung. Oder direkt geeignete Industriesteckverbinder nach min. Ingress protection 54, besser 55/65.

Freundliche Grüße
Wolf
 
Zurück
Oben Unten