ESP32 „LoRa“valdomas drono variklis: 10 žingsnių
ESP32 „LoRa“valdomas drono variklis: 10 žingsnių
Anonim
Image
Image
Demonstracija
Demonstracija

Šiandien mes aptariame bepiločius variklius, dažnai vadinamus „bešepetėliais“varikliais. Dėl savo galios ir didelio sukimosi jie plačiai naudojami aerodinaminiame modeliavime, daugiausia dronuose. Išmoksime valdyti bešepetėlinį variklį naudojant ESC ir ESP32, atlikti analoginį ESC įjungimą naudojant vidinį LED_PWM valdiklį ir naudoti potenciometrą variklio greičiui pakeisti.

1 žingsnis: demonstracija

2 žingsnis: naudojami ištekliai

Naudojami ištekliai
Naudojami ištekliai
  • Džemperiai prijungimui
  • „Wi -Fi LoRa 32“
  • ESC-30A
  • Variklis be šepetėlių A2212 / 13t
  • USB kabelis
  • Potenciometras valdymui
  • Protoboard
  • Maitinimo šaltinis

3 žingsnis: „Wifi LoRa 32“- „Pinout“

„Wi-Fi LoRa 32“- „Pinout“
„Wi-Fi LoRa 32“- „Pinout“

4 žingsnis: ESC (elektroninis greičio valdymas)

ESC (elektroninis greičio valdymas)
ESC (elektroninis greičio valdymas)
ESC (elektroninis greičio valdymas)
ESC (elektroninis greičio valdymas)
  • Elektroninis greičio reguliatorius
  • Elektroninė grandinė, skirta valdyti elektros variklio greitį.
  • Valdomas naudojant standartinį 50 Hz PWM servo valdiklį.
  • Jis keičia lauko tranzistorių (FET) tinklo perjungimo greitį. Reguliuojant tranzistorių perjungimo dažnį, keičiamas variklio greitis. Variklio greitis keičiamas reguliuojant tiekiamų srovės impulsų laiką pagal įvairias variklio apvijas.
  • Specifikacijos:

Išėjimo srovė: 30A nuolat, 40A 10 sekundžių

5 žingsnis: ESC elektroninis greičio valdymas (ESC)

ESC elektroninis greičio valdymas (ESC)
ESC elektroninis greičio valdymas (ESC)

6 žingsnis: PWM servo variklio valdymas

PWM servo variklio valdymas
PWM servo variklio valdymas

Mes sukursime PWM servo sistemą, kuri veiktų pagal ESC duomenų įvestį, nukreipdama GPIO13 LED_PWM kanalą 0, ir moduliacijai valdyti naudosime potenciometrą.

Norėdami užfiksuoti, kaip įtampos daliklį naudosime 10k potenciometrą. Fiksavimas bus atliekamas kanale ADC2_5, prieinamu GPIO12.

7 veiksmas: analoginis fiksavimas

Analoginis fiksavimas
Analoginis fiksavimas
Analoginis fiksavimas
Analoginis fiksavimas

Konvertavimas iš analoginio į skaitmeninį

AD vertes konvertuosime į PWM.

Servo PWM yra 50 Hz, taigi pulso periodas yra 1/50 = 0,02 sekundės arba 20 milisekundžių.

Turime veikti mažiausiai nuo 1 milisekundės iki 2 milisekundžių.

Kai PWM yra 4095, impulso plotis yra 20 milisekundžių, tai reiškia, kad turėtume pasiekti maksimalų 4095/10, kad pasiektume 2 milisekundes, taigi PWM turėtų gauti 410 *.

Ir po mažiausiai 1 milisekundės, taigi 409/2 (arba 4095/20), PWM turėtų gauti 205 *.

* Reikšmės turi būti sveikieji skaičiai

8 žingsnis: grandinė - jungtys

Grandinė - jungtys
Grandinė - jungtys

9 veiksmas: šaltinio kodas

Antraštė

#include // Necessário apenas para or Arduino 1.6.5 e posterior #include "SSD1306.h" // o mesmo que #include "SSD1306Wire.h" // OLED_SDA -GPIO4 // OLED_SCL -GPIO15 // OLED_RST - GPIO16 #define SDA 4 #define SCL 15 #define RST 16 SSD1306 ekranas (0x3c, SDA, SCL, RST); // Instanciando e ajustando os pinos do objeto "display"

Kintamieji

const int freq = 50; const int kanalas_A = 0; const int resolucao = 12; const int pin_Atuacao_A = 13; const int Leitura_A = 12; int potencia = 0; int leitura = 0; int ciclo_A = 0;

Sąranka

void setup () {pinMode (pin_Atuacao_A, OUTPUT); ledcSetup (canal_A, freq, resolucao); ledcAttachPin (pin_Atuacao_A, canal_A); ledcWrite (canal_A, ciclo_A); display.init (); display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // valdymas arba alinhamento esquerda display.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta a fonte para Arial 16 display.setFont (ArialMT_Plain_16); }

Kilpa

tuštumos kilpa () {leitura = analogRead (Leitura_A); ciclo_A = žemėlapis (leitura, 0, 4095, 205, 410); ledcWrite (canal_A, ciclo_A); potencia = žemėlapis (leitura, 0, 4095, 0, 100); display.clear (); // limpa o buffer do display.drawString (0, 0, String ("AD:")); display.drawString (32, 0, String (leitura)); display.drawString (0, 18, eilutė ("PWM:")); display.drawString (48, 18, String (ciclo_A)); display.drawString (0, 36, eilutė ("Potência:")); display.drawString (72, 36, String (potencia)); display.drawString (98, 36, String ("%")); display.display (); // mostra be ekrano}

10 veiksmas: failai

Atsisiųskite failus

AŠ NE

PDF