Orodha ya maudhui:

Mita 1 POV na IOT Imewezeshwa: Hatua 3 (na Picha)
Mita 1 POV na IOT Imewezeshwa: Hatua 3 (na Picha)

Video: Mita 1 POV na IOT Imewezeshwa: Hatua 3 (na Picha)

Video: Mita 1 POV na IOT Imewezeshwa: Hatua 3 (na Picha)
Video: Program for the sports 2024, Novemba
Anonim
Image
Image
Mita 1 POV Na IOT Imewezeshwa
Mita 1 POV Na IOT Imewezeshwa
Mita 1 POV Na IOT Imewezeshwa
Mita 1 POV Na IOT Imewezeshwa
Mita 1 POV Pamoja na IOT Imewezeshwa
Mita 1 POV Pamoja na IOT Imewezeshwa

Kabla ya kuanza maelezo juu ya mradi huu ningependa kuomba radhi kwa picha na video ya hali ya chini, lakini kwa kweli ni ngumu kuchukua picha kali na wazi kutoka kwa kutumia POV na kamera ya kawaida kama kamera yangu ya rununu. Inahitaji lenzi ya macho ya diaphragm haraka sana ili kunasa mwendo wa kweli, Lakini nitapakia video bora wakati mwishowe ningeweza kununua kamera yangu ya CANON

POV ni nini

Kusimama kwa POV kwa Uvumilivu wa Globu ya Maono ambayo inahusiana na hali ya maono ya mwanadamu. Kichocheo cha nuru kinakaa kama athari kwenye retina kwa karibu 1/10 ya sekunde. Wakati vichocheo nyepesi vimefuatana kwa mfuatano wa haraka, huungana kuwa picha moja inayoendelea. Kwa kweli ni msingi wa vifaa vya filamu na runinga,. POV hufanya udanganyifu kama huo (utudanganye) na uunda picha kwa kuzungusha safu ya taa za LED karibu na nukta moja au mhimili

Ubunifu wa mradi ni nini

Bila shaka POV sio wazo jipya na miradi mingi tayari ipo katika Maagizo au kwenye tovuti zingine, hata hivyo miradi hiyo hutumia hekalu au picha iliyowekwa tayari ambayo husomwa sana kutoka kwa kumbukumbu ya MCU au kadi ya SD, lakini katika mradi huu tunatumia huduma nzuri ya chip inayowezeshwa ya IOT kama ESP8266 katika suala hili.

Na makala hii ya IOT sisi

  1. inaweza kwa urahisi kupakia picha mpya kwenye kumbukumbu bila waya
  2. tengeneza hali inayotarajiwa ya onyesho la picha na mlolongo wowote au muda wowote
  3. hakuna haja ya kupanga tena chip au kuchomoa kadi ya kumbukumbu na kuifunga tena kwa uhuishaji mpya
  4. mtumiaji wa kirafiki wa IOT wavuti hufanya iwe rahisi kwa kila mtu kuibadilisha POV na rununu au kompyuta kibao hata kwa mbali
  5. utekelezaji wa vifaa vya bei ya chini sana na uwezo wa zaidi ya picha 30 tofauti

Jinsi POV inavyofanya kazi

Maonyesho ya POV, safu ya (1-dimensional) ya taa za LED huzunguka karibu na hatua moja, kama gurudumu la baiskeli. Kwa kupima kiwango chao cha kuzunguka na kudhibiti mwangaza wao kwa usahihi wa millisecond, tunaweza kuunda udanganyifu wa picha ya 2-3-dimensional inayokaa katika hewa nyembamba. Wacha Tufikirie sura moja ya athari yoyote (picha, maandishi,…), kila fremu ina pikseli nyingi na kwa hivyo mistari mingi katika ndege au eneo la duara, POV onyesha picha hii na laini moja ya picha ambayo nafasi imebadilishwa pamoja na mzunguko wake kujaza picha hiyo, kwa hivyo shida ni jinsi ya kudhibiti kwa usahihi rangi ya pikseli ya LED kwa njia ya muda na nafasi ili iweze kuunda picha nzima ya POV imegawanywa kwa msingi wa mhimili wa mzunguko, aina ya athari inaweza kuonyesha na ni rangi ngapi inaweza kuunda.

Kwa mhimili tofauti wa mzunguko, inaweza kutoa onyesho la sayari, silinda na duara ya POV

Mradi mwingi wa POV hutumia saizi rahisi ya rangi moja ya LED au saizi mahiri za kasi kama WS2812 au APA104 na katika mradi huu tunatumia kipya haraka cha kuburudisha chip ya APA102 na karibu kiwango cha kuburudisha cha 16 MHz. chip hii ya LED ina laini 2 ya kudhibiti (Ardhi, Takwimu, Saa, + 5v)

Hatua ya 1: Jinsi ya Kujenga POV

Jinsi ya Kujenga POV
Jinsi ya Kujenga POV
Jinsi ya Kujenga POV
Jinsi ya Kujenga POV
Jinsi ya Kujenga POV
Jinsi ya Kujenga POV

Mara ya kwanza ninahitaji muundo wa kuweka kitovu cha POV, kutengeneza muundo wa chuma au isiyo ya chuma unategemea kile unacho mikononi. Unaweza kuifanya na nyenzo yoyote inayopatikana kuiweka ukutani au kuongeza miguu ili kusimama. Rafiki yangu hufanya trodod rahisi na huweka utaratibu wa ukanda wa muda kupunguza DC motor RPM karibu 500. Hisabati ndogo Kwa kuwa na picha wazi na mshikamano, tunahitaji kiburudisho cha fremu karibu fps 20, inamaanisha kuwa na picha wazi tunayohitaji kuionesha mara kadhaa juu ya 20 mara kwa sekunde, Kama POV yangu inajumuisha mkanda 1 wa diagonal ya LED, kwa hivyo kila fremu imekamilika na nusu au mzunguko, kwa neno lingine tunahitaji kitovu Bora cha RPM karibu 600 na kwa RPM hii kila mapinduzi yalichukua karibu 100 ms. zifuatazo equation onyesha wazo hilo RPM = (fps / Nb) * 60 ambayo Nb sawa na Idadi ya tawi, na katika kesi hii tuna RPM = (20/2) * 60 = 600my POV huzunguka karibu 430 rpm kwa hivyo fps yangu iko karibu 15 fsp ambayo ni nzuri kwa jambo hili. Kujenga sehemu ya mitambo

Katika hatua inayofuata nilitumia kipande cha silinda ya PVC Milled kushikilia bar ya LED. Kuunganisha kitovu na shimoni la pulley bolt moja ya M10 imefungwa nyuma ya PCV sehemu Pete ya mbili ya Kombe iliyowekwa kwenye shimoni ya pulley kusambaza volts 5 DC kwa bodi na ukanda wa LED, kisha kwa picha zifuatazo, sehemu hii imewekwa kwenye kapi rahisi mfumo wa usafirishaji wa muda ambao umeunganishwa na motor 12v DC kila sehemu ina nguvu yake mwenyewe na imefungwa kwenye sanduku jeupe lililounganishwa na miguu

Hatua ya 2: Utekelezaji wa Programu Sehemu ya 1

Utekelezaji wa Programu Sehemu ya 1
Utekelezaji wa Programu Sehemu ya 1

Ili kuonyesha picha iliyopewa katika ukanda wa LED, kila picha inapaswa kupigwa pikseli kisha kupakiwa kwenye kumbukumbu ya MCU na kisha kulishwa kwa laini ya mstari wa LED kwa mstari, kufanya hivyo nilifanya programu kwa jukwaa mbili tofauti, moja ni msingi wa kusindika wakati wa kukimbia wa java. na nyingine katika C ++ kwa mpango wa pikseli wa MCUP mpango huu uliandika katika Inasindika IDE na inafungua faili ya picha tu, kisha izungushe kwa hatua ili kutoa mistari ya picha iliyo na saizi. Nichagua laini 200 kwa kuonyesha picha yoyote, kwa hivyo mimi huzungusha picha abut (360 /200=1.8 digrii) mara 200 kutoa 200 mstari. Kwa kuwa kipande changu cha LED kinajumuisha 144 ya LED iliyo na chip iliyoingia ya APA102 kwa hivyo picha nzima ina pikseli 200 * 144 = 28800. Kama kila rangi katika onyesho la chip APA102 na baiti 4 (W, RGB) kwa hivyo kila saizi ya picha ni 200 * 144 * 4 = 115200 au 112.5KB ifuatayo Msimbo wa usindikaji unaonyesha mlolongo wa upigaji picha wa picha, na matokeo yatakuwa faili ya ugani wa bin ambayo inaweza kupakiwa kwenye kumbukumbu ya MCU

PImage img, nyeusi_b, upakiaji wa picha; Pato la Mwandishi wa Printa; int SQL; kuelea led_t; byte pov_data; mstari_num = 200; Kamba _OUTPUT = "";

mipangilio batili ()

{SelectInput ("Chagua picha", "imageChosen"); Hakuna Kitanzi (); subiri (); }

kuanzisha batili ()

{pato = kuundaWriter (_OUTPUT); nyeusi_b = kuunda Picha (SQL, SQL, RGB); nyeusi_b. Pixels (); kwa (int i = 0; i = line_num) {noLoop (); output.flush (); output.close ();} msingi (black_b); PushMatrix (); ImageMode (KITUO); kutafsiri (SQL / 2, SQL / 2); zunguka (radians (l * 360 / line_num)); picha (img, 0, 0); popMatrix (); PushMatrix (); kwa (int i = 0; i <144; i ++) {rangi c = pata (int (i * led_t + led_t / 2), int (SQL / 2)); pato.print ((char) nyekundu (c) + "" + (char) kijani (c) + "" + (char) bluu (c)); // chapisha ((char) nyekundu (c) + "" + (char) kijani (c) + "" + (char) bluu (c) + ";"); jaza (c); mstatili (i * led_t, (SQL / 2) - (led_t / 2), led_t, led_t); } // println (); popMatrix (); // kuchelewa (500); l ++; }

kitufe cha utupuBonyeza ()

{pato.flush (); // Anaandika data iliyobaki kwa faili inayotolewa.funga (); // Inamaliza kumaliza faili (); // Anasimamisha mpango}

picha batili Imechaguliwa (Faili f)

{if (f == null) {println ("Dirisha lilifungwa au mtumiaji alighairi"); toka (); } mwingine {if (f.exists ()) img = loadImage (f.getAbsolutePath ()); Kamba s = f.getAbsolutePath (); Kamba orodha = mgawanyiko (s, '\'); int n = orodha. urefu; Kamba fle = kupasuliwa (orodha [n-1], '.'); println ("Fungua faili:" + fle [0]); _OUTPUT = kukimbia [0] + ". Bin"; // img = mzigoImage ("test.jpg"); int w = img upana; int h = img. urefu; SQL = upeo (w, h); saizi (SQL, SQL); led_t = SQL / 144.0; println ("h =" + h + "w =" + w + "max =" + SQL + "saizi iliyoongozwa =" + led_t); }} panya batili Imesisitizwa () {kitanzi ();}

data yangu batili ()

{byte b = loadBytes ("something.dat"); // Chapisha kila thamani, kutoka 0 hadi 255 kwa (int i = 0; i <b.length; i ++) {// Kila nambari ya kumi, anza laini mpya ikiwa ((i% 10) == 0) println (); // ka ni kutoka -128 hadi 127, hii inabadilika kuwa 0 hadi 255 int a = b & 0xff; chapisha (a + ""); } println (); // Chapisha laini tupu mwishoni saveBytes ("idadi.dat", b); } batili subiri () {wakati (img == null) {kuchelewesha (200); } kitanzi (); }

Hatua ya 3: Utekelezaji wa Programu Sehemu ya 2

Image
Image
Utekelezaji wa Programu Sehemu ya 2
Utekelezaji wa Programu Sehemu ya 2
Utekelezaji wa Programu Sehemu ya 2
Utekelezaji wa Programu Sehemu ya 2

Mpango wa kuonyesha MCU

utendaji wa hali ya juu ESP8266 chip imechaguliwa kwa sababu kadhaa, kwanza imeunda vizuri zana za SDK wazi za kuchukua faida ya huduma za WiFi kando ya kumbukumbu ya kukaribisha seva ya wavuti kwa mtumiaji. Pamoja na uwezo huu, seva ya wavuti inayoweza kutumiwa iliyoundwa kupakia picha iliyochorwa kwenye kumbukumbu ya MCU na kuunda hali ya ufafanuzi wa onyesho. Na safu ya 4 Mb ESP-12E tunaweza kutumia 1 Mb kwa programu na 3 Mb kwa picha ambazo kwa saizi ya 112.5KB kwa picha ya pikseli tunaweza kuwa na picha 25 zilizopakiwa kwenye MCU na tunaweza kufanya mlolongo wowote au kipindi chochote cha kuonyesha cha picha iliyopakiwa ninayotumia Utekelezaji wa msingi wa nambari ya Arduino kwa kutengeneza seva ya wavuti. nambari ina kazi kuu tatu katika kitanzi chake kama ifuatavyo

kitanzi batili () {if (! SHOW && TEST) server.handleClient (); ikiwa (Onyesha) {if ((millis () - OpenlastTime)> DURATION [image_index] * 1000) {if (image_index> = IMAGE_NUM) image_index = 0; _memory_pointer = start_adress_of_imagefile [picha_index]; Serial.printf ("File number =% u name:% s anwani:% u duration:% u / n", image_index, IMAGES [image_index].c_str (), start_address_of_imagefile [image_index], DURATION [image_index]); Mstari wa Picha ya sasa = 0; picha_index ++; Wakati wa Openlast = millis (); } ikiwa ((micros () - lastLineShow)> lineInterval) {lastLineShow = micros (); ESP.flashRead (_memory_pointer, (uint32_t *) risasi, NUM_LEDS * 3); FastLED.show (); _memory_pointer + = (NUM_LEDS * 3); Mstari_wa sasa ++; kuchelewesha (LineIntervalDelay); } ikiwa (Line_imageLine> = IMAGES_LINES) {Line_imageLine = 0; _memory_pointer = start_adress_of_imagefile [picha_index-1]; }} matumaini_ya (1000); }

Mshughulikiaji wa Seva seva.handleClient (); kuwajibika kushughulikia ombi lolote la mteja kwenye wavuti ya wavuti, tovuti hii inaweza kuwa muundo holela kupakia data, kubadilisha mpangilio wa onyesho la ripoti yoyote ya serikali. Webhost yangu inajumuisha tabo tatu kama zifuatazo picha kwenye kichupo cha kwanza tunaweza kuangalia hali ya sasa ya onyesho na mlolongo na muda wa kila picha, pia habari ya mtandao pamoja na POV rpm iliyoonyeshwa

katika kichupo cha kupakia picha tunaweza kupakia picha iliyotiwa saizi kwenye kumbukumbu ya MCU au kufuta picha maalum

katika kichupo cha mtandao tunaweza kubadilisha mipangilio ya mtandao kama vile wifi mode, tuli tuli, jina la mtandao na kupitisha,..

Picha Up-Loader

ombi hili la mteja wa seva ya kazi na Ajax kupakia picha ya pikseli kwenye kumbukumbu ya MCU, kisha andika faili katika kumbukumbu katika fomati mbichi ili kusoma faili iwe haraka iwezekanavyo. Anza kumbukumbu na duka la eneo kwenye jedwali kwa kuonyesha katika ukanda wa LED

Onyesha kazi

Nilitumia FastLED lib kuonyesha pixel katika ukanda wa LED, maktaba hii ni moja ya mafanikio zaidi na yaliyotengenezwa vizuri kwa onyesho la LED kwenye jukwaa la AVR na ESP. Inahitaji tu kutuma kazi ya FastLED, eneo la pikseli iliyohifadhiwa ya LED. tunasoma laini na saizi za laini kutoka kwa kumbukumbu na kuionyesha kwa ukanda wa LED na kusubiri bendera mpya ya mzunguko itimie. tulirudia mlolongo huu mpaka mistari 200 ya kila picha imesomwa

nambari yote iliyoko kwenye hazina yangu ya git hapa

ifuatayo ni video ya POV in action ambayo imerekodiwa na kamera ya rununu na kama nilivyoelezea, ubora wa video sio mzuri kwa sababu ya kasi ndogo ya diaphragm ya kamera isiyo na utaalam

Ilipendekeza: