RaspberryPi Projekt: Blinkende LED in 5 Schritten

Heute werden wir uns das günstigste Projekt ansehen, welches mit einem Raspberry Pi realisierbar ist. Trotzdem ist es spannend und aufregend, die LED zum blinken zu bewegen. Das Projekt eignet sich super als „erstes Projekt“, da der Aufbau sehr einfach ist. Außerdem werden die absoluten Grundlagen behandelt. Ich denke, selbst Grundschüler können dieses Projekt unter Aufsicht fehlerfrei durchführen.

Projekt 0

OK, um genau zu sein war das erste Projekt eine einfache Sache, daher „Projekt 0“:

Eine LED zum leuchten bringen. Über den GPIO.
Nach kurzer Recherche im elinux Wiki ist die Pin-Belegung klar: Pin P1-04 = +5V, P1-06 = GND. Also der LED – die ich durch ein Gewinnspiel an der RUB gewonnen habe – einen Vorwiderstand verpasst und zwischen die beiden Pins geklemmt… et violá:


Wichtig: R=U/I! Vorwiderstand entsprechend wählen! (Hier: 2V/30mA = 66 Ohm) Das Projekt ist sehr gefährlich und sollte nur durchgeführt werden, wenn Feinmotorik vorhanden ist!

Das erste Projekt

Rote LED an Kabeln festgelötet

LED ohne Vorwiderstand an +/- gelötet. Bei LEDs gehört der längere Pin übrigens an den Pluspol.

Benötigtes Material:1 LED, 2 Kabel (am besten mit Sockelschuhen zum einfachen Verbinden mit den GPIOs), etwas Lötzinn, evtl. einen Vorwiderstand

Benötigte Werkzeuge: Lötkolben, Abisolierzange

Sonstiges: Raspberry Pi, Netzteil, Bildschirm oder Netzwerk für SSH, SD-Karte mit Raspbian

Schritt 1: Raspberry Pi normal starten und einloggen
Schritt 2: LED an das Kabel eines alten PC-Gehäuse An/Aus Tasters löten: Der lange Pin der LED ist die Anode (+). Je nach LED muss ein Vorwiderstand zwischen Anode und das Kabel gelötet werden, manche LEDs haben einen integrierten Widerstand.
Schritt 3: LED (-) an P1-9 (GND), Vorwiderstand (+) an P1-11 (GPIO 17) anschließen
Schritt 4: Bash-Script erstellen:

root@raspberrypi:/home/pi# nano /tmp/blink.sh
#!/bin/sh
while true; do
 echo "1" > /sys/class/gpio/gpio17/value
 sleep 0.5;
 echo "0" > /sys/class/gpio/gpio17/value
 sleep 0.5;
done
#Tastenkombination zum Speichern der Datei und Schließen des Editors
[STRG+O][ENTER][STRG+X]

Schritt 5: GPIO17 aktivieren, auf Output schalten und Script starten:

pi@raspberrypi ~ $ sudo su
root@raspberrypi:/home/pi# echo "17" > /sys/class/gpio/export
root@raspberrypi:/home/pi# echo "out" > /sys/class/gpio/gpio17/direction
root@raspberrypi:/home/pi# sh /tmp/blink.sh
Blinkende LED an GPIO17 des RaspberryPi

Bei Ausführung des Bash-Scripts beginnt die LED zu blinken

Bemerkung: Die Befehle müssen als root ausgeführt werden, dazu gibt man vor allen Befehlen einmal „sudo su“ ein und gibt das eigene Passwort ein (Standard bei Raspbian: raspberry).
Den Vorwiderstand muss man für jede LED einzeln berechnen – Die GPIOs liefern 3,3V die benötigte Stromstärke der LED steht im Kennblatt oder auf der Produktverpackung. In diesem Fall braucht die LED 30mA. Für die meisten LEDs sind 20mA das ideal, bitte aber unbedingt auf die Spezifikationen der LEDs achten (Beispiel: Diese LED mit 2,1V Betriebsspannung braucht einen Widerstand von (3,3V-2,1V)/30mA = 1,2V/0,03A = 40 Ohm !)

Die Blinkdauer kann durch die beiden Sleep-Befehle im Bash-Code verändert werden: Je höher die Dauer beim ersten Sleep ist, desto länger ist die An-Phase, je größer die zweite Sleep-Dauer, desto höher die Dauer, in der die LED aus bleibt.
Das Script wird mit STRG+C gestoppt, und muss ebenfalls mit root-Rechten ausgeführt werden.

Für das gesamte Projekt habe ich persönlich 15 Minuten gebraucht, inklusive Recherche, Lötkolben vorheizen usw. Ich habe schon etwas Erfahrung in solchen Sachen, schließlich habe ich auch Physik als Leistungskurs im Abitur.

Allerdings ist das Projekt so einfach, dass auch Grundschüler das schaffen (sollten). Das gefällt mir sehr gut am Raspberry Pi: Alle benötigten Materialien hatte ich bereits daheim, kosten tun sie so gut wie nichts (LED 10ct, Widerstand 5ct, Kabel 10ct, Lötzinn 5ct?), Werkzeuge nicht eingerechnet (Lötkolben 10Eur, Abisolierzange 5Eur) kostet das Projekt also um die 30 Cent. So lange man nicht an den GPIOs des RasPis selbst lötet, kann auch nicht viel schief gehen.

Würde das Experiment in einer Klasse mit Grundschüler stattfinden, würde ich noch einen einfachen Kippschalter zwischen GPIO17 und LED klemmen, der zuerst offen bleibt, damit der Lehrer noch einmal prüfen kann ob alles richtig verkabelt ist, bevor man die Software startet. Das Projekt ist einfach, billig und liefert sofort sichtbare Resultate.

Raspberry Pi als Bildungsmittel

Wenn mir das Projekt schon so viel Spaß bereitet hat, wie wäre das in einer Schulklasse? Ich bin aktuell noch in der Schule (Gymnasium, Stufe 13), kam bisher aber leider nicht in den Genuss von spannendem Informatikunterricht. Ich glaube, wäre der Informatikunterricht spannender, würde er früher eingesetzt und besser gestaltet, gäbe es heute keinen so großen Fachkräftemangel in Deutschland. In erster Linie dient dies natürlich dem IT-Sektor, doch auch andere Fachbereiche können daraus profitieren. Mathematik und Algebra sind eng mit der IT verknüpft, auch könnte man die Kunst digitalisieren und den generellen Umgang mit Computern (Linux?) unterrichten. Zwar nennt sich diese Generation „Digital Natives“, wenn manche Jugendliche aber nicht einmal wissen, wie man ein Programm installiert oder deinstalliert, finde ich persönlich das schockierend. Bei vielen scheitert es schon an der Bedienung des PCs an sich, oft aus Angst, etwas kaputt zu machen. Das muss sich ändern, dazu wird auch noch ein eigenständiger Artikel folgen. Der Raspberry Pi ist, soviel kann ich schon vorweg nehmen, ideal dazu geeignet, schon früh Informatik zu unterrichten.

MfG
Damon Dransfeld

Dieser Eintrag wurde veröffentlicht in RaspberryPi
Bookmarken: Permanent-Link Schreibe einen Kommentar oder hinterlasse einen Trackback: Trackback-URL.

19 Kommentare

  1. I-Catch
    Erstellt am 21. Dezember 2012 um 20:31 | Permalink zum Kommentar

    hi,

    Könnte man den auch eine RGB-LED anschließen und diese dann dazubringen über ein script die Farbe zu wechseln?

    Wenn ja, könntest du dazu auch eine Anleitung machen?

    mfg

    • Erstellt am 22. Dezember 2012 um 11:19 | Permalink zum Kommentar

      Hey,
      Soweit ich weiß funktionieren die RGB-LEDs mit analogen Signalen, also je höher die Spannung an einer der Anoden von Rot/Grün/Blau, desto intensiver strahlt diese Farbe. Der Raspberry Pi hat nur digitale GPIO anschlüsse, man bräuchte also einen analog-digital Wandler. Also nur mit diesen Materialien geht es nicht, es wird ein zusätzliches Bauteil benötigt (eventuell auch eine separate Stromquelle).
      Ich will aber in nächster Zeit auch mit RGB-LEDs arbeiten, Tutorials kommen noch!

      MfG
      Damon

      • Isnogud
        Erstellt am 13. Januar 2013 um 13:23 | Permalink zum Kommentar

        Ich habe auch grade ein erstes LED am Pi gemacht (ähnlich zu deinem) und wollte mich jetzt an einem RGB Projekt versuchen.

        Man kann die Helligkeit der einzelnen Farben am Pi über PWM steuern. Allerdings hat der Pi nur einen „echten“ PWM Pin, die anderen müssen über Software PWM geregelt werden.

        Siehe:
        http://raspberrypi.stackexchange.com/a/3329

        • Isnogud
          Erstellt am 13. Januar 2013 um 13:40 | Permalink zum Kommentar

          Erst jetzt lese ich dass ihr unten schon das Thema PWM besprochen habt. Bleibt nur noch der Hinweis dass man PWM auch per Software erzeugen kann.

        • Erstellt am 14. Januar 2013 um 13:00 | Permalink zum Kommentar

          Ja, PWM kann man im begrenzten Maße schon mit Software erzeugen, allerdings sind da keine wirklich hohen Taktraten möglich, daher ist SoftPWM für Projekte die etwas Präzision verlangen nicht wirklich geeignet.
          Gehen wir von einer 10×10 Matrix mit Multiplexing aus (nur als Beispiel), Bei jeden Zeilenwechsel muss auch der Duty-Cycle des PWM-Signals geändert werden. Bei 10 Zeilen wären das 10Hz. Da man das Ganze aber etwa 20-30 mal pro Sekunde machen muss, damit die Bewegung flüssig erscheint, kommt man auf 200-300Hz. 300Hz allein zum aktualisieren für die Matrix. Das heißt, das PWM-Modul muss ein vielfaches von 300Hz unterstützen, um für jede Zeile die Farben akkurat zu steuern.
          Mit wiringPi soll man etwa 100Hz schaffen (nicht getestet, habe kein Oszilloskop hier). Daher habe ich mir nun auch einen Arduino (nachbau) bestellt, der hat mehr PWM Outputs.
          Kurz zusammengefasst: Ja, um eine RGB-LED zu testen reicht software-PWM, für alles andere braucht man die entsprechende Hardware.
          MfG
          Damon

  2. I-Catch
    Erstellt am 22. Dezember 2012 um 17:02 | Permalink zum Kommentar

    hmm danke schon mal für die antwort.
    Ich würde ja gerne sowelche benutzen http://shop.led-studien.de/product_info.php/info/p116_RGB-Einzelpixel-mit-Kabel.html/XTCsid/586f1104010707feca6b28bb218d42c7
    hier werden diese zwar mit nen adriano verwendet, aber sollte ja im Aufbau gleich sein oder?

    • Erstellt am 22. Dezember 2012 um 17:10 | Permalink zum Kommentar

      Falls im Arduino-Tutorial ein LED-Treiber verwendet wird schon, aber der Arduino hat auch analoge Pins. Beim RasPi kann man nur einen Pin mit PWM Output bereitstellen. Jede LED braucht 3 analoge Signale. Man muss also z.B. einen TLC5940 verwenden, der Chip ermöglicht 16 analoge Outputs.

  3. I-Catch
    Erstellt am 22. Dezember 2012 um 23:39 | Permalink zum Kommentar

    bin gerade auf dieses Projekt gestoßen http://learn.adafruit.com/light-painting-with-raspberry-pi/hardware

    entweder bin ich blind oder das sind spezielle rgb-LEDs die direkt an den pi angeschlossen sind

    mfg

    • Erstellt am 23. Dezember 2012 um 15:00 | Permalink zum Kommentar

      RaspberryPi LED-Strip
      Der Raspberry Pi ist an den Chip in der Mitte angeschlossen, das ist so ein LED-Treiber (LPD8806). Dieser nimmt die digitalen Signale an und steuert die LEDs damit.

      The board’s MOSI pin connects to the DI pin on the LED strip, and SCLK connects to the CI pin.

      MOSI ist ein serieller Anschluss: http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
      Dieser wird verwendet, weil die Datenrate recht hoch ist.

      Siehe auch:

      The Digital-type strips work in a different way. They have a chip for each LED, to use the strip you have to send digitally coded data to the chips. However, this means you can control each LED individually! Because of the extra complexity of the chip, they are more expensive.

      Auf Adafruit: Digitaler LED Strip.

      MfG
      Damon

  4. I-Catch
    Erstellt am 23. Dezember 2012 um 16:47 | Permalink zum Kommentar

    bin gerade auf das gestoßen und hier steht das der lpd8806 und der ws2801 unterstützt wird (diesen benutzen meine oben genannten pixel leds) sollte also auch mit denen funktionieren
    http://thegreatgeekery.blogspot.co.at/2012/08/raspberry-pi-and-ws2801.html

    und nochmal danke für die antworten

  5. I-Catch
    Erstellt am 23. Dezember 2012 um 23:06 | Permalink zum Kommentar

    hallo hätte jetzt noch ein frage und zwar wieso kommst du auf so einen niedrigen widerstand ?
    ich verstehe die formel und auch woher die 3,3V herkommen aber woher hast du die 30mA?
    weil zB hier wird geschrieben das max 10mA durch dürfen: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=75&t=20897
    aber hier steht etwas von 50mA http://elinux.org/RPi_Low-level_peripherals#Power_pins

    Sry muss mich erst wieder in elektronik einarbeiten^^

    • Erstellt am 24. Dezember 2012 um 14:31 | Permalink zum Kommentar

      Gute Frage… Ich weiß auch noch, dass ich verschiedene Werte für die Stromstärke gefunden habe, ich habe wohl einfach einige Angaben und Messungen gemittelt und bin auf ca. 30mA gekommen.
      Wie auch immer, das war ja nur als erstes Experiment zu betrachten, will man einen Schaltkreis mit LEDs dauerhaft betreiben, sollten sie extern mit Strom versorgt werden, nicht über den GPIO.
      MfG
      Damon

    • Chris
      Erstellt am 28. März 2013 um 12:08 | Permalink zum Kommentar

      Also ne LC-LED verbraucht etwa ein 10tel (genaues kann man dem jeweiligen Datenblatt entnehmen) einer normalen LED… das würde heißen ca 2mA bei Low Current und 20mA bei normalen LEDs!

      komme ich bei 3,3V am Ausgang und 2V Flussspannung auf 650 Ohm bei LC-LEDs bzw auf 65 Ohm bei normalen…

      Für Projekte mit höherem Strombedarf baut man sich am besten nen Treiber auf… dazu mal nach MOSFET googeln ;)

    • Chris
      Erstellt am 28. März 2013 um 12:13 | Permalink zum Kommentar

      Ach die Formel is etwas falsch…

      geht eigentlich so: (Gesamtspannung (Ausgang) – Flussspannung (Diode)) / Strom den die Diode braucht
      also in dem Fall mit LC-LED (3,3V-2V) / 0,002A = 650 Ohm

      • Erstellt am 28. März 2013 um 13:28 | Permalink zum Kommentar

        Die Formel ist Richtig:

        LED mit 2,1V Betriebsspannung braucht einen Widerstand von (3,3V-2,1V)/30mA = 1,2V/0,03A = 40 Ohm

        Allerdings sind 30mA wirklich kein Low-Current. Ich wollte erst das Beispiel für LC-LEDs mit reinnehmen, habe die Rechnung aber dann anhand einer normalen LED gemacht.
        Mit der Formel ergeben sich ebenfalls die 650Ohm.
        Ich aktualisiere den Artikel gleich noch, um die Formel etwas genauer zu erklären. Oder noch besser: schreibe bald einen eigenen Artikel für Widerstände / Ohm’sches gesetzt.

        MfG
        Damon

      • Erstellt am 28. März 2013 um 21:11 | Permalink zum Kommentar

        Oh ja, die Feinheiten :D
        Den Abschnitt wollte ich eigentlich schon lange geändert haben, in der englischen Anleitung ist es auch schon besser formuliert:

        Let’s say your LED consumes 30mA, so you will need a 2V/0.03A = 66Ohm resistor.

        http://en.tacticalcode.de/2013/03/raspberry-pi-blinking-led-in-5-simple-steps.html
        Ohje, wenn man die ToDo-List nicht abarbeitet… Hast natürlich recht, danke.
        Artikel wird sofort aktualisiert.
        MfG
        Damon

  6. charger
    Erstellt am 24. Oktober 2013 um 06:24 | Permalink zum Kommentar

    hi,
    es kommen im terminal immer fehlermeldungen:

    /tmp/blink.sh: 4: /tmp/blink.sh: echo: not found
    /tmp/blink.sh: 7: /tmp/blink.sh: sleep: not found
    /tmp/blink.sh: 6: /tmp/blink.sh: echo: not found

    woran könnte das liegen?

    VG
    charger

    • Erstellt am 24. Oktober 2013 um 08:08 | Permalink zum Kommentar

      vielleicht sind die Programme nicht in der path-variable. Führe folgendes aus in einem terminal:

      echo $PATH

      diese sollte /bin, /usr/bin usw. enthalten.
      Man kann auch in der bash-Datei den vollständigen Pfad der Programme (echo und sleep) mit angeben. um zu sehen wo diese sich befinden:

      which echo

      MfG
      Damon

  7. charger
    Erstellt am 24. Oktober 2013 um 10:23 | Permalink zum Kommentar

    danke für die antwort.

    jetzt gehts bei uns, der mochte die anführungszeichen nicht….

    #!/bin/sh

    echo „17“ > /sys/class/gpio/export
    echo „out“ > /sys/class/gpio/gpio17/direction

    while true; do

    echo 1 > /sys/class/gpio/gpio17/value

    sleep 0.1;

    echo 0 > /sys/class/gpio/gpio17/value

    sleep 0.1;

    done

    VG
    charger

Achtung: Wordpress interpretiert bestimmte Zeichenfolgen als Markup und verändert diese. Nutzt für Programmcode lieber Gist oder PasteBin-Services und verlinkt die Code-Schnipsel.

Post a Comment

Ihre E-Mail wird niemals veröffentlicht oder verteilt. Benötigte Felder sind mit * markiert

*
*

Du kannst diese HTML Tags und Attribute verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>