VERSCHIEDENES

 

Der Quellencode aller Programmbeispiele kann hier heruntergeladen werden.


 

Experiment 1: Verwendung des HC-SR04 Ultraschall-Sensors


  Ziel:
Bestimmen der Distanz zu einem reflektierenden Objekt durch Messung der Laufzeit eines Ultraschall-Pulses. Das Ergebnis wird in der Konsole angezeigt. Durch Drücken des Tastenschalters wird das Programm beendet.

Die Verwendung des HC-SR04 Moduls ist einfach. Ein positiver Triggerpuls von etwa 10-100 us am Trigger-Eingang löst die Messung aus. Nach einer gewissen Zeit sendet der Echo-Ausgang einen positiven Puls zurück, dessen Länge der Laufzeit des Ultraschallsignals entspricht. Das untenstehende Oszilloskop-Bild zeigt den Trigger- und Echopuls für eine typische Situation.

raspeasy4

Da die Schallgeschwindigkeit 343 m/s ist, bewegt sich der Schallpuls in 700 us 24 cm weit. Dies entspricht dem Abstand vom Sensor zum Ziel und zurück zum Sensor. Das Ziel ist also 12 cm entfernt.

 

Der Echo-Ausgang liefert einen Spannungspuls von ca. 5 V Höhe. Um die Spannung auf die erlaubte Grösse für einen GPIO-Input (3.3 V) zu reduzieren, wird ein Spannungsteiler mit zwei Widerständen verwendet.

raspeasy3

Programm:[►]

# Ultrasonic1.py
# Using HC-SR04 ultrasonic module

import RPi.GPIO as GPIO
import time

P_TRIGGER = 15
P_ECHO = 16

def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(P_TRIGGER, GPIO.OUT)
    GPIO.setup(P_ECHO, GPIO.IN)

def getDistance(timeoutCount  = 10000):        
    # Send max 10 us trigger pulse
    GPIO.output(P_TRIGGER, GPIO.HIGH)
    time.sleep(0.00001)
    GPIO.output(P_TRIGGER, GPIO.LOW)
    # Wait for HIGH signal
    count1 = 0
    while GPIO.input(P_ECHO) == GPIO.LOW and count1 < timeoutCount:
        count1 += 1
    startTime = time.time()    
    # Wait for LOW signal
    count2 = 0
    while GPIO.input(P_ECHO) == GPIO.HIGH and count2 < timeoutCount:
        count2 += 1
    if count1 == timeoutCount or count2  == timeoutCount:
        return -1
    elapsed = time.time() - startTime
    distance =  34300 * elapsed / 2.0
    # round to 2 decimals
    distance = int(distance * 100 + 0.5) / 100.0
    return distance

print "starting..."
setup()
while True:
    d = getDistance()
    print "d =", d
    time.sleep(0.1)
    
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

Um ein hängendes Programm zu vermeiden, wenn der Sensor nicht antwortet, verwenden wir einen timeoutCount und geben im Fehlerfall -1 zurück. Eine autonome Anwendung erhalten Sie, wenn Sie die Distanz auf einem angeschlossenen Oled- oder 7-Segment-Display anzeigen.

Programm:[►]

# Ultrasonic2.py
# Show distance on Oled

import RPi.GPIO as GPIO
import time
from OLED1306 import OLED1306

P_ESCAPE = 12 # Button A
P_TRIGGER = 15
P_ECHO = 16

def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(P_TRIGGER, GPIO.OUT)
    GPIO.setup(P_ECHO, GPIO.IN)
    GPIO.setup(P_ESCAPE, GPIO.IN)

def getDistance(timeoutCount  = 10000):        
    # Send max 10 us trigger pulse
    GPIO.output(P_TRIGGER, GPIO.HIGH)
    time.sleep(0.00001)
    GPIO.output(P_TRIGGER, GPIO.LOW)
    # Wait for HIGH signal
    count1 = 0
    while GPIO.input(P_ECHO) == GPIO.LOW and count1 < timeoutCount:
        count1 += 1
    startTime = time.time()    
    # Wait for LOW signal
    count2 = 0
    while GPIO.input(P_ECHO) == GPIO.HIGH and count2 < timeoutCount:
        count2 += 1
    if count1 == timeoutCount or count2  == timeoutCount:
        return -1
    elapsed = time.time() - startTime
    distance =  34300 * elapsed / 2.0
    # round to 2 decimals
    distance = int(distance * 100 + 0.5) / 100.0
    return distance

print "starting..."
oled = OLED1306()
oled.setFontSize(50)
setup()
while GPIO.input(P_ESCAPE) == GPIO.LOW:
    d = getDistance()
    oled.setText(str(d))
    time.sleep(1)
GPIO.cleanup()
oled.setText("done")
    
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)



 

Experiment 2: Verwendung von Relais

 

Ziel:
In vielen Schaltanwendungen möchten Sie ein Gerät ein- bzw. ausschalten, das eine externe Stromversorgung (bis zu 24 V/10 A Gleichstrom oder bis zu 115-230V/10A Wechselstrom) benötigt. Dazu werden auch heute noch oft elektro-mechanische Relais eingesetzt, die aus einer Magnetspule und magnetisch betätigten Schaltkontakten aufgebaut sind.

hand1

Schalten Sie keine Netzspannung, wenn Sie im Umgang mit Hochspannung nicht vertraut sind! Seien Sie äusserst vorsichtig, um einen Stromschlag zu vermeiden. Bei Hochspannungen muss sich das Relais in einem vollständig geschlossenen Gehäuse befinden, damit jede Berührung mit der Hochspannung ausgeschlossen ist. Vermeiden Sie jeden elektrischen Kontakt zwischen der Hochspannungs- und Niederspannungsseite.

Hier eine klassische Schaltung unter Verwendung eines bipolaren Transistors (die Bauteile lassen sich durch kompatible Komponenten ersetzen). Die zum Relais parallel geschaltete Diode ist nötig, um den Transistor vor Spannungsspitzen zu schützen, die durch Induktion beim Ausschalten des Spulenstroms verursacht werden.

misc1

Bemerkungen:
Anstelle eines Magnetrelais kann ein Halbleiter-Relais wie das Crydon ASO242 (bis zu 2A bei 280V AC) verwendet werden. Wegen der erforderlichen Eingangsspannung von 4-10V ist auch hier ein Treiber nötig, um das Relais mit einem GPIO-Ausgang anzusteuern, beispielsweise wie oben mit einem Transistor oder dem ULN2803 (eine Schutzdiode ist nicht erforderlich). Wie unten dargestellt, kann das Relais direkt in eine Steckdose mit einer Schraubklemme eingebaut werden.

misc3
misc2

 

 

Experiment 3: Step-up Konverter 3.3V to 5 V

 

Ziel:
Immer mehr werden Systemen ausschliesslich mit einer Versorgungsspannug von 3.3V betrieben. Damit fehlt eine Spannungsversorgung für Komponenten, die eine Versorgungsspannung von 5V benötigen (wie TTL-Elektronik, Motoren und Sensoren, v.a. für Ardunio addons). Das Problem lässt sich mit billigen Spannungskonverter lösen, die mit hohem Wirkungsgrad aus 3.3V eine Spannung von 5 V erzeugen. Dieselben Bausteine werden auch eingesetzt, um eine 5V-Versorgung aus kleinen 3.6 V Lithium-Batterien zu erstellen.

DC-DC Power Supply Converter Step Up Circuit 3V to 5V (from Ebay) misc4