Daftar Isi:
Video: Jam Cermin Infinity Dengan Potensiometer: 3 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:54
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
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
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:
Membuat Jam Cermin Infinity: 15 Langkah (dengan Gambar)
Membuat Jam Cermin Infinity: Dalam proyek sebelumnya saya membuat cermin tanpa batas, di mana tujuan akhir saya adalah membuatnya menjadi sebuah jam. (Membuat Cermin Infinity Warna-warni) Saya tidak mengejar itu setelah membangunnya karena, meskipun terlihat keren, ada beberapa hal dengan
Vortex Watch: Jam Tangan Cermin Infinity: 10 Langkah (dengan Gambar)
Vortex Watch: sebuah Jam Tangan Cermin Infinity: Tujuan dari proyek ini adalah untuk membuat versi jam cermin infinity yang dapat dipakai. Ini menggunakan LED RGB untuk menunjukkan waktu dengan menetapkan jam, menit, dan detik ke lampu Merah, Hijau, dan Biru masing-masing dan tumpang tindih rona
Jam Cermin Infinity DIY yang Mudah: 3 Langkah
Jam Cermin Infinity DIY yang Mudah: Jika Anda bosan dengan jam normal Anda, cobalah membuat Jam Cermin Infinity DIY yang keren ini. Untuk menaikkan level kamar Anda
Jam Cermin Infinity: 5 Langkah (dengan Gambar)
Infinity Mirror Clock: Ini adalah jam buatan tangan terutama untuk dekorasi. Ada beberapa lampu LED di jam, ketika dinyalakan, itu adalah dekorasi yang indah untuk kamar tidur. Saat dimatikan, itu adalah cermin kecil. Tentu saja, ini adalah jam itu sendiri
Jam Dinding Cermin Infinity dalam Bingkai Foto IKEA: 4 Langkah
Jam Dinding Cermin Infinity di Bingkai Foto IKEA: Halo,Saya selalu ingin membuat jam dinding. Ada banyak jam dinding yang indah di toko-toko seperti IKEA. Saya memiliki beberapa masalah dengan jam komersial ini. Mereka terlalu keras untuk saya (tic-tac terus menerus mengganggu), saya tidak bisa melihat jarum jam