Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:jan.vaduva:sconstantin2203 [2026/05/24 01:43]
sconstantin2203 [Software Design]
pm:prj2026:jan.vaduva:sconstantin2203 [2026/05/24 02:43] (current)
sconstantin2203 [Rezultate Obţinute]
Line 41: Line 41:
 ===== Software Design ===== ===== Software Design =====
  
-    ​Up until now I've implemented a driver for the SPI data transfer of the accelerometer and gyroscope data from the MPU6500. That data would be further processed by multiplying it by the scalar for the chosen resolution. The scaled data would further be polled at a bigger frequency than the control loop, counting how many readings would happen between each loop and then dividing the summed data by that number, achieving an oversampling effect to remove noise from the data. A lowpass filter would be applied over both accelerometer and gyroscope data to remove the low frequency noise create by mechanical movements. What remains is clean data that is fused into a single attitude measurement with a complementary filter. At startup, the sensor goes through a calibration process in which the average of multiple stationary readings is taken and saved as a stationary error which is later subtracted from each reading.+Up until now I've implemented a driver for the SPI data transfer of the accelerometer and gyroscope data from the MPU6500. That data would be further processed by multiplying it by the scalar for the chosen resolution. The scaled data would further be polled at a bigger frequency than the control loop, counting how many readings would happen between each loop and then dividing the summed data by that number, achieving an oversampling effect to remove noise from the data. A lowpass filter would be applied over both accelerometer and gyroscope data to remove the low frequency noise create by mechanical movements. What remains is clean data that is fused into a single attitude measurement with a complementary filter. At startup, the sensor goes through a calibration process in which the average of multiple stationary readings is taken and saved as a stationary error which is later subtracted from each reading.
  
 UAVs should handle unpredictable disruptions,​ the most unpredictable of which can be the pilot so I wrote a function to interpolate the current throttle to the desired throttle to soften quick changes made by the pilot. Controlling the drone is easy; the remote is made of a direction knob which tilts the drone in the desired direction and a throttle knob which tells the motors how fast they should spin. The remote is a web interface served by the microcontroller if the browser is connected to the microcontroller'​s local network. Websockets transmit the data from the remote to the microcontroller. UAVs should handle unpredictable disruptions,​ the most unpredictable of which can be the pilot so I wrote a function to interpolate the current throttle to the desired throttle to soften quick changes made by the pilot. Controlling the drone is easy; the remote is made of a direction knob which tilts the drone in the desired direction and a throttle knob which tells the motors how fast they should spin. The remote is a web interface served by the microcontroller if the browser is connected to the microcontroller'​s local network. Websockets transmit the data from the remote to the microcontroller.
Line 48: Line 48:
  
 Motor mixing is done after all the PID calculations are done, resulting in the motor output which is based on the frequency at which the control loop operates. The motor output is delivered via PWM with the ESP32 LED Control functionality. Motor mixing is done after all the PID calculations are done, resulting in the motor output which is based on the frequency at which the control loop operates. The motor output is delivered via PWM with the ESP32 LED Control functionality.
-===== Rezultate Obţinute ===== 
  
-<note tip> +The libraries I used for this project are the following:​\\ ​ 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+-Arduino.h - I used it for generic functions and to keep the code simple as I wanted to avoid the RTOS of the ESP32\\ ​ 
-</​note>​+-SPI.h - the sensor readings are done using this library, I used it for simplicity and ease of use\\  
 +-WiFi.h - used for the WiFi stack necessary for the web remote\\  
 +-ESPAsyncWebServer.h - used to host the web remote interface\\  
 +-ESPmDNS.h - used to define a text address for the web remote so I wouldn'​t have to type the ip of the ESP32 each time\\  
 + 
 +The structure of the project: \\  
 +-main.cpp - web server functionalities,​ control loop \\  
 +-PID.cpp - separate PID class and functionalities \\  
 +--PID.h \\  
 +-MPU6500.cpp - separate sensor SPI readings from the main code\\  
 +--MPU6500.h 
 +===== Rezultate Obţinute =====
  
 +Video demonstrativ:​ https://​www.youtube.com/​watch?​v=J08_xca9AOc
 ===== Concluzii ===== ===== Concluzii =====
  
pm/prj2026/jan.vaduva/sconstantin2203.1779576192.txt.gz · Last modified: 2026/05/24 01:43 by sconstantin2203
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0