Orodha ya maudhui:

Kipima muda kinachodhibitiwa na NodeMCU: Hatua 14
Kipima muda kinachodhibitiwa na NodeMCU: Hatua 14

Video: Kipima muda kinachodhibitiwa na NodeMCU: Hatua 14

Video: Kipima muda kinachodhibitiwa na NodeMCU: Hatua 14
Video: jinsi kipimo cha UKIMWI kinavyotumika kupima UKIMWI 2024, Julai
Anonim
Kipima muda kinachodhibitiwa na NodeMCU
Kipima muda kinachodhibitiwa na NodeMCU

Hapa tutaunda timer kutumia NodeMCU na Adafruit. Tutakuwa tukionyesha kipima muda chetu na kipande cha LED na tutaweza kudhibiti kwa kutumia simu au kompyuta!

Lengo letu:

Tengeneza kipima muda kwa kutumia kipande cha LED ambacho tunaweza: kuanza, kusitisha na kuweka upya kutumia simu au kompyuta.

Vifaa

Vifaa:

  • NodeMCU ESP 8266
  • Ukanda wa LED ya Adafruit NeoPixel

Maktaba:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Nyingine:

Muunganisho mzuri wa WiFi

Hatua ya 1: Wacha Tuunde Malisho katika Adafruit

Wacha tuunde Malisho katika Adafruit!
Wacha tuunde Malisho katika Adafruit!

Sasa kwa kuwa tumepata kila kitu tunachohitaji, tuko tayari kuanza kujenga! Kwanza kabisa tunapaswa kuunda malisho katika Adafruit. Adafruit ni huduma ambayo inafanya iwe rahisi sana kwetu kuunganisha Arduino yetu kwenye wavuti na kutengeneza huduma muhimu za kudhibiti kijijini. Ikiwa bado haujasajili Adafruit.

Sasa wacha tuunde mpasho mpya

Tunaweza kutaja malisho yetu chochote tunachotaka, ninaiita 'timer'.

Je! Malisho hufanya nini kurekodi kila kitu tunachofanya kwenye dashibodi yetu (ambayo tutaunda kwa dakika moja tu) na kutuma data hiyo kwa bodi yetu, lakini hiyo ndio kitu tutakachotazama mara tu tutakapokuwa na data ya kutumwa.

Hatua ya 2: Sasa Tufanye Dashibodi.

Sasa Wacha Tutengeneze Dashibodi.
Sasa Wacha Tutengeneze Dashibodi.
Sasa Wacha Tutengeneze Dashibodi.
Sasa Wacha Tutengeneze Dashibodi.
Sasa Wacha Tutengeneze Dashibodi.
Sasa Wacha Tutengeneze Dashibodi.

Sasa kwa njia ile ile ambayo tulitengeneza malisho, tutaunda Dashibodi mpya. Nitaita dashibodi yangu: 'interface ya timer' kwa sababu hiyo ndio dashibodi yetu itakuwa: kiunganishi na vifungo vya kudhibiti timer yetu.

Hatua ya 3: Pata ufunguo wetu

Pata Ufunguo Wetu
Pata Ufunguo Wetu

Ikiwa tunataka kuunganisha Arduino yetu na malisho yetu tunahitaji kupata kitufe chetu cha Adafruit, hii ni nywila yako ya siri ambayo itahakikisha ni wewe tu unaweza kuunganisha kwenye milisho yako.

Unaweza kupata ufunguo wako kwa kubofya kitufe cha manjano cha AIO cha kulia juu kulia kwa skrini yako huko Adafruit.

Okoa ufunguo huu mahali pengine, tutahitaji baadaye.

Usishiriki ufunguo wako! Vinginevyo watu wenye nia mbaya wangeweza kuungana na milisho yako na vifaa.

Hatua ya 4: Fungua Mfano wa Soma ya Kulisha

Fungua Mfano wa Soma Kulisha
Fungua Mfano wa Soma Kulisha

Sasa wacha tufungue IDE yetu ya Arduino na tuanze utaratibu wa usimbuaji. Kwanza kabisa tunahitaji kuwa na maktaba ya Adafruit IO Arduino iliyosanikishwa.

Sijui jinsi ya kufunga maktaba? hii ni mwongozo mzuri na Adafruit: Maktaba za Arduino

Adafruit hutoa mifano mingi iliyotengenezwa tayari kwa sisi kutumia na kujifunza kutoka. Moja ya mifano hii ni: adafruitio_21_feed_read. Unaweza kupata mfano huu hapa: Faili - Mifano Adafruit IO Arduino adafruitio_21_feed_read

(samahani interface yangu ya Kidachi kwenye picha)

Hatua ya 5: Wacha tuanzishe Uunganisho wetu

Ikiwa umefanikiwa kufungua mchoro wa adafruitio_21_feed_read unapaswa kuona tabo 2 kwenye mchoro wako: adafruitio_21_feed_read na config.h. Mchoro huu ulifanywa ili tuweze kuungana na malisho ambayo tulifanya katika hatua ya 1.

Ili kuungana na lishe hii tunahitaji kujaza maelezo kadhaa kuhusu WiFi yetu na akaunti yetu ya Adafruit,

Wacha tusafiri kwenda kusanidi.h, hapa tutajaza maelezo yafuatayo:

Jina lako la mtumiaji wa Adafruit:

#fafanua IO_USERNAME "joopert"

Kitufe chako cha Adafruit:

#fafanua IO_KEY "1234567890abcdefghijklmnop"

Jina la WiFi yako:

#fafanua WIFI_SSID "MyWifi"

Na nenosiri lako la WiFi:

#fafanua WIFI_PASS "neno la siri sana"

Sasa turudi kwenye kichupo cha adafruitio_21_feed_read na ujaze:

Jina lako la mtumiaji wa Adafruit… tena:

#fafanua FEED_OWNER "joopert"

Na mwishowe jina lako la kulisha (kutoka kwa malisho tuliyotengeneza katika hatua ya 1):

AdafruitIO_Feed * sharedFeed = io.feed ("timer", FEED_OWNER);

Hatua ya 6: Angalia Uunganisho kwa Adafruit IO

Angalia Uunganisho kwa Adafruit IO
Angalia Uunganisho kwa Adafruit IO

Kuangalia ikiwa hatua tulizochukua hapo awali zimetekelezwa kwa usahihi, tutapakia mchoro wetu kwa NodeMCU. Ukifungua mfuatiliaji wako wa serial, inapaswa kuangalia kitu kama picha hapo juu. Kwanza mfuatiliaji wa serial anakuonyesha kuwa inajaribu kuungana na WiFi yako na Adafruit. ikiwa hiyo ni kamili inapaswa kusema:

Adafruit IO imeunganishwa

Hii ni habari njema! Sasa tunaweza kuanza kuongeza utendaji kwa kipima muda wetu…

Hatua ya 7: Lets LED

Hebu LED
Hebu LED
Hebu LED
Hebu LED

Sasa ni wakati wa kuwasha ukanda wetu wa LED!

Unganisha ukanda wako wa LED kwenye PIN ya D5 (ikiwa huwezi kupata D5 unganisha kwenye PIN nyingine na ubadilishe LED_PIN kwenye nambari).

Fafanua ukanda wa LED

Nambari ifuatayo itaongeza maktaba ya NeoPixel (jifunze zaidi juu ya maktaba hii hapa: ina taa ngapi. Ikiwa ukanda wako wa LED una maelezo tofauti, ibadilishe kwa nambari.

Ongeza nambari ifuatayo JUU ya usanidi batili ():

// weka unganisho la NeoPixel # ni pamoja na #ifdef _AVR_ # pamoja #endif

#fafanua LED_PIN D5 // Je! mkanda wa LED umeunganishwa wapi?

#fafanua LED_COUNT 30 // Ina saizi ngapi?

#fafanua NURUFU 50 // mwangaza wa NeoPixel, 0 (dakika) hadi 255 (upeo)

Ukanda wa Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Anza ukanda wa LED

Sasa tutaanzisha ukanda wetu wa LED na kuweka mwangaza (mwangaza huenda kutoka dakika 0 hadi 255, lakini ninapendekeza 50… 255 ni mkali KWELI).

Ongeza nambari ifuatayo KATIKA usanidi batili ():

strip. kuanza (); // INITIALIZE NeoPixel strip kitu (INAHitajika) strip.show (); // ZIMA saizi zote ASAP strip.setBrightness (50); // Weka Nuru kwa karibu 1/5 (max = 255)

ledsOn (); // Inaita kazi kuwasha kila LED moja kwa moja

Washa taa

Labda tayari umeona kuwa tunaita kazi ambayo haipo bado, hiyo itakuwa sehemu yetu inayofuata ya usimbuaji. Ikiwa tunataka kuwasha taa zetu lazima tuunde 'kwa kitanzi' ambacho kinawasha kila mtu mmoja mmoja LED (hawajui kitanzi ni nini? Angalia hapa: www.arduino.cc/reference/ sw / lugha / muundo / udhibiti-muundo / kwa /).

Sasa tutakuwa tukiunda kazi: ledsOn ();

Ongeza nambari ifuatayo HAPA CHINI batili ya kushughulikiaMessage ():

ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Kwa kila pikseli katika ukanda… strip.setPixelColor (i, 0, 0, 255); // Weka rangi ya pikseli kwenye ukanda wa bluu. Onyesha (); // Sasisha kipande ili kilingane}}

Pakia

Sasa ni sehemu ya kufurahisha, wacha tupakie nambari yetu kwa NodeMCU… Ikiwa kila kitu kitafanya kazi kwa usahihi ukanda wako wa LED sasa uwe wa bluu kabisa!

Je! Hakuna saizi zinazojitokeza?: Umeunganisha ukanda kwenye PIN sahihi? Au labda muunganisho wako wa mtandao umepotea.

Je! Saizi zingine hazijionyeshi?: Angalia ikiwa unaweka saizi sawa!

Hatua ya 8: Ongeza Muda kwa Timer

Sasa tutahakikisha kwamba kipima muda wetu kweli… vizuri… nyakati, kitu.

Kuna njia tofauti za kufanya wakati na Arduino, moja ni kuchelewesha (), hii inasimamisha usindikaji wa bodi yetu kwa muda uliowekwa. Hatutatumia hii kwani Arduino yetu inafungia wakati wa kuchelewesha, na tunataka bodi yetu kusasisha mara kwa mara. Kwa hivyo tutatumia Millis (), hii ni njia nzuri zaidi ya kufanya wakati huko Arduino, na Millis () bado tunaweza kuendesha nambari kati ya vipindi.

Ikiwa una nia ya jinsi hii inavyofanya kazi unaweza kuangalia nakala hii:

Wacha tuongeze nambari ya Millis ():

Weka nambari hii juu ya usanidi batili ()

unsigned muda mrefu uliopitaMillis = 0; // itahifadhi mara ya mwisho ukanda wa LED uliposasishwa kwa muda = 1000; // muda wa saa yetu (milliseconds)

Na hebu tuweke nambari hii katika kitanzi batili ():

unsigned long longMillis = millis ();// anza TIMER RYTHM ************************************************* ********* ikiwa (currentMillis - previousMillis> = muda) {previousMillis = currentMillis;

// kumaliza TIMER RYTHM ************************************************* ***********

Tulichofanya tu ni kuunda densi kwa ukanda wetu wa LED kuzima LED, katika hatua inayofuata tutaongeza nambari ya kufanya hivyo tu.

Hatua ya 9: Kuhesabu tena

Katika hatua hii: tutafanya kazi ambayo itahakikisha kila sekunde (au muda wowote ulioweka) tunazima LED MOJA mwishoni mwa ukanda hadi taa zetu zote zikiwa zimezimwa.

Tutaunda 'int' juu inayoitwa 'leds'. Hii baadaye itamwambia kipima muda wetu ni ngapi ilisababisha kuzima.

Ongeza nambari ifuatayo JUU ya usanidi batili ():

int leds = LED_COUNT-1; // simu ni saizi ngapi zinapaswa kuwashwa

Sasa wacha tuongeze kazi 'timer ();', hii itakuwa ikizima taa kila sekunde

Ongeza nambari ifuatayo HAPA chini ya ledsOn batili ():

timer timer () {strip.setPixelColor (leds, 0, 0, 0);

ikiwa (leds> -1) {leds--; } mwingine {blinkie (); }}

Tunataka kutoa maoni kwa mtumiaji kwamba kipima muda kimefanywa baada ya taa zote kuwaka. Na 'blinkie ();' LEDs zitaangaza nyekundu baada ya kipima muda kukamilika!

Ongeza nambari ifuatayo JUU ya usanidi batili ():

int blinkStatus = 1; // anamwambia blinkie (); kazi wether taa inapaswa kuwashwa au kuzimwa

Ongeza nambari ifuatayo CHINI YA kipima muda ():

blinkie batili () {if (blinkStatus == 1) {

blinkStatus = 0; ukanda. wazi (); } mwingine {blinkStatus = 1; kwa (int i = 0; i <strip.numPixels (); i ++) {// Kwa kila pikseli katika ukanda… strip.setPixelColor (i, 255, 0, 0); // Weka rangi ya pikseli (katika RAM) ukanda. Onyesha (); // Sasisha kipande ili kilingane}}}}

Mwishowe tunapaswa kuita kazi hiyo katika kitanzi chetu batili ();, Kumbuka TIMER RYTHM tuliyoongeza katika hatua ya 8? Katika hii ikiwa taarifa tutaita kipima muda cha kazi ();.

TIMER RYTHM sasa inapaswa kuonekana kama hii:

// kuanza TIMER RYTHM ************************************************* *********

ikiwa (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; kipima muda (); strip. ******************

Sasa pakia nambari hii!

Hivi sasa kipande chako cha LED kinapaswa kuzima 1 LED kila sekunde na kuangaza nyekundu ikimaliza…

Sasa wacha tufanye kijijini hiki cha mama kupendekezwa!

Hatua ya 10: Fanya Udhibiti wa Kijijini: Sehemu ya I

Fanya Udhibiti wa Kijijini: Sehemu ya I
Fanya Udhibiti wa Kijijini: Sehemu ya I
Fanya Udhibiti wa Kijijini: Sehemu ya I
Fanya Udhibiti wa Kijijini: Sehemu ya I

Tunayo timer yetu, hiyo ni sawa na ya kupendeza lakini nimekuahidi kuwa utaweza kuidhibiti na simu yako sawa? Wacha tuingie hatua ya mwisho ya mradi wetu: kuifanya timer yetu kudhibiti kijijini.

Bado umefungua kichupo chako cha Adafruit? Wacha tusafiri kurudi io.adafruit.com na tuende kwenye dashibodi yetu ya kiunga cha timer na tuunda kizuizi kipya: TOGGLE

  1. Unganisha kugeuza kwa mlisho wa TIMER
  2. Weka dhamana ya ON kwa: 1
  3. Weka thamani ya OFF kuwa: 0

Sababu ya hii ni kwamba Adafruit haitumii data ya maandishi kwa NodeMCU yetu, lakini nambari tu.

Unaweza pia kupeana jina ikiwa ungependa, labda: 'Zima / Zima swichi'

Sasa turudi kwa Arduino IDE

Ili tu kuhakikisha nambari yetu imesasishwa, wacha TUPAKUE nambari yetu tena.

FUNGUA MONITOR WA HUDUMA baada ya kumaliza kupakia na BONYEZA TOGGLE kwenye dashibodi yetu ya Adafruit mara kadhaa. Tunapaswa sasa kuona kitu kama hiki kikijitokeza kwenye mfuatiliaji wetu wa serial:

imepokea <- 0 imepokea <- 1 imepokea <- 0 imepokea <- 1 imepokea <- 0

Hii inamaanisha kuwa tunaweza kutuma vidhibiti kwa NodeMCU yetu!

Ikiwa haupokei ujumbe huu, angalia ikiwa Takwimu yako ya Adafruit katika usanidi wako bado ni sawa.

Hatua ya 11: Fanya Udhibiti wa Kijijini: Sehemu ya II

Sasa kilichobaki ni kufanya kitu na udhibiti wetu uliopokea.

Ili kufanya hivyo tulibadilisha TIMER RYTHM ikiwa taarifa katika kitanzi batili (); kidogo.

Tutaambia NodeMCU yetu kwamba inapaswa kuanza tu kipima wakati tutakapopokea '1' (ambayo inamaanisha: ON) kutoka Adafruit.

Kwanza hebu kukusanya data Adafruit hututumia

Ongeza nambari ifuatayo JUU ya usanidi batili ():

int adaData; // hukusanya data AdaFruit hututumia

Sasa wacha tukusanye data hiyo

Ongeza nambari ifuatayo NDANI ya kushughulikia batiliMessage ():

adaData = data-> kwaInt ();

Wacha tubadilishe kitanzi chetu cha utupu ();

TIMER RYTHM sasa inapaswa kuonekana kama hii:

// kuanza TIMER RYTHM ************************************************* ********* ikiwa (sasaMillis - uliopitaMillis> = muda) {previousMillis = currentMillis; ikiwa (adaData == 0) {Serial.println ("im not running"); } mwingine ikiwa (adaData == 1) {timer (); } onyesha (); } // // kumaliza TIMER RYTHM ************************************************ ************

PAKUA msimbo wako…

Sasa unapaswa kuwasha na kuzima kipima muda kwa kutumia swichi katika Adafruit!

Hatua ya 12: Cheza Karibu! Tumefanyika… au Je

Hivi sasa unapaswa kuwa na timer ya kijijini inayofanya kazi kikamilifu! Ikiwa ndio hiyo kwako basi asante kwa kuja pamoja na mradi huu!

Ikiwa unataka kuendelea kidogo, katika hatua chache zifuatazo tutaongeza kitufe cha Rudisha kwa kipima muda chetu!

Hatua ya 13: ZIADA: Unda Kitufe cha Muda

ZIADA: Unda Kitufe cha Kitambo
ZIADA: Unda Kitufe cha Kitambo

Wacha turudi kwenye dashibodi yetu. Sasa tunataka TUUNDE ZUI JIPYA tena.

  1. Unda kitufe cha Kitambo
  2. Unganisha kwenye malisho ya 'timer'
  3. Weka thamani ya waandishi wa habari kuwa: 2
  4. Ondoa thamani ya kutolewa
  5. Ipe rangi nzuri!

Kwa urahisi kitufe cha kitambo tayari kinaitwa 'Rudisha'!

Mara tu ukiunda kizuizi hiki jaribu, kifungo hufanya kazi ikiwa unapokea:

imepokea <- 2

Katika mfuatiliaji wako wa serial.

Ikiwa hauoni ujumbe huu, jaribu kupakia tena mchoro

Hatua ya 14: ZIADA: Ongeza Kazi ya Upya

Ili kufanya kitufe cha kuweka upya kufanya chochote tunachohitaji kuongeza kazi ambayo inarudisha taa zote kwenye hali ya asili.

Ongeza nambari ifuatayo CHINI ya blinkie batili ():

reun reun () {leds = LED_COUNT; ledsOn (); }

Sasa kilichobaki ni kuita kazi yetu, kwa kuwa tunalazimika kubadilisha TIMER RYTHM mara ya mwisho

TIMER RYTHM sasa inapaswa kuonekana kama hii:

// anza TIMER RYTHM ************************************************* ********* ikiwa (currentMillis - previousMillis> = muda) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("im not running"); } mwingine ikiwa (adaData == 1) {timer (); } mwingine ikiwa (adaData == 2) {rerun (); } onyesha (); } // // kumaliza TIMER RYTHM ************************************************ ************

PAKUA msimbo wako…

Sasa unapaswa pia kuwa na uwezo wa kuweka upya kipima muda kwa kubonyeza kitufe!

Ilipendekeza: