Arduino Micro Quadcopter: 6 kroków

Arduino Micro Quadcopter: 6 kroków

Spisu treści:

Anonim

(ONGOING Project, obecnie trzeba lutować obwód)

Jest to oparty na technologii Arduino, drukowany mikroprocesorem 3D projekt dla silników DC o średnicy 8,5 mm. Jeśli jednak masz jakieś doświadczenie (lub masz tylko godzinę wolnego czasu), możesz dostosować projekt do silników o różnych rozmiarach.

Robię to w czasie wolnym, podczas gdy studiuję na uniwersytecie, więc myślę, że ukończenie tego zajmie trochę czasu (zbliżają się egzaminy!).

Postanowiłem kontrolować Quadkoptera przez Bluetooth za pomocą telefonu / tabletu z Androidem. W przyszłości mogę nieco przeprojektować, aby kontrolować go za pomocą Wi-Fi lub komunikacji radiowej. Piszę i publikuję aplikację na Androida do sterowania za pomocą bluetooth.

Więc zacznijmy to!

P.S. Robot jest dedykowany dla M.O.N.T.E. (Mobilny eliminator neutralizacji dookólnej i zakończenia) zabójczy robot z Teoria wielkiego podrywu: D

Kieszonkowe dzieci:

Krok 1: Rama i tworzywo sztuczne

Chciałem, aby rama była lekka i mocna, dlatego postanowiłem użyć drukarki 3D. To także uratowało mi mnóstwo czasu. Którą drukarkę należy użyć, zostawiam Tobie, ponieważ sama nie jestem właścicielem drukarki 3D i nie korzystam z drukarki na Uniwersytecie. Całkowita waga projektu wynosiła około 10–15 g (Uniwersytet nie miał żadnych wag…), ale będzie się różnić w zależności od drukarki i plastiku

Do projektowania użyłem darmowego narzędzia do projektowania stron internetowych TinkerCAD, które jest prawdopodobnie najlepszym narzędziem do projektowania dla początkujących lub mniejszych projektów.

Dodałem tutaj pliki, abyś mógł je od razu wydrukować. Jeśli jednak chcesz spojrzeć na projekt ze wszystkich stron, odwiedź Thingiverse. Podobnie, możesz odwiedzić TinkerCAD, aby zmodyfikować mój poprzedni projekt tak, jak lubisz (zmień nazwę Quadkoptera?).

Dla pojedynczego quadkoptera musisz wydrukować jeden Quadcopter_bottom_3.stl i jeden Quadcopter_top_2.stl. Próbowałem drukować wszystko sam i zauważyłem, że drukarka, którą miałem, nie drukowała bardzo dobrze śrub (nie mogłem dopasować śrub w otworach), więc nawet nie sugeruję ich drukowania … Oczywiście możesz spróbować tak też dodam Quadcopter_screw_2.stl jeśli jesteś ciekawy … Przeprojektowałem dolną część, abyś mógł trzymać się w górnej części, a potem po prostu użyć plastikowych opasek, aby trzymać wszystko razem.

Krok 2: Reszta części + cena

Mikrokontroler

Do tego Micro Quadcopter potrzebujemy niewielkiej płytki chip / mikrokontrolera. Tania opcja to wykorzystanie Arduino Nano, które z Chin kosztuje około 1-2 GBP. Dodatkowo, aby obniżyć wagę, alternatywą może być Arduino Beetle lub Arduino USB chip, który jest chińską kopią oryginalnego Beetle (tańsze, działa (testowane) w ten sam sposób, a złącza są łatwiejsze do lutowania). Możesz również skorzystać z tego samouczka, aby zaprogramować nagie chipy ATMEL ATmega328 / 168, które możesz uzyskać za darmo ze strony ATMEL (Jeśli jesteś uczniem, przejdź do Atmel -> próbki -> zamów próbkę) lub ebay w inny sposób. Jeśli chodzi o prototypowanie, użyję Arduino Nano, ponieważ jest to łatwiejsze do rozwiązania. Myślę, że następnym etapem będzie użycie nagiego metalowego układu Atmel lub zajrzenie do Arduino Beetle BLE, ponieważ w niektórych miejscach można je również znaleźć tanio, jednak mają one tylko wyjście 2xPWM, więc może być konieczne użycie przesuwnika rejestru. Waga każdego układu różni się w zależności od mikrokontrolera: Arduino Micro ~ 13g, Arduino Beetle ~ 5g, goły chip + kryształ ~ 4-5g (?).

Motoryzacja

Sam użyłem trochę droższych silników stąd. Mają być dużo szybsze niż oryginalne silniki Hubsan X4. Mam zamiar używać niestandardowego sprzętu, dlatego potrzebuję szybkich silników do podnoszenia ciężaru. Gdybym miał teraz kupić nowy zestaw silników, najprawdopodobniej kupiłbym je w tym samym sklepie, ale te, które mówią: prędkość: szalona. Istnieje również kilka rodzajów tych, więc wybierz te, które mają najlepsze recenzje. Różnica jest dość znaczna z prędkością: szalona, ​​ponieważ mogą osiągnąć maks. 3,2 A zamiast 2,75 A z prędkością: szybko (jakoś nadal mówi, że ciąg jest 40 g / silnik dla obu typów silników). Dla tych, których nie stać na drogi silnik, zawsze jest alternatywa z eBay lub nawet tańsza z Chin. Oni oczywiście nie latają tak szybko, przynajmniej zakładam, że z krzywych wydajności. Nie próbowałem sam, ale maksymalny prąd wynosi 1,85 A, a siła ciągu 34 g / silnik, co jest niższe niż w poprzednich silnikach. (Całkowita waga ~ 20g)

Bluetooth

Do projektu użyłem zwykłego modułu Bluetooth HC-06. Działa tylko jako urządzenie podrzędne, czego potrzebujemy, jeśli chcemy go kontrolować za pomocą inteligentnego telefonu. Jak widać z dodanego zdjęcia, zgiąłem złącza, a następnie je skróciłem. Mogę zajrzeć do opcji dodania modułu Bluetooth 4.0 później, który ma przeciwne połączenia, więc nie musisz tego robić. (Całkowita waga ~ 5 g)

MPU

Do projektu użyłem MPU6050, które już kupiłem już dawno temu. Ma 3-osiowy żyroskop i tylko 3-osiowy akcelerometr. W późniejszych wersjach mogę użyć trochę droższego MPU, który miałby Barometr i magnetometr. (Całkowita waga ~ 1,4 g)

Baterie

Do silników i elektroniki potrzebne są dwa akumulatory LiPo 1S 3,7 V. Jeden służy do zasilania silników, a drugi tylko do elektroniki. Znalezienie baterii do elektroniki jest łatwe. Wystarczy wybrać najmniejszą dostępną baterię na rynku (np. 1s 3,7V 100mAh (3g)). Możesz też kupić je tanio od HobbyKinga.

Uzyskanie baterii dla silników jest trudniejsze. Jest kilka ważnych punktów, które należy zwrócić uwagę przy ich zakupie, pojemność (mAh), maksymalne dozwolone rozładowanie (C) i średnia prędkość rozładowania (C). Im większa pojemność, tym dłużej quadkopter będzie działał na jednym ładowaniu i im większa będzie prędkość rozładowania, tym więcej mocy będzie w stanie zapewnić dla silników (większe prądy dla stałych i szczytowych). Często istnieje zasada, że ​​mnożenie obu, szybkość rozładowania i pojemność, da prąd, który baterie mogą dostarczyć. Na przykład masz baterię o pojemności 500 mAh i 10 C o średnim / stałym rozładowaniu. 500 mAh * 10 C = 5 A. Tak więc średnio taka bateria może dostarczyć 5 A. Następnie dodaj około 20% bezpiecznego marginesu i powinieneś być dobry. Cóż, może to zadziałać w niektórych przypadkach, jednak mamy bardzo potężne silniki, dlatego szybkość rozładowywania MUSI być znacznie wyższa. Wcześniej próbowałem Turnigy nano-tech 650mAh 1S 15c (13g) bez żadnego szczęścia. Udało im się jedynie w pełni zasilić pojedynczy silnik i nawet nie zwiększyć mocy 4 silników, co oznaczało, że szybkość rozładowywania była po prostu zbyt mała (wydajność z pewnością była wystarczająca). Następnie przejrzałem akumulatory nano-tech Turnigy 1s 260mAh 35-70C (14g). Udało im się zasilić wszystkie 4 silniki, jednak w momencie, gdy je kupiłem, kosztują połowę ceny, którą tu widzicie. Proponuję zajrzeć do HobbyKing w poszukiwaniu podobnych lub alternatywnych baterii, np. Turnigy nano-tech 300mah 1S 45 ~ 90C (9g) lub nawet Turnigy Graphene 600mAh 1S 65C (15g), które wydają się być bardzo obiecujące. Jeśli masz kilka dodatkowych $ / £, kup baterie grafenowe, ponieważ są one lżejsze w porównaniu z alternatywnymi bateriami o tej samej pojemności i zapewniają dużo wyższe szybkości rozładowania (przynajmniej na papierze). Nie wypróbowałem ich osobiście, ale byłbym naprawdę ciekawy, jak można porównać je w rzeczywistości, ponieważ uważam, że obecnie dostarczana prędkość rozładowania 35C jest również niewielka.

Obliczmy, jak długo będą działać baterie. Powiedzmy, że poza silnikami reszta elektroniki stale zużywa około 100 mA prądu. Całkowity prąd = 2,75 * 4 + 0,1 = 11,1 A = 11,1 * 1000 = 11100 mAh. Zakupione akumulatory mają pojemność 260 mAh, a więc czas (min) = 260 * 60/11100 = 1,4 min. Czy to w ogóle nie wygląda? Testowałem, kiedy przymocowałem quadkopter z nitkami do ziemi i wydaje się, że liczby są rozsądne, naprawdę nie mogłem utrzymać quadkoptera w powietrzu nawet 2 minuty. Cóż, w przypadku dłuższych lotów będziesz musiał albo dodać większe baterie, użyć tańszych silników Hubsan X4, albo w jakiś sposób obniżyć wagę całej rzeczy. (Całkowita waga ~ 16 g)

Złącza silnika

Silniki zwykle wykorzystują złącza typu mini JST, dlatego trzeba mieć kilka (4 szt.) Z Farnell lub ebay, aby móc podłączyć silniki do całego obwodu. Upewnij się, że kupujesz złącza jako te na obrazie. Są bardzo podobne (np. Mikro JST), ale SĄ różne.

Złącza baterii

Wiele akumulatorów z eBay i HobbyKing wykorzystuje złącza micro JST. Ładowarka, której użyłem (podana w następnych sekcjach) ma nieco inne złącze JST (wiem, trochę mylące, ponieważ wszystkie mają tę samą nazwę), więc postanowiłem zamówić niektóre z nich z eBay i przylutować je do każdej baterii zamiast tego. Pozwoliło to później ładnie podłączyć baterię do PCB.

Śmigła

Wielu z was może chcieć użyć śmigieł Hubsan X4 i możesz to zrobić, jeśli chcesz, jednak użyję rekwizytów Walkera LadyBird. Są trochę drogie, jeśli kupisz je w Wielkiej Brytanii (około 5 razy więcej w porównaniu z oryginalnymi rekwizytami Hubsan X4), ale naprawdę tanie w Chinach. Jeśli jeszcze nie masz rekwizytów, zaleciłbym ich użycie - jeśli mam rację, przeczytałem gdzieś, że zapewniają więcej ciągu, dając tym samym naszej małej bestii większą prędkość (w końcu Walkera LadyBird jest znana jako najlepszy mikro quadcopter do tej pory! Zastanawiam się, kto to przetestował, ale na razie im zaufaj …) (łącznie kilka gramów ~ 3-5g)

Tranzystory

Potrzebujemy 4x tranzystorów MOSFET i wybranie jednego może być trudne. Po pierwsze, muszą wytrzymać zużytą moc i prąd przez silniki, a po drugie, napięcie progowe musi być dość niskie, w przeciwnym razie Arduino nie będzie w stanie włączyć ich w pełni (w przypadku MOSFET typu N). W moim przypadku maksymalny prąd wynosi 2,75 A przy napięciu 3,7 V. Oznacza to, że potrzebuję tranzystora MOSFET, który na wszelki wypadek wytrzymywałby przynajmniej 4 - 5 A (będzie także mniej nagrzewał). Zamówiłem niektóre z Farnell (tranzystor MOSFET, kanał N, 6 A, 20 V), ale możesz przyjrzeć się alternatywom, takim jak tranzystor MOSFET, kanał N, 8 A, 20 V (są one rzeczywiście identyczne z poprzednimi, ale mają dodatkowe nogi do przylutowania do ziemi, aby działały jako radiator, co nie jest konieczne, ponieważ poprzednie nie nagrzewały się wcale). Oba miały napięcia progowe 600mV, co jest dobre. Jeśli szukasz alternatyw, spróbuj nie przekraczać 1V, ale jeśli chcesz użyć dostarczonej PCB, upewnij się, że rozmiar jest taki sam, a podane tutaj tranzystory mają już wewnątrz wolne diody. zaoszczędzi trochę miejsca na PCB. (Całkowita waga <1 g).

Rezystory

Do projektu potrzebowałem rezystorów 6x10 kOhm i 2x56 kOhm (do ustalenia, ale nie jest to konieczne do końca), które można znaleźć w każdym sklepie elektronicznym. (Całkowita waga <1 g)

Kondensatory

Pojedynczy kondensator elektrolityczny będzie używany do wygładzania napięcia na akumulatorze o wymiarach 47uF, 50V. Można go kupić w dowolnym sklepie elektronicznym. (Całkowita waga <1 g)

Rumak

Możesz już mieć dobre ładowarki, jednak w przypadku, gdy tego nie zrobisz, zawsze możesz dostać coś takiego. Wykorzystuje złącza typu JST, więc będziesz musiał pobrać wymienione wcześniej złącza. Alternatywnie możesz otrzymać moduł ładowarki oparty na chipie, taki jak ten. Może to być przydatne w późniejszych projektach, ponieważ w tym przypadku układ może stać się częścią obwodu.

Cena £

Prawdopodobnie wielu z was chciałoby poznać cenę rzeczy. Cóż, po prostu obliczmy, że przy użyciu przybliżonych obliczeń, ponieważ cena zależy od dostawcy:

Drogie silniki:

2 £ (Arduino) + 3 £ (MPU6050) + 20 £ (silniki) + 3 £ (akumulator) + 2 £ (bateria elektroniczna) + 2 £ (śmigła) + 2 £ (MOSFET) + 5 £ (HC-06)) + 2 £ (reszta elektroniki + plastik) + 1 £ (złącza) + 3 £ (ładowarka) = £45 (dodając tylko używane elementy, gdy są kupowane w wielokrotności)

£45 - £15 = £30

Całkowita cena nie jest tak duża, a jeśli masz złącza i ładowarkę, znacznie się zmniejszy! Korzystając z bardzo szybkiej implementacji silnika, udało mi się zmieścić w przedziale cenowym 50 funtów, jeśli trzeba było kupić wszystkie części.

Krok 3: Obliczenia wagi

Drogie silniki:

Aby nasz quadkopter mógł dobrze latać, obowiązuje zasada, że ​​50% maksymalnego ciągu silników powinno być równe ciężarowi samego quadkoptera. Oznacza to, że quadkopter będzie na stałej wysokości, dając 50% swojej pełnej mocy. Silniki, które kupiłem, mają siłę ciągu 40 g / silnik. W sumie daje to 160g. 50% to 80g. Teraz dodajmy całą elektronikę + ramkę:

15g (ramka) + 20g (silniki) + 23g (bateria) + 5g (moduł bluetooth) + 5g (mikrokontroler) + 1,4 g (MPU) + 2 g (tranzystory) + 1 g (diody) + 1 g (rezystory) = 73,4 g, co jest mniej więcej tym, czego potrzebujemy! Oczywiście będzie trochę dodatkowej wagi z przewodów, ale są one małe i co najwyżej zwiększą wagę do 75g, co jest wciąż 6% lżejsze niż to, na co nas stać.

Tanie silniki:

Całkowity ciąg od silników wynosi 4 * 34 g / silnik = 136 g. 50% z nich to 68g. Całkowita elektronika będzie mniej więcej taka sama, tylko bateria będzie o 10 g lżejsza, dając w sumie około 65 g ze wszystkim, co jest jeszcze lżejsze niż 50% ciągu! Właściwie to nie będzie latać tak dobrze jak z szybszymi silnikami, ale no cóż, używasz co najmniej 4 razy tańszych silników!

Wniosek:

Quadkopter powinien latać! W przypadku droższych silników będzie latał lepiej / szybciej, ale mimo to oba quadkoptery powinny latać.

Krok 4: Schemat obwodu

Opuściłem poprzedni obwód używając Arduino Beetle, ale dodałem także połączenia Arduino nano. Większość rzeczy powinna być taka sama po prostu używając Beetle. Znalazłem kilka problemów. Po pierwsze, nie ma wystarczającej liczby dedykowanych pinów. Tak więc na przykład niektóre piny PWM są używane jako I2C, dlatego trudno jest zdecydować, które z połączeń należy naprawić za pomocą kodu, a które za pomocą dostarczonych pinów. Miałem też tylko możliwość wykonania jednostronnej płytki drukowanej, dlatego trudno było wykonać połączenia dla płytki Beetle. Skończyło się na Arduino nano.

Arduino nano ma rozwiązanie z dwoma bateriami, a Beetle nie. Jest to bardzo ważne, ponieważ Bluetooth nie działa przy użyciu jednej baterii. Dodatkowo, jeśli używana jest deska Beetle, używając dwóch baterii, między dodatnimi i ujemnymi pinami należy dodać inny kondensator> 10 uF.

Na dole układu Arduino nano dodałem alternatywne połączenia dla tranzystora, który był używany dla PCB zamiast tego, który tworzył połączenia.

Krok 5: PCB

Dużo łatwiej jest przylutować wszystkie komponenty na już przygotowanej płytce drukowanej (Printed Circuit Board). Niestety, uzyskanie dostępu do maszyny w celu jej wykonania nie zawsze jest możliwe. Mieliśmy jeden na Uniwersytecie, dlatego zaprojektowałem PCB Cel 3001! Oprogramowanie. Aby otworzyć plik *.T3001, musisz pobrać oprogramowanie Target 3001, które niestety jest kompatybilne tylko z systemem Windows. Mogę później wyeksportować projekt do Orła. Dodanie Target3001,.xps,.tif i.src (eksport do Eagle) dla tych, którzy zamierzają wykonać płytkę drukowaną w domu.

Wydrukowany i lutowany wynik wygląda jak na dostarczonym obrazie. Dodałem czerwone kółka pokazujące lutowane tranzystory, żółte kółka pokazujące złącza JST dla silników, zielone kółko oznaczające złącza akumulatora, zasilające TYLKO silnik i niebieskie kółko oznaczające złącza akumulatora, dostarczające moc do pozostałej części elektroniki (Arduino, MPU6050 itp.). Jak widać, przy obu złączach mocy wprowadzono pewne poprawki. Nie musisz tego robić, ponieważ PCB została zaktualizowana po wykonaniu pierwszego działającego modelu. Zasadniczo problem polegał na tym, że na początku PCB miała tylko jeden zasilacz. Podczas testów okazało się, że moduł Bluetooth stale odłączał się od telefonu, ponieważ napięcie akumulatora spadało do niskiego poziomu (<3 V). Nie tylko to, ale Arduino również miało z tym problemy, które zostały naprawione przez obniżenie napięcia brownout. Możesz to łatwo zrobić samodzielnie, ponieważ wymagało to jedynie modyfikacji pojedynczego pliku w Arduino IDE, jednak jest to bardziej hack, im wyższa częstotliwość, tym wyższe napięcie jest potrzebne. W końcu coś innego może się załamać w przyszłości lub możesz stracić całą dostępną moc, itp. W każdym razie, wdrożenie systemu dwubateryjnego sprawdziło się, zwłaszcza że bateria, zasilająca elektronikę waży tylko około 3g.

Podczas lutowania na złączach silnika należy upewnić się, że są one lutowane we właściwy sposób! Po każdej stronie jedno złącze jest skierowane w jedną stronę, a drugie w inny sposób. Albo sprawdź, który jest dodatni, który jest ujemny, albo podłącz silniki przed lutowaniem i lutuj zgodnie z obrazem (kolor czerwony / biały jest dodatni, a czarny / niebieski jest ujemnym)

Po drugiej stronie PCB dodałem zielony kwadrat pokazujący nieobowiązkowe złącza 1x02. Pomyślałem, że fajnie byłoby móc w przyszłości podłączyć coś do quadkoptera, dzięki czemu udostępniłem łatwo dostępne szpilki PWM i analogowe. Dodatkowo zaznaczyłem dodatnie złącze na obu bateriach.

Krok 6: Kod

Napisałem bibliotekę i przykładowy program wykorzystujący mbed do quadkoptera, który można znaleźć tutaj. Mbed jest dużo szybszy niż Arduino i ma więcej pamięci, więc może być używany do większego quadkoptera. Tutaj zaadaptowałem wszystko do Arduino, a także wykorzystałem dostępne biblioteki.

Odczyt napięcia akumulatora

Jako punkt odniesienia Arduino wykorzystuje napięcie zasilania, więc jeśli połączy się dwa rezystory szeregowo między zasilaniem i masą i odczyta napięcie w środku, zawsze będzie stałe. W tym przypadku używamy systemu dwóch baterii, więc istnieją dwa podejścia do odczytu napięcia na akumulatorze silnika.

1) Zawsze możemy utrzymać baterię, zasilając naładowaną elektronikę. Oznacza to, że zawsze zapewniamy, że napięcie na nim wynosi około 4,2 V. Takie podejście wymagałoby ładowania obu akumulatorów przez cały czas. Dodatkowo, co by się stało, gdybyśmy chcieli monitorować baterię elektroniki?

2) Użyj interwałowego napięcia odniesienia. Jest to równe 1,1V w Atmega328, musimy jednak upewnić się, że cokolwiek jest podłączone do A0, nie przekracza 1,1V. Dlatego dodałem szeregowy rezystor X kOhm z rezystorem Y kOhm, aby utworzyć potencjalny obwód dzielnika. Kod do odczytu i wygładzania napięcia baterii to:

#define ALPHA 0.1 #define MULTIPLIER 6.67 silnik pływakowy; void setup () {pinMode (A0, INPUT); analogReference (INTERNAL); // Ustaw wewnętrzne źródło odniesienia 1.1V // float tmp = analogRead (A0) / 1023.0 * MULTIPLIER; // make units Voltage motorBattery = 5.0; } void loop () {motorBattery = smoothBattery (motorBattery, analogRead (A0) / 1023.0 * MULTIPLIER, ALPHA); } float smoothBattery (float prevEntry, float newEntry, float alpha) {return (1-alpha) * prevEntry + alpha * newEntry; }

MPU6050

Biblioteka MPU6050 jest dostępna dla Jeffa Rowberga 2012. Podany przykładowy kod MPU6050_DMP6 jest używany jako główny kod projektu.

Jeśli zdecydowałeś się użyć mojej ramki i silników, najprawdopodobniej nie będziesz już musiał modyfikować kodu, ponieważ kontroler PID był już ustawiony na mniej więcej dobrą wydajność. Jeśli jednak użyjesz innej ramki, będziesz musiał ustawić nowe wartości dla regulatora PID. Zajmuje to trochę czasu, jeśli robisz to po raz pierwszy.

Silniki stabilizujące

W systemach sterowania regulator PID jest bardzo popularnym sposobem stabilizacji systemu. Tutaj będziemy chcieli ustabilizować pitch and roll MPU6050. W tym celu użyłem biblioteki PID_v1. W podanym poniżej kodzie ustawię oba silniki i regulator PID. Następnie dodam funkcję stabilizującą silniki w zależności od wymaganej prędkości.

