Isi kandungan:

Advent Lantern Dengan POV Animasi: 7 Langkah
Advent Lantern Dengan POV Animasi: 7 Langkah

Video: Advent Lantern Dengan POV Animasi: 7 Langkah

Video: Advent Lantern Dengan POV Animasi: 7 Langkah
Video: Don't stand together on deck #titanic#sink#animation#3d#funny#fyp#choubao#shorts 2024, Julai
Anonim
Image
Image

Projek Persistence of Vision (POV) sudah lama wujud, kit DIY yang sederhana dan murah malah tersedia untuk pembelian dalam talian. POV didasarkan pada ilusi optik di mana kita melihat objek yang diterangi setelah objek tidak lagi diterangi walaupun hanya untuk sementara waktu. Projek POV tradisional mempunyai gambar pegun berdasarkan prinsip ini atau paling banyak menjalankan jam. Namun, tidak ada yang menghalang untuk memproyeksikan animasi menggunakan mikrokontroler dengan kecepatan jam yang mencukupi dan LED RGB pintar. Animasi khusus ini adalah rusa Krismas yang diseret rusa untuk hiasan Advent yang dapat dikendalikan dari jauh oleh mana-mana peranti mudah alih berkemampuan WiFi dengan penyemak imbas web. Lampu ini dikuasakan oleh mikrokontroler Wemos ESP8266 D1 Mini dari keluarga Arduino. Kredit untuk bingkai tidur rusa 8-bit animasi diberikan kepada artis grafik berbakat Richard Fenyo.

Langkah 1: Senarai Bahagian

Langkah-langkah Majlis
Langkah-langkah Majlis

Anda memerlukan casing untuk projek ini yang cukup berat untuk memastikan unit berputar tetap berada di tempat tanpa terbalik. Sarung PSU lama sempurna, berhati-hatilah untuk membiarkan kapasitor keluar sebelum dibongkar. Anda juga memerlukan jenis penyesuai bekalan kuasa 5V-12V untuk menghidupkan motor DC. Betul-betul mana-mana amperage dari 500mA ke atas akan melakukannya.

Bahagian yang diperlukan disenaraikan di bawah dengan pautan kedai web dan harga semasa.

  • Bateri 2pcs 18650, USD 4, 78
  • Pemegang Bateri untuk 2x18650, USD 0,63
  • Wemos D1 Mini, USD 2, 14
  • Jerami Hitam, USD 0, 10
  • Sensor Reflektif Inframerah, USD 0, 38
  • 250V Power Rocker Switch, USD 0, 10
  • Toggle Slide Switch, USD 0, 02
  • 6-900rpm DC Motor, USD 3, 99
  • Adafruit Neopixel WS2812 8-bit, USD 1, 01

Kos keseluruhan kurang dari USD 15, - tetapi anda juga memerlukan beberapa alat tangan, penggerudian, lem panas, bersama dengan peralatan dan kemahiran pematerian.

Langkah 2: Langkah Majlis

Unit ini dapat dipasang sepenuhnya mengikuti langkah-langkah ini.

  1. Pangkalan pegun dibina dengan motor DC dan suis.
  2. Neopixels disolder dan dilekatkan pada batang jerami.
  3. Rig berputar dibina dengan mikrokontroler, slaid suis, sensor infra, dan batang jerami.
  4. Pendawaian disolder ke penyambung bahagian elektrik
  5. Kod Arduino dimuat naik ke mikrokontroler Wemos.

Langkah 3: 1. Pangkalan pegun Dengan Motor DC

1. Pangkalan pegun Dengan Motor DC
1. Pangkalan pegun Dengan Motor DC
1. Pangkalan pegun Dengan Motor DC
1. Pangkalan pegun Dengan Motor DC
1. Pangkalan pegun Dengan Motor DC
1. Pangkalan pegun Dengan Motor DC
  1. Bor lubang pada casing dan pasangkan motor DC sehingga poros menunjuk ke atas.
  2. Selesaikan suis kuasa rocker dan penyesuai bekalan kuasa 5V-12V biasa mengikut rajah pendawaian di bawah.
  3. Motor DC yang dirujuk berputar pada sekitar 800 RPM (putaran per minit) pada 12V, menghasilkan sekitar 10 FPS (bingkai per saat) dalam penyiapan terakhir bergantung pada ketahanan angin sebenar batang jerami.
  4. Sambungkan penyesuai bekalan kuasa ke saluran keluar (110 atau 220V).
  5. Hidupkan rocker dan periksa cara kerja motor DC.

