#include <Servo.h>
Servo myServo;
const int trigPin = 9, echoPin = 10, motorPin = 3;
void setup() {
Serial.begin(9600);
myServo.attach(11);
pinMode(motorPin, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// Измеряем расстояние
digitalWrite(trigPin, LOW); delayMicroseconds(2);
digitalWrite(trigPin, HIGH); delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
// Отправляем цифру в компьютер (для проверки)
Serial.println(distance);
// ЛОГИКА ДРОНА
if (distance > 0 && distance < 20) {
myServo.write(90); // Препятствие близко: поворот серво
digitalWrite(motorPin, LOW); // Выключить моторчик
} else {
myServo.write(0); // Путь свободен: вернуть серво в 0
digitalWrite(motorPin, HIGH); // Включить моторчик
}
delay(100); // Пауза 100 миллисекунд
}
pip install pyserial
import time
import serial
# --- НАСТРОЙКА И ПОДКЛЮЧЕНИЕ ---
# Замените 'COM3' на порт вашей Arduino (например, 'COM4' или '/dev/ttyUSB0')
PORT = 'COM3'
BAUD_RATE = 9600
try:
ser = serial.Serial(PORT, BAUD_RATE, timeout=0.1)
print(f" Успешно подключено к {PORT}. Дрон запущен!")
except Exception as e:
print(f"❌ Ошибка подключения к {PORT}! Проверьте кабель. Ошибка: {e}")
exit()
# --- ОСНОВНОЙ ЦИКЛ УПРАВЛЕНИЯ ---
while True:
# Если от Arduino пришли данные
if ser.in_waiting > 0:
try:
# Читаем строку, очищаем от лишних символов и переводим в текст
raw_data = ser.readline().decode('utf-8').strip()
# Проверяем, что пришли именно цифры (сантиметры)
if raw_data.isdigit():
distance = int(raw_data)
print(f"Дистанция: {distance} см", end=" -> ")
# --- ПРОСТАЯ АВТО-ЛОГИКА ДРОНА ---
if distance < 20:
print("⚠️ ПРЕПЯТСТВИЕ! Поворот руля + СТОП мотор.")
ser.write(b'1') # Команда 1: повернуть сервопривод
ser.write(b'M') # Команда M: заглушить моторчик
else:
print("Путь свободен. Летим прямо.")
ser.write(b'0') # Команда 0: вернуть серво прямо
except Exception as err:
# Игнорируем случайные сбои при передаче данных
pass
# Небольшая пауза, чтобы не перегружать процессор компьютера
time.sleep(0.05)