Obsah:

1 meter POV so zapnutým IOT: 3 kroky (s obrázkami)
1 meter POV so zapnutým IOT: 3 kroky (s obrázkami)

Video: 1 meter POV so zapnutým IOT: 3 kroky (s obrázkami)

Video: 1 meter POV so zapnutým IOT: 3 kroky (s obrázkami)
Video: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, November
Anonim
Image
Image
1 meter POV so zapnutým IOT
1 meter POV so zapnutým IOT
1 meter POV so zapnutým IOT
1 meter POV so zapnutým IOT
1 meter POV so zapnutým IOT
1 meter POV so zapnutým IOT

Predtým, ako sa pustím do vysvetľovania tohto projektu, by som sa chcel ospravedlniť za nekvalitný obrázok a video, ale úprimne povedané, je skutočne ťažké nasnímať ostrý a jasný obraz z bežiaceho fotoaparátu bežným fotoaparátom, akým je môj mobilný fotoaparát. Na zachytenie skutočného pohybu potrebuje veľmi rýchly membránový optický objektív, ale lepšie video nahrám, keď si konečne môžem kúpiť fotoaparát CANON

Čo je to POV

Skratka POV znamená Persistence Of Vision Globe, ktorá súvisí s fenoménom ľudského videnia. Svetelný stimul pretrváva ako následný účinok na sietnici asi 1/10 sekundy. Keď sú svetelné podnety sekvenované v rýchlom slede za sebou, zlúčia sa do jedného súvislého obrazu. V skutočnosti je to základ pre filmové a televízne zariadenia,. POV robí takú ilúziu (klame nás) a vytvára obraz otáčaním sústavy LED svetiel okolo jedného bodu alebo osi

Čo je to inovácia projektu

Off course POV nie je nový nápad a veľa projektov už existuje v Instructables alebo na iných stránkach, tieto projekty však väčšinou používajú prednastavený statický chrám alebo obrázok, ktorý sa väčšinou číta z pamäte MCU alebo karty SD, ale v tomto projekte používame nasadenie krásnych funkcií. čipu s podporou IOT, ako je ESP8266, v tejto záležitosti.

Vďaka týmto funkciám IOT sme

  1. mohol ľahko bezdrôtovo odosielať nové obrázky do pamäte
  2. vytvorte požadovaný scenár obrázkovej show s ľubovoľnou sekvenciou alebo akýmkoľvek trvaním
  3. kvôli novej animácii nie je potrebné čip preprogramovať ani odpojiť pamäťovú kartu a znova ho zapojiť
  4. užívateľsky prívetivý webhosting IOT uľahčuje každému správu POV pomocou mobilného telefónu alebo tabletu dokonca aj na diaľku
  5. veľmi lacná hardvérová implementácia s kapacitou viac ako 30 rôznych obrázkov

Ako funguje POV

Displeje POV, lineárna (jednorozmerná) sústava LED svetiel sa otáča okolo jedného bodu, napríklad ako koleso bicykla. Meraním rýchlosti ich otáčania a riadením ich zábleskov s milisekundovou presnosťou môžeme vytvoriť ilúziu 2 alebo 3-rozmerného obrazu, ktorý pretrváva vo vzduchu. Zoberme do úvahy jeden rámec akéhokoľvek efektu (obrázok, text, …), každý rámec pozostáva z mnohých pixelov, a teda z mnohých riadkov v rovine alebo sférickej oblasti, POV zobrazuje tento obrázok s jedným riadkom obrázku, ktorého poloha sa mení spolu s jeho otáčaním, aby sa vyplnil že obraz, takže problém je, ako presne ovládať farbu pixelov LED spôsobom času a priestoru, aby mohol vytvoriť celý obraz, POV sú kategorizované podľa osi otáčania, typu efektu, ktorý je možné zobraziť a koľko farby je možné vytvoriť.

Podľa rôznych osí otáčania môže produkovať planárny, valcový a sférický displej POV

mnoho projektov POV používa jednoduché jednofarebné LED alebo vysokorýchlostné inteligentné pixely ako WS2812 alebo APA104 a v tomto projekte používame rýchly osviežovač LED čipov APA102 s prakticky okolo 16 MHz obnovovacou frekvenciou. tento LED čip má 2 riadky na ovládanie (uzemnenie, dáta, hodiny, +5v)

Krok 1: Ako vybudovať POV

Ako vytvoriť POV
Ako vytvoriť POV
Ako vytvoriť POV
Ako vytvoriť POV
Ako vytvoriť POV
Ako vytvoriť POV

Najprv potrebujem konštrukciu na namontovanie náboja POV, takže výroba kovovej alebo nekovovej konštrukcie závisí od toho, čo máte v rukách. Môžete ho vyrobiť z akéhokoľvek dostupného materiálu a nainštalovať ho na stenu alebo pridať nohy na výrobu stojana. Môj priateľ robí jednoduchý statív a montuje mechanizmus rozvodového remeňa, aby znížil otáčky jednosmerného motora okolo 500. Malá matematika Na to, aby sme mali jasný a koherentný obraz, potrebujeme osvieženie rámca okolo 20 snímok za sekundu, znamená to, že aby sme mali jasný obraz, musíme ho opakovane zobrazovať asi o 20. krát za sekundu, pretože môj POV pozostáva z 1 diagonálneho LED pásu, a preto je každý snímok ukončený polovicou alebo otočením, iným slovom potrebujeme otáčky ideálneho rozbočovača okolo 600 a pri týchto otáčkach každá otáčka trvala asi 100 ms. nasledujúca rovnica ukazuje, že koncept RPM = (fps/Nb)*60, ktorý Nb sa rovná počtu vetiev, a v tomto prípade máme RPM = (20/2)*60 = 600 m POV sa otáča okolo 430 ot/min, takže moje fps je okolo 15 fsp čo je v tejto záležitosti celkom dobré. Budovanie mechanickej časti

V ďalšom kroku som použil kus valca z PVC Frézovaný na držanie lišty LED. Na pripojenie náboja k hriadeľu kladky bola k zadnej časti časti PCV priskrutkovaná jedna skrutka M10. Na hriadeľ kladky inštalovaný dva krúžky objímky na prenos 5 V jednosmerného prúdu na dosku a pásik LED, potom podľa nasledujúcich obrázkov je táto časť namontovaná na jednoduchú kladku. systém prenosu času, ktorý je pripojený k 12 V jednosmernému motoru, každá časť má svoje vlastné napájanie a je uzavretá v bielom boxe pripevnenom k nohám

Krok 2: Implementácia softvéru, časť 1

Implementácia softvéru, časť 1
Implementácia softvéru, časť 1

Aby sa demonštroval daný obrázok v LED páse, každý obrázok by mal byť pixelizovaný, potom nahraný do pamäte MCU a potom vedený do LED pásika riadok po riadku, aby som to urobil v softvéri pre dve rôzne platformy, jedna je založená na spracovaní Java runtime a ďalšie v C ++ pre MCU Spracovanie pixelizovaného programu, tento program napísal v Processing IDE a jednoducho otvorí súbor s obrázkom, potom ho v krokoch extrahuje pixelizované riadky obrazu. Na zobrazenie ľubovoľného obrázku som vybral 200 riadkov, takže obrázok otočím na doraz (360 /200=1,8 stupňa) 200 -krát, aby sa extrahovalo 200 riadkov. Pretože môj LED pás pozostáva zo 144 LED s integrovaným čipom APA102, celý obrázok má 200*144 = 28 800 pixelov. Pretože každá farba na čipe APA102 zobrazuje 4 bajty (W, RGB), každá veľkosť obrázka je teda presne 200*144*4 = 115200 alebo 112,5 kB podľa kódu spracovania demonštruje postupnosť pixelizácie obrazu a výsledkom bude súbor s príponou bin, ktorý môže nahrať do pamäte MCU

PImage img, black_b, image_load; výstup PrintWriter; int SQL; float led_t; byte pov_data; int riadok_čísla = 200; Reťazec _OUTPUT = "";

zrušiť nastavenia ()

{selectInput ("Vyberte obrázok", "imageChosen"); noLoop (); čakať (); }

neplatné nastavenie ()

{output = 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 (CENTRUM); prekladať (SQL/2, SQL/2); rotate (radiány (l*360/riadok_čísla)); obrázok (obr., 0, 0); popMatrix (); pushMatrix (); pre (int i = 0; i <144; i ++) {farba c = get (int (i*led_t+led_t/2), int (SQL/2)); output.print ((char) red (c)+""+(char) green (c)+""+(char) blue (c)); // print ((char) red (c)+""+(char) green (c)+""+(char) blue (c)+";"); výplň (c); rect (i*led_t, (SQL/2)-(led_t/2), led_t, led_t); } // println (); popMatrix (); // zdržanie (500); l ++; }

prázdne tlačidlo Stlačené ()

{output.flush (); // Zapíše zostávajúce údaje do súboru output.close (); // Dokončí súbor exit (); // Zastaví program}

neplatný imageChosen (súbor f)

{if (f == null) {println ("Okno bolo zatvorené alebo používateľ stlačil tlačidlo zrušiť."); exit (); } else {if (f.exists ()) img = loadImage (f.getAbsolutePath ()); Reťazec s = f.getAbsolutePath (); Reťazec zoznam = rozdelenie (s, '\'); int n = list.length; Reťazec fle = rozdelený (zoznam [n-1], '.'); println ("Otvoriť súbor:"+fle [0]); _OUTPUT = fle [0]+". Bin"; // img = loadImage ("test.jpg"); int w = img.width; int h = img.height; SQL = max (š, v); veľkosť (SQL, SQL); led_t = SQL/144.0; println ("h ="+h+"w ="+w+"max ="+SQL+"veľkosť LED ="+led_t); }} neplatné mousePressed () {loop ();}

neplatné mydata ()

{byte b = loadBytes ("something.dat"); // Vytlačte každú hodnotu od 0 do 255 pre (int i = 0; i <b.length; i ++) {// Každé desiate číslo, začnite nový riadok, ak (((i % 10) == 0) println (); // bajtov je od -128 do 127, toto sa prevedie na 0 až 255 int a = b & 0xff; tlač (a + ""); } println (); // Vytlačte prázdny riadok na konci saveBytes ("numbers.dat", b); } void wait () {while (img == null) {delay (200); } slučka (); }

Krok 3: Implementácia softvéru, časť 2

Image
Image
Implementácia softvéru, časť 2
Implementácia softvéru, časť 2
Implementácia softvéru, časť 2
Implementácia softvéru, časť 2

Program zobrazenia MCU

vysokovýkonný čip ESP8266 bol vybraný z niekoľkých dôvodov, najskôr má dobre vyvinuté otvorené nástroje SDK na využitie funkcií WiFi spolu s pamäťou na hosťovanie webového servera pre používateľa. Vďaka týmto funkciám je užívateľsky prívetivý webový server určený na odosielanie pixelizovaného obrázka do pamäte MCU a vytváranie scenárov definovaných používateľom na zobrazenie. So sériou 4 Mb ESP-12E môžeme použiť 1 Mb pre program a 3 Mb pre obrázky, ktoré s veľkosťou 112,5 kB pre pixelizovaný obrázok by sme mohli nahrať zhruba 25 obrázkov nahraných na MCU a mohli by sme vytvoriť ľubovoľnú sekvenciu alebo akékoľvek časové obdobie pre odovzdaný obrázok, ktorý používam Implementácia základne kódu Arduino na výrobu webového servera. kód má vo svojej slučke tri hlavné funkcie podľa nasledujúceho

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 ("Číslo súboru =%u názov:%s adresa:%u trvanie:%u / n", image_index, IMAGES [image_index].c_str (), start_address_of_imagefile [image_index], DURATION [image_index]); Current_imageLine = 0; image_index ++; OpenlastTime = milis (); } if ((micros ()-lastLineShow)> lineInterval) {lastLineShow = micros (); Kontrolky ESP.flashRead (_memory_pointer, (uint32_t *), NUM_LEDS *3); FastLED.show (); _memory_pointer+= (NUM_LEDS*3); Current_imageLine ++; oneskorenie (LineIntervalDelay); } if (Current_imageLine> = IMAGES_LINES) {Current_imageLine = 0; _memory_pointer = start_address_of_imagefile [image_index-1]; }} optimistic_yield (1000); }

Obsluha servera server.handleClient (); zodpovedný za spracovanie akejkoľvek požiadavky klienta na webhostingu, táto webová stránka môže byť ľubovoľne navrhnutá na odosielanie údajov, zmenu nastavenia ukážky akejkoľvek správy o stave. Môj webhosting sa skladá z troch záložiek, pretože nasledujúce obrázky na prvej karte sme mohli skontrolovať aktuálny scenár show so sekvenciou a trvaním pre každý obrázok, tiež informácie o sieti a zobrazené otáčky POV

na karte nahrať obrázok by sme mohli nahrať pixelizovaný obrázok do pamäte MCU alebo odstrániť konkrétny obrázok

na karte sieť by sme mohli zmeniť nastavenia siete, ako je režim wifi, statická adresa IP, názov siete a prístup,..

Nahrávač obrázkov

Táto funkcia požiada klienta klienta servera Ajax o odoslanie pixelizovaného obrázku do pamäte MCU, potom súbor zapíše do pamäte v surovom formáte, aby bolo čítanie súboru čo najrýchlejšie. Miesto začiatku a konca pamäte je uložené v tabuľke na zobrazenie v páse LED

Funkcia displeja

Na zobrazenie pixelov v páse LED som použil FastLED lib, táto knižnica je jednou z najúspešnejších a najlepšie vyvinutých na predvádzanie LED na platforme AVR a ESP. Stačí odoslať funkciu FastLED, umiestnenie uloženého LED pixelu. čítame pixely po riadkoch z pamäte a zobrazujeme ich v páse LED a čakáme na splnenie nového príznaku otáčania. túto sekvenciu sme opakovali, kým sa neprečítalo 200 riadkov z každého obrázku

celý kód umiestnený v mojom úložisku git tu

Nasleduje video POV v akcii, ktoré je zaznamenané mobilnou kamerou a ako som vysvetlil, kvalita videa nie je dobrá z dôvodu nízkej rýchlosti clony neprofesionálnej kamery.

Odporúča: