Съдържание:

1 метър POV с активиран IOT: 3 стъпки (със снимки)
1 метър POV с активиран IOT: 3 стъпки (със снимки)

Видео: 1 метър POV с активиран IOT: 3 стъпки (със снимки)

Видео: 1 метър POV с активиран IOT: 3 стъпки (със снимки)
Видео: Камера-ЛАМПА с проследяване и идентификация на човек. 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 дисплеите, линеен (1-мерен) масив от LED светлини се върти около една точка, като колело на велосипед. Чрез измерване на скоростта им на въртене и контролиране на светкавиците им с милисекундна прецизност, можем да създадем илюзията за 2 или 3-измерно изображение, задържащо се във въздуха. Нека разгледаме единичната рамка на всеки ефект (изображение, текст, …), всеки кадър се състои от много пиксели и следователно много линии в равнинна или сферична област, POV показва това изображение с един ред изображение, което се променя заедно с въртенето му за запълване това изображение, така че проблемът е как точно да се контролира цветът на светодиодния пиксел по начин и време, за да може да се създаде цялостно изображение POV са категоризирани на базата на оста на въртене, вида на ефекта, който може да се покаже и колко цвят може да създаде.

Чрез различна ос на въртене може да произвежда плосък, цилиндричен и сферичен POV дисплей

много POV проекти използват прости едноцветни LED или високоскоростни интелигентни пиксели като WS2812 или APA104 и в този проект ние използваме бързото обновяване на LED чипове APA102 с практически около 16 MHz честота на опресняване. този светодиоден чип има 2 линии за контрол (заземяване, данни, часовник, +5v)

Стъпка 1: Как да изградим POV

Как да изградим POV
Как да изградим POV
Как да изградим POV
Как да изградим POV
Как да изградим POV
Как да изградим POV

Първоначално се нуждая от конструкцията за монтиране на POV концентратор, като направата на метална или неметална конструкция зависи от това, което имате в ръцете си. Можете да го направите с всеки наличен материал, за да го инсталирате на стена или да добавите крака, за да направите стойка. Моят приятел прави простия статив и монтира механизма на ангренажния ремък, за да намали оборотите на постояннотоков двигател около 500. Малка математика За да имаме ясно и съгласувано изображение, се нуждаем от освежаване на кадъра около 20 кадъра в секунда, това означава, че трябва да имаме ясно изображение, което трябва да го показваме многократно около 20 пъти в секунда, Тъй като моят POV се състои от 1 диагонална LED лента, следователно всеки кадър завършен наполовина или завъртане, с друга дума имаме нужда от идеалния RPM на концентратора около 600 и с този RPM всеки оборот отне около 100 ms. следното уравнение демонстрира, че концепцията RPM = (fps/Nb)*60, която Nb е равна на брой на разклонението, и в този случай имаме RPM = (20/2)*60 = 600 моят POV се върти около 430 об/мин, така че моите fps са около 15 fsp което е доста добро по този въпрос. Изграждане на механичната част

В следващата стъпка използвах парче PVC цилиндър, фрезован, за да държа LED лентата. За да свържете главината с вал на шайбата, един болт M10 е закрепен към задната част на PCV частта. Два затварящи пръстена, монтирани на вала на ролката, за предаване на 5 волта DC към платката и LED лентата, след това, както е показано по -долу, тази част е монтирана на обикновената ролка система за предаване на време, която е свързана към 12v DC мотор, всяка част има собствено захранване и е затворена в бяла кутия, прикрепена към краката

Стъпка 2: Внедряване на софтуер Част 1

Внедряване на софтуер, част 1
Внедряване на софтуер, част 1

За да се демонстрира даденото изображение в LED лента, всяко изображение трябва да се пикселизира, след това да се качи в паметта на MCU и след това да се подаде в LED лента ред по ред, за да направя това в софтуер за две различни платформи, едната е базирана на java runtime Processing и други в C ++ за MCUP Обработка на пикселизирана програма тази програма е написала в Processing IDE и тя просто отваря файл с изображение, след което го завърта на стъпки, за да извлече пикселизирани линии на изображение. Избирам 200 ред за показване на всяко изображение, така че завъртам изображението до (360 /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; float led_t; байт pov_data; int ред_номер = 200; Низ _OUTPUT = "";

настройки на void ()

{selectInput ("Изберете изображение", "imageChosen"); noLoop (); изчакайте(); }

void setup ()

{изход = createWriter (_OUTPUT); black_b = createImage (SQL, SQL, RGB); black_b.loadPixels (); for (int i = 0; i = line_num) {noLoop (); output.flush (); output.close ();} фон (black_b); pushMatrix (); imageMode (ЦЕНТЪР); превод (SQL/2, SQL/2); завъртане (радиани (l*360/номер_на линия)); изображение (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)+";"); попълнете (в); rect (i*led_t, (SQL/2)-(led_t/2), led_t, led_t); } // println (); popMatrix (); // забавяне (500); l ++; }

void keyPressed ()

{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 = list.length; String fle = split (list [n-1], '.'); println ("Отворен файл:"+fle [0]); _OUTPUT = fle [0]+". Bin"; // img = loadImage ("test.jpg"); int w = img.width; int h = img.height; SQL = max (w, h); размер (SQL, SQL); led_t = SQL/144.0; println ("h ="+h+"w ="+w+"max ="+SQL+"размер led ="+led_t); }} void mousePressed () {loop ();}

void mydata ()

{байт b = loadBytes ("something.dat"); // Отпечатайте всяка стойност, от 0 до 255 за (int i = 0; i <b.length; i ++) {// Всяко десето число, започнете нов ред if ((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 е избран по няколко причини. Първо той е разработил отворени SDK инструменти, за да се възползва от функциите на WiFi заедно с паметта си за хостинг на уеб-сървър за потребителя. С тези възможности, удобният за потребителя уеб-сървър, предназначен за качване на пикселизирано изображение в паметта на MCU и създаване на сценарий за определяне от потребителя за показване. С 4 Mb серия ESP-12E можем да използваме 1 Mb за програма и 3 Mb за изображения, които с размер от 112,5KB за пикселизирано изображение бихме могли приблизително 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 *) светодиоди, NUM_LEDS *3); FastLED.show (); _memory_pointer+= (NUM_LEDS*3); Current_imageLine ++; забавяне (LineIntervalDelay); } ако (Current_imageLine> = IMAGES_LINES) {Current_imageLine = 0; _memory_pointer = start_address_of_imagefile [image_index-1]; }} optimistic_yield (1000); }

Server Handler the server.handleClient (); отговорен за обработването на всяка клиентска заявка на уеб хост, този уебсайт може да бъде произволно проектиран за качване на данни, промяна на настройката за показване на всеки доклад за състоянието. Моят уеб хост се състои от три раздела, като следните изображения в първия раздел можем да проверим текущия сценарий на показване с последователност и продължителност за всяко изображение, както и информация за мрежата, както и показани обороти на POV

в раздела за качване на изображения можем да качим пикселизирано изображение в паметта на MCU или да изтрием конкретно изображение

в раздела мрежа можем да променим мрежовите настройки като wifi режим, статичен ip, име на мрежата и пропуск,..

Image Up-loader

тази заявка за клиентски сървър на функция от Ajax за качване на пикселизирано изображение в паметта на MCU, след което запишете файла в паметта в необработен формат, така че четенето на файла да бъде възможно най -бързо. Началното и крайното местоположение на паметта се съхраняват в таблица за показване в LED лента

Функция на дисплея

Използвах FastLED lib, за да покажа пиксел в LED лента, тази библиотека е една от най -успешните и добре разработени за LED шоу на AVR и ESP платформа. Необходимо е само да изпратите FastLED функция, местоположението на съхранявания LED пиксел. четем ред по ред пиксели от паметта и го показваме в LED лента и чакаме да се сбъдне новото знаме на въртене. повтаряхме тази последователност, докато не бяха прочетени 200 реда от всяко изображение

целият код, разположен в моето git хранилище тук

Следва видеото на POV в действие, което е записано от мобилна камера и както обясних, качеството на видеото не е добро поради бавната скорост на диафрагмата на непрофесионалната камера

Препоръчано: