11Fehlerbehebung

Es wird beim Herumexperimentieren ein Moment kommen, wo nichts funktioniert und du herausfinden musst, wie das Problem zu beheben ist. Fehlerbehebung und Debugging sind die herkömmlichen Methoden mit nur ein paar simplen Regeln, aber die besten Ergebnisse werden durch sorgfältige Arbeit und Beachtung kleinster Details erzielt. Schlau zu sein ist gut – Beharrlichkeit ist wichtiger.

Am wichtigsten ist aber, dass du nicht denkst, du hast versagt! Die meisten Maker, sowohl Amateure als auch Profis, verbringen den Großteil ihrer Zeit mit dem Beheben von Fehlern, die sie selbst gemacht haben. (Klar, wir werden besser beim Finden und Lösen von Problemen, aber wir schaffen auch immer kompliziertere Probleme.)

Je mehr du dich mit Elektronik und dem Arduino beschäftigst, umso mehr wirst du lernen und Erfahrung sammeln, was den Prozess immer weniger mühselig macht. Lass dich nicht von den Problemen entmutigen, die dir begegnen – es ist alles einfacher, als es zunächst erscheinen mag. Je mehr Fehler du machst und korrigierst, desto besser wirst du darin, sie zu finden.

Da jedes Arduino-basierte Projekt sowohl aus Hardware als auch aus Software besteht, gibt es mehr als einen Ort, an dem nachzusehen ist, wenn etwas schiefläuft. Bei der Suche nach einem Bug solltest du auf drei Schienen vorgehen: Verstehen, Vereinfachung und Segmentierung sowie Ausschluss und Gewissheit.

Verstehen

Versuche so gut wie möglich zu verstehen, wie die Teile funktionieren, mit denen zu arbeitest, und wie sie zum fertigen Projekt beitragen sollen. Diese Vorgehensweise erlaubt es dir, eine Methode zu bestimmen, jede Komponente separat zu testen. Wenn du es nicht bereits getan hast, versuche, einen Schaltplan deines Projekts aufzuzeichnen. Das hilft dir, dein Projekt zu verstehen, und es ist auch nützlich, wenn du jemanden um Hilfe bitten musst. Schaltpläne werden im Anhang D besprochen.

Vereinfachung und Segmentierung

Die alten Römer pflegten zu sagen: divide et impera – teile und regiere. Versuche, das Projekt (zumindest geistig, besser noch durch Sketching) in seine Komponenten zu zerlegen, indem du deine Kenntnisse nutzt, und finde heraus, wie genau sich der Wirkungsbereich jeder Komponente oder jedes Teils deines Programms definiert.

Ausschluss und Gewissheit

Teste bei der Untersuchung jede Komponente separat, damit du ganz sicher sein kannst, dass jede für sich funktioniert. Schrittweise wirst du lernen, besser einschätzen zu können, welche Teile eines Projekts ihre Arbeit tun und welche noch wacklig sind. Am besten nutzt du dafür die mitgelieferten Beispiele, da sie eher keine Bugs beinhalten.

Debugging ist der Begriff, der diesen auf Software angewendeten Prozess beschreibt. Der Legende nach wurde er erstmals in den 1940er-Jahren von Grace Hopper verwendet, als Computer überwiegend elektromechanisch waren und einer von ihnen die Arbeit einstellte, weil sich tatsächlich Insekten im Mechanismus verfangen hatten.

Viele der heutigen Bugs sind nicht mehr physisch: Sie sind virtuell und unsichtbar, zumindest teilweise. Deshalb erfordert es einen manchmal langwierigen und langweiligen Prozess, um sie zu identifizieren. Du musst den unsichtbaren Bug austricksen, damit er sich zu erkennen gibt.

Debugging ist ein wenig wie Detektivarbeit. Du hast ein Problem, das es zu klären gilt. Dazu musst du einige Experimente durchführen und Resultate erzielen. Anhand dieser Resultate musst du versuchen, herauszufinden, was zu deiner Problematik geführt hat. Dann musst du einige weitere Experimente durchführen, um zu testen, ob deine Schlüsse korrekt waren oder nicht. Diese Vorgehensweise ist wirklich essenziell.

Testen des Arduino-Boards

Bevor du dich an kompliziertere Experimente heranwagst, ist es weise, die einfachen Dinge zu prüfen, insbesondere dann, wenn sie nicht viel Zeit in Anspruch nehmen. Als Erstes solltest du testen, ob dein Arduino-Board funktioniert. Das allererste Beispiel, Blink, ist immer ein guter Anfang, da du damit wahrscheinlich am vertrautesten bist.

Und da bereits eine LED in deinem Arduino ist, bist du außerdem von keinen externen Komponenten abhängig.

Befolge diese Schritte, bevor du dein Projekt an deinem Arduino anschließt. Wenn du bereits Schaltdrähte zwischen deinem Arduino und deinem Projekt verlegt hast, entferne sie zuerst einmal, notiere aber sorgfältig, wo jeder Draht hingehört.

Öffne das Blink-Beispiel in der Arduino-IDE und lade es auf das Board. Die bordeigene LED sollte in einem regelmäßigen Rhythmus blinken.

Was ist, wenn Blink nicht funktioniert?

Bevor du die Schuld bei deinem Arduino suchst, solltest du bei ein paar Dingen abklären, ob sie in Ordnung sind, so wie Flugzeugpiloten, wenn sie vor dem Start eine Checkliste durchgehen, um sicherzugehen, dass das Flugzeug ordnungsgemäß fliegen wird:

Sobald du das Blink-Beispiel geladen hast und die LED blinkt, kannst du davon ausgehen, dass dein Arduino die grundlegende Funktionalität aufweist, und dann kannst du zum nächsten Schritt übergehen.

Testen deiner Steckplatinen-Schaltung

Der nächste Schritt ist das Überprüfen auf Kurzschlüsse zwischen 5 V und Masse in deinem Projekt. Verbinde deinen Arduino mittels eines Schaltdrahtes von den 5-V- und Masse-Anschlüssen an den positiven und negativen Schienen der Steckplatine. (Du siehst: Indem wir für dein Projekt nur diese beiden Schaltdrähte verbinden und nicht alle, befolgen wir das Prinzip »Teile und regiere«.) Wenn die grüne PWR-LED erlischt, entferne umgehend die Schaltdrähte. Das bedeutet, dass in deiner Schaltung ein schwerer Fehler vorliegt und du irgendwo einen »Kurzschluss« hast. Wenn das passiert, zieht dein Board zu viel Strom, und die Stromzufuhr wird abgeschaltet, um den Computer zu schützen.

image

Wenn du dir Sorgen machst, dass du deinen Computer beschädigen könntest, denk dran, dass fast alle Computer die Höhe des Stroms, die ein USB-Gerät ziehen kann, begrenzt. Wenn das Gerät versucht, zu viel Strom zu ziehen, schaltet der Computer sofort die Stromzufuhr zu dem USB-Port ab. Außerdem ist das Arduino-Board mit einer Polyfuse gesichert, einer Einrichtung zum Stromschutz, die sich selbst zurückstellt, wenn der Fehler behoben ist (rückstellende Sicherung).

Wenn du völlig paranoid bist, kannst du das Arduino-Board auch über ein USB-Hub mit eigener Stromversorgung anschließen. In dem Fall, wenn wirklich alles furchtbar schiefläuft, ist es der USB-Hub, der sich verabschiedet, nicht dein Computer.

Wenn du einen Kurzschluss hast, dann musst du den Prozess der »Vereinfachung und Segmentierung« starten. Dabei musst du jeden Sensor und jeden Stellmotor im Projekt durchgehen und jeweils nur einen anschließen, bis du das Teil oder den Anschluss identifizierst, der den Kurzschluss verursacht.

Alternativ bzw. ergänzend kannst du alle deine Schaltdrähte entfernen und deine Schaltung erneut aufbauen. Häufig korrigierst du dabei den Fehler vom ersten Mal unbewusst. Beim zweiten Aufbau deiner Schaltung hast du 100 % mehr Erfahrung!

Der erste Startpunkt ist immer die Stromversorgung (die Anschlüsse von 5 V und Masse). Schau dich um und sorg dafür, dass jeder Teil der Schaltung korrekt Strom bekommt. Der wahrscheinlichste Grund ist, dass ein Schaltdraht an der falschen Stelle sitzt. Andere Ursachen können eine falsche Komponente wie ein Kondensator mit zu geringem Wert oder ein Schalter oder Transistor sein, der 5 V mit Masse verbindet. Weniger wahrscheinlich, aber dennoch möglich ist ein Stück Draht oder eine Schraube, die irgendwo sowohl mit 5 V als auch mit Masse Kontakt hat. Prüfe auch, dass die Polarität an allen polarisierten Komponenten, ICs oder Modulen korrekt ist. Wir haben manche Komponenten erlebt, die sich beim Tausch von 5 V und Masse wie ein Kurzschluss verhalten haben.

Schritt für Schritt vorzugehen und dabei immer nur eine einzelne Änderung nach der anderen durchzuführen – das ist die wichtigste Regel bei der Fehlerbehebung. Diese Regel wurde mir von meinem Schullehrer und ersten Arbeitgeber, Maurizio Pirola, in meinen jungen Kopf eingehämmert. Jedes Mal, wenn ich etwas debugge und das Ganze nicht allzu gut aussieht (und glaub mir, das passiert oft), taucht sein Gesicht vor meinem geistigen Auge auf mit den Worten: »Eine Änderung auf einmal … eine Änderung auf einmal« – und normalerweise funktioniert dann alles. Das ist sehr wichtig, weil du dann wissen wirst, was das Problem behoben hat. (Man verliert schnell den Überblick, welche Änderung tatsächlich das Problem gelöst hat, weshalb es so wichtig ist, immer nur eine auf einmal zu machen.)

– Massimo

Jede Debugging-Erfahrung baut in deinem Kopf eine »Wissensdatenbank« zu Defekten und möglichen Lösungen auf. Und ehe du dich’s versiehst, wirst du zum Experten. Das lässt dich sehr cool wirken, denn sobald ein Neuling sagt: »Das funktioniert nicht!«, schaust du es dir kurz an und hast im Bruchteil einer Sekunde die Antwort parat.

Isolieren von Problemen

Eine weitere wichtige Regel besteht darin, eine zuverlässige Methode zum Reproduzieren eines Problems zu finden. Wenn sich deine Schaltung immer mal wieder komisch verhält, versuche mit allen Mitteln herauszufinden, was die Ursache sein könnte. Passiert es nur, wenn du einen Schalter drückst? Nur wenn eine LED aufleuchtet? Wenn du einen Schaltdraht bewegst? (Viele Probleme werden durch lose Drähte verursacht, die entweder nicht verbinden, wo sie es sollen, oder verbinden, wo sie es nicht sollen.) Versuche, die Schritte zu wiederholen, die das Problem verursachen, achte auf die kleinen Details und nimm nur jeweils eine Änderung auf einmal vor: Passiert es jedes Mal, wenn die LED aufleuchtet, oder nur, wenn du den Schalter drückst, während die LED eingeschaltet ist? Dieser Prozess erlaubt es dir, über die mögliche Ursache nachzudenken. Das ist auch sehr hilfreich, wenn du das Ganze jemand anderem erklären sollst.

Lose Verbindungen lassen sich gemeinhin schlecht aufspüren. Versuche vorsichtig, an verschiedenen Teilen deiner Schaltung herumzuwackeln, und wenn du einen Bereich identifizierst, der zu dem Problem beiträgt, verlangsame das Tempo und wackle an jeweils einem Draht oder einer Komponente herum.

Das Problem so präzise wie nur möglich zu beschreiben ist auch eine gute Möglichkeit, eine Lösung zu finden. Such dir jemanden, dem du das Problem beschreiben kannst – in vielen Fällen fällt einem dann direkt eine Lösung ein. Brian W. Kernighan und Rob Pike erzählen in »The Practice of Programming« (Addison-Wesley, 1999) die Geschichte einer Universität, die »einen Teddybär vor dem Helpdesk sitzen hatte. Studenten mit mysteriösen Bugs wurden aufgefordert, diese zunächst dem Teddy zu erklären, bevor sie mit einem menschlichen Berater sprechen durften«. Wenn du niemanden (auch keinen Teddybär) hast, mit dem du sprechen kannst, fang mal mit einer E-Mail an, in der du dein Problem beschreibst. Das ist keine verschwendete Zeit, denn (a) führt das oft zur Lösung des Problems und (b), wenn du jemanden um Hilfe bitten musst, bist du vorbereitet.

