Isi kandungan:

POV 1 Meter Dengan IOT Diaktifkan: 3 Langkah (dengan Gambar)
POV 1 Meter Dengan IOT Diaktifkan: 3 Langkah (dengan Gambar)

Video: POV 1 Meter Dengan IOT Diaktifkan: 3 Langkah (dengan Gambar)

Video: POV 1 Meter Dengan IOT Diaktifkan: 3 Langkah (dengan Gambar)
Video: Mengerikan, Kereta KRAKATAU melintas di Sta.Bayoran. Body menyentuh peron & mengeluarkan percikan 2024, November
Anonim
Image
Image
POV 1 Meter Dengan IOT Diaktifkan
POV 1 Meter Dengan IOT Diaktifkan
POV 1 Meter Dengan IOT Diaktifkan
POV 1 Meter Dengan IOT Diaktifkan
POV 1 Meter Dengan IOT Diaktifkan
POV 1 Meter Dengan IOT Diaktifkan

Sebelum memulakan penjelasan mengenai projek ini, saya ingin meminta maaf atas gambar dan video berkualiti rendah, tetapi sejujurnya sangat sukar untuk mengambil gambar yang tajam dan jelas daripada menjalankan POV dengan kamera biasa seperti kamera mudah alih saya. Ia memerlukan lensa optik diafragma yang sangat pantas untuk menangkap gerakan yang benar, Tetapi saya akan memuat naik video yang lebih baik apabila akhirnya saya dapat membeli kamera CANON saya

Apa itu POV

POV bermaksud Persistence Of Vision Globe yang berkaitan dengan fenomena penglihatan manusia. Rangsangan cahaya berlanjutan sebagai kesan buruk pada retina selama kira-kira 1/10 sesaat. Apabila rangsangan cahaya diuraikan secara berturut-turut, ia bergabung menjadi satu gambar berterusan. Sebenarnya ia adalah asas untuk peranti filem dan televisyen,. POV membuat ilusi seperti itu (menipu kita) dan membuat gambar dengan memutar susunan lampu LED di sekitar satu titik atau paksi

Apa itu inovasi projek

Sudah tentu POV bukanlah idea baru dan banyak projek sudah ada di Instructables atau di laman web lain, namun projek tersebut kebanyakannya menggunakan candi atau gambar statik yang telah ditetapkan yang kebanyakannya dibaca dari memori MCU atau kad SD, tetapi dalam projek ini kami menggunakan menyebarkan ciri-ciri cantik cip yang dibolehkan IOT seperti ESP8266 dalam perkara ini.

Dengan ciri IOT ini kami

  1. dengan mudah boleh memuat naik gambar baru ke memori tanpa wayar
  2. buat senario pertunjukan gambar yang dikehendaki dengan urutan atau jangka masa apa pun
  3. tidak perlu memprogram ulang cip atau mencabut kad memori dan pasangkan semula untuk animasi baru
  4. hos web IOT yang mesra pengguna memudahkan setiap orang untuk mengasingkan POV dengan telefon bimbit atau tablet walaupun dari jauh
  5. pelaksanaan perkakasan kos yang sangat rendah dengan kapasiti lebih daripada 30 gambar yang berbeza

Bagaimana POV berfungsi

Paparan POV, susunan lampu LED linear (1 dimensi) berputar di sekitar satu titik, seperti roda basikal. Dengan mengukur kadar putaran mereka dan mengawal kilatannya dengan ketepatan milisaat, kita dapat mencipta ilusi gambar 2 atau 3 dimensi yang berlarutan di udara yang tipis. Mari Pertimbangkan bingkai tunggal dari sebarang kesan (gambar, teks,…), setiap bingkai terdiri daripada banyak piksel dan oleh itu banyak garis di bidang satah atau sfera, POV memaparkan gambar ini dengan satu baris gambar yang kedudukannya berubah seiring dengan putarannya untuk mengisi gambar itu, jadi masalahnya adalah bagaimana mengendalikan warna piksel LED dengan tepat pada waktu dan ruang sehingga dapat membuat keseluruhan gambar POV dikategorikan berdasarkan paksi putaran, jenis efek dapat ditampilkan dan berapa banyak warna yang dapat dibuat.

Dengan paksi putaran yang berbeza, dapat menghasilkan paparan POV satah, silinder dan sfera

banyak projek POV menggunakan LED warna tunggal sederhana atau piksel pintar berkelajuan tinggi seperti WS2812 atau APA104 dan dalam projek ini kami menggunakan penyegar cip LED cepat APA102 dengan kadar penyegaran sekitar 16 MHz. cip LED ini mempunyai 2 garisan untuk dikawal (Ground, Data, Clock, + 5v)

Langkah 1: Cara Membina POV

Cara Membina POV
Cara Membina POV
Cara Membina POV
Cara Membina POV
Cara Membina POV
Cara Membina POV

Pada mulanya saya memerlukan struktur untuk memasang hub POV, menjadikan struktur logam atau bukan logam bergantung pada apa yang anda miliki. Anda boleh membuatnya dengan bahan yang ada untuk memasangnya di dinding atau menambah kaki untuk berdiri. Rakan saya membuat tripod sederhana dan memasang mekanisme tali masa untuk mengurangkan RPM motor DC sekitar 500. Matematik kecil Untuk mempunyai imej yang jelas dan koheren, kita memerlukan penyegaran bingkai sekitar 20 fps, ini bermaksud untuk mempunyai gambar yang jelas, kita perlu berulang kali memaparkannya sekitar 20 kali per saat, Oleh kerana POV saya terdiri daripada 1 jalur LED pepenjuru, oleh itu setiap bingkai dilengkapkan dengan separuh atau putaran, dengan kata lain kita memerlukan RPM hab Ideal sekitar 600 dan dengan RPM ini setiap revolusi mengambil masa sekitar 100 ms. persamaan berikut menunjukkan bahawa konsep RPM = (fps / Nb) * 60 yang Nb sama dengan Bilangan cawangan, dan dalam kes ini kita mempunyai RPM = (20/2) * 60 = 600my POV berputar sekitar 430 rpm sehingga fps saya sekitar 15 fsp yang cukup baik dalam perkara ini. Membina bahagian mekanikal

Pada langkah seterusnya saya menggunakan sekeping silinder PVC Giling untuk memegang bar LED. Untuk menyambungkan hub dengan poros takal, satu bolt M10 telah dilekatkan ke belakang bahagian PCV Cincin dua cupper dipasang pada poros takal ke transmisi 5 volt DC ke papan dan jalur LED, maka seperti gambar berikut, bahagian ini dipasang pada takal sederhana sistem penghantaran masa yang disambungkan ke motor DC 12v setiap bahagian mempunyai bekalan kuasa sendiri dan tertutup dalam kotak putih yang dilekatkan pada kaki

Langkah 2: Pelaksanaan Perisian Bahagian 1

Pelaksanaan Perisian Bahagian 1
Pelaksanaan Perisian Bahagian 1

Untuk menunjukkan gambar yang diberikan dalam jalur LED, setiap gambar harus dipiksel kemudian dimuat ke memori MCU dan kemudian disalurkan ke jalur jalur LED demi baris, untuk melakukan itu saya buat untuk perisian untuk dua platform yang berbeza, satu adalah berdasarkan pada proses Java java dan lain-lain dalam C ++ untuk MCUProses pemrosesan piksel program ini ditulis dalam Memproses IDE dan ia hanya membuka fail gambar, kemudian memutarnya dalam langkah-langkah untuk mengekstrak garis piksel gambar. Saya memilih 200 baris untuk memaparkan gambar apa pun, jadi saya memutar gambar berbatasan (360 /200=1.8 darjah) 200 kali untuk mengekstrak 200 baris. Oleh kerana jalur LED saya terdiri daripada 144 LED dengan cip APA102 tertanam maka keseluruhan gambar mempunyai 200 * 144 = 28800 piksel. Oleh kerana setiap warna dalam paparan cip APA102 dengan 4 bait (W, RGB) maka setiap ukuran gambar adalah tepat 200 * 144 * 4 = 115200 atau 112.5KB berikut Kod pemprosesan menunjukkan urutan pikselisasi gambar, dan hasilnya akan menjadi file ekstensi bin yang dapat dimuat naik ke memori MCU

PImage img, black_b, image_load; Output PrintWriter; int SQL; terapung led_t; bait pov_data; int line_num = 200; Rentetan _OUTPUT = "";

kekosongan tetapan ()

{selectInput ("Pilih gambar", "imageChosen"); noLoop (); tunggu (); }

persediaan tidak sah ()

{output = createWriter (_OUTPUT); black_b = createImage (SQL, SQL, RGB); black_b.loadPixels (); untuk (int i = 0; i = line_num) {noLoop (); output.flush (); output.close ();} latar belakang (black_b); pushMatrix (); imageMode (PUSAT); terjemahkan (SQL / 2, SQL / 2); putar (radian (l * 360 / line_num)); gambar (img, 0, 0); popMatrix (); pushMatrix (); untuk (int i = 0; i <144; i ++) {color c = get (int (i * led_t + led_t / 2), int (SQL / 2)); output.print ((char) merah (c) + "" + (char) hijau (c) + "" + (char) biru (c)); // cetak ((char) merah (c) + "" + (char) hijau (c) + "" + (char) biru (c) + ";"); isi (c); tepat (i * led_t, (SQL / 2) - (led_t / 2), led_t, led_t); } // println (); popMatrix (); // kelewatan (500); l ++; }

kekunci kekosongan Ditekan ()

{output.flush (); // Menulis data yang tinggal ke output file.close (); // Selesaikan keluar fail (); // Menghentikan program}

batal gambarPilih (Fail f)

{if (f == null) {println ("Tetingkap ditutup atau tekan pengguna membatalkan."); keluar (); } lain {if (f.exists ()) img = loadImage (f.getAbsolutePath ()); Rentetan s = f.getAbsolutePath (); Rentetan list = split (s, '\'); int n = list.length; Rentetan fle = split (senarai [n-1], '.'); println ("Buka fail:" + fle [0]); _OUTPUT = fle [0] + ". Bin"; // img = loadImage ("test.jpg"); int w = img. lebar; int h = img.tinggi; SQL = maks (w, h); saiz (SQL, SQL); led_t = SQL / 144.0; println ("h =" + h + "w =" + w + "max =" + SQL + "saiz led =" + led_t); }} kekosongan tetikus Ditekan () {gelung ();}

batal mydata ()

{byte b = loadBytes ("sesuatu.dat"); // Cetak setiap nilai, dari 0 hingga 255 untuk (int i = 0; i <b.length; i ++) {// Setiap nombor kesepuluh, mulakan baris baru jika ((i% 10) == 0) println (); // bait adalah dari -128 hingga 127, ini bertukar menjadi 0 hingga 255 int a = b & 0xff; cetak (a + ""); } println (); // Cetak garis kosong pada akhir saveBytes ("angka.dat", b); } batal tunggu () {sementara (img == null) {kelewatan (200); } gelung (); }

Langkah 3: Pelaksanaan Perisian Bahagian 2

Image
Image
Pelaksanaan Perisian Bahagian 2
Pelaksanaan Perisian Bahagian 2
Pelaksanaan Perisian Bahagian 2
Pelaksanaan Perisian Bahagian 2

Program paparan MCU

Cip ESP8266 berprestasi tinggi telah dipilih kerana beberapa sebab, pertama ia telah mengembangkan alat SDK terbuka untuk memanfaatkan ciri WiFi di samping memori untuk menghoskan pelayan web untuk pengguna. Dengan kemampuan ini, pelayan web mesra pengguna yang direka untuk memuat naik gambar piksel ke memori MCU dan membuat senario menentukan pengguna untuk pertunjukan. Dengan siri 4 Mb ESP-12E kita dapat menggunakan 1 Mb untuk program dan 3 Mb untuk gambar yang dengan ukuran 112.5KB untuk gambar piksel, kita dapat kira-kira 25 gambar yang diunggah di MCU dan dapat membuat urutan atau tempoh paparan apa pun untuk gambar yang diunggah yang saya gunakan Pelaksanaan asas kod Arduino untuk membuat pelayan web. kod mempunyai tiga fungsi utama dalam gelungnya seperti berikut

gelung void () {if (! SHOW &&! TEST) pelayan.handleClient (); if (SHOW) {if ((milis () - OpenlastTime)> DURATION [image_index] * 1000) {if (image_index> = IMAGE_NUM) image_index = 0; _memory_pointer = start_address_of_imagefile [image_index]; Serial.printf ("Nombor fail =% u nama:% s alamat:% u tempoh:% 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 ((mikro () - lastLineShow)> lineInterval) {lastLineShow = mikro (); ESP.flashRead (_memory_pointer, (uint32_t *) led, NUM_LEDS * 3); FastLED.show (); _memory_pointer + = (NUM_LEDS * 3); Current_imageLine ++; kelewatan (LineIntervalDelay); } jika (Current_imageLine> = IMAGES_LINES) {Current_imageLine = 0; _memory_pointer = start_address_of_imagefile [image_index-1]; }} optimistik_tingkat (1000); }

Pelayan Pengendali pelayan.handleClient (); bertanggungjawab untuk memproses setiap permintaan pelanggan di webhost, laman web ini boleh dibuat secara sewenang-wenang untuk memuat naik data, mengubah pengaturan acara dari setiap laporan keadaan. Webhost saya terdiri daripada tiga tab seperti gambar berikut di tab pertama kami dapat memeriksa senario pertunjukan semasa dengan urutan dan tempoh untuk setiap gambar, juga maklumat rangkaian dan juga POV rpm yang ditunjukkan

di tab muat naik gambar, kita dapat memuat naik gambar piksel ke memori MCU atau menghapus gambar tertentu

di tab rangkaian kita dapat mengubah pengaturan rangkaian seperti mod wifi, ip statik, nama & lulus rangkaian,..

Pemuat Naik Gambar

permintaan klien pelayan fungsi ini oleh Ajax untuk memuat naik gambar piksel ke memori MCU, kemudian tulis fail dalam memori dalam format mentah sehingga membaca fail secepat mungkin. Lokasi permulaan dan akhir memori disimpan dalam jadual untuk dipaparkan dalam jalur LED

Fungsi paparan

Saya menggunakan fastLED lib untuk menunjukkan piksel dalam jalur LED, perpustakaan ini adalah salah satu yang paling berjaya dan dikembangkan dengan baik untuk pertunjukan LED di platform AVR dan ESP. Ia hanya perlu menghantar fungsi FastLED, lokasi piksel LED yang tersimpan. kami membaca piksel baris demi baris dari memori dan menunjukkannya dalam jalur LED dan menunggu bendera putaran baru menjadi kenyataan. kami mengulangi urutan ini sehingga 200 baris setiap gambar dibaca

keseluruhan kod yang terletak di repositori git saya di sini

berikut adalah video POV beraksi yang dirakam oleh kamera mudah alih dan seperti yang saya jelaskan, kualiti video tidak bagus kerana kelajuan diafragma lambat dari kamera yang tidak profesional

Disyorkan: