Raspberry PI LED Schaltung

Mein erstes Raspberry Projekt mit Elektronik-Hardware!

Das gesteckte Fernziel ist der Aufbau einer intelligenten Stompbox mit Looper - also so ein Ding, wo man beim Gitarrespielen mit dem Fuß drauf tappt, und das dazu dann den Sound einer Bass oder Tom Drum ausgibt.

Wie gesagt, das Fernziel. Der erste Schritt dahin: Eine LED anschließen und zum Leuchten bringen. Damit es nicht ganz so langweilig ist, wir lassen wir die LED die Dezimalen der Zahl PI aufzählen. Also die Zahl, welche den Umfang und die Fläche eines Kreises mathematisch beschreibt.

Bastelausstattung

Ich hab mir extra ein “Starter-Kit” geholt, dass neben einem neuen Pi 3 Version noch das nötige Kleinzeug enthält, um mit LED’s und Tastern zu experimentieren. Enthalten sind:

  • Raspberry PI in Version 3 (Quad Core ARM Prozessor mit je 1,2 GHz, 1GB RAM, on Board WiFi und Bluetooth; dazu das passende Gehäuse)
  • ein Breadboard (Steckbrett) - das ist praktisch zum experimentieren; passend dazu ein Haufen Kabel kurz und lang,
  • T-Cobbler oder Breakout genannt - das verbindet den Raspi mit dem Steckbrett. Praktischerweise werden die Stromleitungen separat aufgeführt;
  • dazu das passende Verbindungskabel zwischen Raspi und Breakout
  • Widerstände, LED’s und zwei Taster

Wenn man das Breadboard mit Steckbrett, Kabel und Raspi zusammensetzt, muss man etwas aufpassen:

  • Das Kabel muss richtig rum im Raspi gesteckt werden (das andere Ende im Breakout lässt sich nur in einer Position richtig setzen)
  • das Breakout sollte man auf das Breadboard so setzen, dass die Nummerierung der Ports/Pins bei ein beginnt.

gpio numbering

Die GPIO Pins sind die Stellen, an denem man die Elektronik Teile ansetzt; diese sind nummeriert.

Es gibt leider mehrere Numerierungstechniken:

  • Pin Numbering: Hier werden die Pins von links nach rechts, oben nach unten durchnummeriert (0-39)
  • GPIO (oder BCM_GPIO): Es werden nur die programierbaren Pins durchnummeriert: GPIO 1 - GPIO 31
  • wiringPi Numbering: Dieses Schema wird im Kommando “gpio” verwendet

Eine Erläuterung findet sich hier: https://jankarres.de/2015/02/raspberry-pi-gpio-schnittstelle-erklaert/, oder hier: https://developer.microsoft.com/en-us/windows/iot/docs/pinmappingsrpi

Kurze Erinnerung an die Elektrotechnik Grundlagen

Wer in der Schule gut aufgepasst hat, wird mit den Schaltungen kein Problem haben. Ich musste erst mal nachlesen, bis ich das notwendige Basswissen wieder drauf hatte:

  • die 3,3V und 5V Pins sind die Pluspole (Bezeichnung: VCC); die Ladung fließt zum Minuspol (Symbole GND oder Ground oder 0V). (jaja, da gibts auch andere Sichtweisen. Aber es sind alles nur Modelle. Ich halte mich an das klassische Modell: “Strom fließt von Plus zu Minus”)
  • die meisten Schaltungen müssen mit Widerständen abgesichert werden. Mein Bastel-Paket enthält hochohmige (10K = 10000 Ohm) und niederohmige Widerstände (300 Ohm)
  • Hochohmige Widerstände werden gerne als sog. Pull-Up und Pull-Down Widerstände eingesetzt - dazu mehr weiter unten. Diese braucht man beispielsweise, wenn man Schaltungen mit Tastern realisiert.
  • Niederohmige Widerstände werden z.B. als Vorwiderstände von LEDs verwendet, um die Stromstärke zu reduzieren, da andernfalls die LEDs durchbrennen.
  • Das Ohmsches Gesetz sagt U = R * I, Spannung (Volt) = Widerstand (Ohm) * Stromstärke (Ampere).
  • Schaltet man Widerstände parallel oder in Reihe, lassen sich die resultierenden Spannungen und Stromstärken kombinieren: Reihenschaltungen teilen die Spannung auf (Spannungsteiler); Parallelschaltungen teilen die Stromstärke auf (Stromteiler).

LED wiring

Eine LED anzuschließen ist simpel:

  • von der Spannungsquelle (Pluspol oder ein “out”-Pin) über einen Vorwiderstand (ich nehme 330 Ohm)
  • weiter an den Pluspol der LED (die “Anode” - das ist das längere Beinchen)
  • vom Minuspol der LED (Kathode) zum Minuspol (GND)

Als Spannungsquelle nehmen wir ntürlich einen Pin. Wir müssen diesen unbedingt als OUT-Pin konfigurieren. Setzen wir dann den Wert auf HIGH fließt Strom - die LED leuchtet.

Berechnung des Vorwiderstandes

Warum ein Vorwiderstand? Ganz einfach: 3,3 Volt sind zuviel Spannung; wir müssen diese auf etwa 2 Volt runterbekommen. Das machen wir mit einem “künstlichen” Verbraucher - einem Widerstand.

Eine typische LED hat einen Spannungsabfall von 2 V und benötigt etwa 10 mA (= 0,01 A); eine LED verbraucht Strom und verhält sich damit selber wie ein Widerstand. Schalte ich zwei Widerstände in Reihe (=hintereinander), so verteilt sich die Spannung auf die Widerstände. Bei 3,3 V Eingangsspannung muss der Widerstand also einen Spannungsabfall von 3,3 - 2 = 1,3 V erzeugen. Bei einen Strom von 10 ma bedeutet das für den Vorwiderstand: 1,3 / 0,01 = 130 Ohm

In der Praxis nimmt man den nächstgrößeren Widerstand; die LED leuchtet dann etwas dunkler. Hinweis: Je nach Farbe haben die LEDs andere Spannungen.

blinken lassen

Zum testen der Schaltung kann man das gpio Kommando verwenden; dieses stammt aus dem Paket wiringpi (http://http://wiringpi.com)

pi@raspberrypi:~ $ gpio mode 0 out
pi@raspberrypi:~ $ gpio write 0 1
pi@raspberrypi:~ $ gpio write 0 0

oder die gpio nummern verwenden:

pi@raspberrypi:~ $ gpio -g write 11 1
pi@raspberrypi:~ $ gpio -g write 11 0

Script

import time
import random
import math
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM) # GPIO numbering verwenden
pin = 17 # this is the led pin

GPIO.setup(pin, GPIO.OUT) # use it as an output device 

pi = math.pi
led_time_on = 0.15
led_time_off = 0.2
wait_between_numbers = 0.5

# let the led blink n times
def blinker(n):
    for _ in range(n):
        GPIO.output(pin, GPIO.HIGH)
        time.sleep(led_time_on)
        GPIO.output(pin, GPIO.LOW)
        time.sleep(led_time_off)
        
# let the led blink the digits of pi
while pi > 0:
    print(pi)
    digit = int(pi) % 10
    blinker(digit);
    time.sleep(wait_between_numbers);

    # wind up
    pi -= digit
    pi = pi * 10;