Isi kandungan:

Infinity Mirror Dengan Sensor LCD dan IR: 5 Langkah
Infinity Mirror Dengan Sensor LCD dan IR: 5 Langkah

Video: Infinity Mirror Dengan Sensor LCD dan IR: 5 Langkah

Video: Infinity Mirror Dengan Sensor LCD dan IR: 5 Langkah
Video: How to make INFINITY MIRROR for home decoration 2024, November
Anonim
Infinity Mirror Dengan LCD dan Sensor IR
Infinity Mirror Dengan LCD dan Sensor IR
Infinity Mirror Dengan LCD dan Sensor IR
Infinity Mirror Dengan LCD dan Sensor IR
Infinity Mirror Dengan LCD dan Sensor IR
Infinity Mirror Dengan LCD dan Sensor IR

Projek ini akan menunjukkan kepada anda bagaimana anda boleh membuat Infinity Mirror. Konsep asasnya adalah bahawa LED yang ada di cermin menghasilkan cahaya yang memantul dari cermin belakang ke cermin depan di mana beberapa cahaya keluar sehingga kita dapat melihat ke dalam dan ada yang dipantulkan kembali ke cermin belakang dan menghasilkan kesan yang tidak terhingga. Ini berdasarkan Infinity Mirror With Ultra Sonic Sensors Instructable oleh Hack Sioux Falls dan Cara Menghubungkan Paparan Lcd I2C ke Arduino Uno oleh JunezRiyaz.

Bekalan

1. Kotak Bayangan ($ 50)

2. Filem Cermin 1 arah ($ 17)

3. Jalur lampu LED RGB ($ 30)

4. Arduino ($ 35)

5. Cermin ($ 10)

Pilihan:

1. Sensor IR dan Alat Jauh ($ 20)

2. LCD ($ 20)

3. 7 Penyambung Wanita ke Lelaki

4. 3 Penyambung Lelaki ke Lelaki

Alat

1. Besi Pematerian

2. Wire Cutter dan Stripper

3. Sesuatu untuk memotong cermin dengan

* Perhatikan semua harga dalam CAD dan ukuran akan bergantung pada kotak yang anda gunakan.

Langkah 1: Memasang Cermin dan Filem Cermin

Memasang Cermin dan Filem Cermin
Memasang Cermin dan Filem Cermin
Memasang Cermin dan Filem Cermin
Memasang Cermin dan Filem Cermin

Perkara pertama yang perlu dilakukan ialah memasang cermin yang akan berada di bahagian belakang kotak bayangan. Anda mahu mendapatkan satu yang berukuran tepat atau mendapatkan yang lebih besar dan kemudian memotongnya. Tetapi untuk ini, anda harus menggunakan cermin dan bukan filemnya kerana kita ingin semua cahaya dipantulkan kembali, filem cermin juga dapat mengambil corak bahan yang dipakainya jika bukan kaca.

Semasa anda memasang cermin pastikan untuk menyimpannya di kotak bayangan, saya akan mengesyorkan menggunakan potongan kayu dan paku kecil untuk memastikan cermin tidak bergerak. Saya tidak mempunyai cermin pada masa saya harus menyelesaikan projek ini jadi saya menggunakan filem ini (Anda dapat lihat dalam gambar). Konsepnya berjaya tetapi tidak begitu baik dan memberikan pandangan bersudut dan huru-hara yang pada pendapat saya tidak kelihatan baik.

Setiap filem cermin akan sedikit berbeza tetapi yang saya katakan untuk membersihkan kaca yang kita pasangkan filem itu kemudian menggunakan pita untuk menanggalkan filem pelindung yang ada di satu sisi dan menggunakan air sabun dalam semburan botol meletakkan filem di kaca. Kemudian gunakan kad kredit atau pemeras untuk menghilangkan gelembung udara dan lebihan air. Saya sekali lagi tidak mempunyai kaca tetapi masih berfungsi sama. Kemudian biarkan gelas hingga kering semalaman dan ia mesti selesai.

Langkah 2: Menyiapkan Jalur LED

Menyiapkan Jalur LED
Menyiapkan Jalur LED
Menyiapkan Jalur LED
Menyiapkan Jalur LED

Untuk LED, saya hanya menggunakan pita dua sisi yang disertakan untuk melekatkannya pada bingkai dan membuat lubang untuk wayar keluar. Di setiap sudut, saya menyambung kabel untuk menyambung ke jalur lain untuk mengekalkan bentuk kotak tanpa tepi bulat. Pastikan hanya memotong jalur pada titik-titik di mana terdapat kenalan yang membenarkannya berlaku dan jangan menukar arah yang disambungkan LED satu sama lain yang dikenali sebagai membalikkan kekutuban. Jalur yang saya dapat mempunyai anak panah untuk memastikan ini tidak berlaku, jadi pastikan untuk memeriksa semuanya menunjuk ke arah yang sama.

Saya membuat lubang kecil untuk memasukkan kabel ke bahagian luar kotak, LED yang saya miliki adalah LED 3 Pin yang boleh ditujukan sehingga saya mempunyai penyambung kuasa, tanah dan data. Saya menggunakan Digital Pin 3 untuk penyambung data, pastikan untuk menguji jalur LED anda untuk memastikannya berfungsi sebelum melekatkannya pada bingkai dan pastikan hanya menggunakan voltan yang disyorkan untuk voltan saya iaitu 5 - 6 V.

Langkah 3: Memasang Sensor IR dan LCD (Pilihan)

Memasang Sensor IR dan LCD (Pilihan)
Memasang Sensor IR dan LCD (Pilihan)
Memasang Sensor IR dan LCD (Pilihan)
Memasang Sensor IR dan LCD (Pilihan)
Memasang Sensor IR dan LCD (Pilihan)
Memasang Sensor IR dan LCD (Pilihan)

Saya memilih untuk menggunakan sensor IR dan alat kawalan jauh untuk menukar kesan pencahayaan dan untuk menggunakan dan LCD untuk menunjukkan kepada pengguna pilihan yang mereka ada untuk kesannya.

Untuk memasang sensor LCD dan IR, saya akan menggunakan pistol lem panas dan melekatkannya di bahagian atas bingkai dan menyambungkan semuanya ke bahagian belakang tetapi saya tidak mahu mereka diperbaiki kerana saya mungkin harus melepaskannya selepas projek telah siap.

Untuk menyambungkan Penerima LCD dan IR, saya menggunakan Penyambung Lelaki ke Wanita yang menyambungkan ke Arduino untuk data serta tanah dan kuasa. Untuk memasangkan semuanya, saya menggunakan pin 12 dengan perintang 2 kΩ pada pin data untuk sensor IR, Analog Pin A4 untuk SDA LCD dan Analog Pin 5 untuk SCL LCD.

Langkah 4: Kod

Untuk projek ini, saya menggunakan beberapa perpustakaan yang mesti anda muat turun untuk digunakan. Saya akan meletakkannya di sini, ingatlah bahawa saya berada di tingkap sehingga boleh memberi kesan sekiranya anda menggunakan Mac atau Linux.

Anda mesti menukar bilangan piksel bergantung pada jumlah LED yang anda miliki. Saya juga membina antara muka Serial Monitor supaya anda dapat berinteraksi dengan cara itu jika anda tidak menggunakan sensor IR.

// Perpustakaan

#include Adafruit_NeoPixel.h> #include #include #include // Nilai pin dan pemalar // Pin dan nilai tetap Konst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); keputusan decode_results; key_value panjang yang tidak ditandatangani = 0; const int NUMPIXELS = 27;

Piksel Adafruit_NeoPixel = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIF); // Pemboleh ubah int IRNumb; int IRNumb2; int pelangi = 0; uint32_t rainbowColor = piksel. Warna (0, 0, 0); input char = 0; input char2 = 0; int r; int g; int b; int breakCondition = 0; batal persediaan () {// Menginit elemen yang tidak perlu diulang. lcd.begin (16, 2); // Mendefinisikan 16 lajur dan 2 baris paparan lcd lcd.backlight (); // Untuk menghidupkan lampu belakang Serial.begin (9600); piksel.begin (); irrecv.enableIRIn (); Serial.println ("Masukkan 0 untuk mematikan lampu"); // Arahan Permulaan Serial.println ("Masukkan 1 untuk menukar LED menjadi putih"); Serial.println ("Masukkan 2 untuk membuat kitaran LED melalui warna yang berbeza"); Serial.println ("Masukkan 3 untuk menyesuaikan warna LED secara manual"); } gelung kosong () {IRNumb = 10; IRScan (); pilihan utama (); if (Serial.available ()> 0) {// Memeriksa apakah watak tersedia? input = (char) Serial.read (); } // Memilih pelbagai pilihan sekiranya (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Set putihSemua (pelangiColor); // Mengemas kini LED} lain jika (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (pelangiColor); // Mengemas kini LED} lain jika (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;

Serial.println ("Masukkan apa-apa yang bukan 2 untuk keluar dari kesan ini, maka mana-mana pilihan sebelum ini untuk kesan baru.");

lcd.clear (); // Bersihkan skrin lcd.setCursor (0, 0); lcd.print ("Keluar menggunakan sebarang-"); lcd.setCursor (0, 1); lcd.print ("kebas! = 2"); untuk (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Memeriksa apakah kesannya perlu dikeluarkan rainbowColor = colourChange (0, 0, 0); setAll (pelangiColor); breakCondition = 1; rehat; } rainbowColor = colourChange (i, 0, 0); setAll (pelangiColor); pertunjukanStrip (); kelewatan (100); } untuk (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Memeriksa apakah kesannya perlu dikeluarkan rainbowColor = colourChange (0, 0, 0); setAll (pelangiColor); breakCondition = 1; rehat; } g ++; rainbowColor = colourChange (i, g, 0); setAll (pelangiColor); pertunjukanStrip (); kelewatan (100); } untuk (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Memeriksa apakah kesannya perlu dikeluarkan rainbowColor = colourChange (0, 0, 0); setAll (pelangiColor); breakCondition = 1; rehat; } r + = 2; rainbowColor = colourChange (r, g, 0); setAll (pelangiColor); pertunjukanStrip (); kelewatan (100); } untuk (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Memeriksa apakah kesannya perlu dikeluarkan rainbowColor = colourChange (0, 0, 0); setAll (pelangiColor); breakCondition = 1; rehat; } r + = 2; g + = 5; rainbowColor = colourChange (r, g, b); setAll (pelangiColor); pertunjukanStrip (); kelewatan (100); } pilihan utama (); } lain jika (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;

Serial.println ("Masukkan n untuk keluar");

Serial.println ("Gunakan w dan s untuk menambah atau menurunkan warna merah"); Serial.println ("Gunakan r dan f untuk menambah atau menurunkan warna hijau"); Serial.println ("Gunakan y dan h untuk menambah atau menurunkan warna biru"); lcd.clear (); // Bersihkan skrin lcd.setCursor (0, 0); lcd.print ("keluar: 0, 4/7: +/- merah"); lcd.setCursor (0, 1); lcd.print ("5/8: hijau, 6/9: biru");

sementara (input2! = 'n' || IRNumb2! = 0) {

jika (Serial.available ()> 0) {// adakah watak tersedia? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();

jika (IRNumb2 == 0) {

rehat; } jika (input2 == 'w' || IRNumb2 == 4) {r + = 2; rainbowColor = colourChange (r, g, b); setAll (pelangiColor); pertunjukanStrip (); } lain jika (input2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (pelangiColor); pertunjukanStrip (); } lain jika (input2 == 'r' || IRNumb2 == 5) {g + = 2; rainbowColor = colourChange (r, g, b); setAll (pelangiColor); pertunjukanStrip (); } lain jika (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (pelangiColor); pertunjukanStrip (); }

lain jika (input2 == 'y' || IRNumb2 == 6) {

b + = 2; rainbowColor = colourChange (r, g, b); setAll (pelangiColor); pertunjukanStrip (); }

lain jika (input2 == 'h' || IRNumb2 == 9) {

b- = 2; rainbowColor = colourChange (r, g, b); setAll (pelangiColor); pertunjukanStrip (); }} pilihan utama (); } setAll (pelangiColor); pertunjukanStrip (); } batal showStrip () {pixels.show (); } batal setAll (warna uint32_t) {untuk (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, color); }} // Masukkan nilai 0 hingga 255 untuk mendapatkan nilai warna. uint32_t colourChange (int r, int g, int b) {return pixels. Color (r, g, b); } batal mainOptions () {// Menentukan pilihan kesan utama lcd.clear (); // Bersihkan skrin lcd.setCursor (0, 0); lcd.print ("0 Untuk Lampu mati"); lcd.setCursor (0, 1); lcd.print ("1: Cahaya Putih"); kelewatan (1000); lcd.clear (); // Bersihkan skrin lcd.setCursor (0, 0); lcd.print ("2: Kesan warna"); lcd.setCursor (0, 1); lcd.print ("3: Manual"); kelewatan (1000); } batalkan IRScan () {if (irrecv.decode (& hasil)) {

jika (hasil.value == 0XFFFFFFFF)

hasil.value = key_value; yang lain {//Serial.println(results.value, HEX); jika (hasil.value == 0xFF6897 || hasil.value == 0xC101E57B) {IRNumb = 0; //Serial.println("0 "); } lain jika (hasil.value == 0x9716BE3F || hasil.value == 0xFF30CF) {IRNumb = 1; //Serial.println("1 "); } lain jika (hasil.value == 0x3D9AE3F7 || hasil.value == 0xFF18E7) {IRNumb = 2; //Serial.println("2 "); } lain jika (hasil.value == 0xFF7A85 || hasil.value == 0x6182021B) {IRNumb = 3; // Serial.println ("3"); } lain jika (hasil.value == 0x8C22657B || hasil.value == 0xFF10EF) {IRNumb = 4; //Serial.println("4 "); } lain jika (hasil.value == 0xFF38C7 || hasil.value == 0x488F3CBB) {IRNumb = 5; // Serial.println ("5"); } lain jika (hasil.value == 0x449E79F || hasil.value == 0xFF5AA5) {IRNumb = 6; // Serial.println ("6"); } lain jika (hasil.value == 0xFF42BD || hasil.value == 0x32C6FDF7) {IRNumb = 7; //Serial.println("7 "); } lain jika (hasil.value == 0x1BC0157B || hasil.value == 0xFF4AB5) {IRNumb = 8; //Serial.println("8 "); } lain jika (hasil.value == 0xFF52AD || hasil.value == 0x3EC3FC1B) {IRNumb = 9; // Serial.println ("9"); }} key_value = hasil.value; irrecv.resume (); }} batal IRScan2 () {if (irrecv.decode (& hasil)) {

jika (hasil.value == 0XFFFFFFFF)

hasil.value = key_value; yang lain {// Serial.println (results.value, HEX); jika (hasil.value == 0xFF6897 || hasil.value == 0xC101E57B) {IRNumb2 = 0; //Serial.println("0 "); } lain jika (hasil.value == 0x9716BE3F || hasil.value == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } lain jika (hasil.value == 0x3D9AE3F7 || hasil.value == 0xFF18E7) {IRNumb2 = 2; //Serial.println("2 "); } lain jika (hasil.value == 0xFF7A85 || hasil.value == 0x6182021B) {IRNumb2 = 3; // Serial.println ("3"); } lain jika (hasil.value == 0x8C22657B || hasil.value == 0xFF10EF) {IRNumb2 = 4; //Serial.println("4 "); } lain jika (hasil.value == 0xFF38C7 || hasil.value == 0x488F3CBB) {IRNumb2 = 5; // Serial.println ("5"); } lain jika (hasil.value == 0x449E79F || hasil.value == 0xFF5AA5) {IRNumb2 = 6; // Serial.println ("6"); } lain jika (hasil.value == 0xFF42BD || hasil.value == 0x32C6FDF7) {IRNumb2 = 7; //Serial.println("7 "); } lain jika (hasil.value == 0x1BC0157B || hasil.value == 0xFF4AB5) {IRNumb2 = 8; //Serial.println("8 "); } lain jika (hasil.value == 0xFF52AD || hasil.value == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} key_value = hasil.value; irrecv.resume (); }}

Langkah 5: Pemasangan

Pemasangan
Pemasangan

Untuk memasang Arduino ke bingkai, saya hanya melekatkannya dan papan roti yang biasa saya gunakan di bahagian belakang bingkai dan cuba menutup / menyembunyikan kabel agar kelihatan baik.

Disyorkan: