Përmbajtje:
- Hapi 1: Gjërat e kërkuara
- Hapi 2: Montimi
- Hapi 3: Kodi dhe Kalibrimi
- Hapi 4: Si funksionon (opsional)
Video: Gyroskop Argëtues me Unazën Neopixel: 4 Hapa (me Fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:16
Në këtë tutorial ne do të përdorim xhiroskopin MPU6050, një unazë neopixel dhe një arduino për të ndërtuar një pajisje që ndriçon dritat që korrespondojnë me këndin e pjerrësisë.
Ky është një projekt i thjeshtë dhe argëtues dhe do të mblidhet në një dërrasë buke. Nëse ndiqni hapat do të ndërtoni atë që keni parë në video. Ashtë një mësim i mirë për të mësuar rreth xhiroskopit dhe unazës neopixel.
Po e ndërtoj këtë tutorial për shkak të interesit që pashë në mësimin tim të parë këtu (Kontrolli i udhëhequr nga Xhiroskopi me Arduino). Në këtë udhëzues unë kam zëvendësuar led të thjeshtë me një unazë neopixel. Unaza është më e thjeshtë për t'u përdorur përmes një biblioteke Adafruit dhe është padyshim më spektakolare.
Pra, nëse i keni këto përbërës të shtrirë përreth, kjo është një mënyrë e shkëlqyeshme për t'i përdorur ato, do të përpiqem t'ju çoj hap pas hapi duke ndërtuar pajisjen dhe gjithashtu do t'ju shpjegoj se si funksionon në hapin e fundit.
Hapi 1: Gjërat e kërkuara
Pjesët
1. Arduino pro mini 328p (eBay) 2 $
2. Tabela e bukës
3. Xhiroskop MPU6050 (eBay) 1.2 $
4. Unazë led 24 neopixel (Adafruit) 17 $
5. Paketë baterie 4 x AA me 4 bateri
6. Kabllo kërcyese në formë U (opsionale). Unë i kam përdorur këto kabllo kërcyes sepse duken më mirë në tabelën e bukës, dhe llambat janë më të dukshme në këtë mënyrë. Mund të gjeni një kuti prej 140 në ebay me rreth 4 $. Nëse nuk i keni këto kabllo, mund t'i zëvendësoni me tela dupont.
Mjetet:
1. Përshtatës USB serik FTDI FT232RL për të programuar arduino pro mini
2. Arduino IDE
Aftësitë: 1. Bashkim, kontrolloni këtë udhëzues
3. Programimi bazë arduino, ky tutorial mund të jetë i dobishëm
Hapi 2: Montimi
Unë kam bashkangjitur skemën frituese në formatin fzz dhe një fotografi të tij për vizualizim të lehtë të lidhjeve
1. Ju duhet të lidhni 3 kunja mashkullore në anën e pasme të unazës neopixel siç tregohet në figurë
- lidhni kunjin pozitiv
- lidhni tokën
- lidhni pinin e futjes së të dhënave
2. Atëherë mbajtësi i baterisë 4x duhet të ketë një mënyrë për t'u lidhur me dërrasën e bukës, një zgjidhje e lehtë është të lidhni dy tela meshkuj dupont në terminalet e tij.
3. Përgatitni tabelën e bukës.
- vendosni unazën neopixel, mikrokontrolluesin dhe xhiroskopin në tabelën e bukës si në imazh
- vendosni të gjitha telat negative: te mikrokontrolluesi, unaza neopixel, xhiro
- vendosni të gjitha telat pozitivë: te mikrokontrolluesi, unaza neopixel, xhiro
- vendosni të gjitha telat e të dhënave:
* SDA dhe SCL nga mikrokontrolluesi te xhiro
* pin D6 nga mikrokontrolluesi në unazën neopixel
- kontrolloni dy herë të gjitha lidhjet para se të ndizni energjinë
- opsionalisht duke përdorur shirit ngjitës, ngjiteni paketën e baterisë në pjesën e pasme të dërrasës për ta mbajtur atë në vend dhe për ta bërë atë më të lëvizshëm
Hapi 3: Kodi dhe Kalibrimi
Së pari ju duhet të shkarkoni dhe instaloni dy biblioteka:
1. Bredhi i bibliotekës neopixel Adafruit që kontrollon neopixelin
2. Biblioteka MPU6050 për xhiroskopin
3. Burimi i bibliotekës I2CDev
Ato janë dy biblioteka të mëdha që do të bëjnë barrën e rëndë!
Më shumë detaje mbi neopixelët këtu
Pastaj shkarkoni dhe instaloni bibliotekën time nga këtu ose kopjoni atë nga poshtë:
#përfshi "I2Cdev.h"
#include #include "MPU6050_6Axis_MotionApps20.h" #include "Wire.h" #define NEOPIXED_CONTROL_PIN 6 #cakto NUM_LEDS 24 const int MAX_ANGLE = 45; const int LED_OFFSET = 12; MPU6050 mpu; Rrip Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, NEOPIXED_CONTROL_PIN, NEO_RBG + NEO_KHZ800); kohë e pa firmosur lastPrintTime = 0; inicimi i bool = false; // vendoset e vërtetë nëse DMP init ishte i suksesshëm uint8_t mpuIntStatus; // mban bajt të statusit aktual të ndërprerjes nga MPU uint8_t devStatus; // kthe statusin pas çdo operacioni të pajisjes (0 = sukses,! 0 = gabim) uint16_t packetSize; // madhësia e pritshme e paketës DMP (parazgjedhja është 42 bajt) uint16_t fifoCount; // numërimi i të gjithë byteve aktualisht në FIFO uint8_t fifoBuffer [64]; // Tampon i ruajtjes FIFO Quaternion q; // [w, x, y, z] enë kuaternion VectorFloat graviteti; // [x, y, z] vektori i gravitetit noton ypr [3]; // [yaw, pitch, roll] yaw/katran/rrotull enë dhe vektori i gravitetit bool i paqëndrueshëm mpuInterrupt = false; // tregon nëse kunja e ndërprerjes MPU ka shkuar lartë
void setup ()
{Serial.fillo (9600); Serial.println ("Programi filloi"); inicimi = fillimiGyroskopi (); strip.filloj (); } void loop () {if (! inicimi) {return; } mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); if (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); kthim; } if (mpuIntStatus & 0x02) {ndërsa (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= PaketaSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetra graviteti (& graviteti, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & graviteti); 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 = kufizim (x, -1 * MAX_ANGLE, MAX_ANGLE); y = kufizim (y, -1 * MAX_ANGLE, MAX_ANGLE); nëse (y 0) {lightLeds (y, z, 0, 5, 0, 89); } else if (y <0 dhe z 0 dhe z 0 dhe 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 = hartë (këndi, ngaAngle, toAngle, fromLedPosition, toLedPosition); printDebug (x, y, ledNr, kënd); ngjyra uint32_t; për (int i = 0; pozicioni i + LED_OFFSET) {pozicioni i kthimit + LED_OFFSET; } pozicioni i kthimit + LED_OFFSET - NUM_LEDS; } void printDebug (int y, int z, int lightLed, int angle) {if (millis () - lastPrintTime <500) {return; } Serial.print ("a ="); Serial.print (kënd); 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 = milis (); } bool initializeGyroscope () {Wire.begin (); TWBR = 24; mpu.initialize (); Serial.println (mpu.testConnection ()? F ("Lidhja MPU6050 e suksesshme"): F ("Lidhja MPU6050 dështoi")); Serial.println (F ("Fillimi i DMP …")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); if (devStatus! = 0) {Serial.print (F ("Inicimi i DMP dështoi (kodi")); Serial.println (devStatus); kthimi false;} mpu.setDMPEnabled (true); Serial.println (F ("Enabling zbulimi i ndërprerjes (Ndërprerja e jashtme Arduino 0) … ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP gati! Duke pritur ndërprerjen e parë … ")); pakoSize = mpu.dmpGetFIFOPacketSize (); kthehu true;} void dmpDataReady () {mpuInterrupt = true;}
Ngarko kodin:
Duke përdorur përshtatësin FTDI ngarkoni kodin në arduino.
Lidhni furnizimin me energji elektrike (bateritë)
Kalibrimi:
Gjëja më e rëndësishme për të kalibruar këtu është konstanta "LED_OFFSET". Në shembullin tim është 12. Ju duhet ta rregulloni këtë nga 0 në 23 në mënyrë që pas fuqizimit të bordit, led të ndizet në drejtimin që e anoni bordin.
Nëse doni të mësoni më shumë detaje se si funksionon, shikoni hapin e fundit
Hapi 4: Si funksionon (opsional)
Së pari pak informacion në lidhje me xhiroskopin MPU6050. Ky është një xhiroskop MEMS (MEMS qëndron për sistemet Mikroelektromekanike).
Çdo lloj xhiroskopi MEM ka një formë të komponentit lëkundës nga ku mund të zbulohet akullimi, dhe kështu ndryshimi i drejtimit. Kjo ndodh sepse, sipas ruajtjes së ligjit të lëvizjes, një objekti vibrues pëlqen të vazhdojë të dridhet në të njëjtin plan, dhe çdo devijim vibracional mund të përdoret për të nxjerrë një ndryshim në drejtim.
Xhiro gjithashtu përmban një mikrokontrollues të vetin për të llogaritur rrotullimin, ngritjen dhe devijimin në disa matematikë të zbukuruar.
Por të dhënat e papërpunuara xhiro vuajnë nga zhurma dhe zhvendosja, kështu që ne përdorëm një bibliotekë të jashtme për të zbutur gjërat dhe për të na dhënë të dhëna të pastra të përdorshme.
Neopixel -et janë të udhëhequr nga RGB individualisht të adresueshëm dhe të lidhur me zinxhirë në breza dhe unaza. Ata punojnë në 5V dhe ato përmbajnë qarkun e tyre, kështu që ju duhet vetëm të fuqizoni neopixelët dhe të komunikoni me ta duke përdorur linjën e të dhënave. Komunikimi bëhet me një linjë të vetme të të dhënave që përmban orën dhe të dhënat (më shumë detaje këtu). Adafruit siguron një bibliotekë të pastër për bashkëveprimin me unazat neopixel.
Kodi
Brenda funksionit l oop () quhet biblioteka MPU6050_6Axis_MotionApps20. Kur biblioteka ka të dhëna të reja nga xhirosku i quan redrawLeds (x, y, z) me 3 argumente që përfaqësojnë yaw, pitch and roll
Brenda redrawLeds ():
- ne jemi duke u përqëndruar në dy boshte: y, z
- ne po i kufizojmë të dy akset nga -MAX_ANGLE në +MAX_ANGLE, kemi përcaktuar këndin maksimal në 45 dhe është i ndryshueshëm
- ne po ndajmë 360 degreeds në 4 kuadrate dhe thërrasim funksione lightLeds () për secilën si më poshtë:
* y kuadranti i parë negativ, z pozitiv do të kontrollojë led -et nga 0 në 5, këndi do të jetë nga 0 në 89
* y negative, z negative kontrollet e kuadrantit të dytë led nga 6 në 12, këndi do të jetë nga 89 në 0
*… Etj
- brenda funksionit lightLeds
* Unë jam duke llogaritur një kënd të bazuar në dy boshte duke përdorur arktangent (kontrolloni figurën e bashkangjitur)
* Unë jam duke llogaritur atë që çoi në shfaqje duke përdorur funksionin e hartës arduino
* Unë po rivendos shiritin led të gjithë, përveç dy led, atë që korrespondon me pozicionin led që kam llogaritur më parë dhe një pozicion led më parë (për të treguar një efekt zbehje)
* Unë jam duke përdorur një funksion të quajtur normalizeLedPosition () për të marrë parasysh kalibrimin e neopixelit. Kalibrimi është i dobishëm sepse unaza neopixel mund të rrotullohet sipas dëshirës dhe duhet të rreshtohet me xhiroskopin
* Unë jam gjithashtu duke shtypur boshtin tërheqës, ajo që led ka dritë dhe kënd
Matematika
Unë kam bashkangjitur një fotografi me unazën led dhe funksionin trigonometrik të përdorur për të përcaktuar këndin.
Recommended:
Ora e alarmit me flluska e bën zgjimin argëtues (ish): 7 hapa (me fotografi)
Ora e alarmit me flluska e bën zgjimin argëtues (ish): Zgjimi në një orë alarmi gumëzhitëse është e keqe. Unë jam një nga ata njerëz që nuk më pëlqen të zgjohem para se të dalë dielli (ose ka dalë jashtë për shumë orë). Pra, cila mënyrë më e mirë për ta bërë zgjimin argëtues sesa të kesh një festë me flluska në shtrat! Duke përdorur një arduino dhe një
Kohëmatësi Pomodoro u takua me Unazën LED: 5 hapa
Pomodoro Timer u takua me Unazën LED: Mbani parasysh projektin e ITTT që të ketë ndryshime në funksionimin e kohëmatësit Pomodoro. De Pomodoro " teknik " është plotësisht e menaxhimit të mënyrës së vdekjes së njerëzve që mund të ndihmojnë në një projekt në kleine stappen te verdelen en regelmatig pauze te houden. Hierbij
Sistemi argëtues Super Wood: 9 hapa (me fotografi)
Sistemi i Argëtimit Super Wood: Unë me krenari prezantoj Sistemet e mia të drurit Super Nintendo Argëtuese plotësisht. Para se të postoja manualin tim se si të ndërtoja një Gamepad Super Nintendo prej druri dhe tani është koha t'ju tregoj se si të ndërtoni tastierën. Rasti prej druri është bërë nga pjesë të shumta
Piston me unazën kryesore të shufrës lidhëse: 3 hapa
Piston me unazën lidhëse të shufrës: Unë kërkoj një ide origjinale për një unazë të veçantë çelësash, një unazë çelësash për mekanikët dhe njerëzit që pëlqejnë mekanikën. Për këtë kam përdorur një pistoni të vogël me shufër lidhëse. E gjeta këtë pistoni në një çekiç të vogël të thyer
Laser me energji diellore (tregues) - Një panel "Me madhësi hobi" e drejton atë! - DIY e thjeshtë - Eksperiment argëtues !: 6 hapa (me fotografi)
Laser me energji diellore (tregues) - Një panel "Me madhësi hobi" e drejton atë! - DIY e thjeshtë - Eksperiment argëtues !: Ky udhëzues tregon se si të fuqizoni një tregues lazer me një panel diellor. hyrje e mirë në energjinë diellore dhe një eksperiment argëtues