I am developing robot for obstacle avoidance system. Now I have mounted 3 ultrasonic on left and 3 on right.
For programming we are using Python and Raspberry PI.
Basically, what I am trying to do is:
- On one script - measure distance for all ultrasonic sensor and put in array.
- Pass those Values back to main script
- Based on ultrasonic distance manuever robot.
Code: Select all
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
TRIG = 7
ECHOF = 8
ECHOFL = 10
ECHOFR = 11
ECHOL = 12
ECHOR = 13
ECHOBL = 15
ECHOBR = 19
ECHOB = 21
sensors = [ECHOFL, ECHOFR, ECHOL, ECHOR, ECHOBL, ECHOBR, ECHOB, ECHOF]
sensors_len = len(sensors)
distances = []
GPIO.setup(ECHOF, GPIO.IN)
GPIO.setup(ECHOFL, GPIO.IN)
GPIO.setup(ECHOFR, GPIO.IN)
GPIO.setup(ECHOL, GPIO.IN)
GPIO.setup(ECHOR, GPIO.IN)
GPIO.setup(ECHOBL, GPIO.IN)
GPIO.setup(ECHOBR, GPIO.IN)
GPIO.setup(ECHOB, GPIO.IN)
GPIO.setup(TRIG, GPIO.OUT)
GPIO.output(TRIG, 0)
print("Setting up")
time.sleep(0.8)
print("| F Left | | FRight | | Left | | Right | | BLeft | | B Right | | Back | Front ")
print("_________________________________________________________________________________________________________")
def Measurement ():
time.sleep(0.8)
VAR = 1
while VAR ==1:
for i in range(0, 7):
GPIO.output(TRIG, 1)
time.sleep(0.00001)
GPIO.output(TRIG, 0)
while GPIO.input(sensors[i])== 0:
START = time.time()
while GPIO.input(sensors[i])==1:
END = time.time()
DURATION = END-START
DISTANCE = DURATION*17150
DISTANCE = round(DISTANCE, 2)
DISTANCE = format(DISTANCE, '07')
distances.append(DISTANCE)
distances.append(' ')
print(distances)
distances = []
time.sleep(0.3)
return distances
GPIO.cleanup()
Code: Select all
import wiringpi
# Motor speeds for this library are specified as numbers
# between -MAX_SPEED and MAX_SPEED, inclusive.
_max_speed = 480 # 19.2 MHz / 2 / 480 = 20 kHz
MAX_SPEED = _max_speed
io_initialized = False
def io_init():
global io_initialized
if io_initialized:
return
wiringpi.wiringPiSetupGpio()
wiringpi.pinMode(32, wiringpi.GPIO.PWM_OUTPUT)
wiringpi.pinMode(33, wiringpi.GPIO.PWM_OUTPUT)
wiringpi.pwmSetMode(wiringpi.GPIO.PWM_MODE_MS)
wiringpi.pwmSetRange(MAX_SPEED)
wiringpi.pwmSetClock(2)
wiringpi.pinMode(35, wiringpi.GPIO.OUTPUT)
wiringpi.pinMode(31, wiringpi.GPIO.OUTPUT)
io_initialized = True
class Motor(object):
MAX_SPEED = _max_speed
def __init__(self, pwm_pin, dir_pin):
self.pwm_pin = pwm_pin
self.dir_pin = dir_pin
def setSpeed(self, speed):
if speed < 0:
speed = -speed
dir_value = 1
else:
dir_value = 0
if speed > MAX_SPEED:
speed = MAX_SPEED
io_init()
wiringpi.digitalWrite(self.dir_pin, dir_value)
wiringpi.pwmWrite(self.pwm_pin, speed)
class Motors(object):
MAX_SPEED = _max_speed
def __init__(self):
self.motor1 = Motor(12, 5)
self.motor2 = Motor(13, 6)
def setSpeeds(self, m1_speed, m2_speed):
self.motor1.setSpeed(m1_speed)
self.motor2.setSpeed(m2_speed)
motors = Motors()
Code: Select all
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
from pololu_drv8835_rpi import motors, MAX_SPEED
from distance import Measurement
##SENSOR SETUP
#PINS
TRIG = 7
ECHOF = 8
ECHOFL = 10
ECHOFR = 11
ECHOL = 12
ECHOR = 13
ECHOBL = 15
ECHOBR = 19
ECHOB = 21
#SENSOR ARRAY
sensors = [ECHOFL, ECHOL, ECHOBL, ECHOB, ECHOBR, ECHOF, ECHOFR, ECHOR]
sensors_len = len(sensors)
distances = []
distancesAVG1 = []
distancesAVG2 = []
distancesAVG3 = []
#GPIOs
GPIO.setup(ECHOF, GPIO.IN)
GPIO.setup(ECHOFL, GPIO.IN)
GPIO.setup(ECHOFR, GPIO.IN)
GPIO.setup(ECHOL, GPIO.IN)
GPIO.setup(ECHOR, GPIO.IN)
GPIO.setup(ECHOBL, GPIO.IN)
GPIO.setup(ECHOBR, GPIO.IN)
GPIO.setup(ECHOB, GPIO.IN)
GPIO.setup(TRIG, GPIO.OUT)
def turnRight():
print "Turn Right"
motors.setSpeeds(MAX_SPEED, rspeed)
def turnLeft():
print "Turn Left"
motors.setSpeeds(lspeed, MAX_SPEED)
def Forward():
print "Forward"
motors.setSpeeds(MAX_SPEED, MAX_SPEED)
def Reverse():
print "Reverse"
motors.setSpeeds(Blspeed, Brspeed)
def Stop():
print "Stop"
motors.setSpeeds(0, 0)
try:
# Start moving forward
Forward()
while True: # Main Loop