Загрузка данных


#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)