ዝርዝር ሁኔታ:

የጂዮስኮፕ ደስታ በኒዮፒክስል ቀለበት 4 ደረጃዎች (ከስዕሎች ጋር)
የጂዮስኮፕ ደስታ በኒዮፒክስል ቀለበት 4 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የጂዮስኮፕ ደስታ በኒዮፒክስል ቀለበት 4 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የጂዮስኮፕ ደስታ በኒዮፒክስል ቀለበት 4 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: ጋይሮስኮፕ - እጅግ አስደናቂ የሆኑ ሚዛናዊ ነገሮች! 2024, ህዳር
Anonim
Image
Image

በዚህ መማሪያ ውስጥ የ MPU6050 ጋይሮስኮፕን ፣ የኒዮፒክስል ቀለበት እና አርዱinoኖን በመጠቀም የመብራት መብራትን ከዝንባታው ማእዘን ጋር የሚስማማ መሣሪያ ለመገንባት እንጠቀማለን።

ይህ ቀላል እና አስደሳች ፕሮጀክት ነው እና በዳቦ ሰሌዳ ላይ ይሰበሰባል። ደረጃዎቹን ከተከተሉ በቪዲዮው ውስጥ ያዩትን ይገነባሉ። ስለ ጋይሮስኮፕ እና ስለ ኒዮፒክስል ቀለበት ለመማር ጥሩ አጋዥ ስልጠና ነው።

እኔ እዚህ በመጀመሪያ አስተማሪዬ ላይ ባየሁት ፍላጎት (ይህንን በጊዮስኮፕ መሪ ቁጥጥር ከአርዱዲኖ ጋር) ይህንን ትምህርት እገነባለሁ። በዚህ መመሪያ ውስጥ ቀለል ያሉ መሪዎችን በኒዮፒክስል ቀለበት እተካለሁ። ቀለበቱ በአዳፍ ፍሬም ቤተ -መጽሐፍት በኩል ለመጠቀም ቀላል እና በእርግጠኝነት የበለጠ አስደናቂ ነው።

ስለዚህ እነዚህ አካላት በዚህ ዙሪያ ተኝተው ከሆነ እነሱን ለመጠቀም ጥሩ መንገድ ነው ፣ መሣሪያውን በመገንባት ደረጃ በደረጃ ለመውሰድ እሞክራለሁ እና እንዲሁም በመጨረሻው ደረጃ እንዴት እንደሚሰራ ለማብራራት እሞክራለሁ።

ደረጃ 1: የሚያስፈልጉ ነገሮች

ስብሰባ
ስብሰባ

ክፍሎች

1. Arduino pro mini 328p (eBay) 2 $

2. የዳቦ ሰሌዳ

3. MPU6050 ጋይሮስኮፕ (ኢቤይ) 1.2 $

4. 24 ኒኦፒክስል መሪ ቀለበት (አዳፍ ፍሬ) 17 $

5. 4 x AA የባትሪ ጥቅል ከ 4 ባትሪዎች ጋር

6. የ U- ቅርፅ ዝላይ ኬብሎች (አማራጭ)። እኔ የዳቦ ቦርዱ ላይ የተሻለ ስለሚመስሉ እነዚህን መዝለያ ኬብሎች ተጠቅሜአለሁ ፣ እና ሌዲዎቹ በዚህ መንገድ የበለጠ ይታያሉ። በ ebay ላይ የ 140 ሳጥን በ 4 ዶላር ገደማ ማግኘት ይችላሉ። እነዚህ ኬብሎች ከሌሉዎት በዱፖን ሽቦዎች መተካት ይችላሉ።

መሣሪያዎች ፦

1. አርዱዲኖ ፕሮ ሚኒን ፕሮግራም ለማድረግ ዩኤስቢ ወደ ተከታታይ FTDI አስማሚ FT232RL

2. አርዱዲኖ አይዲኢ

ችሎታዎች: 1. መሸጥ ፣ ይህንን መማሪያ ይመልከቱ

3. መሠረታዊ የአሩዲኖ ፕሮግራም ፣ ይህ አጋዥ ትምህርት ጠቃሚ ሊሆን ይችላል

ደረጃ 2 - ስብሰባ

ስብሰባ
ስብሰባ

ለግንኙነቶች በቀላሉ ለማየት የ fritzing schematic ን በ fzz ቅርጸት እና ስዕሉን አያይዘዋለሁ

1. በሥዕሉ ላይ እንደሚታየው በኒዮፒክስል ቀለበት ጀርባ ላይ 3 የወንድ ፒኖችን መሸጥ ያስፈልግዎታል

- አዎንታዊውን ፒን ያሽጡ

- መሬቱን መሸጥ

- የውሂብ ግብዓቱን ፒን ይሽጡ

2. ከዚያ 4x የባትሪ መያዣው ከዳቦ ሰሌዳው ጋር የሚገናኝበት መንገድ ሊኖረው ይገባል ፣ ቀላል መፍትሄ ሁለት የወንድ ዱፖን ሽቦዎችን ወደ ተርሚናሎቹ መሸጥ ነው።

3. የዳቦ ሰሌዳውን ያዘጋጁ።

- በምስሉ ላይ እንደሚታየው የኒዮፒክስል ቀለበት ፣ ማይክሮ መቆጣጠሪያ እና ጋይሮስኮፕ በዳቦ ሰሌዳው ላይ ያድርጉት

- ሁሉንም አሉታዊ ሽቦዎች ያስቀምጡ -ወደ ማይክሮ መቆጣጠሪያ ፣ ኒዮፒክስል ቀለበት ፣ ጋይሮ

- ሁሉንም አዎንታዊ ሽቦዎችን ያስቀምጡ -ወደ ማይክሮ መቆጣጠሪያ ፣ ኒዮፒክስል ቀለበት ፣ ጋይሮ

- ሁሉንም የውሂብ ሽቦዎች ያስቀምጡ:

* ኤስዲኤ እና ኤስ.ሲ.ኤል ወደ ማይክሮ መቆጣጠሪያ እስከ ጋይሮ ድረስ

* D6 ን ከማይክሮ መቆጣጠሪያ ወደ ኒዮፒክስል ቀለበት

- ኃይል ከመስጠትዎ በፊት ሁሉንም ግንኙነቶች በእጥፍ ያረጋግጡ

- እንደ አማራጭ የቴፕ ቴፕ በመጠቀም በቦታው ለመያዝ እና የበለጠ ተንቀሳቃሽ ለማድረግ የባትሪውን ጥቅል በብራድቦርዱ ጀርባ ላይ ይለጥፉ

ደረጃ 3 - ኮድ እና መለካት

በመጀመሪያ ሁለት ቤተ -መጽሐፍትን ማውረድ እና መጫን ያስፈልግዎታል

1. አዳፍ ፍሬው ኒዮፒክስል ቤተ ፍርግም ኒኦፒክስሉን የሚቆጣጠር

2. MPU6050 ቤተ መፃህፍት ለጋይሮስኮፕ

3. I2CDev ቤተ -መጽሐፍት ምንጭ

ከባድ ማንሳትን የሚሠሩ ሁለት ታላላቅ ቤተ -መጻሕፍት ናቸው!

ስለ ኒዮፒክስሎች ተጨማሪ ዝርዝሮች እዚህ

ከዚያ የእኔን ቤተ -መጽሐፍት ያውርዱ እና ይጫኑ ወይም ከዚህ በታች ይቅዱ

#"I2Cdev.h" ን ያካትቱ

#ያካትቱ #ያካትቱ "MPU6050_6Axis_MotionApps20.h" # #"Wire.h" #ንፍቅር NEOPIXED_CONTROL_PIN 6 #definine NUM_LEDS 24 const int MAX_ANGLE = 45; const int LED_OFFSET = 12; MPU6050 mpu; Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS ፣ NEOPIXED_CONTROL_PIN ፣ NEO_RBG + NEO_KHZ800) ፤ ያልተፈረመ ረጅም lastPrintTime = 0; bool initialization = ሐሰት; / ዲኤምፒ init ስኬታማ ከሆነ uint8_t mpuIntStatus/ ከሆነ እውነት ያዘጋጁ። // ከ MPU uint8_t devStatus ትክክለኛ የማቋረጥ ሁኔታ ባይት ይይዛል ፤ // ከእያንዳንዱ የመሣሪያ አሠራር (0 = ስኬት ፣ 0 = ስህተት) uint16_t packetSize በኋላ የመመለስ ሁኔታ; // የሚጠበቀው የ DMP ፓኬት መጠን (ነባሪ 42 ባይት ነው) uint16_t fifoCount; // በአሁኑ ጊዜ በ FIFO ውስጥ የሁሉም ባይቶች ብዛት መቁጠር uint8_t fifoBuffer [64]; // የ FIFO ማከማቻ ቋት Quaternion q; // [w, x, y, z] quaternion መያዣ VectorFloat ስበት; // [x, y, z] የስበት ቬክተር ተንሳፋፊ ypr [3]; // [yaw ፣ pitch ፣ roll] yaw/pitch/roll መያዣ እና የስበት ቬክተር የማይለዋወጥ bool mpuInterrupt = ሐሰት; // የሚያመለክተው የ MPU ማቋረጫ ፒን ከፍ ማለቱን ወይም አለመሆኑን ነው

ባዶነት ማዋቀር ()

{Serial.begin (9600); Serial.println ("ፕሮግራሙ ተጀመረ"); ማስነሻ = initializeGyroscope (); strip.begin (); } ባዶነት loop () {ከሆነ (! ማስጀመሪያ) {መመለስ ፤ } mpuInterrupt = ሐሰት; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); ከሆነ (hasFifoOverflown (mpuIntStatus ፣ fifoCount)) {mpu.resetFIFO (); መመለስ; } ከሆነ (mpuIntStatus & 0x02) {እያለ (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= packetSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& ስበት ፣ & q); mpu.dmpGetYawPitchRoll (ypr ፣ & q ፣ & ስበት); redrawLeds (ypr [0] * 180/M_PI ፣ ypr [1] * 180/M_PI ፣ ypr [2] * 180/M_PI); }} boolean hasFifoOverflown (int mpuIntStatus, int fifoCount) {መመለስ mpuIntStatus & 0x10 || fifoCount == 1024; } ባዶነት redrawLeds (int x ፣ int y ፣ int z) {x = constrain (x ፣ -1 * MAX_ANGLE ፣ MAX_ANGLE) ፤ y = መገደብ (y, -1 * MAX_ANGLE ፣ MAX_ANGLE); ከሆነ (y 0) {lightLeds (y, z, 0, 5, 0, 89); } ሌላ ከሆነ (y <0 እና z 0 እና z 0 እና z> 0) {lightLeds (y ፣ z ፣ 20 ፣ 24 ፣ 89 ፣ 0) ፤ }} ባዶ ባዶ መብራቶች (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 = ካርታ (አንግል ፣ ከኤንጅሌ ፣ እስከ አንንግሌ ፣ ከሊፕፖዚሽን ፣ ወደላይፕፖዝ); printDebug (x ፣ y ፣ ledNr ፣ አንግል); uint32_t ቀለም; ለ (int i = 0; i position + LED_OFFSET) {የመመለሻ ቦታ + LED_OFFSET; } የመመለሻ ቦታ + LED_OFFSET - NUM_LEDS; } ባዶ ባዶ ህትመት (int y ፣ int z ፣ int lightLed ፣ int angle) {if (millis () - lastPrintTime <500) {return; } Serial.print ("a ="); Serial.print (ማዕዘን); 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 ("MPU6050 ግንኙነት ተሳካ"): F ("MPU6050 ግንኙነት አልተሳካም")); Serial.println (ኤፍ ("DMP ን ማስጀመር …")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); ከሆነ (devStatus! = 0) {Serial.print (F ("DMP Initialization failed (ኮድ"))) ፤ Serial.println (devStatus) ፤ ሐሰትን መመለስ ፤} mpu.setDMPEnabled (እውነት) ፤ Serial.println (F ("ማንቃት) ማቋረጫ ማወቂያ (የአርዱዲኖ ውጫዊ መቋረጥ 0)…”)) ፤ አባሪ መቋረጥ (0 ፣ dmpDataReady ፣ RISING) ፤ mpuIntStatus = mpu.getIntStatus () ፤ Serial.println (ኤፍ (“ዲኤምፒ ዝግጁ ነው! ለመጀመሪያ ጊዜ ማቋረጥ በመጠበቅ ላይ…”)); packetSize = mpu.dmpGetFIFOPacketSize () ፤ እውነት ተመለስ ፤} ባዶ ባዶ dmpDataReady () {mpuInterrupt = true;}

ኮዱን ይስቀሉ ፦

የ FTDI አስማሚውን በመጠቀም ኮዱን ወደ አርዱዲኖ ይስቀሉ።

የኃይል አቅርቦቱን (ባትሪዎችን) ያገናኙ

መለካት ፦

እዚህ ለመለካት በጣም አስፈላጊው ነገር “LED_OFFSET” ቋሚ ነው። በምሳሌዬ 12. ይህንን ከ 0 ወደ 23 ማስተካከል ያስፈልግዎታል ስለዚህ ቦርዱን ከኃይል በኋላ መሪዎቹ ሰሌዳውን ወደሚያዘዙበት አቅጣጫ ያበራል።

እንዴት እንደሚሰራ ተጨማሪ ዝርዝሮችን ለማወቅ ከፈለጉ የመጨረሻውን ደረጃ ይመልከቱ

ደረጃ 4: እንዴት እንደሚሰራ (አማራጭ)

እንዴት እንደሚሰራ (አማራጭ)
እንዴት እንደሚሰራ (አማራጭ)

በመጀመሪያ ስለ MPU6050 ጋይሮስኮፕ ትንሽ መረጃ። ይህ የ MEMS ጋይሮስኮፕ (ሜኤምኤስ ለማይክሮኤሌክትሮሜካኒካል ስርዓቶች ነው)።

እያንዳንዱ ዓይነት የኤምኤምኤስ ጋይሮስኮፕ ማድመቂያው ከሚገኝበት የተወሰነ የመወዛወዝ አካል አለው ፣ ስለሆነም አቅጣጫው የሚለወጥበት ሊታወቅ ይችላል። ምክንያቱም በእንቅስቃሴ ሕግ ጥበቃ መሠረት የሚንቀጠቀጥ ነገር በአንድ አውሮፕላን ውስጥ መንቀጥቀጥን ለመቀጠል ስለሚወድ እና ማንኛውም የንዝረት መዛባት የአቅጣጫ ለውጥ ለማምጣት ሊያገለግል ይችላል።

ጋይሮ አንዳንድ ጥቅጥቅ ያሉ ሂሳቦችን በመጠቀም ጥቅሉን ፣ ድምፁን እና ያውን ለማስላት የእራሱ ማይክሮ መቆጣጠሪያን ይ containsል።

ነገር ግን የጂሮ ጥሬ መረጃ በጩኸት እና በመንሸራተት ይሠቃያል ፣ ስለሆነም ነገሮችን ለማቅለል እና ንፁህ ጥቅም ላይ ሊውል የሚችል ውሂብን ለመስጠት ውጫዊ ቤተመጽሐፍት ተጠቀምን።

ኒዮፒክስል በግለሰብ ደረጃ አድራሻ ሊሰጡ የሚችሉ እና በባንዶች እና ቀለበቶች ውስጥ በሰንሰለት የታሰሩ የ RGB ሊዶች ናቸው። እነሱ በ 5 ቪ ላይ ይሰራሉ እና እነሱ የራሳቸው ወረዳ አላቸው ፣ ስለዚህ የኒዮፒክሴሎችን ኃይል ማብራት እና የውሂብ መስመሩን በመጠቀም ከእነሱ ጋር መገናኘት ያስፈልግዎታል። ግንኙነቱ የሚከናወነው በአንድ የውሂብ መስመር ሰዓት እና ውሂብ (ተጨማሪ ዝርዝሮች እዚህ)። Adafruit ከኒዮፒክስል ቀለበቶች ጋር ለመገናኘት ንፁህ ቤተ -መጽሐፍት ይሰጣል።

ኮዱ

በ l oop () ተግባር ውስጥ MPU6050_6Axis_MotionApps20 ቤተ -መጽሐፍት ይባላል። ቤተ መፃህፍቱ ከጂሮስኮፕ አዲስ ውሂብ ሲኖረው ያው ፣ ቅጥነት እና ጥቅል የሚወክሉ 3 ክርክሮችን የያዘ redrawLeds (x ፣ y ፣ z) ብሎ ይጠራል።

በውስጥ redrawLeds ():

- እኛ በሁለት ዘንግ ላይ እናተኩራለን - y ፣ z

- ከ -MAX_ANGLE እስከ +MAX_ANGLE ሁለቱንም ዘንጎች እየገደብን ነው ፣ ከፍተኛውን አንግል ወደ 45 ወስነናል እና ሊለወጥ የሚችል ነው

- እኛ 360 ደረጃዎችን በ 4 ኳድራቶች እንከፋፍለን እና ለእያንዳንዳቸው የ LightLeds () ተግባሮችን እንጠራለን -

* y አሉታዊ ፣ z አዎንታዊ የመጀመሪያ ኳድራንት መሪዎችን ከ 0 እስከ 5 ይቆጣጠራል ፣ አንግል ከ 0 ወደ 89 ይሆናል

* y አሉታዊ ፣ z አሉታዊ ሁለተኛ አራተኛ መቆጣጠሪያዎች ከ 6 እስከ 12 ይመራሉ ፣ አንግል ከ 89 ወደ 0 ይሆናል

*… ወዘተ

- በ LightLeds ተግባር ውስጥ

* አርክታንጀንት በመጠቀም በሁለቱ ዘንግ ላይ የተመሠረተ አንግል እሰላለሁ (የተያያዘውን ስዕል ይመልከቱ)

* የአሩዲኖ ካርታ ተግባርን በመጠቀም ለማሳየት ያነሳሳውን አስላለሁ

* እኔ የመሪውን ድርድር ከሁለት መሪ በስተቀር ሁሉንም እቀዳለሁ ፣ ከዚህ በፊት ካሰላሁት መሪ ቦታ ጋር የሚዛመድ እና ከዚህ በፊት መሪ ቦታ (የደበዘዘ ውጤት ለማሳየት)

* የኒዮፒክስል ልኬትን ከግምት ውስጥ ለማስገባት normalizeLedPosition () የተባለ ተግባር እጠቀማለሁ። የኒዮፒክስል ቀለበት እንደወደደው ሊሽከረከር ስለሚችል እና ከጂስትሮስኮፕ ጋር መጣጣም ስለሚችል መለኪያው ጠቃሚ ነው

* እኔ የመጎተት ዘንግን እያተምኩ ነው ፣ የመራው ብርሃን እና አንግል አለው

ሂሳብ

ማዕዘኑን ለመወሰን ጥቅም ላይ ከሚውለው ቀለበት እና ከትሪግኖሜትሪክ ተግባር ጋር ስዕል ተያይዣለሁ።

የሚመከር: