Daftar Isi:

Jam Cermin Infinity Dengan Potensiometer: 3 Langkah
Jam Cermin Infinity Dengan Potensiometer: 3 Langkah

Video: Jam Cermin Infinity Dengan Potensiometer: 3 Langkah

Video: Jam Cermin Infinity Dengan Potensiometer: 3 Langkah
Video: DIY ILLUSION INFINITY MIRROR - MEMBUAT LAMPU 3D EFEK ILUSI CERMIN 2024, November
Anonim
Jam Cermin Infinity Dengan Potensiometer
Jam Cermin Infinity Dengan Potensiometer

Saya menemukan cermin infinity dan saya merasa itu benar-benar keren. Ini mengilhami saya untuk membuat cermin tanpa batas, tetapi saya membutuhkannya untuk memiliki tujuan. Jadi, saya memutuskan untuk membuat jam cermin infinity yang berfungsi. Ini adalah cermin tanpa batas yang memungkinkan Anda mengubah mode, kecepatan, dan warna menggunakan potensiometer. (Catatan: Ini adalah pertama kalinya saya membuat sesuatu seperti ini)

Perlengkapan

Mari selami apa yang Anda butuhkan untuk membuat benda ini!

Anda akan perlu…

1) 1 Arduino Uno

3) 1 papan tempat memotong roti

4) 1 Sakelar Geser

5) 3 Potensiometer

6) 1 baterai 9V

7) 5 meter WS2811 LED Strip

8) Kabel Kabel Jumper

9) Jam (Jam yang saya gunakan Jam Modern Besar 12 inci)

10) Lembar Cermin Fleksibel (Yang saya gunakan Lembar Cermin)

11) Film Privasi (Yang saya gunakan One Way Mirror)

12) Solder mungkin diperlukan, ini tergantung pada bahan apa yang Anda miliki

Langkah 1: Pengkabelan

Pengkabelan
Pengkabelan
Pengkabelan
Pengkabelan

Pengkabelannya cukup sederhana

- Saklar SPST menghidupkan dan mematikan LED (A0)

- Potensiometer kiri mengontrol cahaya (A1)

- Potensiometer tengah mengontrol mode (A2)

- Potensiometer kanan mengontrol kecepatan (A3)

Langkah 2: Kode

#termasuk

#tentukan PIN 6

#tentukan NUM_LEDS 54

#tentukan A0 A0

#tentukan A1 A1

#tentukan A2 A2

#tentukan A3 A3

// Parameter 1 = jumlah piksel dalam strip

// Parameter 2 = nomor pin (sebagian besar valid)

// Parameter 3 = flag tipe piksel, tambahkan sesuai kebutuhan:

// NEO_KHZ800 800 KHz bitstream (sebagian besar produk NeoPixel dengan LED WS2812)

// NEO_KHZ400 400 KHz (klasik 'v1' (bukan v2) piksel FLORA, driver WS2811)

// NEO_GRB Piksel disambungkan untuk bitstream GRB (sebagian besar produk NeoPixel)

// NEO_RGB Piksel disambungkan untuk bitstream RGB (piksel FLORA v1, bukan v2)

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

batalkan pengaturan() {

strip.mulai();

strip.tampilkan(); // Inisialisasi semua piksel ke 'mati'

}

lingkaran kosong() {

if(analogRead(A0)>=512){

if(analogRead(A2)>=768){

if(analogRead(A3)>=768){

rainbowCycle(80, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}else if(analogRead(A3)>=512){

rainbowCycle(60, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}else if(analogRead(A3)>=256){

rainbowCycle(40, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}

lain{

rainbowCycle(20, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}

} else if(analogRead(A2)>=512){

if(analogRead(A1)>=768){

CylonBounce(random(255), random(255), random(255), 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}else if(analogRead(A1)>=512){

CylonBounce(acak(255), 0, 0, 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}else if(analogRead(A1)>=256){

CylonBounce(0, random(255), 0, 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}

lain{

CylonBounce(0, 0, random(255), 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}

}else if(analogRead(A2)>=256){

if(analogRead(A1)>=768){

byte r, g, b;

r = acak(255);

g = acak(255);

b = acak(255);

meteorRain(r, g, b, 10, 20, benar, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}else if(analogRead(A1)>=512){

byte r, g, b;

r = acak(255);

g = 0;

b = 0;

meteorRain(r, g, b, 10, 20, benar, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}else if(analogRead(A1)>=256){

byte r, g, b;

r = 0;

g = acak(255);

b = 0;

meteorRain(r, g, b, 10, 20, benar, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}

lain{

byte r, g, b;

r = 0;

g = 0;

b = acak(255);

meteorRain(r, g, b, 10, 20, benar, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}

}

lain{ if(analogRead(A1)>=768){

RunningLights(random(255), random(255), random(255), analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}else if(analogRead(A1)>=512){

RunningLights(random(255), 1, 1, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}else if(analogRead(A1)>=256){

RunningLights(1, random(255), 1, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}

lain{

RunningLights(1, 1, random(255), analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}

}

}lain{

setSemua(0, 0, 0);

}

}

void rainbowCycle(int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {

byte *c;

uint16_t i, j;

for(j=0; j<256*5; j++) { // 5 siklus semua warna pada roda

if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((A3+256 lama)

merusak;

}

untuk(i=0; i< NUM_LEDS; i++) {

if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((A3+256 lama)

merusak;

}

c=Roda(((i * 256 / NUM_LEDS) + j) & 255);

setPixel(i, *c, *(c+1), *(c+2));

}

showStrip();

penundaan (SpeedDelay);

}

}

byte * Roda(byte WheelPos) {

byte statis c[3];

if(Pos Roda < 85) {

c[0]=Pos Roda * 3;

c[1]=255 - WheelPos * 3;

c[2]=0;

} else if(WheelPos < 170) {

WheelPos -= 85;

c[0]=255 - WheelPos * 3;

c[1]=0;

c[2]=Pos Roda * 3;

} lain {

WheelPos -= 170;

c[0]=0;

c[1]=Pos Roda * 3;

c[2]=255 - WheelPos * 3;

}

kembali c;

}

void CylonBounce(byte merah, byte hijau, byte biru, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3){

int Penundaan Kecepatan;

int Penundaan Kembali;

if(analogRead(A3)>=768){SpeedDelay=80;ReturnDelay=120;}

else if(analogRead(A3)>=512){SpeedDelay=60;ReturnDelay=100;}

else if(analogRead(A3)>=256){SpeedDelay=40;ReturnDelay=80;}

lain{SpeedDelay=20;ReturnDelay=60;}

for(int i = 0; i < NUM_LEDS-EyeSize-2; i++) {

if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((A3+256 lama)

merusak;

}

setSemua(0, 0, 0);

setPixel(i, merah/10, hijau/10, biru/10);

for(int j = 1; j <= Ukuran Mata; j++) {

if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((A3+256 lama)

merusak;

}

setPixel(i+j, merah, hijau, biru);

}

setPixel(i+EyeSize+1, merah/10, hijau/10, biru/10);

showStrip();

penundaan (SpeedDelay);

}

penundaan (ReturnDelay);

for(int i = NUM_LEDS-Ukuran Mata-2; i > 0; i--) {

setSemua(0, 0, 0);

setPixel(i, merah/10, hijau/10, biru/10);

if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((A3+256 lama)

merusak;

}

for(int j = 1; j <= Ukuran Mata; j++) {

if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((A3+256 lama)

merusak;

}

setPixel(i+j, merah, hijau, biru);

}

setPixel(i+EyeSize+1, merah/10, hijau/10, biru/10);

showStrip();

penundaan (SpeedDelay);

}

penundaan (ReturnDelay);

}

void RunningLights(byte merah, byte hijau, byte biru, int oldA0, int oldA1, int oldA2, int oldA3) {

int Posisi=0;

int Penundaan Gelombang;

if(analogRead(A3)>=768){WaveDelay=80;}

else if(analogRead(A3)>=512){WaveDelay=60;}

else if(analogRead(A3)>=256){WaveDelay=40;}

lain{WaveDelay=20;}

untuk(int j=0; j

{

if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((A3+256 lama)

merusak;

}

Posisi++; // = 0; //Posisi + Nilai;

untuk(int i=0; i

// gelombang sinus, 3 gelombang offset membuat pelangi!

//tingkat mengambang = sin(i+Posisi) * 127 + 128;

//setPixel(i, level, 0, 0);

//tingkat mengambang = sin(i+Posisi) * 127 + 128;

if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((A3+256 lama)

merusak;

}

setPixel(i, ((sin(i+Posisi) * 127 + 128)/255)*merah, ((sin(i+Posisi) * 127 + 128)/255)*hijau, ((sin(i+Posisi) * 127 + 128)/255)*biru);

}

showStrip();

penundaan (Penundaan Gelombang);

}

}

void meteorRain(byte red, byte green, byte blue, byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {

setSemua(0, 0, 0);

int Penundaan Kecepatan;

if(analogRead(A3)>=768){SpeedDelay=80;}

else if(analogRead(A3)>=512){SpeedDelay=60;}

else if(analogRead(A3)>=256){SpeedDelay=40;}

lain{SpeedDelay=20;}

for(int i = 0; i < NUM_LEDS+NUM_LEDS; i++) {

if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((A3+256 lama)

merusak;

}

// memudarkan kecerahan semua LED satu langkah

untuk(int j=0; j

if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((A3+256 lama)

merusak;

}

if((!meteorRandomDecay) || (random(10)>5)) {

fadeToBlack(j, meteorTrailDecay);

}

}

// menggambar meteor

for(int j = 0; j <ukuran meteor; j++) {

if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((A3+256 lama)

merusak;

}

jika((i-j =0)) {

setPixel(i-j, merah, hijau, biru);

}

}

showStrip();

penundaan (SpeedDelay);

}

}

void fadeToBlack(int ledNo, byte fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t warna lama;

uint8_t r, g, b;

nilai int;

oldColor = strip.getPixelColor(ledNo);

r = (warna lama & 0x00ff0000UL) >> 16;

g = (Warna lama & 0x0000ff00UL) >> 8;

b = (Warna lama & 0x000000ffUL);

r=(r<=10)? 0: (int) r-(r*fadeValue/256);

g=(g<=10)? 0: (int) g-(g*fadeValue/256);

b=(b<=10)? 0: (int) b-(b*fadeValue/256);

strip.setPixelColor(ledNo, r, g, b);

#berakhir jika

#ifndef ADAFRUIT_NEOPIXEL_H

// LED Cepat

leds[ledNo].fadeToBlackBy(fadeValue);

#berakhir jika

}

// *** GANTI KE SINI ***

batal showStrip() {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.tampilkan();

#berakhir jika

#ifndef ADAFRUIT_NEOPIXEL_H

// LED Cepat

FastLED.show();

#berakhir jika

}

void setPixel(int Pixel, byte merah, byte hijau, byte biru) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor(Pixel, strip. Color(merah, hijau, biru));

#berakhir jika

#ifndef ADAFRUIT_NEOPIXEL_H

// LED Cepat

leds[Pixel].r = merah;

leds[Pixel].g = hijau;

leds[Pixel].b = biru;

#berakhir jika

}

void setAll(byte merah, byte hijau, byte biru) {

for(int i = 0; i < NUM_LEDS; i++) {

setPixel(i, merah, hijau, biru);

}

showStrip();

}

Langkah 3: Membuat Jam

Membuat Jam
Membuat Jam
Membuat Jam
Membuat Jam
Membuat Jam
Membuat Jam

Saya akan merekomendasikan mendapatkan jam kaca yang rata di bagian dalam. Ketika saya memasang cermin fleksibel ke bagian dalam jam ada masalah karena angka-angka di dalam jam keluar, cerminnya bengkok sehingga efek cermin infinity tidak terjadi. Anda harus memiliki lembaran cermin yang fleksibel dan Film Privasi agar sedatar mungkin. Jika Anda mendapatkan jam pastikan Anda dapat menempatkan LED di dalam tanpa masalah.

Langkah 1: Buka jam dan lepaskan kaca depan

Langkah 2: Pasang Film Privasi di kaca depan (Video ini menunjukkan cara melakukannya)

Langkah 3: Oleskan cermin fleksibel di bagian dalam jam (Lepaskan jarum jam sebelum melakukan ini)

Langkah 4: Buat lubang di tengah agar jarum jam dapat dimasukkan kembali

Langkah 5: Tempatkan strip LED di sekitar dinding bagian dalam jam (saya menggunakan lem panas untuk langkah ini)

Langkah 6: Nyalakan strip LED dan letakkan kaca di atas jam untuk melihat apakah ada efek cermin tak terhingga

Langkah 7: Setelah Anda selesai dengan semuanya, kumpulkan jam dan biarkan kabel melewati ke belakang

Langkah 8: Selamat Anda telah menyelesaikan proyek dan semuanya akan berfungsi dengan baik

Jika Anda memiliki pertanyaan, silakan beri komentar di bawah (Ketahuilah bahwa saya mungkin tidak dapat menanggapi, tetapi saya akan melakukan yang terbaik)

Direkomendasikan: