Orodha ya maudhui:

Joka la Sine-ese: Hatua 10 (na Picha)
Joka la Sine-ese: Hatua 10 (na Picha)

Video: Joka la Sine-ese: Hatua 10 (na Picha)

Video: Joka la Sine-ese: Hatua 10 (na Picha)
Video: 10 эффективных приемов самомассажа, которые помогут убрать живот и бока. Коррекция фигуры 2024, Julai
Anonim
Sine-ese Joka
Sine-ese Joka

Sine-ese Dragon ni kipande cha mapambo ya nyumba iliyoko ambayo hutumia harakati za mitambo na taa kukuambia utabiri wa hali ya hewa kwa vipindi vitatu vya masaa matatu. Kwa ufafanuzi, mazingira yanaelezea mazingira ya karibu ya kitu; kwa hivyo iliamuliwa kuwa sahihi kuingiza data ya hali ya hewa katika onyesho la mazingira. Hali ya hewa ni jambo ambalo hubadilisha siku ya watu bila kukusudia na ni kipande cha habari ambacho hubadilika kila dakika, au hata hadi ya pili.

Joka la Wachina ni "ishara ya nguvu, nguvu, na bahati nzuri" na hushikwa mara kwa mara kwa thamani ya juu ya kitamaduni na jadi kote Bara la Asia. Mbali na kuleta bahati nzuri, Joka la Wachina pia inasemekana ina nguvu kubwa zinazodhibiti "maji, mvua, vimbunga, na mafuriko." Mwishowe, Joka la Wachina lilionekana kuwa sahihi kuwakilisha data ya hali ya hewa.

Taswira

Joka la Sine-ese linatumiwa kwa alama kuu sita katika sehemu tatu tofauti zinazowakilisha utabiri wa hali ya hewa kwa vipindi vitatu vya masaa 3. Kwa kila muda wa saa 3, habari ifuatayo itajumuishwa:

  • Maelezo ya hali ya hewa - huamua rangi ya habari ya hali ya hewa ya sasa.
  • Joto - inabainisha urefu wa mwili
  • Unyevu - kupepesa kwa sehemu za LED
  • Kasi ya upepo - hudhibiti kasi ya mwili kusonga kushoto na kulia.

Vifaa vinahitajika

  1. 3 mm plywood / Kadibodi
  2. 5 mm dowels za mbao au vijiti
  3. Picha 2 za Chembe
  4. Vinyago vya Slinky
  5. Motors 6 za servo
  6. Taa za NeoPixel (iwe strand au taa za kibinafsi zimeshonwa pamoja)
  7. Gundi kubwa sana
  8. Thread conductive
  9. Rangi ya Acrylic
  10. Kitambaa cha mapambo
  11. Laser cutter
  12. Printa ya 3D

Hatua ya 1: Juu na chini

Juu na chini!
Juu na chini!
Juu na chini!
Juu na chini!
Juu na chini!
Juu na chini!

Hatua yako ya kwanza kabisa ya kujenga Joka la Sine-ese ni kujenga sehemu inayodhibiti mwendo wa juu na chini wa mwili. Inasisimua kama nini!

  1. Pakua faili za Adobe Illustrator (.ai) na uzichapishe kwa kutumia mashine ya kukata laser.

    upDownBoxWithPlatform.ai inapaswa kuchapishwa kwenye kadibodi

  2. Pakua faili za uchapishaji za 3D (.stl) na utumie printa yako ya 3D kupenda kuzichapisha.

    Rangi haijalishi kwa diski au kizuizi cha diski. Katika picha ya pili, kizuizi cha diski kimeingizwa ndani ya shimo la diski

  3. Unganisha vifaa viwili vya kwanza na uziunganishe pamoja kama inavyoonyeshwa kwenye picha 3 hadi 5.

    1. Jukwaa
    2. Grooves kwa disc
  4. Sasa, weka kisanduku kifuatacho vidokezo hapa chini.

    1. Waya za servo zinapaswa kupitia ufunguzi wa mstatili upande wa sanduku.
    2. Mwisho mfupi zaidi wa kizuizi cha diski hushikamana na kichwa cha servo na mwisho mrefu hupitia shimo la upande wa pili wa sanduku na shimo la duara juu yake. Hii imeonyeshwa kwenye picha 6.
  5. Sasa, tunahitaji kitu kuhakikisha jukwaa linakaa sawa wakati diski inageuka. Kata kijiti cha kuku ndani ya vijiti vya urefu wa 75 mm (picha 7) na uvinamishe kupitia juu ya sanduku hadi juu ya jukwaa ukitumia gundi moto. Hakikisha kwamba vijiti vimesawazishwa kwa digrii 90 kwenye jukwaa.
  6. Ingiza kijiti cha urefu wa 212 mm kwenye shimo la kati juu ya sanduku kwenye jukwaa.

Tamu! Sasa una sanduku kamili (picha ya 8) kwa harakati ya juu na chini ya joka. Sasa, rudia hatua hapo juu mara mbili zaidi!

Hatua ya 2: Je! Kuhusu Kushoto na Kulia ?

Vipi Kuhusu Kushoto na Kulia ?!
Vipi Kuhusu Kushoto na Kulia ?!
Vipi Kuhusu Kushoto na Kulia ?!
Vipi Kuhusu Kushoto na Kulia ?!
Vipi Kuhusu Kushoto na Kulia ?!
Vipi Kuhusu Kushoto na Kulia ?!
Vipi Kuhusu Kushoto na Kulia ?!
Vipi Kuhusu Kushoto na Kulia ?!

Sasa, hatuwezi kusahau juu ya harakati za kushoto na kulia za Joka la Sine-ese, tunaweza? Wacha tuingie katika hatua ya pili!

  1. Pakua faili za Adobe Illustrator (.ai) na uzichapishe kwa kutumia mashine ya kukata laser.

    1. kushotoRightBoxWithPlatforms.ai inapaswa kuchapishwa kwenye kadibodi.
    2. faili ya armTurner.ai inapaswa kuchapishwa kwenye nyenzo ambayo ni 3 mm nene.
  2. Pakua faili za uchapishaji za 3D (.stl) na utumie printa yako ya 3D kupenda kuzichapisha.

    Hakikisha unachapisha mikono miwili! Rangi haijalishi hapa

  3. Kukusanya majukwaa mawili pamoja kama inavyoonekana kwenye picha 3 ukitumia gundi moto.
  4. Weka pamoja sanduku. Ingawa inaweza kuwa ngumu kufanya hivyo, ni rahisi kufikia kwa:

    1. Kuingiza majukwaa mawili kati ya vipande viwili vikubwa kila upande wa sanduku.
    2. Kuweka mkono wa kwanza juu ya jukwaa la juu.
    3. Kukanya kipenyo cha mkono kupitia mkono na kisha jukwaa la juu.
    4. Kuweka mkono wa pili juu ya jukwaa la chini.
    5. Kukanya kipenyo cha mkono kupitia mkono wa pili na kisha jukwaa la chini.
    6. Kubandika kizungushi cha mkono kupitia ufunguzi wa mstatili wa kipinduaji cha mkono kilichochapishwa cha 3D.
    7. Mwisho mwingine wa Turner huenda juu ya servo motor.
    8. Ongeza vipande vya juu, chini, na nyuma kwenye sanduku.

Sanduku lako la mwisho lililokusanyika linapaswa kuonekana kama picha ya sita. Sasa, unapata kurudia mara mbili zaidi!

Mwisho wa hatua hii, unapaswa kuwa na masanduku sita na matatu kila moja ya mifumo ya harakati ya juu / chini na kushoto / kulia.

Hatua ya 3: Kushikilia Mwili… VIPI?

Kushikilia Mwili… VIPI?
Kushikilia Mwili… VIPI?

Swali zuri! Hapo ndipo wakati wamiliki wa slinky waliochapishwa wa 3D wanapoingia. Pakua faili iliyojumuishwa ya.stl na uichapishe kwa kutumia printa ya 3D. Hakikisha kuchapisha wamiliki 6 kwa jumla kwa visanduku 6 tofauti.

Ikiwa umeona picha ya mmiliki mwembamba hapo juu, mshangao umeharibiwa - hiyo ni rangi ya Joka letu la Sine-ese!

Hatua ya 4: Lakini hizo Sanduku Sio Nzuri…

Na ninakubali! Hii ndio sababu tutatumia mkataji wa laser kukata sanduku la kuvutia zaidi kuwa na masanduku hayo yote na kuyaficha.

Pakua faili hizo za Adobe Illustrator na uzikatishe kwa kutumia kisakata laser. Ubunifu wa mawingu ulichorwa mkono na mmoja wa wachangiaji. Jisikie huru kuzibadilisha kwa kuziondoa ndani ya faili ya kielelezo na kuongeza muundo wako mwenyewe kadiri unavyoona inafaa! Chini ni hatua zilizopendekezwa za kuweka kila kitu pamoja.

  1. Unganisha na gundi vipande vyote vitatu kutoka faili ya kwanza (outerBoxFinal_1) pamoja.
  2. Usiongeze kipande kutoka kwa faili ya pili (outerBoxFinal_2) bado.
  3. Weka kipande kutoka faili ya tatu (outerBoxFinal_3) chini ya kisanduku na inapaswa kufungwa kwa juu. Gundi PEKEE chini ya sanduku.
  4. Chapisha ndaniBoxesPlatform mara mbili. Gundi vipande viwili ambavyo vina mashimo makubwa ya mstatili ndani yao pamoja. Kisha, gundi vipande vitatu vilivyobaki pamoja. Mwishowe, gundi kwenye seti nyingine ya gundi na mashimo ndani yao.
  5. Weka jukwaa chini ya sanduku kubwa.
  6. Ingiza visanduku vyote vidogo 6 kwenye matangazo yao yanayofanana kwenye jukwaa.
  7. Sasa, weka kipande kutoka faili ya pili (outerBoxFinal_2) juu ya sanduku na gundi pembeni. Mashimo kwenye kipande cha juu yanapaswa kupatana na mashimo kwenye sanduku ndogo. Ikiwa sio hivyo, panga tena masanduku yako madogo. Usiongeze gundi kwenye masanduku madogo kabisa.
  8. Ikiwa unatumia ubao wa mkate ulio na kipande cha kunata chini, weka hii karibu na katikati ya kipande cha chini mahali ambapo ukifunga sanduku, ubao wa mkate pamoja na Photons zitoweke. Kuna vipande vidogo kwenye kipande cha chini kinachokurahisishia kuungana na Photons kutoka nje.

Hatua ya 5: Toys Slinky ?? Loo, Jamani

Toys Slinky ?? Loo, Jamani!
Toys Slinky ?? Loo, Jamani!
Toys Slinky ?? Loo, Jamani!
Toys Slinky ?? Loo, Jamani!

Mwili wa joka:

1. Unganisha slinkies tatu pamoja kwa kutumia gundi moto au mkanda.

2. Pima urefu na kipenyo cha slinkies na ukate kipande cha kitambaa cha mapambo.

3. Kuleta ncha mbili za kitambaa na kushona pamoja.

4. Ukimaliza kuzishona, teleza slinkies kama sock.

5. Shona ncha za slinky kwenye kitambaa kilichoshonwa.

Hatua ya 6: Chapisha Joka lako

Sehemu zilizochapishwa za 3D za joka:

1. Sehemu hizo zilichukuliwa kutoka

2. Tulitumia kichwa, miguu na macho tu.

3. Baada ya uchapishaji wa 3D sehemu hiyo, iwe laini kwa kutumia sandpaper na asetoni.

4. Rangi sehemu jinsi unavyotaka kuipamba.

Hatua ya 7: Wakati wa Kuongeza Joka lako na NeoPixels

Wakati wa Kuongeza Joka lako na NeoPixels!
Wakati wa Kuongeza Joka lako na NeoPixels!
Wakati wa Kuongeza Joka lako na NeoPixels!
Wakati wa Kuongeza Joka lako na NeoPixels!

Sehemu nyepesi:

1. Unaweza kutumia tu kamba ya neopixel kuunda taa ikiwa ungependa (Tulikosa nyuzi).

2. Tulitumia taa 20 za neopixel na kuziunganisha kwa kutumia waya. Waya hizi ziliuzwa juu yao na kuunganishwa na fotoni kwa kutumia wiring nyekundu ili iwe sawa na mada ya joka.

3. Unaweza pia kushona taa zako za neopixel kwenye kipande kirefu cha kitambaa, lakini hatukuzitumia kwa sababu tulikuwa na slinky iliyotengenezwa kwa chuma.

Mkutano wa sehemu: Salama sehemu nyepesi ndani ya mwili wa joka ukitumia nyuzi au waya. Hakikisha una uwezo wa kuunganisha taa kwenye picha ndani ya sanduku la msingi. Ambatisha kichwa, miguu na mkia kwa mwili kwa kutumia gundi. Mara tu wanapokuwa mahali, salama mwili ndani ya wamiliki wa slinky tuliyochapisha hapo awali. Sasa mwili uko tayari kusanidiwa.

Hatua ya 8: Muda wa Programu

Kwa kuwa tutatumia Photoni mbili za chembe kufanya kazi na motors sita tofauti za servo (Photon moja inaweza kufanya kazi na nne tu), tutakuwa tukiandika nambari mbili tofauti lakini zinazofanana kuwaangazia kwa watawala wadogo.

Sasa, kwa mdhibiti mdogo wa kwanza…

Katika faili ya Arduino (.ino), ni pamoja na maktaba zifuatazo na hufafanua:

# pamoja na "neopixel.h"

# pamoja na "ArduinoJson.h"

#fafanua PIXEL_PIN D4

#fafanua PIXEL_COUNT 18

Ifuatayo, tangaza vigezo vifuatavyo:

Ukanda wa Adafruit_NeoPixel = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN);

Servo servoLeftRight_1; Servo servoUpDown_1; Servo servoLeftRight_2; Servo servoUpDown_2; nafasi msimamoLeftRight_1 = 0; nafasi msimamoUpDown_1 = 0; int leftRight_1 = 1; int upDown_1 = 1; nafasi msimamoLeftRight_2 = 100; // lazima iwe kati ya 0 na 180 (kwa digrii) int positionUpDown_2 = 180; // inapaswa kuwa kati ya 0 na 180 (kwa digrii) int kushotoRight_2 = 1; // 0 = kushoto, 1 = kulia ndani Juu_2 = 1; // 0 = juu, 1 = chini 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) + JSI_JEC_JES 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_JJSJSJSJSJSJES (5) + 76 * JSON_OBJECT_SIZE (8) + 12490; Hali ya hewa ya kamba Kamba [3]; Joto la kuelea [3]; unyevu wa kuelea Array [3]; kuelea upepoSpeedArray [3]; Stamp timestampArray [3]; int upDownMaxDegree [3]; int leftRightSpeed [3]; Kamba yoteData5DaysForecast;

Bonyeza hapa kujifunza jinsi ya kuanzisha viboreshaji vya wavuti. Ukimaliza, ongeza maazimio na kazi zifuatazo na ufanye mabadiliko yanayofaa ikiwa ni lazima:

batili getWeather5DayForecast () {Particle.publish ("get_weather5DayForecast"); allData5DaysForecast = ""; Kipima muda} WeatherForecast (60000, getWeather5DayForecast); batili getCurrentWeather () {Particle.publish ("get_currentWeather"); } Kipima muda TimerWeatherCurrent (60000, getCurrentWeather);

Kazi zifuatazo zinadhibiti harakati za juu / chini na kushoto / kulia kwa joka:

batili changeLeftRight1 () {if (leftRight_1) {positionLeftRight_1 = positionLeftRight_1 + leftRightSpeed [0]; ikiwa (positionLeftRight_1> 100) {leftRight_1 = 0; }} mwingine {positionLeftRight_1 = positionLeftRight_1 - leftRightSpeed [0]; ikiwa (positionLeftRight_1 <0) {leftRight_1 = 1; }} servoLeftRight_1.write (nafasiLeftRight_1); }

mabadiliko batiliLeftRight2 () {

ikiwa (kushotoRight_2) {positionLeftRight_2 = positionLeftRight_2 + leftRightSpeed [1]; ikiwa (nafasiLeftRight_2> 100) {kushotoRight_2 = 0; }} mwingine {positionLeftRight_2 = positionLeftRight_2 - leftRightSpeed [1]; ikiwa (nafasiLeftRight_2 <0) {kushotoRight_2 = 1; }} servoLeftRight_2.write (nafasiLeftRight_2); }

mabadiliko batiliUpDown1 () {

ikiwa (juuDown_1) {positionUpDown_1 ++; ikiwa (positionUpDown_1> upDownMaxDegree [0]) {upDown_1 = 0; }} mwingine {positionUpDown_1--; ikiwa (positionUpDown_1 <1) {upDown_1 = 1; }} servoUpDown_1.write (nafasiUpDown_1); }

mabadiliko batiliUpDown2 () {

ikiwa (juuDown_2) {positionUpDown_2 ++; ikiwa (positionUpDown_2> UpDownMaxDegree [1]) {upDown_2 = 0; }} mwingine {positionUpDown_2--; ikiwa (positionUpDown_2 <1) {upDown_2 = 1; }} servoUpDown_2.write (nafasiUpDown_2); }

Ili kuweza kubadilisha harakati kwa muda, vipima muda vinaundwa.

Timer timerLeftRight1 (100, changeLeftRight1);

Timer timerLeftRight2 (100, changeLeftRight2); Timer timerUpDown1 (10, changeUpDown1); Timer timerUpDown2 (10, changeUpDown2);

Kazi ya kuanzisha hatimaye imeongezwa ijayo. Hakikisha kufanya mabadiliko yanayofaa kwenye mistari ya nambari inayoshughulikia vibooks.

kuanzisha batili () {// kuanza vipima muda vya hali ya hewaWeatherForecast.start (); timerWeatherCurrent.start (); // Ukanda wa Neopixels. Kuanza (); // Weka uanzishaji kama pinMode na uanze kazi hapa. // Sanidi Micro Servo servoLeftRight_1.ambatanisha (D1); kiambatisho cha servoUpDown_1 (D0); kiambatisho cha servoLeftRight_2. (D3); kiambatisho cha servoUpDown_2. (D2); servoLeftRight_1.write (nafasiLeftRight_1); // anzisha nafasi ya servo servoUpDown_1.write (positionUpDown_1); // anzisha nafasi ya servo servoLeftRight_2.write (nafasiLeftRight_2); // anzisha nafasi ya servo servoUpDown_2.write (positionUpDown_2); // anzisha kipima nafasi cha servoLeftRight1.start (); timerLeftRight2.start (); timerUpDown1. kuanza (); timerUpDown2.start (); // Fungua Serial Serial.begin (9600); kuchelewa (2000); Serial.println ("Hello!"); // Jiandikishe kwenye Get_weather5DayForecast na upate Particle ya Hali ya HewaWeather.subscribe ("majibu-ndoano / pata_Weather5DayForecast", gotWeather5DayForecast, MY_DEVICES); Jisajili kwa chembe ("jibu-jibu / pata_kisasaWeather / 0", gotCurrentWeatherData, MY_DEVICES); pataCharrentWeather (); pataWeather5DayForecast (); }

Kazi ya kitanzi haitumiki kwa mradi huu. Hatuwezi kusahau kazi za kushughulikia data iliyopokelewa kutoka kwa wavuti!

utupu gotWeather5DayForecast (const char * event, const char * data) {allData5DaysForecast + = data; // huhifadhi data zote kwa kamba moja. int allData5DaysForecastLen = yoteData5DaysForecast.length (); bafa ya char [allData5DaysForecastLen + 1]; allData5DaysForecast.toCharArray (bafa, yoteData5DaysForecastLen + 1); // tengeneza bafa ya kamba int bufferLength = sizeof (bafa); DynamicJsonBuffer jsonBufferWeather (bafaLength); JsonObject & mzizi = jsonBufferWeather.parseObject (bafa); // Mtihani ikiwa kuchanganua kunafanikiwa. ikiwa (! root.success ()) {//Serial.println ("Kutabiri hali ya hewa ya utabiri wa siku 5… KOSA!"); kurudi; } int i = 1; JsonArray & orodha = mzizi ["orodha"]; ya (JsonObject & currentObject: orodha) {if (i <3) {JsonObject & main = currentObject ["main"]; joto la kuelea = kuu ["temp"]; unyevu wa ndani = kuu ["unyevu"]; JsonObject & hali ya hewa = sasaObject ["hali ya hewa"] [0]; const char * weatherInfo = hali ya hewa ["kuu"]; kuelea upepoSpeed = sasaObject ["upepo"] ["kasi"]; const char * timestamp = currentObject ["dt_txt"]; int tempFah = kubadilishaToFahrenheit (joto); int servoMaxDegree = sasishoUpDown (tempFah); upDownMaxDegree = servoMaxDegree; int servoIncrement = sasisho la kushotoRight (kasi ya upepo); leftRightSpeed = kuongezeka kwa servo; setColor (hali ya hewaInfo, i); jotoArray = tempFah; unyevuArray = unyevu; hali ya hewaArray = hali ya hewaInfo; upepo wa kasi = kasi ya upepo; timestampArray = timestamp; i ++; } mwingine {kuvunja; }}}

batili gotCurrentWeatherData (const char * tukio, data ya char * data) {DynamicJsonBuffer jsonBufferWeather (bufferSizeCurrent); JsonObject & mzizi = jsonBufferWeather.parseObject (data); // Mtihani ikiwa kuchanganua kunafanikiwa. ikiwa (! root.success ()) {//Serial.println ("Kujitolea kwa hali ya hewa ya sasa… KOSA!"); kurudi; } JsonObject & hali ya hewa = mzizi ["hali ya hewa"] [0]; const char * weather_main = hali ya hewa ["kuu"]; JsonObject & main = mzizi ["kuu"]; kuelea main_temp = kuu ["temp"]; int main_humidity = kuu ["unyevu"]; kuelea wind_speed = mzizi ["upepo"] ["kasi"]; const char * timestamp = mzizi ["dt_txt"]; int tempFah = kubadilishaToFahrenheit (main_temp); int servoMaxDegree = sasishoUpDown (tempFah); upDownMaxDegree [0] = servoMaxDegree; int servoIncrement = updatateleftRight (kasi_ya upepo); leftRightSpeed [0] = kuongezeka kwa servo; setColor (hali ya hewa_main, 0); hali ya hewaArray [0] = hali_ya hali ya hewa; jotoArray [0] = tempFah; safu ya unyevu [0] = kuu_ unyevu; upepo wa kasi [0] = kasi ya upepo; timestampArray [0] = timestamp; }

Chini, unaweza kupata kazi za ziada zinazodhibiti uppdatering wa nafasi za motors za servo, ubadilishaji wa joto kutoka Kelvin hadi Fahrenheit na kuweka rangi za LED.

int updateUpDown (kuelea temp) {// Ramani kiwango cha anuwai ya [0, 180] ya kuelea servoMaxDegree = temp * 45/31 + (990/31); Serial.print ("digrii mpya ya servo:"); Serial.println (servoMaxDegree); kurudi servoMaxDegree; }

int updateleftRight (kuelea upepo wa kasi) {

// Ramani kasi ya upepo kwa anuwai ya [1, 100] servo ya kueleaUkuongeza = upepoSpeed * 99/26 + 1; Serial.print ("thamani mpya ya kuongezeka kwa servo:"); Serial.println (servoIncrement); kurudi servoKuongeza; }

int convertToFahrenheit (kuelea tempKel) {

int tempFah = tempKel * 9.0 / 5.0 - 459.67; kurudi tempFah; }

batili setColor (Kamba ya hali ya hewaDesc, int index) {

int ledIndex = 0; ikiwa (index == 0) {ledIndex = 0; } mwingine ikiwa (index == 1) {ledIndex = 6; } mwingine ikiwa (index == 2) {ledIndex = 12; } mwingine {kurudi; } ikiwa (hali ya hewaDesc == "Futa") {// manjano kwa (int j = ledIndex; j <ledIndex + 6; j ++) {strip.setPixelColor (j, strip. Color (253, 219, 62)); // ukanda wa manjano. onyesha (); kuchelewesha (20); }} mwingine ikiwa (weatherDesc == "Clouds") {// kijivu kwa (int j = ledIndex; j <ledIndex + 6; j ++) {strip.setPixelColor (j, strip. Color (223, 229, 237)); // ukanda wa kijivu. onyesha (); kuchelewesha (20); }} mwingine ikiwa (weatherDesc == "Theluji") {// nyeupe kwa (int j = ledIndex; j <ledIndex + 6; j ++) {strip.setPixelColor (j, strip. Color (255, 225, 225)); // strip nyeupe. onyesha (); kuchelewesha (20); }} mwingine ikiwa (weatherDesc == "Mvua") {// bluu kwa (int j = ledIndex; j <ledIndex + 6; j ++) {strip.setPixelColor (j, strip. Color (119, 191, 246)); // ukanda wa bluu. onyesha (); kuchelewesha (20); }} mwingine {// nyekundu kwa (int j = ledIndex; j <ledIndex + 6; j ++) {strip.setPixelColor (j, strip. Color (254, 11, 5)); // strip nyekundu. onyesha (); kuchelewesha (20); }}}

Mara tu unapoongeza kila kitu kwenye faili yako ya Arduino, ikusanye. Ikiwa hakuna makosa, endelea na uangaze nambari hiyo kwa Photon ya kwanza. Hatua inayofuata itakupa nambari sawa ya kuangaza kwenye Photon ya pili.

Hatua ya 9: Programu inaendelea

Kwa sababu nambari ya Photon ya pili iko karibu sawa na ile ya kwanza, nambari yote imenakiliwa na kubandikwa hapa chini:

# pamoja na "ArduinoJson.h"

Servo servoLeftRight_3;

Servo servoUpDown_3;

nafasi msimamoLeftRight_3 = 45;

nafasi msimamoUpDown_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_SIZSON0 (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_JJSJSJSJSJSJES (5) + 76 * JSON_OBJECT_SIZE (8) + 12490;

Hali ya hewa ya kamba Kamba [3];

Joto la kuelea [3]; unyevu wa kuelea Array [3]; kuelea upepoSpeedArray [3]; Stamp timestampArray [3]; int upDownMaxDegree [3]; int leftRightSpeed [3];

Kamba yoteData5DaysForecast;

utupu wa GetWeather5DayForecast ()

{Particle.chapisha ("get_weather5DayForecast2"); allData5DaysForecast = ""; }

Timer timerWeatherForecast (60000, getWeather5DayForecast); // 10, 800, 000 ms = siku 3

batili kupataCurrentWeather ()

{Particle.publish ("get_currentWeather2"); }

Timer timerWeatherCurrent (60000, getCurrentWeather);

mabadiliko batiliLeftRight3 () {

ikiwa (kushotoRight_3) {positionLeftRight_3 = positionLeftRight_3 + kushotoRightSpeed [2]; ikiwa (positionLeftRight_3> 100) {leftRight_3 = 0; }} mwingine {positionLeftRight_3 = positionLeftRight_3 - leftRightSpeed [2]; ikiwa (positionLeftRight_3 <0) {leftRight_3 = 1; }} servoLeftRight_3.write (nafasiLeftRight_3); }

batili changeUpDown3 () {

ikiwa (juuDown_3) {positionUpDown_3 ++; ikiwa (positionUpDown_3> upDownMaxDegree [2]) {upDown_3 = 0; }} mwingine {positionUpDown_3--; ikiwa (positionUpDown_3 <1) {upDown_3 = 1; }} servoUpDown_3.write (nafasiUpDown_3); }

Timer timerLeftRight3 (100, changeLeftRight3);

Timer timerUpDown3 (10, changeUpDown3);

usanidi batili () {

// kuanza kipima muda cha hali ya hewaWeatherForecast.start (); timerWeatherCurrent.start (); // Weka uanzishaji kama pinMode na uanze kazi hapa. // Sanidi Micro Servo servoLeftRight_3.ambatanisha (D1); servoUpDown_3.ambatanisha (D0);

servoLeftRight_3.write (nafasiLeftRight_3); // kuanzisha nafasi ya servo

maandishi ya servoUpDown_3 (nafasiUpDown_3); // anzisha msimamo wa servo

timerLeftRight3.start ();

timerUpDown3. kuanza (); // Fungua Serial Serial.begin (9600); kuchelewa (2000); Serial.println ("Hello!"); // Jiandikishe kwenye get_weather5DayForecast na upate Particle ya WeatherWeather Particle.subscribe ("hook-response / get_weather5DayForecast2", gotWeather5DayForecast, MY_DEVICES); Jisajili kwa chembe ("jibu-jibu / pata_kisasaWeather2 / 0", gotCurrentWeatherData, MY_DEVICES); pataCharrentWeather (); pataWeather5DayForecast (); }

utupu gotWeather5DayForecast (const char * tukio, data ya char char *)

{allData5DaysForecast + = data; // huhifadhi data zote kwa kamba moja. int allData5DaysForecastLen = yoteData5DaysForecast.length (); bafa ya char [allData5DaysForecastLen + 1]; allData5DaysForecast.toCharArray (bafa, yoteData5DaysForecastLen + 1); // tengeneza bafa ya kamba int bufferLength = sizeof (bafa); DynamicJsonBuffer jsonBufferWeather (bafaLength); JsonObject & mzizi = jsonBufferWeather.parseObject (bafa); //Serial.println (allData5DaysForecast); // Mtihani ikiwa kuchanganua kunafanikiwa. ikiwa (! root.success ()) {//Serial.println ("Kutabiri hali ya hewa ya utabiri wa siku 5… KOSA!"); kurudi; } int i = 1; JsonArray & orodha = mzizi ["orodha"]; ya (JsonObject & currentObject: orodha) {if (i <3) {JsonObject & main = currentObject ["main"]; joto la kuelea = kuu ["temp"]; unyevu wa ndani = kuu ["unyevu"]; JsonObject & hali ya hewa = sasaObject ["hali ya hewa"] [0]; const char * weatherInfo = hali ya hewa ["kuu"]; kuelea upepoSpeed = sasaObject ["upepo"] ["kasi"]; const char * timestamp = currentObject ["dt_txt"]; int tempFah = kubadilishaToFahrenheit (joto); int servoMaxDegree = sasishoUpDown (tempFah); upDownMaxDegree = servoMaxDegree; int servoIncrement = sasisho la kushotoRight (kasi ya upepo); leftRightSpeed = kuongezeka kwa servo; jotoArray = tempFah; unyevuArray = unyevu; hali ya hewaArray = hali ya hewaInfo; upepo wa kasi = kasi ya upepo; timestampArray = timestamp; i ++; } mwingine {kuvunja; }}}

batili gotCurrentWeatherData (const char * tukio, data ya char char *)

{DynamicJsonBuffer jsonBufferWeather (bafaSizeCurrent); JsonObject & mzizi = jsonBufferWeather.parseObject (data); //Serial.println (data); // Mtihani ikiwa kuchanganua kunafanikiwa. ikiwa (! root.success ()) {//Serial.println ("Kujitolea kwa hali ya hewa ya sasa… KOSA!"); kurudi; } JsonObject & hali ya hewa = mzizi ["hali ya hewa"] [0]; const char * weather_main = hali ya hewa ["kuu"]; JsonObject & main = mzizi ["kuu"]; kuelea main_temp = kuu ["temp"]; int main_humidity = kuu ["unyevu"]; kuelea wind_speed = mzizi ["upepo"] ["kasi"]; const char * timestamp = mzizi ["dt_txt"]; int tempFah = kubadilishaToFahrenheit (main_temp); int servoMaxDegree = sasishoUpDown (tempFah); upDownMaxDegree [0] = servoMaxDegree; int servoIncrement = updatateleftRight (kasi_ya upepo); leftRightSpeed [0] = kuongezeka kwa servo; hali ya hewaArray [0] = hali_ya hali ya hewa; jotoArray [0] = tempFah; safu ya unyevu [0] = kuu_ unyevu; upepo wa kasi [0] = kasi ya upepo; timestampArray [0] = timestamp; }

sasisho la ndaniUpDown (muda wa kuelea) {

// Ramani kiwango kwa anuwai ya [0, 180] ya kuelea servoMaxDegree = temp * 45/31 + (990/31); Serial.print ("digrii mpya ya servo:"); Serial.println (servoMaxDegree); kurudi servoMaxDegree; }

int updateleftRight (kuelea upepo wa kasi) {

// Ramani kasi ya upepo kwa anuwai ya [1, 100] servo ya kueleaUkuongeza = upepoSpeed * 99/26 + 1; Serial.print ("thamani mpya ya kuongezeka kwa servo:"); Serial.println (servoIncrement); kurudi servoKuongeza; }

int convertToFahrenheit (kuelea tempKel) {

int tempFah = tempKel * 9.0 / 5.0 - 459.67; kurudi tempFah; }

Ulifanya hivyo! Umefanikiwa kupitia sehemu ya programu! Sasa, hakikisha utengeneze wiring na unganisho kutoka kwa motors za servo na neopixels kwenye ubao wa mkate na wadhibiti wadudu. Kumbuka: ingiza viti / vijiti vya ziada kupitia vitambaa vya wima kwenye masanduku kwa harakati za kushoto na kulia za mwili. Mwisho mwingine unapaswa kushikamana na mwili wa joka.

Hatua ya 10: Furahiya Joka lako

Hongera! Umejenga Joka la Sine-ese kutoka mwanzoni! Sasa unachohitaji kufanya ni kukaa chini na kufurahiya onyesho lako la kawaida!

KUMBUKA: Mradi huu ulijengwa kama sehemu ya kozi na Joan Bempong na Soundarya Muthuvel. Ukurasa wa kozi unaweza kupatikana hapa.

Ilipendekeza: