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