Smartbuggy-1 een script voor de besturing


#!/usr/bin/python
#######################################################
# Eenvoudige besturing voor buggy
# UP     : BuggyVooruit
# DOWN   : BuggyAchteruit
# LEFT   : BuggyLinksaf
# RIGHT  : BuggyRechtsaf
# Enter  : BuggyStop
# q      : stop dit script
# S      : shutdown de raspberry pi
#######################################################

# Importeren van library functies
import RPi.GPIO as GPIO 
import time
import curses
import os

# Zet curses window en schakel echo toetsen naar screen uit
# Schakel instant toetsen-response aan en gebruik speciale
# waarden voor de pijltjes toetsen
screen = curses.initscr()
curses.noecho() 
curses.cbreak()
screen.keypad(True)

# Setup GPIO
GPIO.setmode(GPIO.BOARD)
#
# Afstandsmeting
GPIO.setup(7,GPIO.OUT)
GPIO.setup(12,GPIO.IN)
GPIO.output(7,False)
#
# Motor aan de linkerkant
# GPIO pin 29 gaat naar L298N print IN1
# GPIO pin 31 gaat naar L298N print IN2
GPIO.setup(29,GPIO.OUT)
GPIO.setup(31,GPIO.OUT)
GPIO.output(29,False)
GPIO.output(31,False)
#
# Motor aan de rechterkant
# GPIO pin 11 gaat naar L298N print IN3
# GPIO pin 13 gaat naar L298N print IN4
GPIO.setup(11,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)
GPIO.output(11,False)
GPIO.output(13,False)

# Functie afstand meten
def AfstandMeten():
    global afstand
    time.sleep(0.1)

    GPIO.output(7,True)
    time.sleep(0.1)
    GPIO.output(7,False)

    while GPIO.input(12) == 0:
        pass
    start = time.time()

    while GPIO.input(12) == 1:
        pass
    stop = time.time()

    # afstand in cm berekenen en afronden 1 na de komma
    pulsduur = stop - start
    afstand = pulsduur * 17150
    afstand = round(afstand, 1)
    return afstand

# Functie stop
def BuggyStop():
    GPIO.output(29,False)
    GPIO.output(31,False)
    GPIO.output(11,False)
    GPIO.output(13,False)

# Functie vooruit
def BuggyVooruit():
    GPIO.output(29,False)
    GPIO.output(31,True)
    GPIO.output(11,False)
    GPIO.output(13,True)

# Functie achteruit
def BuggyAchteruit():
    GPIO.output(29,True)
    GPIO.output(31,False)
    GPIO.output(11,True)
    GPIO.output(13,False)

# Functie linksaf 
def BuggyLinksaf():
    GPIO.output(29,True)
    GPIO.output(31,False)
    GPIO.output(11,False)
    GPIO.output(13,True)

# Functie rechtsaf
def BuggyRechtsaf():
    GPIO.output(29,False)
    GPIO.output(31,True)
    GPIO.output(11,True)
    GPIO.output(13,False)

try:
    afstand=8
    while True:
#        AfstandMeten()
        char = screen.getch()
        if char == ord('q'):
            break
        if char == ord('S'):
            os.system ('sudo shutdown -h now')
        elif char == curses.KEY_UP:
            if afstand > 7:
                BuggyVooruit()
            else:
            # afstand kleiner dan 7 cm dus stoppen
                BuggyStop()
        elif char == curses.KEY_DOWN:
            BuggyAchteruit()
        elif char == curses.KEY_LEFT:
            BuggyLinksaf()
        elif char == curses.KEY_RIGHT:
            BuggyRechtsaf()
        elif char == 10:      # Enter toets
            BuggyStop()

finally:
    # Sluit curses af en zet echo weer aan
    curses.nocbreak()
    screen.keypad(0)
    curses.echo()
    curses.endwin()
    # Stop motoren
    BuggyStop()
    # Sluit GPIO af
    GPIO.cleanup()