#define FL_MOTOR 3 #define FR_MOTOR 9 #define BR_MOTOR 10 #define BL_MOTOR 11 // -------------------------------- -PID ------------------------------------ // Zdefiniuj zmienne, które będziemy podłączać do podwójnego punktu rollSetpoint, rollInput, rollOutput; double pitchSetpoint, pitchInput, pitchOutput; // Zdefiniuj agresywne i konserwatywne parametry strojenia

double consKp = 1, consKi = 0,05, consKd = 0,25; PID pitchPID (& rollInput, & rollOutput, & rollSetpoint, consKp, consKi, consKd, DIRECT); PID rollPID (& pitchInput, & pitchOutput, i pitchSetpoint, consKp, consKi, consKd, DIRECT); void setup () {// ------------------------------ PID ------------ ---------------------- pitchInput = 0.0; rollInput = 0.0; pitchSetpoint = 0.0; rollSetpoint = 0.0; // włącz PID na pitchPID.SetMode (AUTOMATIC); rollPID.SetMode (AUTOMATIC); pitchPID.SetOutputLimits (-20, 20); rollPID.SetOutputLimits (-20, 20); // ------------------------------------------------ ------------------- dla (int i = 0; i <4; i ++) {targetSpeed ​​i = 0; } pinMode (FL_MOTOR, OUTPUT); pinMode (FR_MOTOR, OUTPUT); pinMode (BR_MOTOR, OUTPUT); pinMode (BL_MOTOR, OUTPUT); void loop () {pitchPID.Compute (); rollPID.Compute (); int actSpeed ​​4; stabilizuj (targetSpeed, actSpeed, rollOutput, pitchOutput); // targetSpeed ​​= actSpeed; // czy powinno być tutaj, czy nie} void stabilize (int * currSpeed, int * actSpeed, float rollDiff, float pitchDiff) {// rzeczywista prędkość jest obliczana w następujący sposób + - połowa rollDiff + - połowa pitchDiff actSpeed ​​0 = (int) currSpeed ​​0 + (rollDiff / 2) - (pitchDiff / 2); actSpeed ​​1 = (int) currSpeed ​​1 + (rollDiff / 2) + (pitchDiff / 2); actSpeed ​​2 = (int) currSpeed ​​2 - (rollDiff / 2) + (pitchDiff / 2); actSpeed ​​3 = (int) currSpeed ​​3 - (rollDiff / 2) - (pitchDiff / 2); for (int i = 0; i <4; i ++) {if (actSpeed ​​i <0) actSpeed ​​i = 0; }} void runIndividual (int * actSpeed) {analogWrite (FL_MOTOR, actSpeed ​​0); analogWrite (FR_MOTOR, actSpeed ​​1); analogWrite (BR_MOTOR, actSpeed ​​2); analogWrite (BL_MOTOR, actSpeed ​​3); }

Moduł Bluetooth

Komunikacja z quadkoptera do telefonu odbywa się za pośrednictwem modułu Bluetooth HC-06. Dobrą rzeczą jest to, że nie ma potrzeby hakowania czegokolwiek wokół, ponieważ moduł używa komunikacji szeregowej RS232 do rozmowy z Arduino, więc użyjesz go identycznie, jak w przypadku biblioteki Arduino Serial. W tym celu będziesz potrzebować biblioteki Arduino SoftwareSerial. W poniższym kodzie wyślę prędkość, która ma być ustawiona dla wszystkich silników.

SoftwareSerial mySerial (7, 8); // RX, TX void setup () {mySerial.begin (9600); } void loop () {if (mySerial.available ()) {myReading = mySerial.parseInt (); for (int i = 0; i <4; i ++) {targetSpeed ​​i = myReading; } // opróżnianie czegokolwiek, co nie zostało odczytane podczas (mySerial.available ()) mySerial.read (); }}

Dodawanie bitów razem

Jeśli chodzi o cały kod, zawsze nad nim pracuję, więc postanowiłem go tutaj nie dodawać. Najnowszą wersję kodu możesz znaleźć w GitHub. Powiadomię w tym Instruktażu, kiedy kod zostanie ukończony. W tej chwili muszę ustawić poprawne stałe PID …