Probleme beim Installieren der Treiber in Windows

Manchmal versagt der Hardware-Assistent beim Aufspüren des korrekten Treibers. In diesem Fall musst du ihm möglicherweise manuell mitteilen, wo sich der Treiber befindet.

Der Hardware-Assistent wird dich zuerst bitten, Windows Update zu prüfen; wähle die Option »Nein, dieses Mal nicht« und klicke auf »Weiter«.

Wähle auf dem nächsten Bildschirm »Von Liste oder einem anderen Verzeichnis installieren« und klicke auf »Weiter«.

Navigiere zu und wähle die Treiberdatei des Uno mit dem Namen ArduinoUNO.inf, die sich im Treiberverzeichnis des Arduino-Software-Downloads befindet (nicht das Unterverzeichnis mit den FTDI-USB-Treibern). Windows schließt die Treiberinstallation von hier aus ab.

Probleme mit dem IDE in Windows

Wenn du beim Doppelklick auf das Arduino-Symbol eine Fehlermeldung erhältst bzw. wenn nichts passiert, versuche einen Doppelklick auf die Datei Arduino.exe als alternative Methode zum Start von Arduino.

Windows-Benutzer könnten auch auf ein Problem stoßen, wenn das Betriebssystem dem Arduino eine COM-Port-Nummer von COM10 oder höher zuweist. Wenn das passiert, kannst du Windows normalerweise überzeugen, dem Arduino eine niedrigere Port-Nummer zuzuweisen, indem (vorübergehend) ein COM-Port mit einer niedrigeren Nummer freigegeben wird.

Öffne zuerst den Gerätemanager durch Anklicken des Startmenüs, Rechtsklick auf Computer (Vista) oder My Computer (XP) und wähle Eigenschaften. Auf Windows XP klicke Hardware an und wähle den Gerätemanager. Auf Vista klicke auf den Gerätemanager (er erscheint in der Aufgabenliste im linken Bereich des Fensters).

Suche nach den seriellen Geräten in der Liste unter Ports (COM & LPT). Finde ein serielles Gerät, das du nicht benutzt, mit der Bezeichnung COM9 oder niedriger. Ein Modem oder ein serieller Port stellt einen guten Kandidaten dar. Klicke rechts und wähle aus dem Menü den Punkt »Eigenschaften«. Wähle dann die Registerkarte »Port-Einstellungen« und klicke auf »Erweitert«. Stell die COM-Port-Nummer auf COM10 oder höher ein, klicke auf OK und klicke dann erneut auf OK, um den Eigenschaften-Dialog zu schließen.

Jetzt tu dasselbe mit dem USB-Serieller-Port-Gerät, das den Arduino repräsentiert, mit einer Änderung: Weise es der COM-Port-Nummer (COM9 oder niedriger) zu, die du gerade freigegeben hast.

Identifizieren des Arduino-COM-Ports in Windows

Schließe deinen Arduino Uno mit einem USB-Kabel an deinem Computer an.

Öffne den Gerätemanager durch Anklicken des Start-Menüs, Rechtsklick auf Computer (Vista) oder My Computer (XP) und wähle Eigenschaften. Auf Windows XP klicke Hardware an und wähle den Gerätemanager. Auf Vista klicke auf den Gerätemanager (er erscheint in der Aufgabenliste im linken Bereich des Fensters).

Suche nach dem seriellen Gerät in der Liste unter Ports (COM & LPT). Der Arduino wird als Arduino Uno erscheinen und einen Namen haben wie COM7, wie in Abb. 11–1 dargestellt.

image

Auf manchen Windows-Maschinen hat der COM-Port eine höhere Nummer als 9; diese Nummerierung erzeugt einige Probleme, wenn der Arduino versucht, mit ihm zu kommunizieren.

image

Abb. 11–1Der Windows-Gerätemanager zeigt alle verfügbaren seriellen Ports an.

Weitere Debugging-Verfahren

Wenn diese Anregungen nicht helfen oder wenn du ein Problem hast, das hier nicht beschrieben wird, dann suche auf arduino.cc unter »troubleshooting«.

Online Hilfe bekommen

Wenn du nicht weiterkommst, verbringe nicht Tage damit, dich allein im Kreis zu drehen – bitte um Hilfe. Einer der besten Aspekte von Arduino ist seine Community. Du kannst immer Hilfe finden, wenn du dein Problem gut beschreibst.

Gewöhne dir an, Themen oder Punkte auszuschneiden und in eine Suchmaschine einzufügen, um zu sehen, ob jemand darüber spricht. Wenn die Arduino-IDE zum Beispiel eine böse Fehlermeldung ausspuckt, kopiere sie, füge sie in eine Google-Suche ein und schau, was dabei herauskommt. Du musst die Nachricht eventuell in Anführungszeichen verpacken, um zu verhindern, dass die Reihenfolge der Wörter beliebig abgeändert wird. Mach dasselbe mit Teilen des Codes, an dem du arbeitest, oder einfach mit einem bestimmten Funktionsnamen. Wenn du zu viele Ergebnisse erhältst, die nicht wirklich helfen, füge das Wort »Arduino« der Suche hinzu.

Schau dich um: Alles wurde bereits erfunden und irgendwo auf einer Webseite abgelegt. Ich bin überrascht, wie oft etwas, von dem ich annahm, dass es nur mir passiert war, im Internet gut dokumentiert ist, inklusive der Lösung.

Weitere Untersuchungen beginnst du am besten von der Haupt-Website (arduino.cc) aus und schaust unter FAQ; dann begib dich zum Arduino Playground (https://playground.arduino.cc/), einer frei editierbaren Wiki, die jeder Benutzer ändern kann, um zur Dokumentation beizutragen. Das ist mit das Beste an der ganzen Open-Source-Philosophie: Leute tragen Dokumentation und Beispiele von allem bei, was man mit Arduino tun kann. Bevor du ein Projekt startest, such im Playground und du findest bestimmt ein bisschen Code oder einen Schaltplan, um loszulegen.

(Denk darüber nach, der Open-Source-Community etwas zukommen zu lassen: Vielleicht ist dir ein Projekt eingefallen, das du beisteuern könntest, oder eine Lösung, die bisher noch nicht dokumentiert wurde. Es gibt viele Möglichkeiten, deine Arbeit zu veröffentlichen: Arduino Project Hub, Github, Instructables, Facebook, Instragram usw. – es ist wirklich egal, wie du etwas veröffentlichst, Hauptsache, du tust es und dokumentierst es so gut wie möglich mit Code, Schaltplan, Diagrammen usw. Poste nicht nur ein Teaser-Video vom funktionierenden Projekt – erzähl uns, wie du es geschafft hast!)

Wenn du auf diesem Weg immer noch keine Antwort findest, suche im Arduino-Forum (https://forum.arduino.cc/).

Nachdem du alles andere versucht hast, ist es an der Zeit, eine Frage im Arduino-Forum zu stellen. Wähle das korrekte Board für dein Problem: Es gibt verschiedene Bereiche für Software- oder Hardware-Themen und sogar Foren in verschiedenen Sprachen. Wenn du nicht sicher bist, welches Board das richtige ist, poste deine Frage im Project Guidance Board.

Formuliere deinen Post sorgfältig. Gib so viele Informationen wie möglich an und formuliere klar und detailliert. Nimm dir Zeit zur deutlichen und korrekten Beschreibung deines Problems – es ist es wirklich wert. Das zeigt auch, dass du schon so viel wie möglich selbst getan hast und dich nicht auf das Forum verlässt, deine Arbeit für dich zu erledigen. Hier sind ein paar Richtlinien:

Denk dran, dass die Anzahl der Antworten, die du erhältst, und wie schnell du sie bekommst, davon abhängt, wie gut du deine Frage formulierst.

Deine Chancen steigen, wenn du Folgendes unter allen Umständen vermeidest (diese Regeln gelten für jedes Online-Forum, nicht nur für die von Arduino):