(siehe: Setup des RPi)
(siehe: Anschlüsse des RPi)
An den Ausgängen des RPi liegt eine Spannung von 3,3V an. Wenn über der LED eine Spannung von 2V abfällt,
muss gemäß der Maschenregel über dem Widerstand eine Spannung von 1,3V abfallen. Geht man von 15mA Stromfluss in der LED aus,
erhält man folgenden Vorwiderstandswert:
R = U / I = 1,3V / 0,015 A = 86 Ω
Hier wird ein 100Ω-Widerstand aus der E6-Normreihe verwendet.
Das folgende Python-Script (led_blink.py) lässt die LED mit einer Frequenz von 0,5s blinken.
#! /usr/bin/env python
import RPi.GPIO as GPIO
import time
LED_PIN = 27
BLINK_INTERVAL = 500 # in milliseconds
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)
while True:
GPIO.output(LED_PIN, True)
time.sleep(BLINK_INTERVAL/1000.0)
GPIO.output(LED_PIN, False)
time.sleep(BLINK_INTERVAL/1000.0)
Führt man das Script nun aus, fängt die LED an zu blinken:
sudo python led_blink.py
siehe: Ausschalter für Raspberry Pi
#! /usr/bin/env python
import RPi.GPIO as GPIO
import time
PIN_BUTTON = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP)
while True:
input_state = GPIO.input(PIN_BUTTON)
if input_state == False:
print('Button Pressed')
time.sleep(0.2)
Zunächst wird die Adafruit-DHT-Library für Python installiert und verwendet:
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install
Alternativ kann die Library auch mit pip installiert werden:
sudo apt-get install python-pip
sudo python -m pip install --upgrade pip setuptools wheel
sudo pip install Adafruit_DHT
#!/usr/bin/python
import Adafruit_DHT
import time
PIN_DHT22 = 4 # GPIO4
while True:
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, PIN_DHT22)
if humidity is not None and temperature is not None:
print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity))
else:
print('Failed to get reading. Try again!')
time.sleep(1)
Der GL55xx ist ein analoger Sensor, der nicht nur HIGH und LOW kennt. Da aber der RPi keinen eingebauten ADC (Analog-Digital-Converter) besitzt, müssen man entweder einen ADC (z.B. den MCP3008) verwenden oder sich mit einem Trick behelfen: ein Keramik-Kondensator (hier: 1µF).
Der Kondensator lädt sich über die Zeit auf und erreicht irgendwann eine Spannung über 2V, was für den RPi einen
Übergang von LOW nach HIGH am GPIO27 bedeutet.
Der Widerstand im LDR ändert sich je nach den Lichtverhältnissen und damit lädt sich auch der Kondensator langsamer
oder schneller auf und benötigt somit mehr Zeit, um ein HIGH am GPIO27 zu erreichen, d.h. das folgende Skript misst
die Zeit, wie lange sich der Kondensator auflädt, um den Widerstand des LDR zu ermitteln.
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
PIN_M = 17
PIN_T = 27
GPIO.setmode(GPIO.BCM)
capacity = 0.000001
adj = 2.130620985
i = 0
t = 0
while True:
GPIO.setup(PIN_M, GPIO.OUT)
GPIO.setup(PIN_T, GPIO.OUT)
GPIO.output(PIN_M, False)
GPIO.output(PIN_T, False)
time.sleep(0.2)
GPIO.setup(PIN_M, GPIO.IN)
time.sleep(0.2)
GPIO.output(PIN_T, True)
starttime = time.time()
endtime = time.time()
while (GPIO.input(PIN_M) == GPIO.LOW):
endtime = time.time()
timeDiff = endtime-starttime
res = (timeDiff/capacity)*adj
i = i + 1
t = t + res
if i==10:
t = t/i
print(t)
i = 0
t = 0
Das folgende Python-Script initialisiert den Servo-Motor mit 50Hz der PWM am GPIO-Pin 18. Dann legt man eine Anfangsspannung von 2,5V fest. In der While-Schleife werden nacheinander 7,5, 12,5 und dann 2,5 als DutyCycle für die Ausrichtung des Motors festgelegt. (hier entsprechen 2,5 = 0°, 7,5 = 90° und 12,5 = 180°).
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
PIN_SERVO = 18 # =GPIO18
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_SERVO, GPIO.OUT)
servo = GPIO.PWM(PIN_SERVO, 50)
servo.start(2.5)
try:
while True:
servo.ChangeDutyCycle(7.5)
time.sleep(1)
servo.ChangeDutyCycle(12.5)
time.sleep(1)
servo.ChangeDutyCycle(2.5)
time.sleep(1)
except KeyboardInterrupt:
servo.stop()
zurück