iRIDE Code
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