Meine ersten Erfahrungen mit dem Arduino UNO unter Kubuntu 10.04, 32-Bit, LTS - *Probleme teilweise gelöst*

Aus (zunächst) Spieltrieb und Neugierde heraus habe ich mir ein Arduino UNO Board mit einigem Zubehör (Sensoren usw.) gekauft...

Hier der Anfang meiner Erfahrungsberichte:

Arduino Uno angeschlossen (nachdem ich mir aus den Arduino-Repos das entsprechende Paket installiert hatte) und vorher in einem Konsolen-Fenster ein


#$: tail -f /var/log/messages

abgesetzt.
Die Ausgabe in der Konsole:

... kernel: [ ... ] usb 2-6: new full speed USB device using ohci_hcd and address 4
... kernel: [ ... ] usb 2-6: configuration #1 chosen from 1 choice
... kernel: [ ... ] cdc_acm 2-6:1.0: ttyACM0: USB ACM device
... kernel: [ ... ] usbcore: registered new interface driver cdc_acm
... kernel: [ ... ] cdc_acm: v0.26:USB Abstract Control Model driver for USB modems
                             and ISDN adapters

Das Device lautet also (siehe 3. Zeile der o.a. Ausgabe) /dev/ttyACM0. Dieses ist in "Arduino" unter Tools / Serial Port einzustellen, nachdem man unter Tools / Board das vorhandene Arduino Board (bei mir das "Arduino Uno") eingestellt hat. Die Default-Einstellungen werden hier evtl. nicht passen.

Wenn das falsche Device eingestellt ist, kommt es in "Arduino" zur Fehlermeldung

avrdude: stk500_recv(): programmer is not responding

Beim ersten Start des Programms "Arduino" kam gleich der Hinweis, dass eine neue Version vorhanden sei (mit dem dazugehörigen Link). Download gestartet, entpackt und das entstandene Verzeichnis nach ~/opt kopiert. Arduino beendet, eine neue Verknüpfung auf dem Desktop auf die Datei ~/opt/arduino-0021/arduino erstellt und gestartet.

LCD-Display mit Tasten

Für das DFRobot-LCD-Display mit Tasten ("DFRobot LCD Keypad Shield for Arduino", ein 2 x 16 LCD-Display, blau mit weißer Schrift, Hintergrundbeleuchtung und 5 Tasten sowie einer Reset-Taste) habe ich mir die Libraries "LCD4Bit_mod" (also das gesamte Verzeichnis) nach ~/opt/arduino-0021/libraries kopiert, die Testanwendung zu diesem Display in "Arduino" aufgerufen, kompiliert, an das Board übertragen und gut war es. Die Readme.txt zu dieser Library gab leider keine eindeutigen Anweisungen zum Installationsort dieses Library-Verzeichnisses, so dass ich erst nach einigem "Try & Error" auf den richtigen Standort kam (aber dann war alles gut, das Display funktioniert bestens). Es muss aber kürzlich auch eine Änderung bezüglich des Fundortes dieser Librarys gegeben habe.

Temperatursensor DS18B20+

Mit der hier zu findenden Library (TCL 3.6.0 - Version 3.6.0 (1/10/2010) )und dem Sketch Simple habe ich keine vernünftigen Ergebnisse (also °C) bekommen. Die Anzeige der Temperatur wird wohl in Fahrenheit erfolgen.

Requesting temperatures...Dallas Temperature IC Control Library Demo
Requesting temperatures...DONE
Temperature for the device 1 (index 0) is: 73.40
Requesting temperatures...DONE
Temperature for the device 1 (index 0) is: 73.40
Requesting temperatures...DONE
Temperature for the device 1 (index 0) is: 73.40

Nachdem ich die Zeile


Serial.println(sensors.getTempCByIndex(0));

nach


Serial.println((sensors.getTempFByIndex(0) - 32) * 5 / 9);

umgeschrieben hatte, bekam ich nachvollziehbare Temperaturwerte (Auslesen als Fahrenheit-Wert [getTempF statt getTempC] mit anschließender Umrechnung nach Celsius):

Dallas Temperature IC Control Library Demo
Requesting temperatures...DONE
Temperature for the device 1 (index 0) is: 22.62
Requesting temperatures...DONE
Temperature for the device 1 (index 0) is: 22.62
Requesting temperatures...DONE
Temperature for the device 1 (index 0) is: 22.69
Requesting temperatures...DONE
Temperature for the device 1 (index 0) is: 26.06
Requesting temperatures...DONE
Temperature for the device 1 (index 0) is: 28.56
Requesting temperatures...DONE
Temperature for the device 1 (index 0) is: 29.94
Requesting temperatures...DONE
Temperature for the device 1 (index 0) is: 30.81

Das sind Werte kurz vor und nach dem Finger anlegen bei einer anderweitig gemessenen Raumtemperatur von 22,7 °C. Zudem hatte ich ein


delay(1000);

nach der o.a. Befehlszeile eingefügt, damit die Ausgabe im Serial Monitor sich nicht so schnell änderte.

Zusätzlich musste ich - seitdem ich mit dem Sketch Simple herum probierte - zum erneuten Upload des veränderten Sketches mein Arduino Uno immer erst "reseten" (Reset-Knopf gedrückt halten, USB-Stecker ziehen und nach 2 Sekunden wieder anschließen, weitere 2 Sekunden später den Reset-Knopf wieder loslassen) und den Sketch neu auf das Arduino hochladen. Ansonsten kam es immer zu Fehlermeldungen in "Arduino" im Statusfenster (u.a. beim Öffnen des Serial Monitor oder Upload des Codes).

Teilweise hat sich durch das erneute Anstöpseln auch die Device-ID von /dev/ttyACM0 auf /dev/ttyACM1 (und ggfls. wieder zurück) geändert, was dann unter "Tools / Serial Port" erst wieder angepasst werden musste.

Nachtrag: Die o.a. Probleme manifestierten sich so, dass ich mein Arduino Uno kaum noch bis gar nicht mit neuen Sketchen füttern konnte (rückblickend muss ich sagen, dass diese gravierenden Probleme begannen, nachdem ich die Geschwindigkeit der seriellen Schnittstelle verändert habe / hatte [siehe weiter unten]). Entweder wurde die Schnittstelle nicht gefunden oder sie war "already in use". Wie sich bei Internet-Recherchen ergab, scheint dies immer dann ein Problem zu sein, wenn

  • Arduino Uno
  • (k)ubuntu 10.04
  • im Sketch der Befehl Serial.println("irgendetwas");

    zusammen treffen. Siehe z.B. hier und hier.

    Das scheint aber nicht ganz richtig zu sein, denn auch andere Arduino-Boards sowie andere Linux- / Ubuntu-Versionen sind von diesem Problem betroffen, wie weitere Suchen im W3 ergaben. Auch das Deinstallieren der evtl. Konflikte verursachenden Braille-Treiber brachte keine Abhilfe.

    Alle Meldungen im W3 bezüglich dieser Arduino-Probleme sind aber sehr zeitnah zu meinen Problemen. Liegt es an der aktuellen Arduino-Version 0021? Oder an den momentanen Kernel-Versionen?

    Jedenfalls bin ich - leider - gerade dabei, mir die Arduino-IDE-Umgebung auf einem Windows-Rechner zu installieren, um den momentan laufenden Sketch löschen zu können. Das kann (und wird) es aber nicht gewesen sein.

    Nachtrag vom 17.11.2010:

    Nachdem ich das Arduino UNO unter Windows XP SP2 und OpenSuse 11.1 (siehe hier) zum Laufen gebracht habe (mit der Arduino-IDE 0021), kann ich einen Defekt des Arduino-Boards ausschließen. Es handelt sich aber um 3 verschiedene PCs mit unterschiedlicher Hardware. Auch die Aktionen mit dem Neuanstöpseln und dabei des Reset-Knopf gedrückt halten führt bei mit unter Kubuntu 10.04 nicht mehr zum (Teil-)Erfolg. Ich kann gar keine Sketche mehr uploaden... Beim ersten Versuch nach einem Neu-Anstöpslen kommt die Meldung

    Error opening serial port /dev/ttyACMX
    

    beim zweiten Versuch die Meldung

    Serial port '/dev/ttyACMX' already in use
    

    Und das alles reproduzierbar.

    Die Arduino-IDE scheint nach dem (erfolglosen) ersten Versuch die Schnittstelle weiter zu belegen (was natürlich ein Folgefehler sein kann).

    Auch der Hinweis, dass ein Sketch ohne "Serial"-Befehle Abhilfe schaffen kann, funktioniert nicht bei mir (unter Kubuntu). Ebenso wenig brachte die Neuinstallation der "avr*"-Pakete etwas.

    2. Nachtrag vom 17.11.2010:
    Und jetzt aber: Weiteres Suchen im Internet brachte mich auf einen älteren Eintrag im Arduino-Forum aus 2008. Danach war in der Datei ~/.arduino/preferences.txt der Wert von


    serial.debug_rate=

    auf 9600 zu setzen. Bei mir stand er auf 38400 (wohl durch einen Versuch in einem Sketch, die Baud-Rate mal zu verändern). Also den Wert auf


    serial.debug_rate=9600

    gesetzt (den anderen Wert "serial.download_rate" habe ich in meiner preferences.txt nicht gefunden), die Arduino-IDE neu gestartet und versucht, einen Sketch hochzuladen...

    Bingo....

    Hoffentlich bleibt das jetzt so.

    Nachtrag vom 24.11.2010:

    Das Problem, dass ich gar nicht mehr auf das Arduino-Board zugreifen kann, wurde zwar durch die Korrektur in der preferences.txt behoben, geblieben sind aber die Schwierigkeiten, dass der Zugriff stark behindert wird, sobald ein Sketch versucht, per serieller Ausgabe Daten an den PC zu übermitteln. Dieses Verhalten ist übrigens nicht nur beim Arduino UNO, sondern auch beim Arduino Mega 256 so vorhanden. Bis zur Lösung des Problems stelle ich meine weiteren Gehversuche zunächst einmal auf die Ausgabe auf ein LCD-Display um ...

    Weiter geht es hier.