Browse Source

управление двигателями с помощью клавиатуры

master
Ilya_Chis 1 month ago
parent
commit
b477ed001d
  1. 115
      upravlenie.py

115
upravlenie.py

@ -0,0 +1,115 @@
import RPi.GPIO as GPIO
import time
import keyboard
# Настройка пинов
GPIO.setmode(GPIO.BCM)
# Пины для управления моторами
IN1 = 17
IN2 = 27
IN3 = 22
IN4 = 23
# Пины для управления скоростью (PWM)
ENA = 18
ENB = 19
# Настройка пинов как выходов
GPIO.setup(IN1, GPIO.OUT)
GPIO.setup(IN2, GPIO.OUT)
GPIO.setup(IN3, GPIO.OUT)
GPIO.setup(IN4, GPIO.OUT)
GPIO.setup(ENA, GPIO.OUT)
GPIO.setup(ENB, GPIO.OUT)
# Создание ШИМ (PWM) на пинах ENA и ENB с частотой 1000 Гц
pwm_a = GPIO.PWM(ENA, 1000)
pwm_b = GPIO.PWM(ENB, 1000)
# Старт ШИМ с нулевой скоростью (0% скважности)
pwm_a.start(0)
pwm_b.start(0)
# Функции управления
def move_forward(speed):
GPIO.output(IN1, GPIO.HIGH)
GPIO.output(IN2, GPIO.LOW)
GPIO.output(IN3, GPIO.HIGH)
GPIO.output(IN4, GPIO.LOW)
pwm_a.ChangeDutyCycle(speed)
pwm_b.ChangeDutyCycle(speed)
print(f"Moving forward at speed {speed}")
def move_backward(speed):
GPIO.output(IN1, GPIO.LOW)
GPIO.output(IN2, GPIO.HIGH)
GPIO.output(IN3, GPIO.LOW)
GPIO.output(IN4, GPIO.HIGH)
pwm_a.ChangeDutyCycle(speed)
pwm_b.ChangeDutyCycle(speed)
print(f"Moving backward at speed {speed}")
def move_left(speed):
GPIO.output(IN1, GPIO.LOW)
GPIO.output(IN2, GPIO.HIGH)
GPIO.output(IN3, GPIO.HIGH)
GPIO.output(IN4, GPIO.LOW)
pwm_a.ChangeDutyCycle(speed)
pwm_b.ChangeDutyCycle(speed)
print(f"Turning left at speed {speed}")
def move_right(speed):
GPIO.output(IN1, GPIO.HIGH)
GPIO.output(IN2, GPIO.LOW)
GPIO.output(IN3, GPIO.LOW)
GPIO.output(IN4, GPIO.HIGH)
pwm_a.ChangeDutyCycle(speed)
pwm_b.ChangeDutyCycle(speed)
print(f"Turning right at speed {speed}")
def stop():
GPIO.output(IN1, GPIO.LOW)
GPIO.output(IN2, GPIO.LOW)
GPIO.output(IN3, GPIO.LOW)
GPIO.output(IN4, GPIO.LOW)
pwm_a.ChangeDutyCycle(0)
pwm_b.ChangeDutyCycle(0)
print("Stopped")
try:
speed = 50 # Начальная скорость (50% ШИМ)
print("Use W/A/S/D to move and adjust speed, release key to stop")
while True:
# Проверка нажатия клавиш для движения
if keyboard.is_pressed('w'):
move_forward(speed)
elif keyboard.is_pressed('s'):
move_backward(speed)
elif keyboard.is_pressed('a'):
move_left(speed)
elif keyboard.is_pressed('d'):
move_right(speed)
else:
# Если ни одна из клавиш не нажата, остановить моторы
stop()
# Регулировка скорости
if keyboard.is_pressed('q'): # Уменьшение скорости
speed = max(0, speed - 10)
print(f"Speed decreased to {speed}%")
time.sleep(0.1)
elif keyboard.is_pressed('e'): # Увеличение скорости
speed = min(100, speed + 10)
print(f"Speed increased to {speed}%")
time.sleep(0.1)
time.sleep(0.05) # Небольшая задержка для плавного опроса клавиш
except KeyboardInterrupt:
stop() # Остановка моторов при прерывании программы
finally:
pwm_a.stop()
pwm_b.stop()
GPIO.cleanup() # Очистка конфигурации GPIO
Loading…
Cancel
Save