iRIDE Code

 avatar
unknown
plain_text
4 months ago
2.9 kB
4
Indexable
import RPi.GPIO as GPIO
import time
import sys
import threading
import speech_recognition as sr
from gpiozero import Robot

robot = Robot(left=(7, 8), right=(9, 10))

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

TRIG_FRONT = 4
ECHO_FRONT = 27

def stop():
    robot.stop()

def forward():
    robot.forward()

def backward():
    robot.backward()

def turn_left():
    robot.left()

def turn_right():
    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)

    start_time, stop_time = None, None
    timeout = time.time() + 0.02

    while GPIO.input(echo) == 0 and time.time() < timeout:
        start_time = time.time()

    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
        return distance if 2 <= distance <= 400 else None
    return None

def listen_for_command():
    recognizer = sr.Recognizer()
    mic = sr.Microphone()

    try:
        with mic as source:
            print("Listening for commands...")
            recognizer.adjust_for_ambient_noise(source)
            audio = recognizer.listen(source)
            command = recognizer.recognize_google(audio, language="en-US").lower()
            print(f"Command received: {command}")
            return command
    except sr.UnknownValueError:
        print("Command not understood.")
        return None
    except sr.RequestError:
        print("Voice recognition service error.")
        return None

def listen_for_voice_command():
    while True:
        command = listen_for_command()
        if command:
            if "stop" in command:
                stop()
                print("Stopped.")
            elif "start" in command:
                forward()
                print("Moving forward.")
            elif "left" in command:
                turn_left()
                print("Turning left.")
            elif "right" in command:
                turn_right()
                print("Turning right.")

def important():
    try:
        while True:
            distance = get_distance(TRIG_FRONT, ECHO_FRONT)
            print(f"Distance: {distance} cm")

            if distance is not None and distance < 20:
                stop()
                print("Obstacle detected. Avoiding...")
                turn_right()
                time.sleep(0.75)
                stop()
            else:
                forward()
                print("Moving forward.")

    except KeyboardInterrupt:
        print("Stopping robot.")
        GPIO.cleanup()

if __name__ == "__main__":
    voice_thread = threading.Thread(target=listen_for_voice_command, daemon=True)
    voice_thread.start()
    important()
Editor is loading...
Leave a Comment