Seterusnya, pelantar berputar akan dipasang dan dipasang pada batang motor DC dari dasar.

Langkah 4: 2. Lampiran Neopixel

2. Lampiran Neopixel
2. Lampiran Neopixel
2. Lampiran Neopixel
2. Lampiran Neopixel
  1. Potong hujung jerami di dua sisi bertentangan pada satu hujung kira-kira 1.5 cm seperti yang ditunjukkan dalam gambar.
  2. Renda tiga wayar lebih panjang ke atas jerami. Ini akan menghubungkan pin Neopixel ke port Wemos di pelantar.
  3. Pateri ketiga-tiga wayar ke pin Neopixel GND, 5V dan D-IN.
  4. Lekatkan wayar dengan kemas dan kemas dari hujung solder Neopixels hingga ke tengah bar LED.
  5. Tarik sayap jerami yang dipotong dan lekatkan panas dengan simetri tepat ke tengah bar LED (di atas wayar di satu sisi).
  6. Kawat melintasi di dalam jerami hingga rig untuk mencapai pelabuhan Wemos yang sepadan.

Langkah 5: 3. Pemasangan Roting Rig

3. Pemasangan Rig Berputar
3. Pemasangan Rig Berputar

Seluruh pelantar mesti dipasang sepenuhnya sebelum dipasang pada batang motor DC. Ini kerana titik penetapan perlu seimbang supaya putaran berpusat dengan sempurna tanpa goyah.

  1. Panaskan mikrokontroler Wemos D1 Mini dan slaid beralih ke satu sisi pemegang bateri seperti yang ditunjukkan dalam gambar.
  2. Lekatkan panas sensor refleksi infra ke bahagian lain pemegang bateri.
  3. Letakkan bateri di pemegang.
  4. Letakkan dan pasangkan hujung jerami di atas bateri. Skru kecil atau gelang getah akan melakukannya. Pastikan ia tidak akan hilang setelah rig mula berputar pada 10 RPM.
  5. Cari keseluruhan pusat graviti rig di bahagian bawah. Mengimbangi pada hujung jari anda akan melakukannya.
  6. Buat lubang kecil di tempat yang tepat di bahagian bawah pemegang bateri.
  7. Sapukan sedikit gam panas dan pasangkan batang motor ke dalam lubang itu. Pastikan gam panas tidak masuk ke badan motor. Simpan dengan stabil sehingga gam mengering.
  8. Potong sekeping kecil kertas putih dan pita ke dasar pegun sehingga sensor reflektif inframerah berpusing tepat di dekat kertas itu. Ini akan mencetuskan gambar bingkai animasi di tempat yang tepat dalam setiap putaran. Gambar menunjukkan kepingan pantulan ini di sudut kiri bawah pangkalan.

Langkah 6: 4. Pendawaian Komponen Elektrik

4. Pendawaian Komponen Elektrik
4. Pendawaian Komponen Elektrik

Ikuti rajah pendawaian, pateri komponen elektrik dengan langkah berikut. Perhatikan bahawa port yang sama dari mikrokontroler Wemos D1 Mini akan disolder berkali-kali dengan pelbagai wayar yang berbeza. Itu memerlukan beberapa latihan, atau sambungkan wayar ini sebagai persediaan sebelum menyolder ke port Wemos.

  1. Tiga wayar (GND, 5V dan D-IN) disolder ke port Wemos G, 5V, dan D3 masing-masing.
  2. Dua wayar dari Infrared Reflective Sensor (VCC, GND, OUT) disolder ke Wemos port 5V, G, dan D2 masing-masing.
  3. Kabel tanah pemegang bateri (Hitam) disolder ke port Wemos G.
  4. Wayar positif pemegang bateri (Merah) disolder ke pin terdekat suis slaid.
  5. Port Wemos 5V disolder ke pin suis slaid yang lain.

Langkah 7: 5. Kod Arduino

5. Kod Arduino
5. Kod Arduino

Kod khusus ini adalah untuk versi 24 bit POV Lantern, dapat dikendalikan dari jauh oleh mana-mana peranti mudah alih dengan penyemak imbas web dan mempunyai kesan visual seperti World Map, Matrix Animation Effect, dan Reindeer Sleight animation. Jangan ragu untuk menyesuaikan jumlah piksel, parameter kesan, atau antara muka jarak jauh WiFi untuk keperluan anda dalam kod sumber.

// 24 bit POV Lantern - 2019 Peter Csurgay

#sertakan ESP8266WiFiMulti.h

#include WiFiClient.h #include ESP8266WebServer.h #include WebSocketsServer.h #include Adafruit_NeoPixel.h

#tentukan DEBUG 1

Teks rentetan [3] = {"INSTRUCTABLES", "ARDUINO", "CONTEST"};

const uint8_t palet [8] [3] = {

{0, 0, 0}, // 0 - Telus {0, 0, 127}, // 1 - Biru {127, 0, 0}, // 2 - Merah {127, 127, 0}, // 3 - Kuning {0, 127, 0}, // 4 - Hijau {127, 24, 0}, // 5 - Jingga {127, 0, 127}, // 6 - Magenta {127, 127, 127} // 7 - Putih};

const dunia tanpa tanda [24] [42] PROGMEM =

{ { 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

const lada char yang tidak ditandatangani [24] [8 + 31] PROGMEM =

{ { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 0, 1, 1, 0, 1, 1, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, { 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 0, 1, 1, 0, 1, 1, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

const unsigned char abc [8] [27 * 5] PROGMEM = {

{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

const unsigned char santa [4] [8] [41] PROGMEM = {

{ { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }, { { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 } } };

#tentukan INFRATRIGGER_PIN D2

#tentukan NEOPIXELS_PIN D3 #tentukan NEO_NUMPIXELS 24

Piksel Adafruit_NeoPixel = Adafruit_NeoPixel (NEO_NUMPIXELS, NEOPIXELS_PIN, NEO_GRB + NEO_KHZ800);

IPAddress tempatan IPaddress;

Alamat IP apdadress; Pelayan WiFiServer (80); WebSocketsServer webSocket = WebSocketsServer (81); kanvas uint8_t [24] [65]; uint8_t co = 0; pemandangan uint8_t = 0; uint8_t numScenes = 5; Adegan rentetan [6] = {"WORLD", "SANTA", "PEPPER", "TEXT", "MATRIX"}; uint8_t putar = 1; uint8_t numGreens = 0; // MATRIX bilangan garis jatuh uint8_t hijau [64] [2]; // MATRIX pos x dan y garis jatuh

batal persediaan () {

jika (DEBUG) {Serial.begin (9600); Serial.println ("Mula …"); } kelewatan (3000);

ESP8266WiFiMulti wifiMulti;

wifiMulti.addAP ("wifissid", "pwd"); wifiMulti.addAP ("mobilessid", "pwd"); wifiMulti.addAP ("komputer riba", "pwd"); jika (DEBUG) Serial.print ("Menghubungkan Stesen ke"); sementara (wifiMulti.run ()! = WL_CONNECTED) {kelewatan (1000); jika (DEBUG) Serial.print ("."); } jika (DEBUG) Serial.println (""); if (DEBUG) Serial.print ("WiFi disambungkan: SSID ="); jika (DEBUG) Serial.println (WiFi. SSID ()); localIPaddress = WiFi.localIP (); jika (DEBUG) Serial.print ("Alamat IP Stesen Tempatan:"); jika (DEBUG) Serial.println (localIPaddress);

pelayan.begin ();

jika (DEBUG) Serial.println ("Server (80) bermula"); webSocket.begin (); webSocket.onEvent (webSocketEvent); jika (DEBUG) Serial.println ("WebSocket (81) bermula"); uint8_t coli = 0; untuk (int i = 0; i <24; i ++) {untuk (int j = 0; j <64; j ++) {kanvas [j] = coli ++; coli = coli% 7; } kanvas [64] = 0; } pinMode (INFRATRIGGER_PIN, INPUT); attachInterrupt (digitalPinToInterrupt (INFRATRIGGER_PIN), cat, RISING); piksel.begin (); piksel.show (); if (DEBUG) {Serial.print ("Neopixel bermula, NUMPIXELS:"); Serial.println (pixels.numPixels ()); }}

batal webSocketEvent (jumlah uint8_t, jenis WStype_t, uint8_t * muatan, ukuran_t panjang) {

jika (type == WStype_TEXT) {String req = String ((const char *) muatan); jika (DEBUG) {Serial.print ("81 Req:"); Serial.println (req); } prosesReq (req); }}

String rip2 (String s) {

String res; int i = 0; sementara (s ! = '/') i ++; saya ++; sementara (s ! = '/') i ++; saya ++; sementara (s ! = '/' && s ! = '' && s ! = '\ r' && s ! = '\ n') res + = s [i ++]; pulangan semula; }

membatalkan prosesReq (String req) {

jika (req.indexOf ("/ rotate")! = -1) {rotate = 1; } lain jika (req.indexOf ("/ scene")! = -1) {rotate = 0; Rentetan sc = rip2 (req); if (isDigit (sc [0])) pemandangan = sc.toInt (); lain {pemandangan = 0; untuk (int i = 0; i

gelung kosong () {

webSocket.loop (); Pelanggan WiFiClient = server.available (); jika (! pelanggan) {kembali; } String req = client.readStringUntil ('\ r'); jika (DEBUG) {Serial.print ("80 Req:"); Serial.println (req); } prosesReq (req);

pelanggan.flush ();

Rentetan s = "HTTP / 1.1 200 OK / r / nContent-Type: text / html; charset = UTF-8 / r / nAccess-Control-Allow-Headers: Content-Type / r / nAccess-Control-Allow-Origin: * / r / nSambungan: tutup / r / n / r / n "; s + = "localIP:" + ipToString (localIPaddress) + ""; s + = "apIP:" + ipToString (apIPaddress) + ""; pelanggan.cetakan; kelewatan (100); pelanggan.stop (); }

cat kosong () {

untuk (int i = 0; i <65; i ++) {untuk (int j = 0; j <24; j ++) {unsigned char ind = canvas [j] ; pixels.setPixelColor (j, pixels. Color (palet [ind] [0], palet [ind] [1], palet [ind] [2])); } piksel.tunjukkan (); kelewatanMikrodetik (10); } co = (co + 1)% 40; if (putar) {if (co == 0) {scene = (pemandangan + 1)% numScenes; jika (DEBUG) {Serial.print ("Scene:"); Serial.println (pemandangan); }} if (co == 0) loadCanvas (pemandangan [adegan]); } jika (pemandangan [adegan].indexOf ("SANTA")! = -1) {untuk (int i = 0; i <8; i ++) untuk (int j = 0; j = co && j

void loadCanvas (Rentetan apa) {

jelasCanvas (); if (DEBUG) {Serial.print ("loadCanvas:"); Serial.println (apa); } if (what.indexOf ("TEXT")! = -1) {untuk (int l = 0; l <3; l ++) untuk (int n = 0; n = 12 && j <51) kanvas [j] = pgm_read_byte_near (lada + j-12); } lain jika (what.indexOf ("WORLD")! = -1) {untuk (int i = 0; i <24; i ++) untuk (int j = 0; j = 11 && j <53) kanvas [j] = pgm_read_byte_near (dunia + j-11); }}

kosongkan Kanvas () {

jika (DEBUG) Serial.println ("clearCanvas"); untuk (int i = 0; i <24; i ++) untuk (int j = 0; j <65; j ++) kanvas [j] = 0; }

String ipToString (IPAddress ip) {

Rentetan s = ""; untuk (int i = 0; i <4; i ++) s + = i? "." + String (ip ): String (ip ); pulangan s; }

Disyorkan: