1 meetri POV, kui IOT on lubatud: 3 sammu (piltidega)
1 meetri POV, kui IOT on lubatud: 3 sammu (piltidega)
Anonim
Image
Image
1 meetri POV, kui IOT on lubatud
1 meetri POV, kui IOT on lubatud
1 meetri POV, kui IOT on lubatud
1 meetri POV, kui IOT on lubatud
1 meetri POV, kui IOT on lubatud
1 meetri POV, kui IOT on lubatud

Enne selle projekti kohta selgituste alustamist tahaksin vabandada madala kvaliteediga pildi ja video pärast, kuid ausalt öeldes on tõesti raske teha teravat ja selget pilti POV -i töötamisest tavalise kaameraga nagu minu mobiilikaamera. Tõelise liikumise jäädvustamiseks on vaja väga kiiret diafragmaga optilist objektiivi, kuid laadin parema video üles, kui lõpuks sain oma CANON -kaamera osta

Mis on POV

POV tähistab visiooni püsivust Globe, mis on seotud inimese nägemise nähtusega. Kerge stiimul püsib võrkkesta järelmõjuna umbes 1/10 sekundist. Kui valguse stiimuleid järjestatakse kiiresti, ühendatakse need üheks pidevaks pildiks. Tegelikult on see filmi- ja televisiooniseadmete alus. POV tekitab sellise illusiooni (petab meid) ja loob pildi, pöörates LED -tulede massiivi ümber ühe punkti või telje

Mis on projektiuuendus

Muidugi pole POV uus idee ja Instructablesis või muudel saitidel on juba palju projekte, kuid need projektid kasutavad enamasti eelseadistatud staatilist templit või pilti, mida loetakse enamasti MCU mälust või SD -kaardilt, kuid selles projektis kasutame ilusaid funktsioone selles küsimuses IOT -toega kiibist nagu ESP8266.

Selle IOT -i funktsioonidega on meil

  1. saab hõlpsalt juhtmeta mällu uusi pilte üles laadida
  2. looge soovitud pildisaate stsenaarium mis tahes järjestuse või kestusega
  3. uue animatsiooni jaoks pole vaja kiipi ümber programmeerida ega mälukaarti lahti ühendada ja uuesti ühendada
  4. kasutajasõbralik IOT -i veebimajutaja teeb igaühel hõlpsaks POV -i haldamise mobiili või tahvelarvutiga isegi eemalt
  5. väga odav riistvara juurutamine, mahutavus üle 30 erineva pildi

Kuidas POV töötab

POV-ekraanid, lineaarne (ühemõõtmeline) LED-tulede massiiv pöörleb ühe punkti ümber nagu jalgrattaratas. Mõõtes nende pöörlemiskiirust ja juhtides nende välke millisekundilise täpsusega, saame luua illusiooni 2 või 3-mõõtmelisest pildist, mis jääb õhku. Vaatleme mis tahes efekti (pilt, tekst jne) ühte kaadrit, iga kaader koosneb paljudest pikslitest ja seega paljudest joontest tasapinnal või sfäärilisel alal, POV kuvab selle pildi ühe pildiridaga, mida asendatakse koos pöörlemisega see pilt, seega on probleem selles, kuidas täpselt juhtida LED -pikslite värvi ajas ja ruumis, nii et see võiks luua kogu pildi.

Erinevate pöörlemistelgede abil saab toota tasapinnalist, silindrilist ja sfäärilist POV -ekraani

Paljud POV-projektid kasutavad lihtsaid ühevärvilisi LED-e või kiireid nutikaid piksleid, nagu WS2812 või APA104, ja selles projektis kasutame kiiret LED-kiibi värskendajat APA102 praktiliselt umbes 16 MHz värskendussagedusega. sellel LED -kiibil on juhtimiseks 2 rida (maa, andmed, kell, +5v)

Samm: kuidas POV -i üles ehitada

Kuidas ehitada POV -i
Kuidas ehitada POV -i
Kuidas ehitada POV -i
Kuidas ehitada POV -i
Kuidas ehitada POV -i
Kuidas ehitada POV -i

Alguses vajan POV -rummu paigaldamiseks konstruktsiooni, nii et metallist või mittemetallist konstruktsiooni tegemine sõltub sellest, mis teil käes on. Seda saab valmistada mis tahes olemasoleva materjaliga, et see seinale paigaldada, või seista jalad. Minu sõber teeb lihtsa statiivi ja kinnitab hammasrihma mehhanismi, et vähendada alalisvoolumootori pöörlemiskiirust umbes 500. Väike matemaatika Selge ja sidusa pildi saamiseks vajame kaadri värskendamist umbes 20 kaadrit sekundis, see tähendab, et selge pilt on vaja seda korduvalt kuvada umbes 20 korda sekundis, Kuna minu POV koosneb 1 diagonaalist LED -ribast, seega on iga kaader täidetud poole võrra või pöörlemisega, siis teisisõnu vajame ideaalse rummu pöörlemiskiirust umbes 600 ja selle pööretega kulus iga pöörde jaoks umbes 100 ms. järgmine võrrand näitab, et mõiste RPM = (fps/Nb)*60, mis Nb võrdub haru arvuga, ja sel juhul on RPM = (20/2)*60 = 600my POV pöörleb umbes 430 p/min, seega on minu fps umbes 15 fsp mis on selles küsimuses üsna hea. Mehaanilise osa ehitamine

Järgmises etapis kasutasin LED -riba hoidmiseks freesitud PVC -silindritükki. Rummu ühendamiseks rihmaratta võlliga on üks M10 polt polditud PCV osa tagaküljele Kahe rõngasrõnga abil, mis on paigaldatud rihmaratta võllile, et edastada 5 -voldine alalisvool plaadile ja LED -ribale, seejärel paigaldatakse see osa järgmiste piltide järgi lihtsale rihmarattale ajaülekandesüsteem, mis on ühendatud 12 V alalisvoolumootoriga, igal osal on oma toiteallikas ja see on ümbritsetud jalgade külge kinnitatud valge karbiga

2. samm. Tarkvara juurutamine 1. osa

Tarkvara juurutamine 1. osa
Tarkvara juurutamine 1. osa

Antud pildi demonstreerimiseks LED -ribana tuleks iga pilt pikslitada, seejärel MCU -mällu üles laadida ja seejärel rida -realt LED -ribale sööta, selleks tegin ma tarkvara kahe erineva platvormi jaoks, üks põhineb java käitusaja töötlemisel ja muu C ++ jaoks MCUP jaoks Pikseliseeritud programmi töötlemine kirjutas see programm IDE töötlemisel ja see lihtsalt avas pildifaili, seejärel pööras seda samm -sammult, et eraldada pikslites kujutatud jooned. Ma valin iga pildi kuvamiseks 200 rida, nii et ma pööran pilti (360 /200=1,8 kraadi) 200 korda, et ekstraheerida 200 rida. Kuna minu LED -riba koosneb 144 LED -ist koos sisseehitatud APA102 kiibiga, on kogu pildil 200*144 = 28800 pikslit. Kuna iga värv APA102 kiibiekraanil 4 baidiga (W, RGB), on iga pildi suurus täpselt 200*144*4 = 115200 või 112,5 KB, järgides töötlemiskoodi, mis näitab pildi piksliteerimisjärjestust ja tulemuseks on prügikasti laiendifail laadida MCU mällu

PImage img, black_b, image_load; PrintWriteri väljund; int SQL; ujuk led_t; bait pov_data; int rea_arv = 200; String _OUTPUT = "";

kehtetud seaded ()

{selectInput ("Vali pilt", "imageChosen"); noLoop (); oota (); }

tühine seadistus ()

{output = createWriter (_VÄLJUND); black_b = createImage (SQL, SQL, RGB); black_b.loadPixels (); for (int i = 0; i = line_num) {noLoop (); output.flush (); output.close ();} taust (must_b); pushMatrix (); imageMode (KESK); tõlkima (SQL/2, SQL/2); pöörlema (radiaanid (l*360/line_num)); pilt (img, 0, 0); popMatrix (); pushMatrix (); jaoks (int i = 0; i <144; i ++) {värv c = saada (int (i*led_t+led_t/2), int (SQL/2)); output.print ((char) punane (c)+""+(char) roheline (c)+""+(char) sinine (c)); // print ((char) punane (c)+""+(char) roheline (c)+""+(char) sinine (c)+";"); täitke (c); rect (i*led_t, (SQL/2)-(led_t/2), led_t, led_t); } // println (); popMatrix (); // viivitus (500); l ++; }

tühi võti Vajutatud ()

{output.flush (); // Kirjutab ülejäänud andmed faili output.close (); // Lõpetab faili exit (); // Peatab programmi}

tühine pilt Valitud (fail f)

{if (f == null) {println ("Aken suleti või kasutaja vajutas tühista."); exit (); } else {if (f.exists ()) img = loadImage (f.getAbsolutePath ()); String s = f.getAbsolutePath (); String list = split (s, '\'); int n = nimekiri.pikkus; String fle = split (loend [n-1], '.'); println ("Ava fail:"+fle [0]); _VÄLJUND = fle [0]+". Bin"; // img = loadImage ("test.jpg"); int w = img.laius; int h = img.kõrgus; SQL = max (w, h); suurus (SQL, SQL); led_t = SQL/144,0; println ("h ="+h+"w ="+w+"max ="+SQL+"suurus led ="+led_t); }} tühi hiir Vajutatud () {loop ();}

tühine minu andmed ()

{bait b = loadBytes ("midagi.andmed"); // Printige iga väärtus vahemikus 0 kuni 255 (int i = 0; i <b.length; i ++) {// Iga kümnes number alusta uut rida, kui ((i % 10) == 0) println (); // baiti on vahemikus -128 kuni 127, see teisendatakse väärtuseks 0 kuni 255 int a = b & 0xff; print (a + ""); } println (); // Prindi tühi rida lõpus saveBytes ("arvud.andmed", b); } void wait () {while (img == null) {delay (200); } silmus (); }

3. samm: tarkvara juurutamine 2. osa

Image
Image
Tarkvara juurutamine 2. osa
Tarkvara juurutamine 2. osa
Tarkvara juurutamine 2. osa
Tarkvara juurutamine 2. osa

MCU kuvamisprogramm

suure jõudlusega ESP8266 kiip on valitud mitmel põhjusel, esiteks on see hästi välja töötanud avatud SDK tööriistad, et kasutada WiFi funktsioone koos mäluga kasutaja veebiserveri majutamiseks. Selle võimalusega kasutajasõbralik veebiserver, mis on loodud pikselistatud pildi MCU mällu üleslaadimiseks ja kasutaja jaoks stsenaariumi loomiseks. 4 Mb ESP-12E seeriaga saame programmi jaoks kasutada 1 Mb ja piltide jaoks 3 Mb, mille suurusega 112,5 KB pikslistatud pildi puhul saaksime umbes 25 pilti MCU-sse üles laadida ja saaksin kasutada mis tahes järjestust või mis tahes kuvamisperioodi minu kasutatavale üleslaaditud pildile Arduino koodibaasi juurutamine veebiserveri loomiseks. koodil on oma ahelas kolm põhifunktsiooni, mis on järgmised

void loop () {if (! SHOW &&! TEST) server.handleClient (); if (SHOW) {if ((millis ()- OpenlastTime)> DURATION [image_index]*1000) {if (image_index> = IMAGE_NUM) image_index = 0; _memory_pointer = algusfaili_pildifaili [pildi_indeks] algus; Serial. Praegune_pildirida = 0; pildi_indeks ++; OpenlastTime = millis (); } if ((micros ()-lastLineShow)> lineInterval) {lastLineShow = micros (); ESP.flashRead (_memory_pointer, (uint32_t *) ledid, NUM_LEDS *3); FastLED.show (); mälu_näitaja+= (NUM_LEDS*3); Current_imageLine ++; viivitus (LineIntervalDelay); } if (Current_imageLine> = IMAGES_LINES) {Current_imageLine = 0; _memory_pointer = algusfaili_pildifaili [pildi_indeks-1] algus; }} optimistlik_tootlus (1000); }

Serverikäitleja server.handleClient (); Veebimajutaja klienditaotluste töötlemise eest vastutav veebisait võib olla andmete üleslaadimiseks suvaline, mis tahes olekuaruande näitamise seadeid muuta. Minu veebimajutaja koosneb kolmest vahekaardist, mille esimese vahekaardi järgnevatest piltidest saaksime kontrollida praegust näituse stsenaariumi koos iga pildi järjestuse ja kestusega, samuti võrguteavet ja näidatud POV -i pööret

vahekaardi üleslaadimine vahekaardil saaksime pikslitega pildi MCU mällu üles laadida või konkreetse pildi kustutada

vahekaardil Võrk võime muuta võrguseadeid, nagu wifi -režiim, staatiline ip, võrgu nimi ja pääs jne.

Pildi üleslaadija

see Ajaxi funktsiooniserveri kliendi taotlus laadida pikslites kujutis MCU mällu, seejärel kirjutada fail mällu töötlemata kujul, nii et faili lugemine oleks võimalikult kiire. Mälu algus- ja lõppasukoht salvestatakse tabelisse LED -ribana kuvamiseks

Kuva funktsioon

Kasutasin LED -riba pikslite kuvamiseks FastLED libi, see raamatukogu on üks edukamaid ja hästi arenenud LED -show jaoks AVR ja ESP platvormil. On vaja lihtsalt saata FastLED -funktsioon, salvestatud LED -piksli asukoht. loeme mälult rida -realt piksleid ja näitame seda LED -ribana ning ootame uue pöörlemislipu täitumist. kordasime seda järjestust, kuni loeti iga pildi 200 rida

kogu kood, mis asub minu giti hoidlas siin

Järgnev on video POV -i toimimisest, mis on salvestatud mobiilikaameraga ja nagu ma selgitasin, pole video kvaliteet ebaprofessionaalse kaamera aeglase membraanikiiruse tõttu hea