Мазмұны:

IOT қосылған 1 метр POV: 3 қадам (суреттермен)
IOT қосылған 1 метр POV: 3 қадам (суреттермен)

Бейне: IOT қосылған 1 метр POV: 3 қадам (суреттермен)

Бейне: IOT қосылған 1 метр POV: 3 қадам (суреттермен)
Бейне: НОВИНКА! ЛУЧШЕЕ СЛЕЖЕНИЕ ЗА ЧЕЛОВЕКОМ камера ANBIUX 2 в1 2024, Қараша
Anonim
Image
Image
IOT қосылған 1 метр POV
IOT қосылған 1 метр POV
IOT қосылған 1 метр POV
IOT қосылған 1 метр POV
IOT қосылған 1 метр POV
IOT қосылған 1 метр POV

Бұл жоба туралы түсініктемені бастамас бұрын мен сапасыз сурет пен бейне үшін кешірім сұрағым келеді, бірақ шынымды айтсам, мобильді камера сияқты қалыпты камерамен POV іске қосудан айқын және айқын сурет алу өте қиын. Нақты қозғалысты түсіру үшін оған өте тез диафрагмалық оптикалық линза қажет, бірақ мен CANON камерамды сатып алғаннан кейін жақсы бейнені жүктеймін.

POV дегеніміз не

POV - бұл адамның көру құбылысына қатысты Vision Globe тұрақтылығы. Жарық стимуляторы көздің торлы қабатына кейінгі әсер ретінде 1/10 секундқа созылады. Жарық тітіркендіргіштері біртіндеп тізбектелгенде, олар бір үздіксіз кескінге бірігеді. Шындығында, бұл кино мен теледидар құрылғыларының негізі. POV осындай иллюзия жасайды (бізді алдайды) және бір нүкте немесе ось айналасындағы жарықдиодты шамдардың айналуымен кескін жасайды.

Жоба инновациясы дегеніміз не

POV - бұл жаңа идея емес және көптеген жобалар Instructables немесе басқа сайттарда бұрыннан бар, бірақ бұл жоба көбінесе MCU жадысынан немесе SD картасынан оқылатын статикалық ғибадатхананы немесе суретті қолданады, бірақ біз бұл жобада әдемі мүмкіндіктерді қолданамыз. Бұл жағдайда ESP8266 сияқты IOT қосылған чип.

Бұл IOT мүмкіндіктерімен біз

  1. жаңа суреттерді жадқа сымсыз жүктей алады
  2. кез келген реттілікпен немесе кез келген ұзақтығы бар суреттің қажетті сценарийін жасаңыз
  3. чипті қайта бағдарламалаудың немесе жад картасын ажыратудың қажеті жоқ және оны жаңа анимация үшін қайта қосыңыз
  4. IOT веб -хостқа ыңғайлы қолданбасы ұялы телефонмен немесе планшетпен POV -ді қашықтан басқаруға мүмкіндік береді
  5. 30 -дан астам түрлі суреттер сыйымдылығы өте төмен аппараттық қондырғы

POV қалай жұмыс істейді

POV дисплейі, жарықдиодты шамдардың сызықтық (1 өлшемді) жиыны велосипед дөңгелегі сияқты бір нүктеде айналады. Олардың айналу жиілігін өлшеу және олардың жыпылықтауын миллисекундтық дәлдікпен бақылау арқылы біз ауада созылып жатқан 2 немесе 3 өлшемді кескіннің елесін жасай аламыз. Кез келген эффектінің (кадр, мәтін, …) бір кадрын қарастырайық, әр кадр көптеген пиксельден тұрады, сондықтан жазықтықта немесе сфералық аймақта көптеген сызықтардан тұрады, POV бұл суретті кескіннің бір жолымен көрсетеді, оның орнын толтыру үшін айналуымен бірге өзгертеді. бұл сурет, сондықтан мәселе - жарықдиодты пиксельдің түсі уақыт пен кеңістікте қалай дәл басқарылатындығында, осылайша POV тұтас бейнені жасай алады, ось бойынша айналу осіне, әсердің түрін көрсетуге болады және қанша түс жасай алады.

Әр түрлі айналу осі бойынша жазық, цилиндрлік және сфералық POV дисплейін шығара алады

көптеген POV жобалары WS2812 немесе APA104 сияқты қарапайым бір түсті жарықдиодты немесе жоғары жылдамдықты ақылды пикселдерді қолданады, және біз бұл жобада шамамен 16 МГц жаңарту жылдамдығымен APA102 жарықдиодты чипті жаңартқышты қолданамыз. бұл жарықдиодты чипте басқарылатын 2 желі бар (Жер, Деректер, Сағат, +5в)

1 -қадам: POV қалай құруға болады

POV қалай құруға болады
POV қалай құруға болады
POV қалай құруға болады
POV қалай құруға болады
POV қалай құруға болады
POV қалай құруға болады

Алдымен маған POV хабын орнататын құрылым қажет, металды немесе металл емес құрылымды жасау сіздің қолыңыздағы нәрсеге байланысты. Сіз оны қабырғаға орнату үшін кез келген қол жетімді материалмен жасай аласыз немесе тіреу үшін аяқтарын қоса аласыз. Менің досым қарапайым штатив жасайды және тұрақты ток қозғалтқышының айналу жиілігін 500 шамасында азайту үшін уақыт белбеуінің механизмін орнатады. Кішкене математика Ашық және келісілген кескінге ие болу үшін кадрды 20 кадр / сағ айналасында жаңарту қажет, бұл бізде шамамен 20 рет көрсету қажет. секундына бір рет, менің POV 1 диагональды жарық диодты жолағынан тұрады, сондықтан әр кадр жарты немесе айналумен аяқталады, басқаша айтқанда, біз айналмалы айналу жылдамдығы шамамен 600 айналады, бұл айналу кезінде шамамен 100 мс қажет. Келесі теңдеу RPM = (fps/Nb)*60 тұжырымдамасын көрсетеді, бұл Nb тармақ санына тең, және бұл жағдайда бізде RPM = (20/2)*60 = 600мы POV 430 айн/мин айналады, осылайша менің кадр/с 15 фс айналасында болады. бұл мәселеде өте жақсы. Механикалық бөліктің құрылысы

Келесі қадамда мен жарық диодты жолақты ұстау үшін МВХ цилиндрін қолдандым. Хабты білікпен байланыстыру үшін PCV бөлігінің артқы жағына бір M10 болт бекітілген, шкаф білігіне орнатылған екі шкаф сақинасы 5 вольтты тұрақты ток тақтасына және жарықдиодты жолаққа беру үшін, содан кейін келесі суреттер бойынша бұл бөлік қарапайым шкивке бекітілген. 12 вольтты тұрақты ток қозғалтқышына қосылған уақыт беру жүйесі, әрбір бөліктің өз қуат көзі бар және аяққа бекітілген ақ қорапқа салынған

2 -қадам: Бағдарламалық қамтамасыз етуді енгізу 1 -бөлім

Бағдарламалық қамтамасыз етуді енгізу 1 -бөлім
Бағдарламалық қамтамасыз етуді енгізу 1 -бөлім

Берілген суретті жарық диодты жолақта көрсету үшін әр суретті пиксельдеу керек, содан кейін MCU жадына жүктеу керек, содан кейін мен екі түрлі платформаға арналған бағдарламалық жасақтамаға жасаған жолақты жарықдиодты жолаққа беруім керек, олардың бірі java жұмыс уақытында өңдеуге негізделген. және басқалары C ++ үшін MCUProcessing pixelized бағдарламасын өңдеу бұл бағдарлама IDE -де жазылған және ол жай ғана кескін файлын ашады, содан кейін оны кескіннің пикселденген сызықтарын алу үшін қадаммен бұрыңыз. Мен кез келген кескінді көрсету үшін 200 жолды таңдаймын, сондықтан мен кескінді айналасында айналдырамын (360 /200=1.8 градус) 200 жолды шығару үшін 200 рет. Менің жарық диодты жолағым APA102 чипі бар 144 светодиодтан тұрады, сондықтан бүкіл кескін 200*144 = 28800 пиксельге ие. APA102 микросхемасының әр түсі 4 байтты (W, RGB) дисплейде көрсетілгендіктен, әрбір кескін өлшемі дәл 200*144*4 = 115200 немесе 112,5КБ құрайды, өңдеу коды кескінді пикселизациялау реттілігін көрсетеді, және нәтижесінде контейнер кеңейту файлы болады. MCU жадына жүктеледі

PImage img, black_b, image_load; PrintWriter шығысы; int SQL; float led_t; байт pov_data; int line_num = 200; Жол _OUTPUT = «»;

жарамсыз параметрлер ()

{selectInput («Суретті таңдау», «imageChosen»); noLoop (); күту (); }

жарамсыз орнату ()

{шығару = createWriter (_OUTPUT); black_b = createImage (SQL, SQL, RGB); black_b.loadPixels (); for (int i = 0; i = line_num) {noLoop (); output.flush (); output.close ();} background (black_b); pushMatrix (); imageMode (ЦЕНТР); аудару (SQL/2, SQL/2); айналдыру (радиандар (l*360/line_num)); сурет (img, 0, 0); popMatrix (); pushMatrix (); for (int i = 0; i <144; i ++) {color c = get (int (i*led_t+led_t/2), int (SQL/2)); output.print ((char) қызыл (c)+«»+(char) жасыл (c)+«»+(char) көк (c)); // басып шығару ((char) қызыл (c)+«»+(char) жасыл (c)+«»+(char) көк (c)+«;»); толтыру (с); түзу (i*led_t, (SQL/2)-(led_t/2), led_t, led_t); } // println (); popMatrix (); // кешіктіру (500); l ++; }

void пернесі басылды ()

{output.flush (); // Қалған деректерді output.close () файлына жазады; // Файлды аяқтайды (); // бағдарламаны тоқтатады}

void imageChosen (Файл f)

{if (f == null) {println («Терезе жабылды немесе пайдаланушы бас тартты.»); exit (); } else {if (f.exists ()) img = loadImage (f.getAbsolutePath ()); Жол s = f.getAbsolutePath (); String list = split (s, '\'); int n = тізім ұзындығы; String fle = split (тізім [n-1], '.'); println («Файлды ашу:»+fle [0]); _OUTPUT = fle [0]+«. Bin»; // img = loadImage («test.jpg»); int w = img.width; int h = img.height; SQL = максимум (w, h); өлшемі (SQL, SQL); led_t = SQL/144.0; println («h =»+h+«w =»+w+«max =»+SQL+«size led =»+led_t); }} void mousePressed () {loop ();}

жарамсыз деректер ()

{байт 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) {delay (200); } цикл (); }

3 -қадам: Бағдарламалық қамтамасыз етуді енгізу 2 -бөлім

Image
Image
Бағдарламалық қамтамасыз етуді енгізу 2 -бөлім
Бағдарламалық қамтамасыз етуді енгізу 2 -бөлім
Бағдарламалық қамтамасыз етуді енгізу 2 -бөлім
Бағдарламалық қамтамасыз етуді енгізу 2 -бөлім

MCU дисплей бағдарламасы

жоғары өнімділік ESP8266 чипі бірнеше себептерге байланысты таңдалды, алдымен ол пайдаланушыға арналған веб-серверді орналастыру үшін жадымен бірге WiFi мүмкіндіктерін пайдалану үшін ашық SDK құралдарын жақсы әзірледі. Бұл мүмкіндіктердің арқасында MCU жадына пикселденген кескінді жүктеуге және көрсетуге арналған пайдаланушы анықтайтын сценарий құруға арналған, ыңғайлы веб-сервер. 4 Mb ESP-12E сериясымен біз бағдарлама үшін 1 Мб және суреттер үшін 3 Мб қолдана аламыз, оның өлшемі 112,5 КБ пиксельдендірілген кескін үшін біз MCU-ге шамамен 25 кескін жүктей аламыз және мен жүктеген суреттің кез келген реттілігін немесе кез келген көрсету кезеңін жасай аламыз. Веб -серверді құруға арналған Arduino кодының негізін енгізу. код келесі циклде үш негізгі функцияға ие

void loop () {if (! SHOW &&! TEST) server.handleClient (); if (SHOW) {if ((millis ()- OpenlastTime)> ҰЗАҚТЫҚ [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].c_str (),_сурет_файлының_аталығы [image_index], ҰЗАҚТЫҒЫ [image_index]); Current_imageLine = 0; image_index ++; OpenlastTime = миллис (); } 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 = image_file файлының бастапқы_адресі [image_index-1]; }} оптимистік_кіріс (1000); }

Server Handler server.handleClient (); webhost -тағы кез келген клиенттің сұранысын өңдеуге жауапты, бұл веб -сайт кез келген мемлекеттік есептің шоу параметрін өзгертуге, деректерді жүктеуге ерікті түрде жасалуы мүмкін. Менің веб -хостым үш қойындыдан тұрады, келесі суреттер бірінші қойындыда, біз әр суреттің реттілігі мен ұзақтығы бар ағымдағы сценарийді, желілік ақпаратты, сондай -ақ POV айналымын тексере аламыз.

суретті жүктеу қойындысында біз MCU жадына пикселденген суретті жүктей аламыз немесе белгілі бір суретті жоя аламыз

желі қойындысында біз wifi режимі, статикалық IP, желінің атауы мен рұқсаты сияқты желі параметрлерін өзгерте аламыз.

Кескінді жүктеуші

бұл клиент Ajax -тан MCU жадына пиксельденген суретті жүктеуді сұрайды, содан кейін файлды жадқа шикі форматта жазады, сондықтан файлды мүмкіндігінше тез оқиды. Жадтың басталуы мен аяқталуы LED жолағында көрсетуге арналған кестеде сақталады

Көрсету функциясы

Мен LED жолағында пиксельді көрсету үшін FastLED lib қолдандым, бұл кітапхана AVR және ESP платформасында LED -шоу үшін ең табысты және жақсы дамыған кітапханалардың бірі. Тек FastLED функциясын, сақталған жарықдиодты пиксельдің орнын жіберу қажет. біз жадтан жолдық пиксельдерді оқимыз және оны жарық диодты жолақта көрсетеміз және жаңа айналу жалаушасының орындалуын күтеміз. біз бұл суретті әр суреттің 200 жолы оқылғанша қайталадық

бүкіл код менің git репозиторийімде орналасқан

төменде мобильді камерамен жазылған POV әрекетінің бейнесі бар, мен түсіндіргенімдей, кәсіби емес камераның диафрагмасының баяу жылдамдығына байланысты бейне сапасы жақсы емес.

Ұсынылған: