Projekt drona wyścigowego z czujnikiem odległości

Typ_projektu
Arduino
Zdjecie główne
Krótki opis projektu

W ramach kursu technik mikroprocesorowych, naszym celem było zaprojektowanie i zbudowanie drona wyścigowego FPV (First Person View) z dodatkowym modułem czujnika odległości. Projekt miał na celu nie tylko stworzenie działającego drona, ale również zintegrowanie zaawansowanych komponentów mikroprocesorowych, takich jak Arduino Uno i czujnik TMF8701, co pozwoliło na pomiary odległości z dużą precyzją.

Niezbędne elementy
  •     Arduino Uno
  •     Czujnik TMF8701
  •     Silniki bezszczotkowe: 4 sztuki.
  •     ESC 4 in 1 i FC: Elektroniczne kontrolery prędkości i kontroler lotu.
  •     Kondensator: 1000 µF.
  •     Rama: Podstawa konstrukcyjna drona.
  •     Akumulator LiPo 4S: Zasilanie drona.
  •     Odbiornik: Do komunikacji z kontrolerem.
  •     Śmigła: Do generowania siły nośnej.
  •     Inne elementy: Śrubki, taśma izolacyjna, rurki termokurczliwe, kable 25 mm², trytytki, paski rzepowe.
Opis projektu

Autorzy: Cyprian Stojek, Piotr Jakubczyk

Wprowadzenie

W ramach kursu technik mikroprocesorowych, naszym celem było zaprojektowanie i zbudowanie drona wyścigowego FPV (First Person View) z dodatkowym modułem czujnika odległości. Projekt miał na celu nie tylko stworzenie działającego drona, ale również zintegrowanie zaawansowanych komponentów mikroprocesorowych, takich jak Arduino Uno i czujnik TMF8701, co pozwoliło na pomiary odległości z dużą precyzją.

Cele projektu

    Zaprojektowanie i złożenie drona FPV:

        Wybór odpowiednich podzespołów.

        Montaż mechaniczny i elektryczny drona.

    Zaprogramowanie i zintegrowanie czujnika odległości:

        Połączenie czujnika TMF8701 z Arduino Uno.

        Kalibracja i konfiguracja czujnika do pomiarów odległości.

Podzespoły

Do budowy naszego drona wybraliśmy następujące komponenty:

    Silniki bezszczotkowe: 4 sztuki.

    ESC 4 in 1 i FC: Elektroniczne kontrolery prędkości i kontroler lotu.

    Kondensator: 1000 µF.

    Rama: Podstawa konstrukcyjna drona.

    Akumulator LiPo 4S: Zasilanie drona.

    Odbiornik: Do komunikacji z kontrolerem.

    Śmigła: Do generowania siły nośnej.

    Inne elementy: Śrubki, taśma izolacyjna, rurki termokurczliwe, kable 25 mm², trytytki, paski rzepowe.

Komponenty Mikroprocesorowe

    Arduino Uno / Raspberry Pi 4B: Mikroprocesory do obsługi czujnika i sterowania dronem.

    Czujnik TMF8701: Moduł Fermion z czujnikiem odległości time-of-flight (ToF), mierzący odległość na podstawie różnicy czasu między impulsami świetlnymi. Czujnik działa w dwóch trybach: zbliżeniowym (1-10 cm) i zasięgu (10-60 cm).

Kalibracja i konfiguracja czujnika TMF8701

Podłączenie czujnika do mikrokontrolera odbyło się przez interfejs I2C. Inicjalizacja czujnika obejmowała uruchomienie komunikacji szeregowej, próby połączenia z czujnikiem, pobranie i zapisanie danych kalibracyjnych oraz rozpoczęcie pomiarów. Proces ten umożliwił regularny odczyt i wyświetlanie zmierzonej odległości w milimetrach.

Plany na przyszłość

W przyszłości planujemy dokończyć kalibrację stabilizacji drona i opracować metodę sterowania dronem za pomocą pilota. Naszym ambitnym celem jest umożliwienie dronowi wykonywania zaawansowanych manewrów, takich jak backflip.

Umiejętności zdobyte podczas projektu

Praca nad projektem drona wyścigowego z czujnikiem odległości pozwoliła nam na zdobycie obszernej wiedzy w zakresie:

    Budowy dronów FPV.

    Obsługi bibliotek i interfejsów czujników.

    Lutowania.

    Rozumienia schematów elektronicznych.

    Integracji modułów mikroprocesorowych.

    Kalibracji i algorytmów stabilizacji lotów.

    Rozwiązywania problemów i optymalizacji działania drona.

Podsumowanie

Projekt drona wyścigowego z czujnikiem odległości był ambitnym przedsięwzięciem, które wymagało od nas dużego zaangażowania i precyzyjnego podejścia do każdego etapu pracy. Dzięki temu projektowi zdobyliśmy cenne doświadczenie, które z pewnością wykorzystamy w przyszłych projektach inżynierskich.

Dziękujemy za uwagę!

 

Cyprian Stojek, Piotr Jakubczyk

Zdjęcia
kod programu
/*!
 * @file getDistance.ino
 * @brief Get measurement data by PROXIMITY and DISTANCE hybrid mode.
 * @note: TMF8801 only suport one mode, PROXIMITY and DISTANCE hybrid mode.
 * *
 * Ranging mode configuration table: 
 * --------------------------------------------------------------------------------|
 * |  Type     |   suport ranging mode     |  ranging ranges |  Accuracy           |
 * |---------------------------------------|-----------------|---------------------|
 * |  TMF8801  | PROXIMITY and DISTANCE    |                 |  20~100mm: +/-15mm  |
 * |           |  hybrid mode(only one)    |    20~240cm     |  100~200mm: +/-10mm |
 * |           |                           |                 |   >=200: +/-%5      |
 * |---------------------------------------|-----------------|---------------------|
 * |           |     PROXIMITY mode        |    0~10cm       |                     |
 * |           |---------------------------|-----------------|   >=200: +/-%5      |
 * |  TMF8701  |     DISTANCE mode         |    10~60cm      |  100~200mm: +/-10mm |
 * |           |---------------------------|-----------------|                     | 
 * |           | PROXIMITY and DISTANCE    |    0~60cm       |                     |
 * |           |      hybrid mode          |                 |                     |
 * |---------------------------------------|-----------------|----------------------
 * *
 * @n hardware conneted table:
 * ------------------------------------------
 * |  TMF8x01  |            MCU              |
 * |-----------------------------------------|
 * |    I2C    |       I2C Interface         |
 * |-----------------------------------------|
 * |    EN     |   not connected, floating   |
 * |-----------------------------------------|
 * |    INT    |   not connected, floating   |
 * |-----------------------------------------|
 * |    PIN0   |   not connected, floating   |
 * |-----------------------------------------|
 * |    PIN1   |    not connected, floating  |
 * |-----------------------------------------|
 *
 * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license     The MIT License (MIT)
 * @author [Arya](xue.peng@dfrobot.com)
 * @version  V1.0
 * @data  2021-03-26
 * @url https://github.com/DFRobot/DFRobot_TMF8x01
 */

#include "DFRobot_TMF8x01.h"

#define EN       -1                      //EN pin of of TMF8x01 module is floating, not used in this demo
#define INT      -1                      //INT pin of of TMF8x01 module is floating, not used in this demo

DFRobot_TMF8801 tof(/*enPin =*/EN,/*intPin=*/INT);
//DFRobot_TMF8701 tof(/*enPin =*/EN,/*intPin=*/INT);

uint8_t caliDataBuf[14] = {0x41,0x57,0x01,0xFD,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04};//The 14 bytes calibration data which you can get by calibration.ino demo.
void setup() {
  
  Serial.begin(9600);                                                        //Serial Initialization
  while(!Serial){                                                              //Wait for serial port to connect. Needed for native USB port only
  }

  Serial.print("Initialization ranging sensor TMF8x01......");
  while(tof.begin() != 0){                                                 //Initialization sensor,sucess return 0, fail return -1
      Serial.println("failed.");
      delay(1000);
  }
  Serial.println("done.");

  Serial.print("Software Version: ");
  Serial.println(tof.getSoftwareVersion());
  Serial.print("Unique ID: ");
  Serial.println(tof.getUniqueID(),HEX);
  Serial.print("Model: ");
  Serial.println(tof.getSensorModel());

  tof.setCalibrationData(caliDataBuf, sizeof(caliDataBuf));                //Set calibration data.

/**
 * @brief Config measurement params to enable measurement. Need to call stopMeasurement to stop ranging action.
 * @param cailbMode: Is an enumerated variable of eCalibModeConfig_t, which is to config measurement cailibration mode.
 * @n     eModeNoCalib  :          Measuring without any calibration data.
 * @n     eModeCalib    :          Measuring with calibration data.
 * @n     eModeCalibAndAlgoState : Measuring with calibration and algorithm state.
 * @param disMode : the ranging mode of TMF8701 sensor.(this mode only TMF8701 support)
 * @n     ePROXIMITY: Raing in PROXIMITY mode,ranging range 0~10cm
 * @n     eDISTANCE: Raing in distance mode,ranging range 10~60cm
 * @n     eCOMBINE:  Raing in PROXIMITY and DISTANCE hybrid mode,ranging range 0~60cm
 */
  tof.startMeasurement(/*cailbMode =*/tof.eModeCalib);                 //Enable measuring with Calibration data.
  //tof.startMeasurement(/*cailbMode =*/tof.eModeCalib, /*disMode =*/tof.ePROXIMITY);      //only support TMF8701
}

void loop() {
  if (tof.isDataReady()) {                                                 //Is check measuring data vaild, if vaild that print measurement data to USB Serial COM.
      Serial.print("Distance = ");
      Serial.print(tof.getDistance_mm());                                  //Print measurement data to USB Serial COM, unit mm, in eCOMBINE mode.
      Serial.println(" mm");
  }
}
Pliki_projektu
Youtube
Tagi
drone fpv distance arduino lmao