Obsah:
- Krok 1: Potrebné veci
- Krok 2: Zostavenie
- Krok 3: Kód a kalibrácia
- Krok 4: Ako to funguje (voliteľné)
Video: Gyroscope Fun with Neopixel Ring: 4 Steps (with Pictures)
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:57
V tomto tutoriáli použijeme gyroskop MPU6050, neopixelový prstenec a arduino na stavbu zariadenia, ktoré rozsvieti LED diódy zodpovedajúce uhlu sklonu.
Jedná sa o jednoduchý a zábavný projekt a bude zostavený na doske. Ak budete postupovať podľa týchto krokov, vytvoríte to, čo ste videli vo videu. Je to dobrý návod na učenie sa o gyroskope a neopixelovom kruhu.
Tento tutoriál staviam kvôli záujmu, ktorý som zaznamenal pri svojom prvom pokyne tu (Gyroscope Led Control With Arduino). V tomto návode som nahradil jednoduché LED diódy neopixelovým krúžkom. Prsteň je jednoduchšie používať v knižnici Adafruit a je rozhodne efektnejší.
Ak teda máte tieto súčiastky rozmiestnené okolo, je to skvelý spôsob, ako ich využiť, pokúsim sa vás krok za krokom previesť budovaním zariadenia a v poslednom kroku vám tiež vysvetlím, ako to funguje.
Krok 1: Potrebné veci
Časti
1. Arduino pro mini 328p (eBay) 2 $
2. Breadboard
3. Gyroskop MPU6050 (eBay) 1,2 $
4. 24 neopixel led ring (Adafruit) 17 $
5. 4 x batéria AA so 4 batériami
6. Prepojovacie káble v tvare U (voliteľné). Použil som tieto prepojovacie káble, pretože vyzerajú lepšie na doske a LED diódy sú týmto spôsobom viditeľnejšie. Krabicu 140 nájdete na ebay za približne 4 doláre. Ak tieto káble nemáte, môžete ich nahradiť káblami dupont.
Náradie:
1. Adaptér USB na sériový FTDI FT232RL na programovanie arduino pro mini
2. Arduino IDE
Zručnosti: 1. Spájkovanie, prečítajte si tento návod
3. Základné programovanie arduina, tento návod by mohol byť užitočný
Krok 2: Zostavenie
Pripojil som schematickú schému vo formáte fzz a jej obrázok pre jednoduchú vizualizáciu prepojení
1. Na zadnú stranu prstenca neopixelu musíte spájkovať 3 samčie kolíky, ako je to znázornené na obrázku
- spájkovať kladný kolík
- spájkovať zem
- spájkovať kolík vstupu údajov
2. Potom by držiak 4x batérie mal mať spôsob pripojenia k doske, jednoduchým riešením je spájať dva samčie dupontové vodiče s jeho koncovkami.
3. Pripravte si dosku na chlieb.
- položte neopixelový krúžok, mikrokontrolér a gyroskop na dosku ako na obrázku
- umiestnite všetky záporné vodiče: do mikrokontroléra, neopixelového krúžku, gyroskopu
- umiestnite všetky kladné vodiče: k mikrokontroléru, neopixelovému krúžku, gyroskopu
- umiestnite všetky dátové vodiče:
* SDA a SCL od mikrokontroléra po gyroskop
* kolík D6 z mikrokontroléra k neopixelovému krúžku
- pred napájaním dvakrát skontrolujte všetky pripojenia
- voliteľne pomocou lepiacej pásky, prilepte batériový modul na zadnú časť bradboardu, aby držal na mieste a bol prenosnejší
Krok 3: Kód a kalibrácia
Najprv si musíte stiahnuť a nainštalovať dve knižnice:
1. Knižnica neopixelov Adafruit kontrolujúca neopixel
2. Knižnica MPU6050 pre gyroskop
3. Zdroj knižnice I2CDev
Sú to dve veľké knižnice, ktoré zvládnu ťažké bremená!
Viac podrobností o neopixeloch nájdete tu
Potom si stiahnite a nainštalujte moju knižnicu odtiaľto alebo ju skopírujte nižšie:
#include "I2Cdev.h"
#include #include "MPU6050_6Axis_MotionApps20.h" #include "Wire.h" #define NEOPIXED_CONTROL_PIN 6 #define NUM_LEDS 24 const int MAX_ANGLE = 45; const int LED_OFFSET = 12; MPU6050 mpu; Pásik Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, NEOPIXED_CONTROL_PIN, NEO_RBG + NEO_KHZ800); nepodpísaný dlhý lastPrintTime = 0; inicializácia bool = false; // set true, ak bol DMP init úspešný uint8_t mpuIntStatus; // uchováva bajt skutočného stavu prerušenia z MPU uint8_t devStatus; // návrat stavu po každej operácii zariadenia (0 = úspech,! 0 = chyba) uint16_t packetSize; // očakávaná veľkosť paketu DMP (predvolená hodnota je 42 bajtov) uint16_t fifoCount; // počet všetkých bajtov aktuálne vo FIFO uint8_t fifoBuffer [64]; // Vyrovnávacia pamäť FIFO Quaternion q; // [w, x, y, z] kvartérny kontajner VectorFloat gravitácia; // [x, y, z] gravitačný vektor float ypr [3]; // [vybočenie, rozstup, zvinutie] vybočenie/rozstup/zvinutie kontajnera a vektor gravitácie volatile bool mpuInterrupt = false; // indikuje, či pin prerušenia MPU stúpol vysoko
neplatné nastavenie ()
{Serial.begin (9600); Serial.println ("Program spustený"); inicializácia = initializeGyroscope (); strip.begin (); } void loop () {if (! inicializácia) {return; } mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); if (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); návrat; } if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= veľkosť balíka; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravitácia, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & gravity); redrawLeds (ypr [0] * 180/M_PI, ypr [1] * 180/M_PI, ypr [2] * 180/M_PI); }} boolean hasFifoOverflown (int mpuIntStatus, int fifoCount) {return mpuIntStatus & 0x10 || fifoCount == 1024; } void redrawLeds (int x, int y, int z) {x = obmedzenie (x, -1 * MAX_ANGLE, MAX_ANGLE); y = obmedzenie (y, -1 * MAX_ANGLE, MAX_ANGLE); if (y 0) {lightLeds (y, z, 0, 5, 0, 89); } else if (y <0 a z 0 a z 0 a z> 0) {lightLeds (y, z, 20, 24, 89, 0); }} void lightLeds (int x, int y, int fromLedPosition, int toLedPosition, int fromAngle, int toAngle) {double angle = (atan ((double) abs (x) / (double) abs (y)) * 4068) / 71; int ledNr = mapa (uhol, fromAngle, toAngle, fromLedPosition, toLedPosition); printDebug (x, y, ledNr, uhol); farba uint32_t; pre (int i = 0; i poloha + LED_OFFSET) {návratová poloha + LED_OFFSET; } pozícia návratu + LED_OFFSET - NUM_LEDS; } void printDebug (int y, int z, int lightLed, int uhol) {if (millis () - lastPrintTime <500) {return; } Serial.print ("a ="); Serial.print (uhol); Serial.print (";"); Serial.print ("ll ="); Serial.print (lightLed); Serial.print (";"); Serial.print ("y ="); Serial.print (y); Serial.print (";"); Serial.print ("z ="); Serial.print (z); Serial.println (";"); lastPrintTime = millis (); } bool initializeGyroscope () {Wire.begin (); TWBR = 24; mpu.initialize (); Serial.println (mpu.testConnection ()? F ("Pripojenie MPU6050 bolo úspešné"): F ("Pripojenie MPU6050 zlyhalo")); Serial.println (F ("Inicializácia DMP …")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); if (devStatus! = 0) {Serial.print (F ("DMP Initialization failed (code")); Serial.println (devStatus); return false;} mpu.setDMPEnabled (true); Serial.println (F ("Enabling detekcia prerušenia (externé prerušenie Arduino 0) … ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP pripravený! Čakanie na prvé prerušenie … ")); packetSize = mpu.dmpGetFIFOPacketSize (); return true;} neplatné dmpDataReady () {mpuInterrupt = true;}
Nahrajte kód:
Pomocou adaptéra FTDI nahrajte kód do arduina.
Pripojte napájanie (batérie)
Kalibrácia:
Najdôležitejšou vecou, ktorú je tu potrebné kalibrovať, je konštanta „LED_OFFSET“. V mojom prípade je 12. Musíte to nastaviť od 0 do 23 tak, aby sa po zapnutí dosky LED dióda rozsvietila v smere, v akom ju nakloníte.
Ak sa chcete dozvedieť viac podrobností o tom, ako to funguje, pozrite sa na posledný krok
Krok 4: Ako to funguje (voliteľné)
Najprv malá informácia o gyroskope MPU6050. Jedná sa o gyroskop MEMS (MEMS znamená mikroelektromechanické systémy).
Každý typ gyroskopu MEM má nejakú formu oscilačnej zložky, z ktorej je možné detekovať akkleráciu, a teda zmenu smeru. Je to preto, že podľa zákona o pohybe vibrujúci predmet rád pokračuje v vibráciách v tej istej rovine a na odvodenie zmeny smeru je možné použiť akúkoľvek vibračnú odchýlku.
Gyroskop tiež obsahuje vlastný mikrokontrolér na výpočet nakláňania, nakláňania a vybočenia pomocou niekoľkých efektných matematík.
Surové údaje gyroskopu však trpia hlukom a driftom, a tak sme na vyrovnanie vecí a poskytnutie čistých použiteľných údajov použili externú knižnicu.
Neopixel sú RGB diódy jednotlivo adresovateľné a reťazené do pásov a krúžkov. Pracujú na 5 V a obsahujú vlastné obvody, takže stačí napájať neopixely a komunikovať s nimi pomocou dátového vedenia. Komunikácia prebieha pomocou jednej dátovej linky obsahujúcej hodiny a údaje (podrobnejšie informácie nájdete tu). Adafruit poskytuje čistú knižnicu na interakciu s neopixelovými krúžkami.
Kód
Vnútri funkcie l oop () sa nazýva knižnica MPU6050_6Axis_MotionApps20. Keď má knižnica nové údaje z gyroskopu, zavolá redrawLeds (x, y, z) s 3 argumentmi predstavujúcimi zatáčanie, rozstup a pohyb.
Vnútri redrawLeds ():
- zameriavame sa na dve osi: y, z
- obmedzujeme obe osi od -MAX_ANGLE do +MAX_ANGLE, definovali sme maximálny uhol na 45 a je možné ho zmeniť
- Rozdeľujeme 360 stupňov do 4 kvadrantov a pre každý z nich voláme funkcie lightLeds () takto:
* y negatívny, z pozitívny prvý kvadrant bude ovládať diódy LED od 0 do 5, uhol bude od 0 do 89
* y negatívne, z negatívne kontrolky druhého kvadrantu kontrolky od 6 do 12, uhol bude od 89 do 0
* …atď
- vo vnútri funkcie lightLeds
* vypočítam uhol na základe dvoch osí pomocou arktangentu (pozrite si priložený obrázok)
* Počítam, čo sa ukázalo, pomocou funkcie arduino mapy
* Obnovujem všetky LED diódy okrem dvoch LED, tej, ktorá zodpovedá pozícii LED, ktorú som vypočítal predtým, a pozícii LED pred (na zobrazenie efektu stmievania)
* Na zohľadnenie kalibrácie neopixelov používam funkciu nazývanú normalizeLedPosition (). Kalibrácia je užitočná, pretože prstenec neopixelu je možné otáčať podľa želania a mal by byť zarovnaný s gyroskopom
* Vytlačím aj os vleku, ktorá LED má svetlo a uhol
Matematika
Pripojil som obrázok s LED krúžkom a goniometrickou funkciou určenou na uhol.
Odporúča:
Gyroscope Platform/ Camera Gimbal: 5 Steps (with Pictures)
Gyroscope Platform/ Camera Gimbal: Tento návod bol vytvorený ako splnenie projektovej požiadavky Makecourse na University of South Florida (www.makecourse.com)
DIY MIDI OVLÁDAČ USB Plug & Play (UPGRADE NEOPIXEL RING): 12 krokov
DIY MIDI OVLÁDAČ USB Plug & Play (UPGRADE NEOPIXEL RING): Vášnivý MAO a elektronická hudba, ale tiež vidieť, že bolo možné vytvoriť personalizované rozhranie Midi, vyrobil som 6 potenciometrov a 12 tlačidiel (zapnutie / vypnutie), ale aby bolo miesto ťažšie. že to už bolo, chcem pridať vizuálny náznak
Making Work Fun: Setup Xbox Controller for Autodesk Inventor: 6 Steps
Making Work Fun: Setup Xbox Controller for Autodesk Inventor: So. V prvom rade MÁM NAJLEPŠÍCH Šéfov na ZEMI za to, že mi dovolil uviesť do prevádzky ovládač XBOX. Naše oddelenie IT a technický manažér mi dali pokoj, pokiaľ som ho používal na prácu. Tu je teda návod, ako nastaviť herný ovládač tak, aby fungoval s Autodesk
Kaleidoskop NeoPixel Ring: 8 krokov (s obrázkami)
NeoPixel Ring Kaleidoscope: Som rád, že vám môžem ponúknuť pokyny a materiálne súbory na výrobu kaleidoskopu LightLogo! Uvažoval som o tom mnoho mesiacov a nakoniec som vypracoval dizajn. Ak máte akékoľvek vylepšenia tohto dizajnu, zdieľajte ich! Nebudete
Arduino Nano: Akcelerometer Gyroscope Compass MPU9250 I2C senzor s Visuino: 11 krokov
Arduino Nano: Akcelerometer Gyroskop Compass MPU9250 I2C senzor s Visuino: MPU9250 je jedným z najpokročilejších kombinovaných malých akcelerometrov, gyroskopov a kompasov, ktoré sú v súčasnosti k dispozícii. Majú mnoho pokročilých funkcií, vrátane filtrovania dolných priechodov, detekcie pohybu a dokonca aj programovateľného špecializovaného procesora