Code Übersicht
Wenn du Verbesserungsvorschläge hast: raspberrypiwebsite@gmail.com
Code für den Safe Lock
from gpiozero import LED, Button
import RPi.GPIO as GPIO
import threading
import getpass
# Pin-Nummerierung auf dem Board verwenden
GPIO.setmode(GPIO.BCM)
# Pin-Nummern definieren
pwm_gpio = 18
pwm_gpio1 = 21
frequency = 50
GPIO.setup(pwm_gpio, GPIO.OUT)
GPIO.setup(pwm_gpio1, GPIO.OUT)
pwm = GPIO.PWM(pwm_gpio, frequency)
pwm1 = GPIO.PWM(pwm_gpio1, frequency)
led = LED(17)
button = Button(16)
def angle_to_percent(angle):
if angle > 180 or angle < 0:
return False
start = 4
end = 12.5
ratio = (end - start) / 180
angle_as_percent = angle * ratio
return start + angle_as_percent
def onButtonPressed():
password = getpass.getpass("Bitte Passwort eingeben: ")
if password == "123456789":
zeit = int(input("Wie lange soll der Safe geöffnet bleiben? (in Sekunden): "))
led.on()
print("Button gedrückt, LED eingeschaltet")
pwm1.start(angle_to_percent(90))
threading.Timer(2, pwm.start, args=[angle_to_percent(180)]).start()
threading.Timer(zeit, stop_lock).start()
elif password == "easter_egg_123456789":
led.on()
print("Button gedrückt, LED eingeschaltet")
pwm1.start(angle_to_percent(90))
threading.Timer(2, pwm.start, args=[angle_to_percent(180)]).start()
threading.Timer(0.5, blink_led, args=[3]).start()
else:
print("Falsches Passwort eingegeben")
def stop_lock():
print("Safe Lock gestoppt")
led.off()
pwm.start(angle_to_percent(70))
def blink_led(num_blinks):
for i in range(num_blinks):
led.on()
threading.Timer(0.5, led.off).start()
button.when_pressed = onButtonPressed
try:
while True:
pass
except KeyboardInterrupt:
GPIO.cleanup()
Code für den ASTRO CAR [Fernsteuerung-Variante]: L298NHBridge
import RPi.GPIO as io
io.setmode(io.BCM)
DC_MAX = 100
io.setwarnings(False)
ENA = 18
IN1 = 6
IN2 = 13
IN3 = 19
IN4 = 26
ENB = 12
leftmotor_in1_pin = IN1
leftmotor_in2_pin = IN2
io.setup(leftmotor_in1_pin, io.OUT)
io.setup(leftmotor_in2_pin, io.OUT)
rightmotor_in1_pin = IN3
rightmotor_in2_pin = IN4
io.setup(rightmotor_in1_pin, io.OUT)
io.setup(rightmotor_in2_pin, io.OUT)
io.output(leftmotor_in1_pin, False)
io.output(leftmotor_in2_pin, False)
io.output(rightmotor_in1_pin, False)
io.output(rightmotor_in2_pin, False)
leftmotorpwm_pin = ENA
rightmotorpwm_pin = ENB
io.setup(leftmotorpwm_pin, io.OUT)
io.setup(rightmotorpwm_pin, io.OUT)
leftmotorpwm = io.PWM(leftmotorpwm_pin,100)
rightmotorpwm = io.PWM(rightmotorpwm_pin,100)
leftmotorpwm.start(0)
leftmotorpwm.ChangeDutyCycle(0)
rightmotorpwm.start(0)
rightmotorpwm.ChangeDutyCycle(0)
def setMotorMode(motor, mode):
if motor == "leftmotor":
if mode == "reverse":
io.output(leftmotor_in1_pin, True)
io.output(leftmotor_in2_pin, False)
elif mode == "forward":
io.output(leftmotor_in1_pin, False)
io.output(leftmotor_in2_pin, True)
else:
io.output(leftmotor_in1_pin, False)
io.output(leftmotor_in2_pin, False)
elif motor == "rightmotor":
if mode == "reverse":
io.output(rightmotor_in1_pin, False)
io.output(rightmotor_in2_pin, True)
elif mode == "forward":
io.output(rightmotor_in1_pin, True)
io.output(rightmotor_in2_pin, False)
else:
io.output(rightmotor_in1_pin, False)
io.output(rightmotor_in2_pin, False)
else:
io.output(leftmotor_in1_pin, False)
io.output(leftmotor_in2_pin, False)
io.output(rightmotor_in1_pin, False)
io.output(rightmotor_in2_pin, False)
def setMotorLeft(power):
int(power)
if power < 0:
setMotorMode("leftmotor", "reverse")
pwm = -int(DC_MAX * power)
if pwm > DC_MAX:
pwm = DC_MAX
elif power > 0:
setMotorMode("leftmotor", "forward")
pwm = int(DC_MAX * power)
if pwm > DC_MAX:
pwm = DC_MAX
else:
setMotorMode("leftmotor", "stopp")
pwm = 0
leftmotorpwm.ChangeDutyCycle(pwm)
def setMotorRight(power):
int(power)
if power < 0:
setMotorMode("rightmotor", "reverse")
pwm = -int(DC_MAX * power)
if pwm > DC_MAX:
pwm = DC_MAX
elif power > 0:
setMotorMode("rightmotor", "forward")
pwm = int(DC_MAX * power)
if pwm > DC_MAX:
pwm = DC_MAX
else:
setMotorMode("rightmotor", "stopp")
pwm = 0
rightmotorpwm.ChangeDutyCycle(pwm)
def exit():
io.output(leftmotor_in1_pin, False)
io.output(leftmotor_in2_pin, False)
io.output(rightmotor_in1_pin, False)
io.output(rightmotor_in2_pin, False)
io.cleanup()
Code für die Steuerung
import sys, tty, termios, os, readchar
import L298NHBridge as HBridge
speedleft = 0
speedright = 0
print("w/s: beschleunigen")
print("a/d: lenken")
print("q: stoppt die Motoren")
print("x: Programm beenden")
def getch():
ch = readchar.readchar()
return ch
def printscreen():
os.system('clear')
print("w/s: vorwaerts / rueckwaerts beschleunigen")
print("a/d: links / rechts lenken")
print("q: stoppt die Motoren")
print("x: Programm beenden")
print("========== Geschwindigkeitsanzeige ==========")
print("Geschwindigkeit linker Motor: ", speedleft)
print("Geschwindigkeit rechter Motor: ", speedright)
while True:
char = getch()
if(char == "w"):
speedleft = speedleft + 0.5
speedright = speedright + 0.5
if speedleft > 1:
speedleft = 1
if speedright > 1:
speedright = 1
HBridge.setMotorLeft(speedleft)
HBridge.setMotorRight(speedright)
printscreen()
if(char == "s"):
speedleft = speedleft - 0.5
speedright = speedright - 0.5
if speedleft < -1:
speedleft = -1
if speedright < -1:
speedright = -1
HBridge.setMotorLeft(speedleft)
HBridge.setMotorRight(speedright)
printscreen()
if(char == "q"):
speedleft = 0
speedright = 0
HBridge.setMotorLeft(speedleft)
HBridge.setMotorRight(speedright)
printscreen()
if(char == "d"):
speedright = speedright + 0.5
speedleft = speedleft - 0.5
if speedright < -1:
speedright = -1
if speedleft > 1:
speedleft = 1
HBridge.setMotorLeft(speedleft)
HBridge.setMotorRight(speedright)
printscreen()
if(char == "a"):
speedleft = speedleft + 0.5
speedright = speedright - 0.5
if speedleft < -1:
speedleft = -1
if speedright > 1:
speedright = 1
HBridge.setMotorLeft(speedleft)
HBridge.setMotorRight(speedright)
printscreen()
if(char == "x"):
HBridge.setMotorLeft(0)
HBridge.setMotorRight(0)
HBridge.exit()
print("Programm Ende")
break
char = ""
Code für die Autonomefahrt
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
import time
trigPin = 22
echoPin = 24
MAX_DISTANCE = 600
timeOut = MAX_DISTANCE*60
def angle_to_percent(angle):
if angle > 180 or angle < 0:
return False
start = 4
end = 12.5
ratio = (end - start)/180
angle_as_percent = angle * ratio
return start + angle_as_percent
GPIO.setwarnings(False)
pwm_gpio = 25
frequence = 50
GPIO.setup(pwm_gpio, GPIO.OUT)
pwm = GPIO.PWM(pwm_gpio, frequence)
def pulseIn(pin,level,timeOut):
t0 = time.time()
while(GPIO.input(pin) != level):
if((time.time() - t0) > timeOut*0.000001):
return 0
t0 = time.time()
while(GPIO.input(pin) == level):
if((time.time() - t0) > timeOut*0.000001):
return 0
pulseTime = (time.time() - t0)*1000000
return pulseTime
def getSonar():
GPIO.output(trigPin,GPIO.HIGH)
time.sleep(0.00001)
GPIO.output(trigPin,GPIO.LOW)
pingTime = pulseIn(echoPin,GPIO.HIGH,timeOut)
distance = pingTime * 340.0 / 2.0 / 10000.0
return distance
def getSonar1():
GPIO.output(trigPin,GPIO.HIGH)
time.sleep(0.00001)
GPIO.output(trigPin,GPIO.LOW)
pingTime = pulseIn(echoPin,GPIO.HIGH,timeOut)
distance1 = pingTime * 340.0 / 2.0 / 10000.0
return distance1
def getSonar2():
GPIO.output(trigPin,GPIO.HIGH)
time.sleep(0.00001)
GPIO.output(trigPin,GPIO.LOW)
pingTime = pulseIn(echoPin,GPIO.HIGH,timeOut)
distance2 = pingTime * 340.0 / 2.0 / 10000.0
return distance2
def setup():
GPIO.setmode(GPIO.BCM)
GPIO.setup(trigPin, GPIO.OUT)
GPIO.setup(echoPin, GPIO.IN)
import sys, tty, termios, os, readchar
import L298NHBridge as HBridge
speedleft = 0
speedright = 0
print("w/s: beschleunigen")
print("a/d: lenken")
print("q: stoppt die Motoren")
print("x: Programm beenden")
def getch():
ch = readchar.readchar()
return ch
def printscreen():
os.system('clear')
print("w/s: vorwaerts / rueckwaerts beschleunigen")
print("a/d: links / rechts lenken")
print("q: stoppt die Motoren")
print("x: Programm beenden")
print("========== Geschwindigkeitsanzeige ==========")
print("Geschwindigkeit linker Motor: ", speedleft)
print("Geschwindigkeit rechter Motor: ", speedright)
def strate_servo():
pwm.start(angle_to_percent(90))
def Right_servo():
pwm.start(angle_to_percent(180))
def Left_servo():
pwm.start(angle_to_percent(10))
def strate():
distance = getSonar()
print ("The distance of strate is : %.2f cm"%(distance))
if distance <= 29:
ende()
check()
def Right():
distance1 = getSonar1()
print ("The distance of right is : %.2f cm"%(distance1))
def Left():
distance2 = getSonar2()
print ("The distance of left is : %.2f cm"%(distance2))
def forward():
speedleft = 0.2
speedright = 0.5
if speedleft > 0.2:
speedleft = 0.2
if speedright > 0.5:
speedright = 0.5
HBridge.setMotorLeft(speedleft)
HBridge.setMotorRight(speedright)
printscreen()
def backward():
speedleft = -1
speedright = -1
if speedleft < -1:
speedleft = -1
if speedright < -1:
speedright = -1
HBridge.setMotorLeft(speedleft)
HBridge.setMotorRight(speedright)
printscreen()
def rightr():
speedright = +1
speedleft = -1
if speedright < -1:
speedright = -1
if speedleft > 1:
speedleft = 1
HBridge.setMotorLeft(speedleft)
HBridge.setMotorRight(speedright)
printscreen()
def leftl():
speedleft = + 1
speedright = - 1
if speedleft < -1:
speedleft = -1
if speedright > 1:
speedright = 1
HBridge.setMotorLeft(speedleft)
HBridge.setMotorRight(speedright)
printscreen()
def check():
distance1 = getSonar1()
distance2 = getSonar2()
Right_servo()
Right()
time.sleep(0.5)
Left_servo()
time.sleep(1.5)
Left()
time.sleep(0.1)
strate_servo()
if distance1 or distance2 < 10:
backward()
if distance1 < distance2:
leftl()
time.sleep(1)
strate()
loop()
if distance1 > distance2:
rightr()
time.sleep(1)
strate()
loop()
def ende():
speedleft = 0
speedright = 0
HBridge.setMotorLeft(speedleft)
HBridge.setMotorRight(speedright)
printscreen()
def loop():
distance = getSonar()
forward()
strate_servo()
while distance > 30:
strate()
if __name__ == '__main__':
print ('Program is starting...')
setup()
try:
loop()
except KeyboardInterrupt:
GPIO.cleanup()
speedleft = 0
speedright = 0
HBridge.setMotorLeft(speedleft)
HBridge.setMotorRight(speedright)
printscreen()