ዝርዝር ሁኔታ:

ሳይን-ኤሴ ድራጎን 10 ደረጃዎች (ከስዕሎች ጋር)
ሳይን-ኤሴ ድራጎን 10 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: ሳይን-ኤሴ ድራጎን 10 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: ሳይን-ኤሴ ድራጎን 10 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: Yiya laytan:Shalom koyr: WOLAYTA, DAWURO, GAMO ,GOFA, KONTA Ethiopian christian mezmur የኢትዮጲያ መዝሙር 2024, ህዳር
Anonim
ሳይን-ኤሴ ድራጎን
ሳይን-ኤሴ ድራጎን

ሳይን-ኢስ ዘንዶ ለቀጣዮቹ ሶስት ሶስት ሰዓታት የአየር ሁኔታ ትንበያ ለመንገር ሜካኒካዊ እንቅስቃሴዎችን እና መብራቶችን የሚጠቀም የአካባቢ የቤት ማስጌጫ ቁራጭ ነው። በትርጉም ፣ ድባብ የአንድን ነገር አከባቢ ወዲያውኑ ይገልጻል ፤ ስለዚህ የአየር ሁኔታ መረጃን በአከባቢ ማሳያ ውስጥ ማካተት ተገቢ ሆኖ ተወስኗል። የአየር ሁኔታ ሳይታሰብ የሰዎችን ቀን የሚቀይር እና በየደቂቃው አልፎ ተርፎም ወደ ሁለተኛው የሚለወጥ የመረጃ ቁራጭ ነው።

የቻይናው ድራጎን “የኃይል ፣ የጥንካሬ እና የመልካም ዕድል ምልክት” ሲሆን በእስያ ክፍለ አህጉር በኩል በከፍተኛ የባህል እና ባህላዊ እሴት ላይ በተደጋጋሚ ይያዛል። የቻይናው ድራጎን መልካም ዕድል ከማምጣት በተጨማሪ “ውሃ ፣ ዝናብ ፣ አውሎ ነፋስ እና ጎርፍ” የሚቆጣጠሩ ኃይለኛ ሀይሎች እንዳሉት ይነገራል። በመጨረሻም ፣ የቻይናው ድራጎን የአየር ሁኔታ መረጃን ለመወከል ተገቢ ሆኖ ተቆጥሯል።

ምስላዊነት

ሳይን-ኤስ ኤስ ድራጎን የአየር ሁኔታ ትንበያውን ለሦስት የ 3 ሰዓታት ክፍተቶች በሚወክሉ በሦስት የተለያዩ ክፍሎች በስድስት ዋና ዋና ነጥቦች ተይlatedል። ለእያንዳንዱ የ 3 ሰዓት ልዩነት የሚከተለው መረጃ ይካተታል።

  • የአየር ሁኔታ መግለጫ - የአሁኑን የአየር ሁኔታ መረጃ ቀለም ይወስናል።
  • የሙቀት መጠን - የሰውነት ቁመትን ይገልጻል
  • እርጥበት - የ LED ክፍሎች ብልጭ ድርግም
  • የንፋስ ፍጥነት - የሰውነት ወደ ግራ እና ወደ ቀኝ የሚንቀሳቀስበትን ፍጥነት ይቆጣጠራል።

የሚያስፈልጉ ቁሳቁሶች

  1. 3 ሚሜ የፓምፕ/ካርቶን
  2. 5 ሚሜ ከእንጨት የተሠሩ dowels ወይም ቾፕስቲክ
  3. 2 ቅንጣት ፎተኖች
  4. 3 ተንሸራታች መጫወቻዎች
  5. 6 ሰርቭ ሞተሮች
  6. የ NeoPixel መብራቶች (አንድ ክር ወይም ነጠላ መብራቶች አንድ ላይ ተጣብቀዋል)
  7. እጅግ በጣም ብዙ ሙጫ
  8. አስተላላፊ ክር
  9. አሲሪሊክ ቀለም
  10. የጌጣጌጥ ጨርቅ
  11. ሌዘር መቁረጫ
  12. 3 ዲ አታሚ

ደረጃ 1: ወደ ላይ እና ወደ ታች

ውጣ ውረድ!
ውጣ ውረድ!
ውጣ ውረድ!
ውጣ ውረድ!
ውጣ ውረድ!
ውጣ ውረድ!

ሳይን-ኤስ ኤስ ዘንዶን ለመገንባት የመጀመሪያው እርምጃዎ የሰውነት ወደ ላይ እና ወደ ታች እንቅስቃሴን የሚቆጣጠር አካል መገንባት ነው። እንዴት አስደሳች ነው!

  1. የ Adobe Illustrator ፋይሎችን (.ai) ያውርዱ እና በሌዘር መቁረጫ ማሽን በመጠቀም ያትሟቸው።

    upDownBoxWithPlatform.ai በካርቶን ሰሌዳ ላይ መታተም አለበት።

  2. የ 3 ዲ ማተሚያ ፋይሎችን (.stl) ያውርዱ እና ለማተም የእርስዎን ተወዳጅ 3 -ል አታሚ ይጠቀሙ።

    ቀለሙ ለዲስክ ወይም ለዲስክ ማዞሪያው ምንም አይደለም። በሁለተኛው ምስል ውስጥ የዲስክ ማዞሪያው በዲስኩ ቀዳዳ ውስጥ ገብቷል።

  3. በስዕሎች ከ 3 እስከ 5 ላይ እንደሚታየው የመጀመሪያዎቹን ሁለት አካላት ሰብስቡ እና አንድ ላይ አጣብቋቸው።

    1. መድረክ
    2. ለዲስክ ክፍተቶች
  4. አሁን ከዚህ በታች ያሉትን ምክሮች በመከተል ሳጥኑን አንድ ላይ ያኑሩ።

    1. የ servo ሽቦዎች በሳጥኑ ጎን ባለው አራት ማዕዘን መክፈቻ በኩል መሄድ አለባቸው።
    2. የዲስክ ማዞሪያው አጭሩ መጨረሻ ከ servo ራስ ጋር ይያያዛል እና ረጅሙ ጫፉ በላዩ ላይ ክብ ቀዳዳ ካለው የሳጥኑ ሌላኛው ቀዳዳ በኩል ያልፋል። ይህ በምስል 6 ውስጥ ይታያል።
  5. አሁን ፣ ዲስኩ ሲዞር መድረኩ ተስተካክሎ እንዲቆይ ለማድረግ አንድ ነገር እንፈልጋለን። ቾፕስቲክን ወደ 75 ሚሊ ሜትር ርዝመት ባለው እንጨቶች (ስዕል 7) ይቁረጡ እና ትኩስ ሙጫ በመጠቀም በሳጥኑ አናት በኩል ወደ መድረኩ አናት ላይ ያያይ themቸው። እንጨቶቹ በ 90 ዲግሪ ወደ መድረኩ መውረዱን ያረጋግጡ።
  6. በሳጥኑ አናት ላይ ባለው የመካከለኛው ቀዳዳ ውስጥ 212 ሚሊ ሜትር ርዝመት ያለው ዱላ ወደ መድረኩ ያስገቡ።

ጣፋጭ! አሁን ለዘንዶው ወደ ላይ እና ወደ ታች እንቅስቃሴ የተሟላ ሳጥን (ስዕል 8) አለዎት። አሁን ፣ ከሁለት በላይ ጊዜ በላይ ያሉትን ደረጃዎች ይድገሙ!

ደረጃ 2 - ስለ ግራ እና ቀኝ?

ግራ እና ቀኝስ?
ግራ እና ቀኝስ?
ግራ እና ቀኝስ?
ግራ እና ቀኝስ?
ግራ እና ቀኝስ?
ግራ እና ቀኝስ?
ግራ እና ቀኝስ?
ግራ እና ቀኝስ?

አሁን ፣ ስለ ሳይንሴ ዘንዶ ግራ እና ቀኝ እንቅስቃሴ መርሳት አንችልም ፣ እንችላለን? ወደ ሁለተኛው ደረጃ እንሂድ!

  1. የ Adobe Illustrator ፋይሎችን (.ai) ያውርዱ እና በሌዘር መቁረጫ ማሽን በመጠቀም ያትሟቸው።

    1. leftRightBoxWithPlatforms.ai በካርቶን ሰሌዳ ላይ መታተም አለበት።
    2. armTurner.ai ፋይል 3 ሚሜ ውፍረት ባለው ቁሳቁስ ላይ መታተም አለበት።
  2. የ 3 ዲ ማተሚያ ፋይሎችን (.stl) ያውርዱ እና ለማተም የእርስዎን ተወዳጅ 3 -ል አታሚ ይጠቀሙ።

    ሁለት እጆቹን ማተምዎን ያረጋግጡ! እዚህ ያለው ቀለም ምንም አይደለም።

  3. ትኩስ ሙጫ በመጠቀም በምስል 3 ላይ እንደሚታየው ሁለቱን መድረኮች አንድ ላይ ያሰባስቡ።
  4. ሳጥኑን አንድ ላይ አስቀምጡ። ይህንን ለማድረግ አስቸጋሪ ሊሆን ቢችልም ፣ ይህንን ለማሳካት ይቀላል-

    1. በሳጥኑ በሁለቱም በኩል በሁለቱ ትላልቅ ስንጥቆች መካከል ሁለቱን መድረኮች ማስገባት።
    2. የላይኛውን መድረክ አናት ላይ የመጀመሪያውን ክንድ በማስቀመጥ ላይ።
    3. የክንድ ማዞሪያውን በክንድ በኩል እና ከዚያም በላይኛው መድረክ ላይ መዘርጋት።
    4. ሁለተኛውን ክንድ በታችኛው መድረክ አናት ላይ ማስቀመጥ።
    5. በሁለተኛው ክንድ እና ከዚያ በታችኛው መድረክ በኩል የእጅ ማዞሪያውን ማሰር።
    6. በ 3 ዲ የታተመ የእጅ ማዞሪያ በአራት ማዕዘን መክፈቻ በኩል የእጅ ማዞሪያውን መጣበቅ።
    7. የማዞሪያው ሌላኛው ጫፍ በ servo ሞተር አናት ላይ ይሄዳል።
    8. የላይኛውን ፣ የታችኛውን እና የኋላ ቁርጥራጮቹን በሳጥኑ ላይ ይጨምሩ።

የመጨረሻው የተሰበሰበበት ሳጥንዎ ስድስተኛውን ስዕል መምሰል አለበት። አሁን ፣ ያንን ሁለት ተጨማሪ ጊዜ መድገም ይችላሉ!

በዚህ ደረጃ መጨረሻ ፣ እያንዳንዳቸው ወደ ላይ/ታች እና ግራ/ቀኝ የመንቀሳቀስ ስርዓቶች ሶስት እያንዳንዳቸው ስድስት ሳጥኖች ሊኖሯቸው ይገባል።

ደረጃ 3 - ሰውነትን ከፍ ማድረግ… እንዴት?

ሰውነትን ከፍ ማድረግ… እንዴት?
ሰውነትን ከፍ ማድረግ… እንዴት?

ጥሩ ጥያቄ! ያ እነዚያ 3 ዲ የታተሙ ተንሸራታች ባለቤቶች ሲገቡ የተካተተውን.stl ፋይል ያውርዱ እና 3 ዲ አታሚ በመጠቀም ያትሙት። ለ 6 የተለያዩ ሳጥኖች በአጠቃላይ 6 ባለቤቶችን ማተምዎን ያረጋግጡ።

ከላይ የተንሸራታች ባለቤቱን ስዕል ካዩ ፣ አስገራሚው ተበላሽቷል - ያ የእኛ ሳይን -ese ዘንዶ ቀለም ነው!

ደረጃ 4: ግን እነዚህ ሳጥኖች ያን ያህል ቆንጆ አይደሉም…

እና እስማማለሁ! እነዚያን ሁሉ ሳጥኖች ለመያዝ እና ለመደበቅ እጅግ በጣም የሚስብ ሣጥን ለመቁረጥ የሌዘር መቁረጫ የምንጠቀመው ለዚህ ነው።

እነዚያን የ Adobe Illustrator ፋይሎችን ያውርዱ እና በሌዘር መቁረጫ በመጠቀም ይቁረጡ። የደመናዎች ንድፍ ከአንዱ አስተዋጽዖ አበርካቾች በአንዱ እጅ ተቀርጾ ነበር። በሥዕላዊ መግለጫው ፋይል ውስጥ በማስወገድ እና እንደፈለጉ የራስዎን ንድፍ በማከል እነሱን ለመቀየር ነፃነት ይሰማዎ! ከዚህ በታች ሁሉንም ነገር አንድ ላይ ለማድረግ የተጠቆሙ ደረጃዎች ናቸው።

  1. ከመጀመሪያው ፋይል (outerBoxFinal_1) ሶስቱን ቁርጥራጮች አንድ ላይ ሰብስብ እና ሙጫ።
  2. ቁርጥራጩን ከሁለተኛው ፋይል (outerBoxFinal_2) ገና አያክሉ።
  3. ቁራጩን ከሶስተኛው ፋይል (outerBoxFinal_3) ወደ ሳጥኑ ግርጌ ያስቀምጡ እና ከላይ መዘጋት አለበት። ሙጫ በሳጥኑ ግርጌ ላይ ብቻ።
  4. የውስጠ -ቦክስ ፕላትፎርም ሁለት ጊዜ ያትሙ። በውስጣቸው ትልቅ አራት ማእዘን ቀዳዳዎች ያላቸውን ሁለት ቁርጥራጮች በአንድ ላይ ያጣምሩ። ከዚያ ፣ የተቀሩትን ሶስት ቁርጥራጮች አንድ ላይ ያጣምሩ። በመጨረሻም በውስጣቸው ቀዳዳዎች ባሉት ከሌላው ከተጣበቀ ስብስብ ጋር ያያይዙት።
  5. በትልቁ ሳጥኑ ግርጌ ላይ መድረኩን ያስቀምጡ።
  6. በመድረኩ ላይ ሁሉንም 6 ትናንሽ ሳጥኖችን ወደ ተጓዳኝ ቦታዎቻቸው ያስገቡ።
  7. አሁን ፣ ከሁለተኛው ፋይል (outerBoxFinal_2) ያለውን ቁራጭ በሳጥኑ አናት ላይ ያስቀምጡ እና በጠርዙ ዙሪያ ይለጥፉ። በላይኛው ቁራጭ ላይ ያሉት ቀዳዳዎች በትናንሽ ሳጥኖች ላይ ካለው ቀዳዳዎች ጋር መስተካከል አለባቸው። ካልሆነ ፣ ትናንሽ ሳጥኖችዎን እንደገና ያዘጋጁ። በትናንሽ ሳጥኖች ላይ ሙጫ በጭራሽ አይጨምሩ።
  8. ከታች የሚጣበቅ ቁራጭ ያለው የዳቦ ሰሌዳ እየተጠቀሙ ከሆነ ፣ ይህንን ከስር ቁራጭ መሃል አጠገብ ሳጥኑን ሲዘጉ ፣ የዳቦ ሰሌዳው ከፎተኖች ጋር አብሮ በሚጠፋበት ቦታ ላይ ያድርጉት። ከታችኛው ቁራጭ ላይ ከውጭ ከሚገኙት ፎተኖች ጋር ለመገናኘት ቀላል የሚያደርግዎት ትናንሽ ስንጥቆች አሉ።

ደረጃ 5: የሚያንሸራትቱ መጫወቻዎች ?? ወይኔ

ተንሸራታች መጫወቻዎች ?? ወይኔ!
ተንሸራታች መጫወቻዎች ?? ወይኔ!
ተንሸራታች መጫወቻዎች ?? ወይኔ!
ተንሸራታች መጫወቻዎች ?? ወይኔ!

የዘንዶው አካል;

1. ትኩስ ሙጫ ወይም ቴፕ በመጠቀም ሶስት መንሸራተቻዎችን አንድ ላይ ያጣምሩ።

2. የመንሸራተቻዎቹን ርዝመት እና ዲያሜትር ይለኩ እና የጌጣጌጥ ጨርቅን ይቁረጡ።

3. የጨርቁን ሁለቱን ጫፎች አምጥተው በአንድ ላይ መስፋት።

4. አንዴ መስፋትዎን ከጨረሱ በኋላ መንሸራተቻዎቹን እንደ ሶክ ውስጥ ያንሸራትቱ።

5. የስሊኒኩን ጫፎች በተሰፋ ጨርቅ ላይ መስፋት።

ደረጃ 6: ዘንዶዎን ያትሙ

ዘንዶ 3 ዲ የታተሙ ክፍሎች

1. ክፍሎቹ የተወሰዱት ከ https://www.thingiverse.com/thing:854575 ነው።

2. እኛ ጭንቅላትን ፣ እግሮችን እና ዓይኖችን ብቻ እንጠቀም ነበር።

3. ክፍሉን በ 3 ዲ ከታተመ በኋላ የአሸዋ ወረቀት እና አሴቶን በመጠቀም ለስላሳ ያድርጉት።

4. ክፍሎቹን ለማስጌጥ በሚፈልጉበት መንገድ ይሳሉ።

ደረጃ 7 - ዘንዶዎን በ NeoPixels ከፍ ለማድረግ ጊዜው አሁን ነው

በ NeoPixels አማካኝነት ዘንዶዎን ከፍ ለማድረግ ጊዜው አሁን ነው!
በ NeoPixels አማካኝነት ዘንዶዎን ከፍ ለማድረግ ጊዜው አሁን ነው!
በ NeoPixels አማካኝነት ዘንዶዎን ከፍ ለማድረግ ጊዜው አሁን ነው!
በ NeoPixels አማካኝነት ዘንዶዎን ከፍ ለማድረግ ጊዜው አሁን ነው!

የብርሃን ክፍል;

1. ከፈለጉ መብራቶችን ለመፍጠር በቀላሉ የኒዮፒክስል ክር መጠቀም ይችላሉ።

2. እኛ 20 ኒዮፒክስል መብራቶችን ተጠቅመን ሽቦዎችን በመጠቀም አገናኘናቸው። እነዚህ ሽቦዎች በላያቸው ላይ ተሽጠው ከድራጎን ጭብጥ ጋር እንዲመሳሰል ቀይ ሽቦን በመጠቀም ከፎቶን ጋር ተገናኝተዋል።

3. እንዲሁም የኒዮፒክስል መብራቶችዎን በረዥም ጨርቅ ላይ መስፋት ይችላሉ ፣ ግን እኛ ከብረት የተሠራ ስላይን ስላለን አልተጠቀምንም።

የክፍሎቹ ስብስብ - ክሮች ወይም ሽቦዎችን በመጠቀም በዘንዶው አካል ውስጥ ያለውን የብርሃን ክፍል ይጠብቁ። በመሠረት ሳጥኑ ውስጥ ያሉትን መብራቶች ከፎቶን ጋር ማገናኘት መቻልዎን ያረጋግጡ። ሙጫ በመጠቀም ጭንቅላቱን ፣ እግሮቹን እና ጅራቱን ወደ ሰውነት ያያይዙ። አንዴ በቦታቸው ከገቡ በኋላ ገላውን ከዚህ ቀደም ባተምናቸው ተንሸራታች መያዣዎች ውስጥ ይጠብቁ። አሁን አካሉ ለፕሮግራም ዝግጁ ነው።

ደረጃ 8 - የፕሮግራም ጊዜ

በስድስት የተለያዩ ሰርቮ ሞተሮች (አንድ ፎቶን ከአራት ጋር ብቻ መስራት) ሁለት የፓርትል ፎተኖችን የምንጠቀም ስለሆንን ፣ በማይክሮ መቆጣጠሪያዎች ላይ ብልጭ ድርግም የሚሉ ሁለት የተለያዩ ግን ተመሳሳይ ኮዶችን እንጽፋለን።

አሁን ፣ ለመጀመሪያው ማይክሮ መቆጣጠሪያ…

በአርዱዲኖ ፋይል (.ino) ውስጥ የሚከተሉትን ቤተመፃህፍት ያካትቱ እና ይገልፃሉ

#"neopixel.h" ን ያካትቱ

#"ArduinoJson.h" ን ያካትቱ

#PIXEL_PIN D4 ን ይግለጹ

#PIXEL_COUNT 18 ን ይግለጹ

በመቀጠል የሚከተሉትን ተለዋዋጮች ያውጁ

Adafruit_NeoPixel strip = Adafruit_NeoPixel (PIXEL_COUNT ፣ PIXEL_PIN);

Servo servoLeftRight_1; Servo servoUpDown_1; Servo servoLeftRight_2; Servo servoUpDown_2; int positionLeftRight_1 = 0; int positionUpDown_1 = 0; int leftRight_1 = 1; int upDown_1 = 1; int positionLeftRight_2 = 100; // በ 0 እና በ 180 (በዲግሪዎች) int positionUpDown_2 = 180 መካከል መሆን አለበት። // በ 0 እና በ 180 (በዲግሪዎች) መካከል በግራ በኩል መሆን አለበት ቀኝ_2 = 1; // 0 = ግራ ፣ 1 = ቀኝ int upDown_2 = 1; // 0 = ወደ ላይ ፣ 1 = ታች const size_t ቋት መጠንCurrent = JSON_ARRAY_SIZE (1) + JSON_OBJECT_SIZE (1) + 2*JSON_OBJECT_SIZE (2) + JSON_OBJECT_SIZE (4) + JSON_OBJECT_SIZE (5) 390; const size_t bufferSizeForecast = 38*JSON_ARRAY_SIZE (1) + JSON_ARRAY_SIZE (38) + 2*JSON_OBJECT_SIZE (0) + 112*JSON_OBJECT_SIZE (1) + 39*JSON_OBJECT_SIZE (2) + JSON) (5) + 76*JSON_OBJECT_SIZE (8) + 12490; የአየር ሁኔታ የአየር ሁኔታ [3]; ተንሳፋፊ የሙቀት መጠን Array [3]; ተንሳፋፊ እርጥበትArray [3]; ተንሳፋፊ ነፋስSpeedArray [3]; ሕብረቁምፊ timestampArray [3]; int upDownMaxDegree [3]; int leftRightSpeed [3]; ሕብረቁምፊ allData5DaysForecast;

ድር መንጠቆዎችን እንዴት ማቀናበር እንደሚችሉ ለማወቅ እዚህ ጠቅ ያድርጉ። ሲጨርሱ የሚከተሉትን መግለጫዎች እና ተግባራት ያክሉ እና አስፈላጊ ከሆነ ተገቢ ለውጦችን ያድርጉ-

ባዶነት getWeather5DayForecast () {Particle.publish ("get_weather5DayForecast"); allData5DaysForecast = ""; } ሰዓት ቆጣሪ ሰዓት የአየር ሁኔታ ትንበያ (60000 ፣ getWeather5DayForecast); ባዶ getCurrentWeather () {Particle.publish («get_currentWeather»); } የሰዓት ቆጣሪ ሰዓት ቆጣሪ የአየር ሁኔታ (60000 ፣ getCurrentWeather);

የሚከተሉት ተግባራት የዘንዶውን ወደ ላይ/ታች እና ግራ/ቀኝ እንቅስቃሴዎች ይቆጣጠራሉ

ባዶ ለውጥ changeReftRight1 () {ከሆነ (leftRight_1) {positionLeftRight_1 = positionLeftRight_1 + leftRightSpeed [0]; ከሆነ (positionLeftRight_1> 100) {leftRight_1 = 0; }} ሌላ {positionLeftRight_1 = positionLeftRight_1 - leftRightSpeed [0]; ከሆነ (positionLeftRight_1 <0) {leftRight_1 = 1; }} servoLeftRight_1. ጻፍ (positionLeftRight_1); }

ባዶ ለውጥ LeftRight2 () {

ከሆነ (leftRight_2) {positionLeftRight_2 = positionLeftRight_2 + leftRightSpeed [1]; ከሆነ (positionLeftRight_2> 100) {leftRight_2 = 0; }} ሌላ {positionLeftRight_2 = positionLeftRight_2 - leftRightSpeed [1]; ከሆነ (positionLeftRight_2 <0) {leftRight_2 = 1; }} servoLeftRight_2. ጻፍ (positionLeftRight_2); }

ባዶ ለውጥUpDown1 () {

ከሆነ (upDown_1) {positionUpDown_1 ++; ከሆነ (positionUpDown_1> upDownMaxDegree [0]) {upDown_1 = 0; }} ሌላ {positionUpDown_1--; ከሆነ (positionUpDown_1 <1) {upDown_1 = 1; }} servoUpDown_1. ጻፍ (positionUpDown_1); }

ባዶ ለውጥUpDown2 () {

ከሆነ (upDown_2) {positionUpDown_2 ++; ከሆነ (positionUpDown_2> upDownMaxDegree [1]) {upDown_2 = 0; }} ሌላ {positionUpDown_2--; ከሆነ (positionUpDown_2 <1) {upDown_2 = 1; }} servoUpDown_2. ጻፍ (positionUpDown_2); }

እንቅስቃሴዎችን በአንድ ክፍተት ውስጥ ለመለወጥ ፣ ሰዓት ቆጣሪዎች ይፈጠራሉ።

የሰዓት ቆጣሪ ሰዓት ቆጣሪLeftRight1 (100 ፣ changeLeftRight1);

የሰዓት ቆጣሪ ሰዓት ቆጣሪLeftRight2 (100 ፣ changeLeftRight2); የሰዓት ቆጣሪ ሰዓት ቆጣሪ UpDown1 (10 ፣ changeUpDown1); የሰዓት ቆጣሪ ሰዓት ቆጣሪ UpDown2 (10 ፣ changeUpDown2);

የማዋቀሩ ተግባር በመጨረሻ ቀጥሎ ይታከላል። ከድር መንጠቆዎች ጋር በሚዛመደው የኮድ መስመሮች ላይ ተገቢ ለውጦችን ማድረግዎን ያረጋግጡ።

ባዶነት ቅንብር () {// የአየር ሁኔታ ቆጣሪዎችን ሰዓት ቆጣሪውን ይጀምሩ WeatherForecast.start (); timerWeatherCurrent.start (); // Neopixels strip.begin (); // ማስጀመሪያን እንደ ፒን ሞዶ ያስቀምጡ እና እዚህ ተግባሮችን ይጀምሩ። // ማይክሮ Servo servoLeftRight_1.attach (D1) ያዋቅሩ ፤ servoUpDown_1.attach (D0); servoLeftRight_2.attach (D3); servoUpDown_2.attach (D2); servoLeftRight_1. ጻፍ (positionLeftRight_1); // የ servo አቀማመጥ servoUpDown_1. ይፃፉ (አቀማመጥUpDown_1); // የ servo አቀማመጥ servoLeftRight_2. ይፃፉ (አቀማመጥLeftRight_2); // የ servo አቀማመጥ servoUpDown_2.write (positionUpDown_2) ን ያስጀምሩ; // የ servo አቀማመጥ ሰዓት ቆጣሪን ያስጀምሩLeftRight1.start (); timerLeftRight2.start (); timerUpDown1.start (); timerUpDown2.start (); // ኮንሶል ይክፈቱ Serial.begin (9600); መዘግየት (2000); Serial.println ("ሰላም!"); // ለ get_weather5DayForecast ይመዝገቡ እና የአሁኑን የአየር ሁኔታ ድርጣቢያ ክፍልን ያግኙ። ደንበኝነት ይመዝገቡ (“መንጠቆ-ምላሽ/get_weather5DayForecast” ፣ gotWeather5DayForecast ፣ MY_DEVICES); Particle.subscribe ("መንጠቆ-ምላሽ/get_currentWeather/0" ፣ gotCurrentWeatherData ፣ MY_DEVICES); getCurrentWeather (); getWeather5DayForecast (); }

የሉፕ ተግባር ለዚህ ፕሮጀክት ጥቅም ላይ አይውልም። ከድር መንጠቆዎች የተቀበለውን መረጃ ለማስተናገድ ተግባሮቹን ልንረሳ አንችልም!

void gotWeather5DayForecast (const char *ክስተት ፣ const char *data) {allData5DaysForecast += ውሂብ; // ሁሉንም ውሂብ ወደ አንድ ሕብረቁምፊ ያስቀምጣል። int allData5DaysForecastLen = allData5DaysForecast.length (); የቻር ቋት [allData5DaysForecastLen + 1]; allData5DaysForecast.toCharArray (ቋት ፣ allData5DaysForecastLen + 1); // ለ ሕብረቁምፊ int bufferLength = sizeof (ቋት) መጠባበቂያ ይፍጠሩ ፤ ተለዋዋጭ JsonBuffer jsonBufferWeather (bufferLength); JsonObject & root = jsonBufferWeather.parseObject (ቋት); // መተንተን ከተሳካ ሙከራ ያድርጉ። ከሆነ (! root.success ()) {//Serial.println(" ለአየር ሁኔታ 5 ቀናት ትንበያ… ስህተት!)); መመለስ; } int i = 1; JsonArray & list = root ["ዝርዝር"]; ለ (JsonObject & currentObject: list) {if (i <3) {JsonObject & main = currentObject ["main"]; ተንሳፋፊ ሙቀት = ዋና ["ቴምፕ"]; int እርጥበት = ዋና ["እርጥበት"]; JsonObject & weather = currentObject ["የአየር ሁኔታ"] [0]; const char* weatherInfo = የአየር ሁኔታ ["ዋና"]; ተንሳፋፊ windSpeed = currentObject ["ነፋስ"] ["ፍጥነት"]; const char* timestamp = currentObject ["dt_txt"]; int tempFah = convertToFahrenheit (የሙቀት መጠን); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree = servoMaxDegree; int servoIncrement = updateleftRight (windSpeed); leftRightSpeed = servoIncrement; setColor (weatherInfo, i); temperatureArray = tempFah; እርጥበትArray = እርጥበት; weatherArray = የአየር ሁኔታ መረጃ; windSpeedArray = windSpeed; timestampArray = የጊዜ ማህተም; i ++; } ሌላ {ሰበር; }}}

ባዶነት gotCurrentWeatherData (const char *ክስተት ፣ const char *ውሂብ) {DynamicJsonBuffer jsonBufferWeather (bufferSizeCurrent); JsonObject & root = jsonBufferWeather.parseObject (ውሂብ); // መተንተን ከተሳካ ሙከራ ያድርጉ። ከሆነ (! root.success ()) {//Serial.println(" ለአሁኑ የአየር ሁኔታ በመሥራት ላይ… ስህተት!)); መመለስ; } JsonObject & weather = root ["የአየር ሁኔታ"] [0]; const char* weather_main = የአየር ሁኔታ ["ዋና"]; JsonObject & main = root ["ዋና"]; ተንሳፋፊ main_temp = ዋና ["temp"]; int main_humidity = ዋና ["እርጥበት"]; ተንሳፋፊ wind_speed = ስር ["ነፋስ"] ["ፍጥነት"]; const char* timestamp = root ["dt_txt"]; int tempFah = convertToFahrenheit (main_temp); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree [0] = servoMaxDegree; int servoIncrement = updateleftRight (wind_speed); leftRightSpeed [0] = servoIncrement; setColor (የአየር ሁኔታ_ ዋና ፣ 0); weatherArray [0] = የአየር ሁኔታ_ዋና; temperatureArray [0] = tempFah; እርጥበትArray [0] = main_humidity; windSpeedArray [0] = የንፋስ ፍጥነት; timestampArray [0] = የጊዜ ማህተም; }

ከዚህ በታች የ servo ሞተሮችን አቀማመጥ ማዘመን ፣ ከኬልቪን ወደ ፋራናይት የሙቀት መጠን መለወጥ እና የ LEDs ቀለሞችን ማቀናበርን የሚቆጣጠሩ ተጨማሪ ተግባሮችን ማግኘት ይችላሉ።

int updateUpDown (float temp) {// ዲግሪውን ወደ [0, 180] float servoMaxDegree = temp * 45/31 + (990/31); Serial.print ("አዲስ servo ዲግሪ:"); Serial.println (servoMaxDegree); servoMaxDegree ን መመለስ; }

int updateleftRight (ተንሳፋፊ ነፋስ ፍጥነት) {

// የነፋሱን ፍጥነት በ [1, 100] ተንሳፋፊ servoIncrement = windSpeed * 99/26 + 1 ክልል ውስጥ ካርታ ያድርጉ። Serial.print ("አዲስ የ servo ጭማሪ እሴት:"); Serial.println (servoIncrement); ተመለስ servoIncrement; }

int convertToFahrenheit (ተንሳፋፊ tempKel) {

int tempFah = tempKel * 9.0 / 5.0 - 459.67; ተመለስ tempFah; }

ባዶነት setColor (ሕብረቁምፊ weatherDesc ፣ int index) {

int ledIndex = 0; ከሆነ (መረጃ ጠቋሚ == 0) {ledIndex = 0; } ሌላ ከሆነ (መረጃ ጠቋሚ == 1) {ledIndex = 6; } ሌላ ከሆነ (መረጃ ጠቋሚ == 2) {ledIndex = 12; } ሌላ {ተመለስ; } ከሆነ (weatherDesc == "አጽዳ") {// ቢጫ ለ (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (253, 219, 62)); // ቢጫ ስትሪፕ. አሳይ (); መዘግየት (20); }} ሌላ ከሆነ (weatherDesc == "ደመናዎች") {// ግራጫ ለ (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (223, 229, 237)); // ግራጫ ስትሪፕ. ማሳያ (); መዘግየት (20); }} ሌላ ከሆነ (weatherDesc == "በረዶ") {// ነጭ ለ (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (255, 225, 225)); // ነጭ ስትሪፕ. ማሳያ (); መዘግየት (20); }} ሌላ ከሆነ (weatherDesc == "ዝናብ") {// ሰማያዊ ለ (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (119, 191, 246)); // ሰማያዊ ስትሪፕ. ማሳያ (); መዘግየት (20); }} ሌላ {// ቀይ ለ (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (254, 11, 5)); // ቀይ strip.show (); መዘግየት (20); }}}

አንዴ ወደ አርዱዲኖ ፋይልዎ ሁሉንም ነገር ካከሉ ፣ ያጠናቅሩት። ስህተቶች ከሌሉ ይቀጥሉ እና ኮዱን ወደ መጀመሪያው ፎቶን ያብሩ። ቀጣዩ ደረጃ በሁለተኛው ፎቶን ላይ የሚበራ ተመሳሳይ ኮድ ይሰጥዎታል።

ደረጃ 9 ፕሮግራሚንግ ይቀጥላል

የሁለተኛው ፎቶን ኮድ ለመጀመሪያው ከሞላ ጎደል ተመሳሳይ ስለሆነ ፣ ኮዱ በሙሉ ተገልብጦ ከታች ተለጠፈ -

#"ArduinoJson.h" ን ያካትቱ

Servo servoLeftRight_3;

Servo servoUpDown_3;

int positionLeftRight_3 = 45;

int positionUpDown_3 = 0; int leftRight_3 = 1; int upDown_3 = 1;

const size_t bufferSizeCurrent = JSON_ARRAY_SIZE (1) + JSON_OBJECT_SIZE (1) + 2*JSON_OBJECT_SIZE (2) + JSON_OBJECT_SIZE (4) + JSON_OBJECT_SIZE (5) + JSON_OBJECT_SZE (6)

const size_t bufferSizeForecast = 38*JSON_ARRAY_SIZE (1) + JSON_ARRAY_SIZE (38) + 2*JSON_OBJECT_SIZE (0) + 112*JSON_OBJECT_SIZE (1) + 39*JSON_OBJECT_SIZE (2) + JSON) (5) + 76*JSON_OBJECT_SIZE (8) + 12490;

የአየር ሁኔታ የአየር ሁኔታ [3];

ተንሳፋፊ የሙቀት መጠን Array [3]; ተንሳፋፊ እርጥበትArray [3]; ተንሳፋፊ ነፋስSpeedArray [3]; ሕብረቁምፊ timestampArray [3]; int upDownMaxDegree [3]; int leftRightSpeed [3];

ሕብረቁምፊ allData5DaysForecast;

ባዶነት getWeather5DayForecast ()

{Particle.publish («get_weather5DayForecast2»); allData5DaysForecast = ""; }

የሰዓት ቆጣሪ ሰዓት የአየር ሁኔታ ትንበያ (60000 ፣ getWeather5DayForecast); // 10 ፣ 800 ፣ 000 ms = 3 ቀናት

ባዶነት getCurrentWeather ()

{Particle.publish («get_currentWeather2»); }

የሰዓት ቆጣሪ ሰዓት ቆጣሪ የአየር ሁኔታ (60000 ፣ getCurrentWeather);

ባዶ ለውጥ LeftRight3 () {

ከሆነ (leftRight_3) {positionLeftRight_3 = positionLeftRight_3 + leftRightSpeed [2]; ከሆነ (positionLeftRight_3> 100) {leftRight_3 = 0; }} ሌላ {positionLeftRight_3 = positionLeftRight_3 - leftRightSpeed [2]; ከሆነ (positionLeftRight_3 <0) {leftRight_3 = 1; }} servoLeftRight_3. ጻፍ (positionLeftRight_3); }

ባዶ ለውጥUpDown3 () {

ከሆነ (upDown_3) {positionUpDown_3 ++; ከሆነ (positionUpDown_3> upDownMaxDegree [2]) {upDown_3 = 0; }} ሌላ {positionUpDown_3--; ከሆነ (positionUpDown_3 <1) {upDown_3 = 1; }} servoUpDown_3. ጻፍ (positionUpDown_3); }

የሰዓት ቆጣሪ ሰዓት ቆጣሪLeftRight3 (100 ፣ changeLeftRight3);

የሰዓት ቆጣሪ ሰዓት ቆጣሪ UpDown3 (10 ፣ changeUpDown3);

ባዶነት ማዋቀር () {

// የአየር ሰዓት ቆጣሪዎችን ሰዓት ቆጣሪን ይጀምሩ WeatherForecast.start (); timerWeatherCurrent.start (); // ማስጀመሪያን እንደ ፒን ሞዶ ያስቀምጡ እና እዚህ ተግባሮችን ይጀምሩ። // ማይክሮ Servo servoLeftRight_3.attach (D1) ያዋቅሩ ፤ servoUpDown_3.attach (D0);

servoLeftRight_3. ጻፍ (positionLeftRight_3); // የ servo ቦታን ያስጀምሩ

servoUpDown_3. ጻፍ (positionUpDown_3); // የ servo ቦታን ያስጀምሩ

timerLeftRight3. ጀምር ();

timerUpDown3.start (); // ኮንሶል ይክፈቱ Serial.begin (9600); መዘግየት (2000); Serial.println ("ሰላም!"); // ለ get_weather5DayForecast ደንበኝነት ይመዝገቡ እና የአሁኑን የአየር ሁኔታ ድርጣቢያ ክፍልን ያግኙ። ይመዝገቡ (“መንጠቆ-ምላሽ/get_weather5DayForecast2” ፣ gotWeather5DayForecast ፣ MY_DEVICES); Particle.subscribe ("መንጠቆ-ምላሽ/get_currentWeather2/0" ፣ gotCurrentWeatherData ፣ MY_DEVICES); getCurrentWeather (); getWeather5DayForecast (); }

ባዶነት አግኝቷል የአየር ሁኔታ 5DayForecast (const char *ክስተት ፣ const char *ውሂብ)

{allData5DaysForecast += ውሂብ; // ሁሉንም ውሂብ ወደ አንድ ሕብረቁምፊ ያስቀምጣል። int allData5DaysForecastLen = allData5DaysForecast.length (); የቻር ቋት [allData5DaysForecastLen + 1]; allData5DaysForecast.toCharArray (ቋት ፣ allData5DaysForecastLen + 1); // ለ ሕብረቁምፊ int bufferLength = sizeof (ቋት) መጠባበቂያ ይፍጠሩ ፤ ተለዋዋጭ JsonBuffer jsonBufferWeather (bufferLength); JsonObject & root = jsonBufferWeather.parseObject (ቋት); //Serial.println(allData5DaysForecast); // መተንተን ከተሳካ ሙከራ ያድርጉ። ከሆነ (! root.success ()) {//Serial.println(" ለአየር ሁኔታ 5 ቀናት ትንበያ… ስህተት!)); መመለስ; } int i = 1; JsonArray & list = root ["ዝርዝር"]; ለ (JsonObject & currentObject: list) {if (i <3) {JsonObject & main = currentObject ["main"]; ተንሳፋፊ ሙቀት = ዋና ["ቴምፕ"]; int እርጥበት = ዋና ["እርጥበት"]; JsonObject & weather = currentObject ["የአየር ሁኔታ"] [0]; const char* weatherInfo = የአየር ሁኔታ ["ዋና"]; ተንሳፋፊ windSpeed = currentObject ["ነፋስ"] ["ፍጥነት"]; const char* timestamp = currentObject ["dt_txt"]; int tempFah = convertToFahrenheit (የሙቀት መጠን); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree = servoMaxDegree; int servoIncrement = updateleftRight (windSpeed); leftRightSpeed = servoIncrement; temperatureArray = tempFah; እርጥበትArray = እርጥበት; weatherArray = የአየር ሁኔታ መረጃ; windSpeedArray = windSpeed; timestampArray = የጊዜ ማህተም; i ++; } ሌላ {ሰበር; }}}

ባዶነት አግኝCurrentWeatherData (const char *ክስተት ፣ const char *ውሂብ)

{DynamicJsonBuffer jsonBufferWeather (bufferSizeCurrent); JsonObject & root = jsonBufferWeather.parseObject (ውሂብ); //Serial.println (ውሂብ); // መተንተን ከተሳካ ሙከራ ያድርጉ። ከሆነ (! root.success ()) {//Serial.println(" ለአሁኑ የአየር ሁኔታ በመሥራት ላይ… ስህተት!)); መመለስ; } JsonObject & weather = root ["የአየር ሁኔታ"] [0]; const char* weather_main = የአየር ሁኔታ ["ዋና"]; JsonObject & main = root ["ዋና"]; ተንሳፋፊ main_temp = ዋና ["temp"]; int main_humidity = ዋና ["እርጥበት"]; ተንሳፋፊ wind_speed = ስር ["ነፋስ"] ["ፍጥነት"]; const char* timestamp = root ["dt_txt"]; int tempFah = convertToFahrenheit (main_temp); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree [0] = servoMaxDegree; int servoIncrement = updateleftRight (wind_speed); leftRightSpeed [0] = servoIncrement; weatherArray [0] = የአየር ሁኔታ_ዋና; temperatureArray [0] = tempFah; እርጥበትArray [0] = main_humidity; windSpeedArray [0] = የንፋስ ፍጥነት; timestampArray [0] = የጊዜ ማህተም; }

int updateUpDown (ተንሳፋፊ ሙቀት) {

// ዲግሪውን ወደ [0 ፣ 180] ተንሳፋፊ servoMaxDegree = temp * 45/33 (990/31) ባለው ክልል ውስጥ ካርታ ያድርጉ ፤ Serial.print ("አዲስ servo ዲግሪ:"); Serial.println (servoMaxDegree); servoMaxDegree ን መመለስ; }

int updateleftRight (ተንሳፋፊ ነፋስ ፍጥነት) {

// የነፋሱን ፍጥነት በ [1, 100] ተንሳፋፊ servoIncrement = windSpeed * 99/26 + 1 ክልል ውስጥ ካርታ ያድርጉ። Serial.print ("አዲስ የ servo ጭማሪ እሴት:"); Serial.println (servoIncrement); ተመለስ servoIncrement; }

int convertToFahrenheit (ተንሳፋፊ tempKel) {

int tempFah = tempKel * 9.0 / 5.0 - 459.67; ተመለስ tempFah; }

አደረግከው! በፕሮጀክቱ የፕሮግራም ክፍል በኩል ደርሰዋል! አሁን ፣ ከኤርቮ ሞተርስ እና ከኒዮፒክስሎች እስከ ዳቦ ሰሌዳ እና ማይክሮ መቆጣጠሪያ ድረስ ሁሉንም ሽቦዎች እና ግንኙነቶች ማድረግዎን ያረጋግጡ። ማስታወሻ - ለግራ እና ቀኝ የሰውነት እንቅስቃሴዎች በሳጥኖቹ ላይ በአቀባዊ መሰንጠቂያዎች በኩል ተጨማሪውን dowels/ቾፕስቲክ ያስገቡ። ሌላኛው ጫፍ ከዘንዶው አካል ጋር መገናኘት አለበት።

ደረጃ 10 - በእርስዎ ዘንዶ ይደሰቱ

እንኳን ደስ አላችሁ! ከባዶ የኃጢአት ዘንዶን ገንብተዋል! አሁን ማድረግ ያለብዎት ቁጭ ብለው በአከባቢ ማሳያዎ መደሰት ብቻ ነው!

ማሳሰቢያ -ይህ ፕሮጀክት በጆአን ቤምፖንግ እና በ Soundarya Muthuvel እንደ የኮርስ ሥራ አካል ሆኖ ተገንብቷል። የትምህርቱ ገጽ እዚህ ይገኛል።

የሚመከር: