
Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-23 15:03





Przed rozpoczęciem wyjaśniania tego projektu chciałbym przeprosić za niską jakość obrazu i wideo, ale szczerze mówiąc, naprawdę trudno jest uzyskać ostry i wyraźny obraz z uruchomionego POV z normalną kamerą, taką jak moja kamera mobilna. Potrzebuje bardzo szybkiego obiektywu optycznego z przesłoną, aby uchwycić prawdziwy ruch, ale prześlę lepsze wideo, gdy w końcu będę mógł kupić mój aparat CANON
Co to jest POV
POV to skrót od Persistence Of Vision Globe, który jest związany z fenomenem ludzkiego wzroku. Bodziec świetlny utrzymuje się na siatkówce przez około 1/10 sekundy. Gdy bodźce świetlne są sekwencjonowane szybko po sobie, łączą się w jeden ciągły obraz. W rzeczywistości jest podstawą urządzeń filmowych i telewizyjnych. POV tworzy taką iluzję (oszukuj nas) i tworzy obraz, obracając tablicę diod LED wokół jednego punktu lub osi
Czym jest innowacja projektu
Oczywiście POV nie jest nowym pomysłem i wiele projektów już istnieje w Instructables lub w innych witrynach, jednak te projekty najczęściej wykorzystują wstępnie ustawioną statyczną świątynię lub obraz, który jest w większości odczytywany z pamięci MCU lub karty SD, ale w tym projekcie używamy pięknych funkcji chipa obsługującego IOT, takiego jak ESP8266 w tej kwestii.
Dzięki tym funkcjom IOT my
- może z łatwością przesyłać nowe obrazy do pamięci bezprzewodowo
- stwórz pożądany scenariusz pokazu obrazów z dowolną sekwencją lub dowolnym czasem trwania
- nie ma potrzeby przeprogramowywania chipa ani odłączania karty pamięci i ponownego podłączania jej w celu uzyskania nowej animacji;
- przyjazny dla użytkownika webhost IOT ułatwia każdemu zarządzanie POV za pomocą telefonu komórkowego lub tabletu, nawet zdalnie
- bardzo tania implementacja sprzętowa o pojemności ponad 30 różnych obrazów
Jak działa POV
Wyświetlacze POV, liniowy (1-wymiarowy) układ świateł LED obraca się wokół jednego punktu, jak koło rowerowe. Mierząc ich prędkość obrotową i kontrolując ich błyski z milisekundową precyzją, możemy stworzyć iluzję dwu- lub trójwymiarowego obrazu unoszącego się w powietrzu. Rozważmy pojedynczą klatkę dowolnego efektu (obraz, tekst, …), każda ramka składa się z wielu pikseli, a zatem wielu linii w obszarze płaskim lub sferycznym, POV wyświetla ten obraz z pojedynczą linią obrazu, której położenie zmienia się wraz z jego obrotem w celu wypełnienia ten obraz, więc problem polega na tym, jak precyzyjnie kontrolować kolor piksela LED w czasie i przestrzeni, aby mógł stworzyć cały obraz. POV są podzielone na kategorie na podstawie osi obrotu, rodzaju efektu, jaki można wyświetlić i ile kolorów można stworzyć.
Dzięki innej osi obrotu może wytwarzać płaski, cylindryczny i sferyczny wyświetlacz POV
wiele projektów POV używa prostych jednokolorowych diod LED lub szybkich inteligentnych pikseli, takich jak WS2812 lub APA104, aw tym projekcie używamy szybkiego odświeżacza diod LED APA102 z częstotliwością odświeżania praktycznie około 16 MHz. Ten układ LED ma 2 linie do sterowania (ziemia, dane, zegar, + 5 v)
Krok 1: Jak zbudować POV



Na początku potrzebuję konstrukcji do zamontowania piasty POV, wykonanie metalowej lub niemetalowej konstrukcji zależy od tego, co masz w rękach. Możesz wykonać go z dowolnego dostępnego materiału, aby zainstalować go na ścianie lub dodać nogi, aby zrobić stojak. Mój przyjaciel robi prosty statyw i montuje mechanizm paska rozrządu, aby zmniejszyć obroty silnika prądu stałego o około 500. Mała matematyka Aby uzyskać wyraźny i spójny obraz, potrzebujemy odświeżenia kadru około 20 fps, oznacza to, że aby mieć wyraźny obraz, musimy go wielokrotnie wyświetlać około 20 kl/s razy na sekundę, Ponieważ mój POV składa się z 1 ukośnej taśmy LED, stąd każda klatka zakończona o połowę lub obrót, innymi słowy potrzebujemy idealnego koncentratora RPM około 600 i przy tym obrocie każdy obrót trwał około 100 ms. poniższe równanie pokazuje, że pojęcie RPM=(fps/Nb)*60, które Nb jest równe Numerowi gałęzi, a w tym przypadku mamy RPM=(20/2)*60=600mój POV obraca się wokół 430 obr/min, więc mój fps wynosi około 15 fsp co jest dość dobre w tej sprawie. Budowa części mechanicznej
W kolejnym kroku użyłem frezowanego kawałka cylindra PCV do podtrzymywania listwy LED. W celu połączenia piasty z wałem koła pasowego przykręcono jedną śrubę M10 z tyłu części PCV Dwa pierścienie Cupper zainstalowane na wale koła pasowego do transmisji 5 V DC na płytkę i taśmę LED, następnie jak na poniższych zdjęciach ta część zamontowana na prostym kole pasowym system transmisji czasu, który jest podłączony do silnika 12V DC, każda część ma własne zasilanie i jest zamknięta w białym pudełku przymocowanym do nóg
Krok 2: Implementacja oprogramowania, część 1

W celu zademonstrowania danego obrazu w taśmie LED, każdy obraz powinien być pikselizowany, następnie wgrany do pamięci MCU, a następnie podawany na taśmę LED linia po linii, w tym celu wykonałem oprogramowanie dla dwóch różnych platform, jeden bazuje na java runtime Processing i inne w C++ dla programu pikselowego MCUProcessing ten program napisał w Processing IDE i po prostu otwiera plik obrazu, a następnie obraca go krokowo, aby wyodrębnić rozpikselowane linie obrazu. Wybieram 200 linii do wyświetlania dowolnego obrazu, więc obracam obraz o 360 /200=1,8 stopnia) 200 razy, aby wyodrębnić 200 linii. Ponieważ moja taśma LED składa się ze 144 diod LED z wbudowanym chipem APA102, cały obraz ma 200*144=28800 pikseli. Ponieważ każdy kolor na wyświetlaczu chipa APA102 z 4 bajtami (W, RGB), dlatego każdy rozmiar obrazu wynosi dokładnie 200*144*4=115200 lub 112,5KB, następujący kod przetwarzania pokazuje sekwencję pikselizacji obrazu, a wynikiem będzie plik rozszerzenia bin, który może być przesłane do pamięci MCU
PImage img, black_b, image_load;Wyjście PrintWriter; int SQL; pływak led_t; bajt pov_data; int numer_linii=200; Ciąg _OUTPUT="";
nieważne ustawienia()
{ selectInput("Wybierz obraz", "imageChosen"); noLoop(); czekać(); }
pusta konfiguracja()
{ wyjście = 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(); Tryb obrazu(ŚRODEK); przetłumacz(SQL/2, SQL/2); obróć(radiany(l*360/liczba_linii)); obraz(obraz, 0, 0); popMatrix(); pushMatrix(); for(int i=0;i<144;i++) { kolor c = get(int(i*led_t+led_t/2), int(SQL/2); output.print((znak)czerwony(c)+""+(znak)zielony(c)+""+(znak)niebieski(c)); // drukuj((znak)czerwony(c)+""+(znak)zielony(c)+""+(znak)niebieski(c)+";"); wypełnienie(c); rect(i*led_t, (SQL/2)-(led_t/2), led_t, led_t); } // println(); popMatrix(); // opóźnienie(500); l++; }
nieważny klawiszNaciśnięty()
{ wyjście.flush(); // Zapisuje pozostałe dane do pliku output.close(); // kończy plik exit(); // Zatrzymuje program }
void imageWybrany(Plik f)
{ if (f == null) { println("Okno zostało zamknięte lub użytkownik nacisnął Cancel.");exit(); } else { if(f.exists()) img = loadImage(f.getAbsolutePath()); Ciąg s=f.getAbsolutePath(); String list = split(s, '\'); int n=lista.długość; String fle=split(list[n-1], '.'); println("Otwórz plik:"+fle[0]); _OUTPUT=fle[0]+".bin"; // img = loadImage("test.jpg"); int w = szerokość obrazu; int h = img.wysokość; SQL=maks(sz, godz); rozmiar (SQL, SQL); led_t=SQL/144.0; println("h="+h+" w="+w+" max="+SQL+" rozmiar led="+led_t); } } void mousePressed(){ loop();}
nieważne mojedane()
{ byte b = loadBytes("coś.dat"); // Wydrukuj każdą wartość, od 0 do 255 for (int i = 0; i < b.length; i++) { // Co dziesiątą liczbę, rozpocznij nową linię if ((i % 10) == 0) println(); // bajty są od -128 do 127, to zamienia się na 0 do 255 int a = b & 0xff; drukuj(a + " "); } println(); // Wydrukuj pustą linię na końcu saveBytes("numbers.dat", b); } void wait() { while (img == null) { delay(200); } pętla(); }
Krok 3: Implementacja oprogramowania, część 2




Program wyświetlania MCU
Wysokowydajny układ ESP8266 został wybrany z kilku powodów, po pierwsze dobrze opracował otwarte narzędzia SDK, aby korzystać z funkcji Wi-Fi wraz z pamięcią do hostowania serwera WWW dla użytkownika. Dzięki tym możliwościom przyjazny dla użytkownika serwer sieciowy przeznaczony do przesyłania pikselowanego obrazu do pamięci MCU i tworzenia scenariusza zdefiniowanego przez użytkownika. W przypadku serii 4 Mb ESP-12E możemy użyć 1 Mb na program i 3 Mb na obrazy, które przy rozmiarze 112,5 KB dla obrazu w pikselach moglibyśmy z grubsza przesłać 25 obrazów na MCU i moglibyśmy wykonać dowolną sekwencję lub dowolny okres wyświetlania dla przesłanego obrazu, którego używam Implementacja bazy kodu Arduino do tworzenia serwera WWW. kod ma trzy główne funkcje w swojej pętli zgodnie z poniższym
void loop() { if(!POKAŻ && !TEST) server.handleClient(); if(SHOW) { if((millis()- OpenlastTime) >CZAS TRWANIA[indeks_obrazu]*1000) { if(indeks_obrazu>=NUMER_OBRAZU) indeks_obrazu=0; _memory_pointer=adres_początkowy_pliku_obrazu[indeks_obrazu]; Serial.printf("Numer pliku=%u nazwa:%s adres:%u czas trwania:%u\n", image_index, OBRAZY[image_index].c_str(), start_address_of_imagefile[image_index], CZAS TRWANIA[image_index]); Bieżący_obraz_linia=0; indeks_obrazu++; OpenlastTime=millis(); } if((micros()-lastLineShow)> lineInterval) { lastLineShow=micros(); ESP.flashRead(_memory_pointer, (uint32_t *)ledy, NUM_LEDS*3); FastLED.show(); _memory_pointer+=(NUM_LEDS*3); Bieżący_obraz_linia++; opóźnienie(LineIntervalDelay); } if(Current_imageLine>=IMAGES_LINES) { Current_imageLine=0; _memory_pointer=adres_początkowy_pliku_obrazu[indeks_obrazu-1]; } } optymistyczny_yield(1000); }
Obsługa serwera server.handleClient(); odpowiedzialny za przetwarzanie wszelkich żądań klienta na hoście internetowym, ta strona internetowa może być projektowana arbitralnie w celu przesyłania danych, zmiany ustawień wyświetlania dowolnego raportu stanu. Mój webhost składa się z trzech zakładek, ponieważ następujące obrazy w pierwszej zakładce możemy sprawdzić aktualny scenariusz pokazu z sekwencją i czasem trwania dla każdego obrazu, a także informacje o sieci oraz pokazane obroty POV
w zakładce upload image możemy wgrać pikselowany obraz do pamięci MCU lub usunąć określony obraz
w zakładce sieci możemy zmienić ustawienia sieci, takie jak tryb wifi, statyczny adres IP, nazwa sieci i hasło,..
Program do ładowania obrazów
ta funkcja klienta serwera żąda od Ajax, aby przesłać pikselowany obraz do pamięci MCU, a następnie zapisać plik w pamięci w formacie raw, aby odczytanie pliku było jak najszybsze. Pamięć startowa i końcowa miejsce przechowywania w tabeli do wyświetlania na pasku LED
Funkcja wyświetlania
Użyłem biblioteki FastLED lib do pokazania pikseli w taśmie LED, ta biblioteka jest jedną z najbardziej udanych i dobrze opracowanych do pokazów LED na platformie AVR i ESP. Wystarczy wysłać funkcję FastLED, czyli lokalizację zapisanego piksela LED. odczytujemy piksele linia po linii z pamięci i pokazujemy to na pasku LED i czekamy na spełnienie nowej flagi obrotu. powtarzaliśmy tę sekwencję aż do odczytania 200 linijek każdego obrazu
cały kod znajduje się w moim repozytorium git tutaj
Poniżej znajduje się wideo POV w akcji, które jest rejestrowane przez kamerę mobilną i jak wyjaśniłem, jakość wideo nie jest dobra ze względu na niską prędkość membrany nieprofesjonalnej kamery
Zalecana:
Pęseta-o-metr: 6 kroków

Tweezer-o-Meter: W tym projekcie stworzymy typ multimetru SMD do łatwego pomiaru wartości zamiast sondowania komponentu za pomocą dużego multimetru, co czasami jest trudne do wykonania i jest kłopotliwe
ARDUINO PH METR: 6 kroków (ze zdjęciami)

ARDUINO PH METER: W tym projekcie stworzymy pH-metr laboratoryjny wykorzystujący grawitacyjny analogowy obwód pH i sondę firmy Atlas Scientific oraz Arduino Uno. Odczyty będą wyświetlane na wyświetlaczu ciekłokrystalicznym (LCD).Uwaga:- Ten miernik został opracowany w systemie Windows
Pierwszy zegar dla malucha - z włączonym wyłącznikiem czasowym: 16 kroków (ze zdjęciami)

Pierwszy zegar dla malucha – z podświetlanym zegarem: Ten przewodnik pokazuje, jak tworzyć wymienne „tarcze” zegara – które mogą zawierać zdjęcia Twojego dziecka, zdjęcia rodziny/zwierząt domowych – lub cokolwiek innego – które Twoim zdaniem byłoby miło okresowo zmieniać. Po prostu zamocuj przezroczysty pleksiglas na żądanym ar
160 LED VU-metr: 6 kroków

160 LED VU-Meter: Ten projekt to stereofoniczny miernik VU 160 LED, z 80 LED na kanał audio. Opiera się na mikrokontrolerze AVR ATmega328p, tym samym wewnątrz Arduino UNO lub nano. Ten miernik VU reaguje na dźwięk doprowadzony do gniazd RCA z tyłu urządzenia i ca
Pierwsze kroki z płytą La COOL: 4 kroki (ze zdjęciami)

Pierwsze kroki z płytą La COOL: wprowadzenie”Kiedy wpadliśmy na pomysł na płytkę La COOL, wyobraziłem sobie połączenie Arduino z Wi-Fi i modułową agronomiczną stacją pogodową. Do pracy autonomicznej musiał zużywać bardzo mało energii i chciałem móc sterować