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ą.
- 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.
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
/*!
* @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");
}
}