Sadržaj:

1 metar POV sa omogućenim IOT -om: 3 koraka (sa slikama)
1 metar POV sa omogućenim IOT -om: 3 koraka (sa slikama)

Video: 1 metar POV sa omogućenim IOT -om: 3 koraka (sa slikama)

Video: 1 metar POV sa omogućenim IOT -om: 3 koraka (sa slikama)
Video: АСМР 🏆🔥[Гарри Поттер и Кубок огня] [Глава 13-19] Чтение шепотом 📚 ASMR whisper [Harry Potter] 2024, Novembar
Anonim
Image
Image
1 metar POV sa omogućenim IOT -om
1 metar POV sa omogućenim IOT -om
1 metar POV sa omogućenim IOT -om
1 metar POV sa omogućenim IOT -om
1 metar POV sa omogućenim IOT -om
1 metar POV sa omogućenim IOT -om

Prije nego što počnem s objašnjenjem ovog projekta, želio bih se ispričati zbog loše kvalitete slike i videa, ali iskreno, zaista je teško snimiti oštru i jasnu sliku iz pokretanja POV -a normalnom kamerom poput moje mobilne kamere. Potreban mu je vrlo brz optički objektiv s membranom za snimanje pravog pokreta, ali ja ću postaviti bolji video kad konačno mogu kupiti svoju kameru CANON

Šta je POV

POV je kratica za Persistence Of Vision Globe koja se odnosi na fenomen ljudskog vida. Svjetlosni podražaj ostaje kao posljedica na mrežnicu oko 1/10 sekunde. Kada se svjetlosni stimulusi sekvenciraju u brzom slijedu, oni se stapaju u jednu kontinuiranu sliku. Zapravo, to je osnova za filmske i televizijske uređaje,. POV napravi takvu iluziju (prevari nas) i stvori sliku okretanjem niza LED svjetala oko jedne točke ili osi

Šta je inovacija projekta

Naravno, POV nije nova ideja i mnogo projekata već postoji u Instructables -u ili na drugim web mjestima, međutim ti projekti uglavnom koriste unaprijed postavljene statičke hramove ili slike koji se uglavnom čitaju iz MCU memorije ili SD kartice, ali u ovom projektu koristimo implementaciju lijepih funkcija čipa koji podržava IOT, poput ESP8266, po ovom pitanju.

Sa ovim IOT karakteristikama mi

  1. mogao je lako bežično postaviti nove slike u memoriju
  2. stvorite željeni scenarij prikaza slike s bilo kojim nizom ili bilo kojim trajanjem
  3. nema potrebe za ponovnim programiranjem čipa ili iskopčavanjem memorijske kartice i ponovnim uključivanjem za novu animaciju
  4. user -friendly IOT webhost olakšava svima upravljanje POV -om putem mobilnog telefona ili tableta čak i na daljinu
  5. vrlo niska cijena hardverske implementacije s kapacitetom od više od 30 različitih slika

Kako POV funkcionira

POV displeji, linearni (1-dimenzionalni) niz LED svjetala rotira oko jedne točke, poput kotača bicikla. Mjereći njihovu brzinu rotacije i kontrolirajući njihove bljeskove s milisekundnom preciznošću, možemo stvoriti iluziju 2 ili 3-dimenzionalne slike koja se zadržava u zraku. Razmotrimo pojedinačni okvir bilo kojeg efekta (sliku, tekst, …), svaki okvir se sastoji od mnogo piksela, pa otuda i mnogo linija u ravnini ili sferičnom području, POV prikazuje ovu sliku s jednom linijom slike koja se mijenja zajedno s rotacijom da se ispuni tu sliku, pa je problem kako precizno kontrolirati boju LED piksela u smislu vremena i prostora kako bi se stvorila cijela slika. POV su kategorizirane na osnovu osi rotacije, vrste efekta koji se može prikazati i koliko boja može stvoriti.

Različitom osi rotacije može proizvesti ravni, cilindrični i sferni POV zaslon

mnogi POV projekti koriste jednostavne jednobojne LED ili velike brzine pametnih piksela poput WS2812 ili APA104, a u ovom projektu koristimo brzo osvježavanje LED čipova APA102 sa brzinom osvježavanja od oko 16 MHz. ovaj LED čip ima 2 linije za kontrolu (uzemljenje, podaci, sat, +5V)

Korak 1: Kako izgraditi POV

Kako izgraditi POV
Kako izgraditi POV
Kako izgraditi POV
Kako izgraditi POV
Kako izgraditi POV
Kako izgraditi POV

U početku mi je potrebna struktura za postavljanje POV čvorišta, a izrada metalne ili nemetalne konstrukcije ovisi o tome što imate u rukama. Možete ga izraditi od bilo kojeg dostupnog materijala za ugradnju na zid ili dodati noge za izradu postolja. Moj prijatelj izrađuje jednostavan tronožac i montira mehanizam razvodnog remena kako bi se smanjio broj okretaja istosmjernog motora oko 500. Mala matematikaZa jasnu i koherentnu sliku potrebno nam je osvježavanje kadra oko 20 fps, znači da imamo jasnu sliku koju moramo stalno prikazivati oko 20 puta u sekundi, budući da se moj POV sastoji od 1 dijagonalne LED trake, dakle svaki okvir upotpunjen sa pola ili rotacijom, drugom riječju potreban nam je idealni broj okretaja čvorišta oko 600, a s ovim je okretajem svaki okretaj trajao oko 100 ms. Sljedeća jednadžba pokazuje da je koncept RPM = (fps/Nb)*60 koji je Nb jednak broju grana, a u ovom slučaju imamo RPM = (20/2)*60 = 600moji POV rotira oko 430 o/min, pa je moj fps oko 15 fsp što je prilično dobro po ovom pitanju. Izrada mehaničkog dijela

U sljedećem koraku sam upotrijebio komad PVC cilindra glodanog za držanje LED šipke. Za spajanje glavčine s osovinom remenice jedan vijak M10 je pričvršćen na stražnju stranu PCV dijela Dva čahura postavljena na osovini remenice za prijenos 5 volti istosmjerne struje na ploču i LED traku, a zatim prema sljedećim slikama, ovaj dio je montiran na jednostavnu remenicu sistem za prijenos vremena koji je spojen na 12V DC motor svaki dio ima svoje napajanje i zatvoren je u bijelu kutiju pričvršćenu za noge

Korak 2: Implementacija softvera 1. dio

Implementacija softvera 1. dio
Implementacija softvera 1. dio

Da bi se prikazana slika prikazala u LED traci, svaku sliku je potrebno pikselizirati, zatim otpremiti u MCU memoriju, a zatim uvesti u LED traku liniju po liniju, što je učinjeno softverom za dvije različite platforme, jedna je bazirana na java runtime obradi i drugi u C ++ za MCUPObrada pikseliziranog programa ovaj program je napisao u Processing IDE -u i jednostavno je otvorio datoteku slike, a zatim je rotirao u koracima za izdvajanje pikseliziranih linija slike. Odabirem 200 redaka za prikaz bilo koje slike, pa rotiram sliku (360 /200=1,8 stepeni) 200 puta za izdvajanje 200 linija. Kako se moja LED traka sastoji od 144 LED diode sa ugrađenim čipom APA102, tako da cijela slika ima 200*144 = 28800 piksela. Budući da je svaka boja u APA102 čipu prikazana sa 4 bajta (W, RGB), stoga je svaka veličina slike točno 200*144*4 = 115200 ili 112,5KB slijedeći. Kod za obradu pokazuje slijed pikselizacije slike, a rezultat će biti datoteka proširenja kante koja može biti učitani u MCU memoriju

PImage img, black_b, image_load; PrintWriter izlaz; int SQL; float led_t; byte pov_data; int red_broj = 200; String _OUTPUT = "";

postavke void ()

{selectInput ("Odaberite sliku", "imageChosen"); noLoop (); wait (); }

void setup ()

{output = createWriter (_OUTPUT); black_b = createImage (SQL, SQL, RGB); black_b.loadPixels (); za (int i = 0; i = red_broj) {noLoop (); output.flush (); output.close ();} background (black_b); pushMatrix (); imageMode (CENTAR); prevesti (SQL/2, SQL/2); rotirati (radijani (l*360/red_broj)); slika (img, 0, 0); popMatrix (); pushMatrix (); za (int i = 0; i <144; i ++) {boja c = get (int (i*led_t+led_t/2), int (SQL/2)); output.print ((char) crveno (c)+""+(char) zeleno (c)+""+(char) plavo (c)); // ispisati ((char) crveno (c)+""+(char) zeleno (c)+""+(char) plavo (c)+";"); ispuniti (c); rect (i*led_t, (SQL/2)-(led_t/2), led_t, led_t); } // println (); popMatrix (); // kašnjenje (500); l ++; }

void keyPressed ()

{output.flush (); // Zapisuje preostale podatke u datoteku output.close (); // Završava izlaz datoteke (); // Zaustavlja program}

void imageChosen (Datoteka f)

{if (f == null) {println ("Prozor je zatvoren ili je korisnik pritisnuo Cancel."); exit (); } else {if (f.exists ()) img = loadImage (f.getAbsolutePath ()); String s = f.getAbsolutePath (); String list = split (s, '\'); int n = list.length; String fle = split (lista [n-1], '.'); println ("Otvori datoteku:"+fle [0]); _OUTPUT = fle [0]+". Bin"; // img = loadImage ("test.jpg"); int w = img.width; int h = img.height; SQL = max (w, h); veličina (SQL, SQL); led_t = SQL/144.0; println ("h ="+h+"w ="+w+"max ="+SQL+"veličina led ="+led_t); }} void mousePressed () {loop ();}

void mydata ()

{bajt b = loadBytes ("something.dat"); // Odštampajte svaku vrijednost, od 0 do 255 za (int i = 0; i <b.length; i ++) {// Svaki deseti broj, započnite novi red if ((i % 10) == 0) println (); // bajtovi su od -128 do 127, ovo se pretvara u 0 do 255 int a = b & 0xff; print (a + ""); } println (); // Odštampaj prazan red na kraju saveBytes ("numbers.dat", b); } void wait () {while (img == null) {delay (200); } petlja(); }

Korak 3: Implementacija softvera, drugi dio

Image
Image
Implementacija softvera, drugi dio
Implementacija softvera, drugi dio
Implementacija softvera, drugi dio
Implementacija softvera, drugi dio

MCU displej program

ESP8266 čip visokih performansi izabran je iz nekoliko razloga, prvo je dobro razvio otvorene SDK alate za iskorištavanje WiFi funkcija uz memoriju za hosting web poslužitelja za korisnike. S ovim mogućnostima, web-poslužitelj prilagođen korisniku dizajniran za postavljanje pikselizirane slike u MCU memoriju i kreiranje korisnički definiranog scenarija za prikaz. Sa serijom od 4 Mb ESP-12E možemo koristiti 1 Mb za program i 3 Mb za slike koje bismo veličine 112,5 KB za pikseliziranu sliku mogle otprilike 25 slika postaviti na MCU i mogle napraviti bilo koji slijed ili bilo koji period prikaza za postavljenu sliku koju koristim Implementacija Arduino koda za izradu web poslužitelja. kôd ima tri glavne funkcije u svojoj petlji kako slijedi

void loop () {if (! SHOW &&! TEST) server.handleClient (); if (SHOW) {if ((millis ()- OpenlastTime)> DURATION [image_index]*1000) {if (image_index> = IMAGE_NUM) image_index = 0; _memorije_pointer = početna_adresa_slike_datoteke [image_index]; Serial.printf ("Broj datoteke =%u ime:%s adresa:%u trajanje:%u / n", image_index, IMAGES [image_index].c_str (), start_address_of_imagefile [image_index], DURATION [image_index]); Trenutna_slikovna linija = 0; image_index ++; OpenlastTime = millis (); } if ((micros ()-lastLineShow)> lineInterval) {lastLineShow = micros (); ESP.flashRead (_memory_pointer, (uint32_t *) LED diode, NUM_LEDS *3); FastLED.show (); _memory_pointer+= (NUM_LEDS*3); Current_imageLine ++; kašnjenje (LineIntervalDelay); } if (Trenutna linija slike> = IMAGES_LINES) {Trenutna linija slike = 0; _memorije_pointer = početna_adresa_datoteke slike [image_index-1]; }} optimistic_yield (1000); }

Server Handler server.handleClient (); odgovorna za obradu bilo kojeg zahtjeva klijenta na webhostu, ova web stranica može biti proizvoljnog dizajna za učitavanje podataka, promjenu postavki prikaza bilo kojeg izvještaja o stanju. Moj webhost sastoji se od tri kartice, a sljedeće slike na prvoj kartici bi mogle provjeriti trenutni scenarij prikazivanja sa redoslijedom i trajanjem za svaku sliku, također prikazane informacije o mreži, kao i prikazani POV okretaji

na kartici otpremanje slike mogli bismo postaviti pikseliziranu sliku u memoriju MCU -a ili izbrisati određenu sliku

na kartici mreža mogli bismo promijeniti mrežne postavke kao što su WiFi način, statički ip, naziv mreže i propusnica,..

Image Up-loader

ovaj zahtjev klijenta poslužitelja funkcije od strane Ajaxa za postavljanje pikselizirane slike u MCU memoriju, zatim zapis datoteke u memoriju u sirovom formatu kako bi čitanje datoteke bilo što brže. Memorijska početna i krajnja lokacija pohranjuju se u tablicu za prikaz u LED traci

Funkcija prikaza

Koristio sam FastLED lib za prikazivanje piksela u LED traci, ova biblioteka je jedna od najuspješnijih i najbolje razvijenih za LED emisije na AVR i ESP platformi. Potrebno je samo poslati FastLED funkciju, lokaciju pohranjenog LED piksela. čitamo piksele po red piksela iz memorije i prikazujemo ih u LED traci i čekamo da se obnovi zastavica rotacije. ponavljali smo ovu sekvencu dok se nije pročitalo 200 redova svake slike

cijeli kod koji se nalazi u mom git spremištu ovdje

slijedi video snimak POV -a u akciji koji je snimljen mobilnom kamerom i kao što sam objasnio, kvaliteta videa nije dobra zbog spore brzine dijafragme neprofesionalne kamere

Preporučuje se: