iRIDE Code
unknown
plain_text
10 months ago
3.2 kB
5
Indexable
import RPi.GPIO as GPIO
import time
import sys
sys.path.append('/home/domi/myenv/lib/python3.11/site-packages')
import pyaudio
import wave
import speech_recognition as sr
import gpiozero as gpz
from gpiozero import Robot
robot = Robot(left=(7, 8), right=(9, 10))
import threading
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
TRIG_FRONT = 4
ECHO_FRONT = 27
LINE_SENSOR = 25
def stop():
robot.stop()
def forward():
robot.forward()
def backward(speed=50):
robot.backward()
def turn_left(speed=50):
robot.left()
def turn_right(speed=50):
robot.right()
def get_distance(trig, echo):
GPIO.setup(trig, GPIO.OUT)
GPIO.setup(echo, GPIO.IN)
GPIO.output(trig, GPIO.LOW)
time.sleep(0.02)
GPIO.output(trig, GPIO.HIGH)
time.sleep(0.00001)
GPIO.output(trig, GPIO.LOW)
timeout = time.time() + 0.01
start_time = None
stop_time = None
while GPIO.input(echo) == 0 and time.time() < timeout:
start_time = time.time()
timeout = time.time() + 0.01
while GPIO.input(echo) == 1 and time.time() < timeout:
stop_time = time.time()
if start_time and stop_time:
elapsed = stop_time - start_time
distance = (elapsed * 34300) / 2
if distance > 400 or distance <= 2:
return None
return distance
else:
return None
def check():
p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
info = p.get_device_info_by_index(i)
print(f"Device {i}: {info['name']}")
p.terminate()
def listen_for_command():
recognizer = sr.Recognizer()
mic = sr.Microphone()
try:
with mic as source:
recognizer.adjust_for_ambient_noise(source)
audio = recognizer.listen(source)
command = recognizer.recognize_google(audio, language="en-US").lower()
return command
except sr.UnknownValueError:
return None
except sr.RequestError:
return None
def listen_for_voice_command():
while True:
command = listen_for_command()
if command:
if "stop" in command:
robot.stop()
elif "start" in command:
robot.forward()
elif "left" in command:
robot.left()
time.sleep(0.5)
robot.forward()
elif "right" in command:
robot.right()
time.sleep(0.5)
robot.forward()
elif "backward" in command:
robot.backward()
time.sleep(0.5)
robot.stop()
def important():
try:
voice_thread = threading.Thread(target=listen_for_voice_command)
voice_thread.daemon = True
voice_thread.start()
while True:
distance = get_distance(TRIG_FRONT, ECHO_FRONT)
if distance is not None and distance < 20:
turn_right()
time.sleep(0.5)
robot.forward()
else:
robot.forward()
except KeyboardInterrupt:
GPIO.cleanup()
if __name__ == "__main__":
check()
important()Editor is loading...
Leave a Comment