This is an old revision of the document!


Workshop: Arduino

Der Plan

Eine Einführung in die Arduino Hard- und Software.

Was man installiert haben bzw. mitbringen sollte

Nützliche Dokumentation

Nützliche Scripts

UDEV Script damit für das eigene Arduino Board immer /dev/arduino angelegt wird.

Eine Datei mit dem Namen 50-arduino.rules im Verzeichnis /etc/udev/rules.d anlegen.

# ardiuno rules
#

SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{serial}=="A6008hTA", SYMLINK+="arduino", OWNER="equinox", GROUP="equinox"

Wobei OWNER und GROUP entweder weggelassen werden kann oder durch den eigenen Benutzer und Gruppe ersetzt werden. Ausserdem muss das Feld ATTRS{serial} mit der Seriennummer des eigenen Arduino ersetzt werden. Die Seriennummer kann wie folge bestimmt werden.

  1. Arduino einstecken
  2. mittels dmesg den aktuellen Device namen herausfinden (zb. /dev/ttyUSB0)
  3. das Kommando udevadm info –name /dev/ttyUSB0 –attribute-walk | grep ATTRs{serial} ausführen
  4. die erste Zeile der Ausgabe des obigen Scripts enthält die richtie Seriennnummer

Nach dem anlegen der UDEV Regeln muss udev neu gestartet werden.

# /etc/init.d/udev reload

Seriellen Port reseten

Ein kleines Programm, um einen Arduino zu reseten. Funktionsweise: Auf den Duemilanove und anderen Boards ist die DTR-Leitung über eine Kondenstaor mit dem Reset-Pin verbunden. Wird die Leitung für 100ms auf low gezogen, enstehen ein negativer und eine positiver Spannungspuls, die ausreichen, das Reset durchzführen. Das passiert beim Anstecken, oder aber wenn folgendes Programm ausgeführt wird:

#include <termios.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <time.h>
#include <stdio.h>

#define STATE_OFF 0
#define STATE_ON  1

void setDTRState (int fd, int state) {
  int flags;

  ioctl(fd, TIOCMGET, &flags);
  flags = (state == STATE_ON ? flags | TIOCM_DTR : flags & ~TIOCM_DTR);
  ioctl(fd, TIOCMSET, &flags);
}

int
main(void)
{
  const char device[] = "/dev/ttyUSB0"; 
  int fd;
  const struct timespec sleeptime = {0, 100000000}; // 100ms

  fd = open(device, O_RDWR);
  if (fd == 0) {
    printf("Could not open %s\n", device);
    return 1;
  }
  
  printf ("Resetting %s\n", device);
  setDTRState(fd, STATE_ON);
  nanosleep(&sleeptime, NULL);
  setDTRState(fd, STATE_OFF);
  nanosleep(&sleeptime, NULL);
  setDTRState(fd, STATE_ON);
  close(fd);
}

Compilieren mit

gcc reset_tty.c -o reset_tty

Damit wird das Flashen des Arduino um einiges leichter: Statt

make upload

und wie ein Haftlmacher aufpassen wann der Reset-Button, jetzt neu;

reset_tty; make upload

und zurücklehnen


realraum Graz, Brockmanngasse 15, 8010 Graz, realraum - Verein für Technik in Kultur und Gesellschaft
  • /var/lib/dokuwiki/data/attic/workshop/arduino.1245792182.txt.gz
  • Last modified: 2009-06-23 23:23
  • by trapicki