ASTRO CAR Konstruktion

3D Modell vom ASTRO CAR herunterladen (Paint 3D)
ASTRO CAR von Oben
  1. 4X Getriebemotor
  2. 5.000 mAh RC-Akku
  3. Motortreiber Typ "L298N-H-Brücke"
  4. Schalter (fürs Licht)
  5. Motortreiber Typ "L298N-H-Brücke"
  6. Ultraschallsensor
ASTRO CAR von Unten
  1. Raspberry Pi
  2. Servo-Motor
  3. Licht
  4. Schalter (fürs Licht)

Code Übersicht

Wenn du Verbesserungsvorschläge hast: raspberrypiwebsite@gmail.com

Code für den Safe Lock Code für den L298NHBridge Code für die Steuerung Code für die Autonomefahrt KI Katzenklappe

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()

KI Katzenklappe: Dateien & Videos

detect.py: Anzeige utils.py: Erkennung & Servo cat_detection.tflite cat_detection_edgetpu.tflite Alle Dateien auf Github Raspberry Pi-Image Download