Sfoglia il codice sorgente

The Ultraschallsensor is finished and all addresses are added.

master
langspielplatte 5 anni fa
parent
commit
1ac1c40332
1 ha cambiato i file con 223 aggiunte e 182 eliminazioni
  1. +223
    -182
      Versuchstag-4/ikt_car_sensorik.py

+ 223
- 182
Versuchstag-4/ikt_car_sensorik.py Vedi File

@@ -19,227 +19,268 @@ bus = smbus.SMBus(1)
#################################################################################

class Ultrasonic():
'''This class is responsible for handling i2c requests to an ultrasonic sensor'''

def __init__(self,address):
self.address = address
# Aufgabe 2
#
# Diese Methode soll ein Datenbyte an den Ultraschallsensor senden um eine Messung zu starten
def write(self,value):
return 0

# Aufgabe 2
#
# Diese Methode soll den Lichtwert auslesen und zurueckgeben.
def get_brightness(self):
return 0

# Aufgabe 2
#
# Diese Methode soll die Entfernung auslesen und zurueckgeben.
def get_distance(self):
return 0

def get_address(self):
return self.address
'''This class is responsible for handling i2c requests to an ultrasonic sensor'''

def __init__(self,address):
self.address = address
# Aufgabe 2
#
# Diese Methode soll ein Datenbyte an den Ultraschallsensor senden um eine Messung zu starten
def write(self,value):
try:
bus.write_byte_data(self.address, 0x00, 0x51)
except:
print "ERROR: Ultrasonic sensor start failed!"
return 0

# Aufgabe 2
#
# Diese Methode soll den Lichtwert auslesen und zurueckgeben.
def get_brightness(self):
try:
light_v = bus.read_byte_data(self.address, 0x01)
except:
print "ERROR: Ultrasonic sensor get brightness failed!"
return light_v

# Aufgabe 2
#
# Diese Methode soll die Entfernung auslesen und zurueckgeben.
def get_distance(self):
try:
range_High_Byte = bus.read_byte_data(self.address, 0x02)
range_Low_Byte = bus.read_byte_data(self.address, 0x03)
dist = (range_High_Byte << 8) + range_Low_Byte
except:
print "ERROR: Ultrasonic sensor get distance failed!"
return dist

def get_address(self):
return self.address

class UltrasonicThread(threading.Thread):
''' Thread-class for holding ultrasonic data '''

# distance to obstacle in cm
distance = 0

# brightness value
brightness = 0

# Aufgabe 4
#
# Hier muss der Thread initialisiert werden.
def __init__(self, address):
return 0

# Aufgabe 4
#
# Schreiben Sie die Messwerte in die lokalen Variablen
def run(self):
while not self.stopped:
continue
def stop(self):
self.stopped = True
''' Thread-class for holding ultrasonic data '''

stop = False

# distance to obstacle in cm
distance = 0

# brightness value
brightness = 0

# Aufgabe 4
#
# Hier muss der Thread initialisiert werden.
def __init__(self, address):
try:
threading.Thread.__init__(self)
time.sleep(0.1)
self.ultrasonic = Ultrasonic(address)
self.setDaemon(True)
self.start()
except:
print "ERROR: Ultrasonic sensor thread init failed!"
return 0

# Aufgabe 4
#
# Schreiben Sie die Messwerte in die lokalen Variablen
def run(self):
while not self.stopped:
distance = self.ultrasonic.get_distance()
brightness = self.ultrasonic.get_brightness()
continue
def stop(self):
self.stopped = True

#################################################################################
# Compass
#################################################################################

class Compass(object):
'''This class is responsible for handling i2c requests to a compass sensor'''
'''This class is responsible for handling i2c requests to a compass sensor'''

def __init__(self,address):
self.address = address
def __init__(self,address):
self.address = address

# Aufgabe 2
#
# Diese Methode soll den Kompasswert auslesen und zurueckgeben.
def get_bearing(self):
b = 0
try:
# Aufgabe 2
#
# Diese Methode soll den Kompasswert auslesen und zurueckgeben.
def get_bearing(self):
b = 0
try:
bear1 = bus.read_byte_data(address, 2)
bear2 = bus.read_byte_data(address, 3)
bear = (bear1 << 8) + bear2
b = bear/10.0
except:
print "Bearing konnte nicht ausgelesen werden!"
return b
print "Bearing konnte nicht ausgelesen werden!"
return b

class CompassThread(threading.Thread):
''' Thread-class for holding compass data '''
''' Thread-class for holding compass data '''

# Compass bearing value
bearing = 0
# Compass bearing value
bearing = 0

# Aufgabe 4
#
# Hier muss der Thread initialisiert werden.
def __init__(self, address):
return 0
# Aufgabe 4
#
# Hier muss der Thread initialisiert werden.
def __init__(self, address):
return 0

# Aufgabe 4
#
# Diese Methode soll den Kompasswert aktuell halten.
def run(self):
while not self.stopped:
continue
# Aufgabe 4
#
# Diese Methode soll den Kompasswert aktuell halten.
def run(self):
while not self.stopped:
continue

def stop(self):
self.stopped = True
def stop(self):
self.stopped = True

#################################################################################
# Infrared
#################################################################################

class Infrared(object):
'''This class is responsible for handling i2c requests to an infrared sensor'''
def __init__(self,address):
self.address = address
# Aufgabe 2
#
# In dieser Methode soll der gemessene Spannungswert des Infrarotsensors ausgelesen werden.
def get_voltage(self):
voltage = 0
try:
voltage = bus.read_byte(self.address)
except:
print "Spannung konnte nicht ausgelesen werden!"
return voltage
# Aufgabe 3
#
# Der Spannungswert soll in einen Distanzwert umgerechnet werden.
def get_distance(self):
# v=(readChannel(0)/1023.0)*3.3
'''This class is responsible for handling i2c requests to an infrared sensor'''
def __init__(self,address):
self.address = address
# Aufgabe 2
#
# In dieser Methode soll der gemessene Spannungswert des Infrarotsensors ausgelesen werden.
def get_voltage(self):
voltage = 0
try:
voltage = bus.read_byte(self.address)
except:
print "Spannung konnte nicht ausgelesen werden!"
return voltage
# Aufgabe 3
#
# Der Spannungswert soll in einen Distanzwert umgerechnet werden.
def get_distance(self):
# v=(readChannel(0)/1023.0)*3.3
v = self.get_voltage()
# interpolation von https://tutorials-raspberrypi.de/wp-content/uploads/gp2y0a02yk-600x455.png
dist = 16.2537 * v**4 - 129.893 * v**3 + 382.268 * v**2 - 512.611 * v + 301.439
return dist
return dist


class InfraredThread(threading.Thread):
''' Thread-class for holding Infrared data '''
''' Thread-class for holding Infrared data '''

# distance to an obstacle in cm
distance = 0
# distance to an obstacle in cm
distance = 0

# length of parking space in cm
parking_space_length = 0
# length of parking space in cm
parking_space_length = 0

# Aufgabe 4
#
# Hier muss der Thread initialisiert werden.
def __init__(self, address, encoder=None):
return 0
# Aufgabe 4
#
# Hier muss der Thread initialisiert werden.
def __init__(self, address, encoder=None):
return 0

def run(self):
while not self.stopped:
read_infrared_value()
calculate_parking_space_length()
def run(self):
while not self.stopped:
read_infrared_value()
calculate_parking_space_length()

# Aufgabe 4
#
# Diese Methode soll den Infrarotwert aktuell halten
def read_infrared_value(self):
return 0
# Aufgabe 4
#
# Diese Methode soll den Infrarotwert aktuell halten
def read_infrared_value(self):
return 0

# Aufgabe 5
#
# Hier soll die Berechnung der Laenge der Parkluecke definiert werden
def calculate_parking_space_length(self):
return 0
# Aufgabe 5
#
# Hier soll die Berechnung der Laenge der Parkluecke definiert werden
def calculate_parking_space_length(self):
return 0

def stop(self):
self.stopped = True
def stop(self):
self.stopped = True

#################################################################################
# Encoder
#################################################################################
class Encoder(object):
''' This class is responsible for handling encoder data '''

# Aufgabe 2
#
# Wieviel cm betraegt ein einzelner Encoder-Schritt?
STEP_LENGTH = 0 # in cm

# number of encoder steps
count = 0

def __init__(self, pin):
self.pin = pin

# Aufgabe 2
#
# Jeder Flankenwechsel muss zur Berechnung der Entfernung gezaehlt werden.
# Definieren Sie alle dazu noetigen Methoden.

# Aufgabe 2
#
# Diese Methode soll die gesamte zurueckgelegte Distanz zurueckgeben.
def get_travelled_dist(self):
return 0
''' This class is responsible for handling encoder data '''

# Aufgabe 2
#
# Wieviel cm betraegt ein einzelner Encoder-Schritt?
STEP_LENGTH = 0 # in cm !!!ONP: to measure the wheel!!!

# number of encoder steps
counter = 0

def __init__(self, pin):
self.pin = pin
GPIO.add_event_detect(encoder_pin, GPIO.BOTH, callback=count, bouncetime=1)

# Aufgabe 2
#
# Jeder Flankenwechsel muss zur Berechnung der Entfernung gezaehlt werden.
# Definieren Sie alle dazu noetigen Methoden.

def count(channel):
global counter
counter = counter + 1
print "Number of impulses" + str(counter)

# Aufgabe 2
#
# Diese Methode soll die gesamte zurueckgelegte Distanz zurueckgeben.
def get_travelled_dist(self):
global counter
global STEP_LENGTH
dist = counter * STEP_LENGTH
return dist

class EncoderThread(threading.Thread):
''' Thread-class for holding speed and distance data of all encoders'''
''' Thread-class for holding speed and distance data of all encoders'''

# current speed.
speed = 0
# current speed.
speed = 0

# currently traversed distance.
distance = 0
# currently traversed distance.
distance = 0

# Aufgabe 4
#
# Hier muss der Thread initialisiert werden.
def __init__(self, encoder):
return 0
# Aufgabe 4
#
# Hier muss der Thread initialisiert werden.
def __init__(self, encoder):
try:
GPIO.setmode(GPIO.BCM)
GPIO.setup(encoder_pin, GPIO.IN)
except:
print "ERROR: Encoder GPIO init failed!"
return 0

def run(self):
while not self.stopped:
get_values()
def run(self):
while not self.stopped:
get_values()

# Aufgabe 4
#
# Diese Methode soll die aktuelle Geschwindigkeit sowie die zurueckgelegte Distanz aktuell halten.
def get_values(self):
return 0
# Aufgabe 4
#
# Diese Methode soll die aktuelle Geschwindigkeit sowie die zurueckgelegte Distanz aktuell halten.
def get_values(self):
return 0


def stop(self):
self.stopped = True
def stop(self):
self.stopped = True

#################################################################################
# Main Thread
@@ -247,23 +288,23 @@ class EncoderThread(threading.Thread):

if __name__ == "__main__":

# The GPIO pin to which the encoder is connected
encoder_pin = 23
# The GPIO pin to which the encoder is connected
encoder_pin = 23

# Aufgabe 1
#
# Tragen Sie die i2c Adressen der Sensoren hier ein
# Aufgabe 1
#
# Tragen Sie die i2c Adressen der Sensoren hier ein

# The i2c addresses of front and rear ultrasound sensors
ultrasonic_front_i2c_address = 0x00;
ultrasonic_rear_i2c_address = 0x00;
# The i2c addresses of front and rear ultrasound sensors
ultrasonic_front_i2c_address = 0x70;
ultrasonic_rear_i2c_address = 0x71;

# The i2c address of the compass sensor
compass_i2c_address = 0x00
# The i2c address of the compass sensor
compass_i2c_address = 0x60

# The i2c address of the infrared sensor
infrared_i2c_address = 0x00
# The i2c address of the infrared sensor
infrared_i2c_address = 0x4f

# Aufgabe 6
#
# Hier sollen saemtlichen Messwerte periodisch auf der Konsole ausgegeben werden.
# Aufgabe 6
#
# Hier sollen saemtlichen Messwerte periodisch auf der Konsole ausgegeben werden.

Loading…
Annulla
Salva