iRIDE Code

 avatar
unknown
plain_text
4 months ago
3.2 kB
4
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