Obsah:
- Krok 1: Požadované věci
- Krok 2: Sestavení
- Krok 3: Kód a kalibrace
- Krok 4: Jak to funguje (volitelně)
Video: Gyroscope Fun with Neopixel Ring: 4 Steps (with Pictures)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
V tomto tutoriálu použijeme gyroskop MPU6050, neopixelový prstenec a arduino k vytvoření zařízení, které rozsvítí LED diody odpovídající úhlu sklonu.
Jedná se o jednoduchý a zábavný projekt a bude sestaven na prkénku. Pokud budete postupovat podle těchto kroků, vytvoříte to, co jste viděli ve videu. Je to dobrý návod, jak se naučit gyroskop a neopixelový prsten.
Tento tutoriál stavím kvůli zájmu, který jsem viděl na svém prvním instruktážním zde (Gyroscope Led Control With Arduino). V tomto pokynu jsem nahradil jednoduché LED diody neopixelovým kroužkem. Prsten je jednodušší použít prostřednictvím knihovny Adafruit a je rozhodně efektnější.
Pokud tedy máte tyto komponenty kolem, je to skvělý způsob, jak je využít, pokusím se vás krok za krokem provést sestavením zařízení a také vysvětlit, jak to funguje v posledním kroku.
Krok 1: Požadované věci
Díly
1. Arduino pro mini 328p (eBay) 2 $
2. Breadboard
3. Gyroskop MPU6050 (eBay) 1,2 $
4. 24 neopixel led led ring (Adafruit) 17 $
5. Sada baterií 4 x AA se 4 bateriemi
6. Propojovací kabely ve tvaru U (volitelně). Použil jsem tyto propojovací kabely, protože na prkénku vypadají lépe a LED diody jsou tímto způsobem viditelnější. Krabici 140 najdete na ebay přibližně za 4 $. Pokud tyto kabely nemáte, můžete je nahradit dupontními vodiči.
Nástroje:
1. Adaptér FTDI USB na sériový FT232RL pro programování arduino pro mini
2. Arduino IDE
Dovednosti: 1. Pájení, podívejte se na tento návod
3. Základní arduino programování, tento návod může být užitečný
Krok 2: Sestavení
Připojil jsem fritzující schéma ve formátu fzz a jeho obrázek pro snadnou vizualizaci připojení
1. Na zadní část neopixelového prstence musíte připájet 3 samčí kolíky, jak je znázorněno na obrázku
- pájet kladný kolík
- pájet zem
- pájet kolík vstupu dat
2. Potom by měl mít 4x držák baterie způsob připojení k prkénku, snadné řešení je pájet dva samčí dupontové vodiče na jeho svorky.
3. Připravte prkénko.
- umístěte neopixelový prstenec, mikrokontrolér a gyroskop na prkénko jako na obrázku
- umístěte všechny záporné vodiče: do mikrokontroléru, neopixelového prstence, gyroskopu
- umístěte všechny kladné vodiče: do mikrokontroléru, neopixelového prstence, gyroskopu
- umístěte všechny datové vodiče:
* SDA a SCL od mikrokontroléru po gyroskop
* kolík D6 od mikrokontroléru k neopixelovému prstenci
- před napájením znovu zkontrolujte všechna připojení
- volitelně pomocí lepicí pásky přilepte bateriový blok na zadní stranu bradboardu, aby držel na místě a byl přenosnější
Krok 3: Kód a kalibrace
Nejprve musíte stáhnout a nainstalovat dvě knihovny:
1. Knihovna neopafelů Adafruit jedle ovládající neopixel
2. Knihovna MPU6050 pro gyroskop
3. Zdroj knihovny I2CDev
Jsou to dvě skvělé knihovny, které zvládnou zvedání těžkých břemen!
Více podrobností o neopixelech zde
Potom si stáhněte a nainstalujte moji knihovnu odtud nebo ji zkopírujte níže:
#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; Proužek Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, NEOPIXED_CONTROL_PIN, NEO_RBG + NEO_KHZ800); unsigned long lastPrintTime = 0; inicializace bool = 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 Quaternion q; // [w, x, y, z] čtveřičný kontejner VectorFloat gravitace; // [x, y, z] gravitační vektor float ypr [3]; // [stáčení, stoupání, otáčení] vybočování/stoupání/převíjení kontejneru a gravitační vektor volatile bool mpuInterrupt = false; // indikuje, zda pin přerušení MPU dosáhl vysoké hodnoty
neplatné nastavení ()
{Serial.begin (9600); Serial.println ("Program spuštěn"); inicializace = initializeGyroscope (); strip.begin (); } void loop () {if (! inicializace) {return; } mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); if (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); vrátit se; } if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= packetSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravitace, & 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 = omezení (x, -1 * MAX_ANGLE, MAX_ANGLE); y = omezení (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 (úhel, fromAngle, toAngle, fromLedPosition, toLedPosition); printDebug (x, y, ledNr, úhel); barva uint32_t; pro (int i = 0; i poloha + LED_OFFSET) {návratová poloha + LED_OFFSET; } pozice návratu + LED_OFFSET - NUM_LEDS; } void printDebug (int y, int z, int lightLed, int angle) {if (millis () - lastPrintTime <500) {return; } Serial.print ("a ="); Serial.print (úhel); 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 ("Připojení MPU6050 úspěšné"): F ("Připojení MPU6050 se nezdařilo")); Serial.println (F ("Inicializace 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 detekce přerušení (externí přerušení Arduino 0) … ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP připraven! Čekání na první přerušení … ")); = mpu.dmpGetFIFOPacketSize (); return true;} void dmpDataReady () {mpuInterrupt = true;}
Nahrajte kód:
Pomocí adaptéru FTDI nahrajte kód do arduina.
Připojte napájecí zdroj (baterie)
Kalibrace:
Nejdůležitější věcí, kterou je zde třeba kalibrovat, je konstanta „LED_OFFSET“. V mém příkladu je 12. Musíte to nastavit od 0 do 23, aby se po zapnutí desky LED dioda rozsvítila ve směru, ve kterém desku nakloníte.
Pokud se chcete dozvědět více podrobností o tom, jak to funguje, podívejte se na poslední krok
Krok 4: Jak to funguje (volitelně)
Nejprve malá informace o gyroskopu MPU6050. Jedná se o gyroskop MEMS (MEMS znamená mikroelektromechanické systémy).
Každý typ gyroskopu MEM má nějakou formu oscilační složky, ze které lze detekovat akkleraci, a tedy i změnu směru. Důvodem je, že podle zákona o zachování pohybu vibrující předmět rád pokračuje ve vibraci ve stejné rovině a pro odvození změny směru lze použít jakoukoli vibrační odchylku.
Gyroskop také obsahuje vlastní mikrokontrolér pro výpočet náklonu, rozteče a zatáčení pomocí nějaké fantastické matematiky.
Ale gyroskopická surová data trpí hlukem a driftem, takže jsme použili externí knihovnu, abychom věci vyhladili a poskytli nám čistá použitelná data.
Neopixel jsou RGB LED diody jednotlivě adresovatelné a zřetězené do pásem a prstenů. Pracují na 5 V a obsahují vlastní obvody, takže potřebujete pouze napájet neopixely a komunikovat s nimi pomocí datové linky. Komunikace probíhá pomocí jediné datové linky obsahující hodiny a data (více zde). Adafruit poskytuje čistou knihovnu pro interakci s neopixelovými prstenci.
Kód
Uvnitř funkce l oop () se nazývá knihovna MPU6050_6Axis_MotionApps20. Když má knihovna nová data z gyroskopu, volá redrawLeds (x, y, z) se 3 argumenty představujícími zatáčení, stoupání a otáčení
Uvnitř redrawLeds ():
- zaměřujeme se na dvě osy: y, z
- omezujeme obě osy od -MAX_ANGLE do +MAX_ANGLE, definovali jsme maximální úhel na 45 a je to měnitelné
- rozdělujeme 360 stupňů do 4 kvadrantů a pro každý z nich voláme funkce lightLeds () následovně:
* y negativní, z pozitivní první kvadrant bude kontrolovat LED od 0 do 5, úhel bude od 0 do 89
* y negativní, z negativní druhý kvadrant kontrolky LED od 6 do 12, úhel bude od 89 do 0
* …atd
- uvnitř funkce lightLeds
* počítám úhel na základě dvou os pomocí arktangentu (podívejte se na přiložený obrázek)
* Vypočítávám, co vedlo k zobrazení pomocí funkce mapy arduino
* Obnovuji všechny LED diody kromě dvou LED, té, která odpovídá pozici LED, kterou jsem vypočítal dříve, a pozici LED před (pro zobrazení efektu slábnutí)
* Používám funkci nazývanou normalizeLedPosition (), abych zohlednil kalibraci neopixelů. Kalibrace je užitečná, protože neopixelový prstenec lze libovolně otáčet a měl by být zarovnán s gyroskopem
* Také tisknu osu vleku, co vedlo má světlo a úhel
Matematika
Připojil jsem obrázek s LED kroužkem a goniometrickou funkcí použitou k určení úhlu.
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)
DIY MIDI OVLADAČ USB Plug & Play (UPGRADE NEOPIXEL RING): 12 kroků
DIY MIDI OVLADAČ USB Plug & Play (UPGRADE NEOPIXEL RING): Vášnivý MAO a elektronická hudba, ale také vidět, že bylo možné vytvořit personalizované rozhraní Midi, vytvořil jsem 6 potenciometrů a 12 tlačítek (zapnutí / vypnutí), ale aby bylo místo obtížnější že už to bylo, chtěl bych přidat vizuální indikaci
Arduino Neopixel LED Ring Ws2812 - Visuino Tutorial: 8 Steps
Arduino Neopixel LED Ring Ws2812 - Visuino Tutorial: V tomto tutoriálu se naučíme ovládat Neopixel Led Ring Ws2812 pomocí Arduino a Visuino pro spuštění LED pixelu kolem. Podívejte se na ukázkové video
Jak používat Neopixel Ws2812 LED nebo LED STRIP nebo Led Ring s Arduino: 4 kroky
Jak používat Neopixel Ws2812 LED nebo LED STRIP nebo LED Ring s Arduino: Ahoj kluci, protože Neopixel led Strip jsou velmi populární a je také nazýván jako ws2812 led pásek. Jsou velmi populární, protože v těchto LED pásech můžeme řešit každou LED samostatně, což znamená, že pokud chcete, aby několik LED svítilo v jedné barvě
Pull the Light - Light Module using Neopixel & Pull Up Switch: 6 Steps (with Pictures)
Pull the Light - Light Module using Neopixel & Pull Up Switch: Features of the light module Arduino Uno Hardware & skříň zakoupená u internetu Neopixel & Napájení zapůjčené ze školy informatiky & Design produktu Světelný modul ovládaný napájecím zdrojem Všechny funkce ovládané pomocí