Obsah:
- Krok 1: Seznam součástí
- Krok 2: Sestavení
- Krok 3:
- Krok 4: Dále jsem stejnou metodou zajistil Roll Servo. díly jsou speciálně navrženy tak, aby snadno pasovaly na serva MG995
- Krok 5: Dále jsem stejnou metodou zajistil Roll Servo. díly jsou speciálně navrženy tak, aby snadno pasovaly na serva MG995
- Krok 6: Připojení
- Krok 7: Připojení pomocí integrovaného regulátoru napětí 7805
- Krok 8: Kódování
- Krok 9: Když jsou všechny součásti propojeny, vypadá podobně jako na tomto obrázku
- Krok 10: Nyní vložte všechny základní věci do plechovky s jídlem
- Krok 11: Když jsou všechny dráty a součásti umístěny uvnitř potraviny, lze na základnu pěnové desky nanést lepicí pistoli
- Krok 12: Závěr
Video: Motion Control Gimbal: 12 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:19
Ahoj všichni, jmenuji se Harji Nagi. V současné době jsem studentem druhého ročníku studia elektroniky a komunikačního inženýrství na Pranveer Singh Institute Of Technology, Kanpur (UP). Mám velký zájem o robotiku, arduino, umělou inteligenci a analogovou elektroniku.
Slovo „kardan“je definováno jako otočná podpora, která umožňuje otáčení jakéhokoli objektu v jedné ose. Tříosý závěs tedy umožňuje, aby jakýkoli předmět namontovaný na závěsu byl nezávislý na pohybu toho, který držel závěs. Gimbal diktuje pohyb předmětu, ne toho, který ho nese.
Skládá se ze 3 servomotorů MG996R pro 3osé ovládání a základny, na kterou bude umístěn senzor MPU6050, Arduino a baterie. Slouží k udržení kamery stabilizované bez vibrací. 3osý kardan zajišťuje, že pohyb kamery je stabilizován, i když ten, kdo ji drží, jde nahoru a dolů, doleva a doprava, vpředu a vzadu. To je to, čemu říkáme stabilizace vybočení, stoupání a náklonu.
Krok 1: Seznam součástí
Seznam součástí je:
1) Arduino Uno
2) 8V, 1,5 A baterie pro napájení Arduino Uno
3) 7805 Regulátor napětí Ic nebo můžete použít buck conveter
4) MPU 6050
5) 3*(Motory MG995 SERVO)
6) Propojovací vodiče
Další vybavení:
1) Páječka
2) Lepicí pistole
3) Vrtačka
4) Potravinová plechovka
Místo použití breadborad jsem použil malou vlastní perf desku pro pozitivní a negativní připojení sběrnice
Krok 2: Sestavení
Foamcore, pěnová deska nebo pěnová deska potažená papírem je lehký a snadno řezatelný materiál používaný k montáži servomotoru a výrobě zmenšených modelů.
Nejprve jsem vyrobil držáky ve tvaru písmene L pro montáž servomotoru pomocí pěnové desky.
Krok 3:
Sestavení závěsu bylo celkem snadné. Začal jsem instalací serva Yaw, snímače MPU 6050 a přepínače ON-OFF. Pomocí šroubů a matic jsem jej zajistil k základně
Krok 4: Dále jsem stejnou metodou zajistil Roll Servo. díly jsou speciálně navrženy tak, aby snadno pasovaly na serva MG995
Krok 5: Dále jsem stejnou metodou zajistil Roll Servo. díly jsou speciálně navrženy tak, aby snadno pasovaly na serva MG995
Krok 6: Připojení
Ve schématu zapojení můžete použít buď převodník buck nebo IC regulátor napětí 7805 k převodu 8 V na 5 V. Mikrokontrolér, kterému je přiřazeno schéma zapojení je Arduino Nano, můžete také použít Arduino Uno, Arduino Mega.
Piny SCL a SDA MPU 6050 jsou připojeny k analogovému kolíku Arduino A5 a A4. (Pin SCL a SDA se může lišit, proto si v datovém listu vyhledejte piny SCl a SDA pro jiný mikrokontrolér)
Krok 7: Připojení pomocí integrovaného regulátoru napětí 7805
Toto schéma zapojení je pro připojení ic regulátoru napětí 7805, připojte 8v baterii na Vin a získáte výstupní napětí 5v.
Krok 8: Kódování
Musíte zahrnout následující knihovny:
1) #includeClick Chcete -li stáhnout zip soubor
2) #includeKliknutím sem stáhnete soubor zip
Po stažení souboru zip přidejte knihovnu zip do skici arduino
Pro kód
/*
DIY Gimbal - výukový kód Arduino MPU6050 na základě příkladu MPU6050_DMP6 z knihovny i2cdevlib od Jeffa Rowberga: https://github.com/jrowberg/i2cdevlib */// I2Cdev a MPU6050 musí být nainstalovány jako knihovny, jinak.cpp/.h soubory // pro obě třídy musí být v cestě zahrnutí vašeho projektu #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" // #include "MPU6050.h" // není nutné, pokud používáte MotionApps zahrnout soubor / / Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation // is used in I2Cdev.h #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #include // class default I2C address is 0x68 // specific I2C addresses may be předáno jako parametr zde // AD0 low = 0x68 (výchozí pro SparkFun breakout a InvenSense hodnotící tabule) // AD0 high = 0x69 MPU6050 mpu; // MPU6050 mpu (0x69); // <- použití pro AD0 high // Definujte 3 servomotory Servo servo0; Servo servo1; Servo servo2; plavat správně; int j = 0; #define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 // použijte pin 2 na Arduino Uno & většina desek bool blinkState = false; // MPU control/status vars bool dmpReady = false; // set true, pokud byl DMP init úspěšný uint8_t mpuIntStatus; // uchovává skutečný stavový byte přerušení z MPU uint8_t devStatus; // návrat stavu po každé operaci zařízení (0 = úspěch,! 0 = chyba) uint16_t packetSize; // očekávaná velikost paketu DMP (výchozí hodnota je 42 bajtů) uint16_t fifoCount; // počet všech bytů aktuálně ve FIFO uint8_t fifoBuffer [64]; // Vyrovnávací paměť FIFO // orientace/pohyb vars Quaternion q; // [w, x, y, z] čtveřičný kontejner VectorInt16 aa; // [x, y, z] měření senzoru zrychlení VectorInt16 aaReal; // [x, y, z] měření gravitačního snímače zrychlení VectorInt16 aaWorld; // [x, y, z] měření zrychleného snímače světového rámce VectorFloat gravitace; // [x, y, z] gravitační vektor float euler [3]; // [psi, theta, phi] Eulerův úhlový kontejner float ypr [3]; // [stáčení, stoupání, svinutí] stáčení/stoupání/svinutí kontejneru a gravitační vektor // struktura paketu pro ukázku čajníku InvenSense uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\ r', '\ n'}; // ===================================================================== ================/ ============================================================================================= // indikuje, zda pin přerušení MPU dosáhl vysoké hodnoty neplatné dmpDataReady () {mpuInterrupt = true; } // =================================================================== ================== // === Počáteční nastavení === // ======================== ================================================= neplatné nastavení () {// připojit se ke sběrnici I2C (knihovna I2Cdev to nedělá automaticky) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400kHz I2C hodiny. Komentujte tento řádek, pokud máte potíže s kompilací #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif // inicializace sériové komunikace // (115200 zvoleno, protože je vyžadováno pro ukázkový výstup Teapot, ale je to // opravdu na vás v závislosti na vašem projektu) Serial.begin (38400); while (! Serial); // počkejte na výčet Leonarda, ostatní pokračují okamžitě // inicializace zařízení //Serial.println(F("Initializing I2C devices… ")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize (); // zde zadejte své vlastní gyro offsety, zmenšené na minimální citlivost mpu.setXGyroOffset (17); mpu.setYGyroOffset (-69); mpu.setZGyroOffset (27); mpu.setZAccelOffset (1551); // 1688 tovární nastavení mého testovacího čipu // ujistěte se, že to fungovalo (vrací 0, pokud ano), pokud (devStatus == 0) {// zapněte DMP, když je připraven // Serial.println (F ("Povolení DMP… “)); mpu.setDMPEnabled (true); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // nastavte náš příznak DMP Ready, aby funkce main loop () věděla, že je v pořádku jej používat //Serial.println(F("DMP připraven! Čekání na první přerušení … ")); dmpReady = true; // získat očekávanou velikost DMP paketu pro pozdější srovnání packetSize = mpu.dmpGetFIFOPacketSize (); } else {// CHYBA! // 1 = počáteční načtení paměti se nezdařilo // 2 = Aktualizace konfigurace DMP selhaly // (pokud dojde k přerušení, obvykle bude kód 1) // Serial.print (F ("Inicializace DMP selhala (kód")); //Serial.print(devStatus); //Serial.println (F (")")); } // Definujte piny, ke kterým jsou připojeny 3 servomotory servo0.attach (10); servo1.attach (9); servo2.attach (8); } // =================================================================== ================== // === HLAVNÍ PROGRAMOVÁ Smyčka === // ======================= ================================================== prázdná smyčka () { / / pokud se programování nezdařilo, nepokoušejte se nic dělat, pokud se (! dmpReady) vrátí; // počkejte na přerušení MPU nebo další pakety dostupné při (! mpuInterrupt && fifoCount <packetSize) {if (mpuInterrupt && fifoCount
= 1024) {
// reset, abychom mohli čistě pokračovat mpu.resetFIFO (); fifoCount = mpu.getFIFOCount (); Serial.println (F („Přetečení FIFO!“)); // jinak zkontrolujte přerušení připravenosti dat DMP (to by se mělo často stát)} else if (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// počkejte na správnou dostupnou délku dat, mělo by to být VELMI krátké čekání, zatímco (paket fifoCount 1 k dispozici / / (to nám umožní okamžitě přečíst více bez čekání na přerušení) fifoCount -= packetSize; // Získejte hodnoty vybočení, rozteče a převrácení #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravity, & q);.dmpGetYawPitchRoll (ypr, & q, & gravity); // Hodnoty vybočení, rozteče, svinutí - radiány na stupně ypr [0] = ypr [0] * 180 / M_PI; ypr [1] = ypr [1] * 180 / M_PI; ypr [2] = ypr [2] * 180 / M_PI; // Přeskočení 300 naměřených hodnot (proces vlastní kalibrace) if (j <= 300) {correct = ypr [0]; // Zatáčení začíná na náhodné hodnotě, takže zachytit poslední hodnotu po 300 odečtech j ++;} // Po 300 odečtech jinak {ypr [0] = ypr [0] - správně; // Nastavit vybočení na 0 stupňů - odečíst poslední náhodnou hodnotu vybočení od aktuální hodnoty, aby se Zatáčet 0 stupňů es // Namapujte hodnoty snímače MPU6050 od -90 do 90 na hodnoty vhodné pro ovládání servo od 0 do 180 int servo0Value = mapa (ypr [0], -90, 90, 0, 180); int servo1Value = mapa (ypr [1], -90, 90, 0, 180); int servo2Value = mapa (ypr [2], -90, 90, 180, 0); // Ovládejte serva podle orientace MPU6050 servo0.write (servo0Value); servo1.write (servo1Value); servo2.write (servo2Value); } #endif}}
Nakonec pomocí funkce zápisu tyto hodnoty posíláme na serva jako řídicí signály. Samozřejmě můžete deaktivovat serva Yaw, pokud chcete pouze stabilizaci pro osy X a Y, a použít tuto platformu jako kardanový závěs
Krok 9: Když jsou všechny součásti propojeny, vypadá podobně jako na tomto obrázku
Krok 10: Nyní vložte všechny základní věci do plechovky s jídlem
Krok 11: Když jsou všechny dráty a součásti umístěny uvnitř potraviny, lze na základnu pěnové desky nanést lepicí pistoli
Krok 12: Závěr
Vezměte prosím na vědomí, že daleko od dobrého kardanového závěsu. Pohyby nejsou plynulé, protože tato serva nejsou k tomuto účelu určena. Skutečné kardanové závěsy používají pro hladký pohyb speciální typ motoru BLDC. Zvažte tedy tento projekt pouze pro vzdělávací účely.
To by bylo pro tento tutoriál vše, doufám, že se vám to líbilo a dozvěděli jste se něco nového. Neváhejte se na cokoli zeptat v sekci komentáře níže a nezapomeňte zkontrolovat mé sbírky projektu
Doporučuje:
Gyroscope Platform/ Camera Gimbal: 5 Steps (with Pictures)
Gyroscope Platform/ Camera Gimbal: Tento instruktážní dokument byl vytvořen při splnění projektových požadavků Makecourse na University of South Florida (www.makecourse.com)
Gimbal s 3D tištěnou kamerou (soutěž Tinkercad): 6 kroků
3D tištěný kamerový závěs (soutěž Tinkercad): Dobrý den, toto je kamerový závěs, který jsem navrhl v Tinkercad. Hlavní kardan byl vyroben z rukojeti This Jar Handle a pětikruhového kardanu / gyroskopu, které už nemohu najít. Design Tinkercad najdete zde. Toto bylo navrženo tak, aby fungovalo na Powers
Motion Control With Raspberry Pi and LIS3DHTR, 3-Axis Accelerometer, Using Python: 6 Steps
Řízení pohybu S Raspberry Pi a LIS3DHTR, 3osým akcelerometrem, pomocí Pythonu: Krása nás obklopuje, ale obvykle musíme chodit po zahradě, abychom to poznali. - Rumi Jako vzdělaná skupina, kterou se zdáme být, investujeme drtivou většinu své energie do práce před našimi počítači a mobilními telefony. Proto často necháváme naši pohodu
Tensegrity nebo Double 5R Parallel Robot, 5 Axis (DOF) Levný, Tough, Motion Control: 3 kroky (s obrázky)
Tensegrity nebo Double 5R Parallel Robot, 5 Axis (DOF) Levný, Tough, Motion Control: Doufám, že si budete myslet, že toto je VELKÝ nápad pro váš den! Toto je příspěvek do soutěže Instructables Robotics, která končí 2. prosince 2019. Projekt se dostal do finálového kola hodnocení a já jsem neměl čas provést požadované aktualizace! Já jsem
Roll and Pitch Axis Gimbal for GoPro using Arduino - Servo and MPU6050 Gyro: 4 Steps
Roll and Pitch Axis Gimbal for GoPro using Arduino - Servo and MPU6050 Gyro: This instructable was created in meet the project požadavek of the Makecourse at the University of South Florida (www.makecourse.com) Cílem tohoto projektu bylo vybudovat 3osý kardan pro GoPro pomocí Arduino nano + 3 servomotory +