Բովանդակություն:

1 մետր POV միացված IOT- ով. 3 քայլ (նկարներով)
1 մետր POV միացված IOT- ով. 3 քայլ (նկարներով)

Video: 1 մետր POV միացված IOT- ով. 3 քայլ (նկարներով)

Video: 1 մետր POV միացված IOT- ով. 3 քայլ (նկարներով)
Video: Установка маяков под штукатурку. Углы 90 градусов. #12 2024, Նոյեմբեր
Anonim
Image
Image
1 մետր POV միացված IOT- ով
1 մետր POV միացված IOT- ով
1 մետր POV միացված IOT- ով
1 մետր POV միացված IOT- ով
1 մետր POV միացված IOT- ով
1 մետր POV միացված IOT- ով

Նախքան այս նախագծի վերաբերյալ բացատրություններ սկսելը, ես կցանկանայի ներողություն խնդրել ցածր որակի պատկերի և տեսանյութի համար, բայց անկեղծ ասած, իրոք, դժվար է հստակ և հստակ պատկեր վերցնել նորմալ տեսախցիկով իմ բջջային տեսախցիկի պես POV- ից աշխատելուց: Այն պահանջում է շատ արագ դիֆրագմային օպտիկական ոսպնյակ ՝ իրական շարժումը տեսնելու համար, բայց ես ավելի լավ տեսանյութը կբեռնեմ, երբ վերջապես կարողանամ գնել իմ CANON տեսախցիկը

Ինչ է POV- ն

POV- ը նշանակում է Persistence Of Vision Globe, որը կապված է մարդկային տեսողության երևույթի հետ: Թեթև գրգռիչը ցանցաթաղանթի վրա որպես հետևանք է մնում մոտ 1/10 վայրկյան: Երբ լույսի խթանները հաջորդականանում են հաջորդականությամբ, դրանք միաձուլվում են մեկ շարունակական պատկերի: Իրականում դա կինոյի և հեռուստատեսության սարքերի հիմքն է, POV- ն նման պատրանք է ստեղծում (մեզ խաբում է) և պտույտով ստեղծում պատկերը մեկ կետի կամ առանցքի շուրջ LED լուսարձակների զանգվածով

Ինչ է նախագծի նորարարությունը

Իհարկե, POV- ն նոր գաղափար չէ, և շատ նախագծեր արդեն կան Instructables- ում կամ այլ կայքերում, սակայն այդ նախագիծը հիմնականում օգտագործում է կանխադրված ստատիկ տաճար կամ պատկեր, որը հիմնականում կարդացվում է MCU հիշողությունից կամ SD քարտից, բայց այս նախագծում մենք օգտագործում ենք գեղեցիկ հնարավորությունների տեղակայումը: IOT- ի դեպքում այս հարցում միացված է ESP8266 չիպը:

Այս IOT հատկանիշներով մենք

  1. կարող էր հեշտությամբ անլար բեռնել նոր պատկերներ հիշողության մեջ
  2. ստեղծել պատկերի ցուցադրման ցանկալի սցենարը ՝ ցանկացած հաջորդականությամբ կամ տևողությամբ
  3. կարիք չկա չիպը ծրագրավորել կամ անջատել հիշողության քարտը և նորից միացնել այն նոր անիմացիայի համար
  4. օգտագործողի համար հարմար IOT վեբհոստը հեշտացնում է յուրաքանչյուրի շարժական կամ պլանշետային միջոցով POV- ի կառավարումը նույնիսկ հեռակա կարգով
  5. շատ էժան սարքավորումների իրականացում `ավելի քան 30 տարբեր պատկերների տարողությամբ

Ինչպես է POV- ն աշխատում

POV էկրաններ, LED լուսարձակների գծային (1-ծավալային) զանգվածը պտտվում է մեկ կետի շուրջը, ինչպես հեծանիվի անիվը: Չափելով նրանց պտույտի արագությունը և վերահսկելով նրանց բռնկումները միլիվայրկյան ճշգրտությամբ, մենք կարող ենք ստեղծել երկակի կամ եռաչափ պատկերի պատրանք, որը մնում է օդում: Եկեք դիտարկենք ցանկացած էֆեկտի (պատկերը, տեքստը,…) մեկ շրջանակը, յուրաքանչյուր շրջանակ բաղկացած է բազմաթիվ պիքսելներից և, հետևաբար, հարթ կամ գնդաձև տարածքի բազմաթիվ տողերից, POV- ն ցուցադրում է այս պատկերը պատկերի մեկ տողով, որը փոխվում է դիրքը փոխելու հետ մեկտեղ լրացնելու համար: այդ պատկերը, ուստի խնդիրն այն է, թե ինչպես կարելի է ճշգրիտ վերահսկել LED պիքսելների գույնը ժամանակի և տարածության մեջ, որպեսզի այն կարողանա ստեղծել ամբողջ պատկերի POV- ն ՝ դասակարգված պտտման առանցքի հիման վրա, էֆեկտի տեսակը և որքան գույն կարող է ստեղծել:

Պտտման տարբեր առանցքների միջոցով կարող է արտադրվել հարթ, գլանաձև և գնդաձև POV էկրան

շատ POV նախագծեր օգտագործում են պարզ մեկ գունավոր LED կամ բարձր արագությամբ խելացի պիքսելներ, ինչպիսիք են WS2812- ը կամ APA104- ը, և այս նախագծում մենք օգտագործում ենք արագ LED LED չիպերի թարմացման APA102 գործնականում մոտ 16 ՄՀց թարմացման արագություն: այս LED չիպը վերահսկելու համար ունի 2 գիծ (Ground, Data, Clock, +5v)

Քայլ 1. Ինչպես կառուցել POV

Ինչպես կառուցել POV
Ինչպես կառուցել POV
Ինչպես կառուցել POV
Ինչպես կառուցել POV
Ինչպես կառուցել POV
Ինչպես կառուցել POV

Սկզբում ինձ պետք է POV հանգույցը ամրացնելու համար կառուցվածքը, մետաղական կամ ոչ մետաղական կառուցվածքը պատրաստելը կախված է ձեռքից: Դուք կարող եք այն պատրաստել ցանկացած մատչելի նյութով `այն պատին տեղադրելու համար կամ ոտքեր ավելացնելու համար` կանգնելու համար: Իմ ընկերը պատրաստում է պարզ եռոտանի և տեղադրում է ժամանակի գոտու մեխանիզմը, որպեսզի նվազեցնի DC շարժիչի արագությունը 500 -ի սահմաններում: անգամ մեկ վայրկյանում, Քանի որ իմ POV- ն բաղկացած է 1 անկյունագծային LED ժապավենից, հետևաբար յուրաքանչյուր շրջանակ լրացվում է կիսով չափ կամ պտույտով, մեկ այլ բառով մեզ պետք է իդեալական հանգույցի RPM- ը մոտ 600 -ի սահմաններում և այս պտույտով յուրաքանչյուր պտույտ տևում է մոտ 100 ms: Հետևյալ հավասարումը ցույց է տալիս, որ RPM = (fps/Nb)*60 հասկացությունը, որը Nb- ն հավասար է մասնաճյուղի թվին, և այս դեպքում մենք ունենք RPM = (20/2)*60 = 600my POV- ն պտտվում է 430 rpm- ի շուրջ, ուստի իմ fps- ը մոտ 15 fsp է: ինչը բավականին լավ է այս հարցում: Մեխանիկական մասի կառուցում

Հաջորդ քայլում ես օգտագործեցի PVC մխոցի կտոր, որը պահեց LED բարը: Հաբը ճախարակային լիսեռով միացնելու համար մեկ M10 պտուտակ ամրացվել է PCV մասի հետևի մասում Երկու գավաթ օղակ, որը տեղադրված է ճախարակի լիսեռի վրա, 5 վոլտ DC DC տախտակին և LED ժապավենին փոխանցելու համար, այնուհետև, ըստ հետևյալ նկարների, այս հատվածը տեղադրված է պարզ ճախարի վրա: ժամանակի փոխանցման համակարգը, որը միացված է 12 վ DC հոսանքի շարժիչին, յուրաքանչյուր մաս ունի իր սեփական սնուցման աղբյուրը և փակված է ոտքերի վրա ամրացված սպիտակ արկղում

Քայլ 2. Softwareրագրաշարի ներդրում Մաս 1

Softwareրագրաշարի ներդրում Մաս 1
Softwareրագրաշարի ներդրում Մաս 1

Տվյալ պատկերը LED շերտում ցուցադրելու համար յուրաքանչյուր պատկեր պետք է պիքսելավորվի, այնուհետև վերբեռնվի MCU հիշողության մեջ, այնուհետև տող առ տող սնվի LED շերտի վրա, որպեսզի դա անեմ երկու տարբեր հարթակների ծրագրային ապահովման համար, մեկը ՝ java runtime Processing- ի հիման վրա: Այս ծրագիրը գրել է Processing IDE- ում և այն պարզապես բացել պատկերի ֆայլը, այնուհետև այն պտտել քայլ առ քայլ ՝ հանելով պատկերի պիքսելացված տողերը: /200=1.8 աստիճան) 200 անգամ 200 տող հանելու համար: Քանի որ իմ LED շերտը բաղկացած է 144 LED- ից `ներկառուցված APA102 չիպով, ուստի մի ամբողջ պատկեր ունի 200*144 = 28800 պիքսել: Քանի որ APA102 չիպերի յուրաքանչյուր գույնը ցուցադրվում է 4 բայթ (W, RGB), ուստի յուրաքանչյուր պատկերի չափը ճշգրիտ է 200*144*4 = 115200 կամ 112.5KB: բեռնել MCU հիշողություն

PImage img, black_b, image_load; PrintWriter արտադրանք; int SQL; բոց led_t; բայթ pov_data; int line_num = 200; Լարային _OUTPUT = "";

դատարկ պարամետրեր ()

{selectInput («Ընտրել պատկեր», «imageChosen»); noLoop (); սպասել (); }

դատարկ կարգավորում ()

{ելք = createWriter (_OUTPUT); black_b = createImage (SQL, SQL, RGB); black_b.loadPixels (); համար (int i = 0; i = line_num) {noLoop (); output.flush (); output.close ();} background (black_b); pushMatrix (); imageMode (CENTER); թարգմանել (SQL/2, SQL/2); պտտել (ռադիաններ (l*360/line_num)); պատկեր (img, 0, 0); popMatrix (); pushMatrix (); համար (int i = 0; i <144; i ++) {գույնը c = ստանալ (int (i*led_t+led_t/2), int (SQL/2)); output.print ((char) կարմիր (c)+""+(char) կանաչ (c)+""+(char) կապույտ (c)); // տպել ((char) կարմիր (c)+""+(char) կանաչ (c)+""+(char) կապույտ (c)+";"); լրացնել (գ); rect (i*led_t, (SQL/2)-(led_t/2), led_t, led_t); } // println (); popMatrix (); // ուշացում (500); լ ++; }

void keyPressed ()

{output.flush (); // Մնացած տվյալները գրում է output.close () ֆայլին: // Ավարտում է ֆայլի ելքը (); // Դադարեցնում է ծրագիրը}

void imageChosen (Ֆայլ զ)

{if (f == null) {println («Պատուհանը փակվեց կամ օգտվողը սեղմեց չեղարկել»); ելք (); } else {if (f.exists ()) img = loadImage (f.getAbsolutePath ()); Տող s = f.getAbsolutePath (); Լարային ցուցակ = պառակտում (ներ, '\'); int n = ցուցակ. երկարություն; Լար fle = պառակտում (ցուցակ [n-1], '.'); println ("Բացել ֆայլը."+fle [0]); _OUTPUT = fle [0]+". Bin"; // img = loadImage ("test.jpg"); int w = img. լայնություն; int h = img. բարձրություն; SQL = max (w, h); չափը (SQL, SQL); led_t = SQL/144.0; println ("h ="+h+"w ="+w+"max ="+SQL+"չափը led ="+led_t); }} void mousePressed () {loop ();}

դատարկ mydata ()

{բայթ b = loadBytes ("something.dat"); // Տպեք յուրաքանչյուր արժեք ՝ 0 -ից մինչև 255 (int i = 0; i <b.length; i ++) {// յուրաքանչյուր տասներորդ համարը սկսեք նոր տող, եթե ((i % 10) == 0) println (); // բայթերը -128 -ից 127 են, սա փոխակերպվում է 0 -ի 255 -ի int a = b & 0xff; տպել (a + ""); } println (); // Տպեք դատարկ տող saveBytes- ի վերջում ("numbers.dat", b); } void wait () {while (img == null) {հետաձգում (200); } հանգույց (); }

Քայլ 3. Softwareրագրակազմի ներդրում Մաս 2

Image
Image
Softwareրագրաշարի ներդրում Մաս 2
Softwareրագրաշարի ներդրում Մաս 2
Softwareրագրաշարի ներդրում Մաս 2
Softwareրագրաշարի ներդրում Մաս 2

MCU ցուցադրման ծրագիր

բարձրորակ ESP8266 չիպը ընտրվել է մի քանի պատճառով, նախ այն լավ զարգացրել է բաց SDK գործիքներ ՝ WiFi- ի գործառույթներից օգտվելու համար, ինչպես նաև օգտագործողի համար վեբ սերվեր հյուրընկալելու համար: Այս հնարավորությունների շնորհիվ օգտագործողի համար հարմարավետ վեբ-սերվեր, որը նախատեսված է պիքսելացված պատկերը MCU հիշողության մեջ վերբեռնելու և ցուցադրման համար օգտագործողի սահմանման սցենար ստեղծելու համար: 4 Մբ ESP-12E շարքով մենք կարող ենք օգտագործել 1 Մբ ծրագրի և 3 Մբ պատկերների համար, որոնք 112.5 ԿԲ չափսերով պիքսելավորված պատկերի համար կարող ենք մոտավորապես 25 պատկեր վերբեռնել MCU- ում և կարող եմ ցանկացած հաջորդականություն կամ ցուցադրման ժամանակաշրջան դարձնել իմ օգտագործած բեռնված պատկերի համար: Վեբ սերվեր ստեղծելու համար Arduino կոդի բազայի իրականացում: կոդը ունի երեք հիմնական գործառույթ իր հանգույցում ՝ ըստ հետևյալի

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 = start_address_of_imagefile [image_index]; Serial.printf ("Ֆայլի համարը =%u անունը`%s հասցեն `%u տևողությունը`%u / n ", image_index, IMAGES [image_index].c_str (), start_address_of_imagefile [image_index], DURATION [image_index]); Current_imageLine = 0; image_index ++; OpenlastTime = millis (); } if ((micros ()-lastLineShow)> lineInterval) {lastLineShow = micros (); ESP.flashRead (_memory_pointer, (uint32_t *) leds, NUM_LEDS *3); FastLED.show (); _memory_pointer+= (NUM_LEDS*3); Current_imageLine ++; ուշացում (LineIntervalDelay); } if (Current_imageLine> = IMAGES_LINES) {Current_imageLine = 0; _memory_pointer = start_address_of_imagefile [image_index-1]; }} լավատեսական եկամտաբերություն (1000); }

Server Handler the server.handleClient (); պատասխանատու է webhost- ում հաճախորդի ցանկացած հարցի մշակման համար, այս կայքը կարող է ձևավորվել կամայականորեն ՝ տվյալների վերբեռնման, ցանկացած պետական զեկույցի ցուցադրման կարգավորումը փոխելու համար: Իմ վեբհոստը բաղկացած է երեք ներդիրից, քանի որ առաջին ներդիրի հետևյալ պատկերները կարող ենք ստուգել ցուցադրման ընթացիկ սցենարը հաջորդականությամբ և տևողությամբ յուրաքանչյուր պատկերի համար, ինչպես նաև ցանցի տեղեկատվությունը, ինչպես նաև ցուցադրված POV պտույտը

վերբեռնման պատկերի ներդիրում մենք կարող ենք պիքսելացված պատկեր վերբեռնել MCU հիշողության մեջ կամ ջնջել որոշակի պատկեր

ցանցի ներդիրում մենք կարող ենք փոխել ցանցի կարգավորումները, ինչպիսիք են wifi ռեժիմը, ստատիկ ip- ն, ցանցի անունը և անցումը,..

Պատկերի վերբեռնիչ

այս գործառույթի սերվերային հաճախորդի հայցը Ajax- ի կողմից ՝ պիքսելացված պատկերը MCU հիշողության մեջ վերբեռնելու համար, այնուհետև ֆայլը հիշողության մեջ գրեք չմշակված ձևով, որպեսզի ֆայլը հնարավորինս արագ ընթերցվի: Հիշողության մեկնարկի և ավարտի գտնվելու վայրը պահվում է աղյուսակում ՝ LED շերտով ցուցադրելու համար

Displayուցադրման գործառույթ

Ես օգտագործեցի FastLED lib- ը ՝ LED շերտով պիքսել ցուցադրելու համար: Այս գրադարանը AVR և ESP հարթակում LED շոուի համար ամենահաջողվածն ու ամենազարգացածն է: Պարզապես պետք է ուղարկել FastLED գործառույթը ՝ պահված LED պիքսելների գտնվելու վայրը: մենք կարդում ենք հիշողությունից տող առ տող պիքսելներ և ցուցադրում LED շերտի մեջ և սպասում, որ պտտման դրոշը իրականանա: մենք կրկնում ենք այս հաջորդականությունը մինչև յուրաքանչյուր պատկերից 200 տող կարդալը

ամբողջ ծածկագիրը, որը գտնվում է իմ git շտեմարանում այստեղ

ստորև բերված է POV- ի գործողության տեսանյութը, որն արձանագրված է բջջային տեսախցիկով, և ինչպես բացատրեցի, տեսանյութի որակը լավ չէ ոչ պրոֆեսիոնալ տեսախցիկի դիֆրագմային դանդաղ արագության պատճառով

Խորհուրդ ենք տալիս: