Đồng hồ gương vô cực với chiết áp: 3 bước
Đồng hồ gương vô cực với chiết áp: 3 bước
Anonim
Đồng hồ gương vô cực với chiết áp
Đồng hồ gương vô cực với chiết áp

Tôi đã xem qua gương vô cực và tôi thấy nó thực sự tuyệt vời. Điều này đã thôi thúc tôi làm một chiếc gương vô cực, nhưng tôi cần nó phải có mục đích. Vì vậy, tôi quyết định làm một chiếc đồng hồ gương vô cực hoạt động. Đây là một chiếc gương vô cực cho phép bạn thay đổi chế độ, tốc độ và màu sắc bằng cách sử dụng chiết áp. (Lưu ý: Đây là lần đầu tiên tôi làm một cái gì đó như thế này)

Quân nhu

Hãy đi sâu vào những gì bạn cần để làm ra thứ này!

Bạn sẽ cần…

1) 1 Arduino Uno

3) 1 Breadboard

4) 1 Công tắc trượt

5) 3 chiết áp

6) 1 pin 9V

7) Dải LED WS2811 5 mét

8) Dây cáp Jumper

9) Đồng hồ (Đồng hồ tôi đã sử dụng Đồng hồ hiện đại lớn 12 inch)

10) Tấm gương dẻo (Tấm mà tôi đã sử dụng Tấm gương)

11) Phim riêng tư (Phim tôi đã sử dụng One Way Mirror)

12) Việc hàn có thể được yêu cầu, điều này phụ thuộc vào những gì bạn có vật liệu bạn có

Bước 1: Đấu dây

Đấu dây
Đấu dây
Đấu dây
Đấu dây

Hệ thống dây điện khá đơn giản

- Công tắc SPST bật và tắt đèn LED (A0)

- Chiết áp bên trái điều khiển đèn (A1)

- Chiết áp giữa điều khiển các chế độ (A2)

- Chiết áp bên phải điều khiển tốc độ (A3)

Bước 2: Mã

#bao gồm

#define mã PIN 6

#define NUM_LEDS 54

#define A0 A0

#define A1 A1

#define A2 A2

#define A3 A3

// Tham số 1 = số pixel trong dải

// Tham số 2 = số pin (hầu hết đều hợp lệ)

// Tham số 3 = cờ loại pixel, thêm lại với nhau nếu cần:

// Dòng bit NEO_KHZ800 800 KHz (hầu hết các sản phẩm NeoPixel có đèn LED WS2812)

// NEO_KHZ400 400 KHz (cổ điển 'v1' (không phải v2) pixel FLORA, trình điều khiển WS2811)

// NEO_GRB Điểm ảnh được kết nối với dòng bit GRB (hầu hết các sản phẩm NeoPixel)

// Điểm ảnh NEO_RGB được kết nối với dòng bit RGB (pixel v1 FLORA, không phải v2)

Dải Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, mã PIN, NEO_GRB + NEO_KHZ800);

void setup () {

dải.begin ();

dải.show (); // Khởi tạo tất cả các pixel thành 'tắt'

}

void loop () {

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));

}

khác{

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

}

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

if (analogRead (A1)> = 768) {

CylonBounce (ngẫu nhiên (255), ngẫu nhiên (255), ngẫu nhiên (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

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

CylonBounce (ngẫu nhiên (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

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

CylonBounce (0, ngẫu nhiên (255), 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

khác{

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 = ngẫu nhiên (255);

g = ngẫu nhiên (255);

b = ngẫu nhiên (255);

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

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

byte r, g, b;

r = ngẫu nhiên (255);

g = 0;

b = 0;

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

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

byte r, g, b;

r = 0;

g = ngẫu nhiên (255);

b = 0;

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

}

khác{

byte r, g, b;

r = 0;

g = 0;

b = ngẫu nhiên (255);

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

}

}

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

RunningLights (ngẫu nhiên (255), ngẫu nhiên (255), ngẫu nhiên (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

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

RunningLights (ngẫu nhiên (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));

}

khác{

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

}

}

}khác{

setAll (0, 0, 0);

}

}

void cầu vồngCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {

byte * c;

uint16_t tôi, j;

for (j = 0; j <256 * 5; j ++) {// 5 chu kỳ của tất cả các màu trên bánh xe

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

nghỉ;

}

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

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

nghỉ;

}

c = Bánh xe (((i * 256 / NUM_LEDS) + j) & 255);

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

}

showStrip ();

trì hoãn (SpeedDelay);

}

}

byte * Bánh xe (byte WheelPos) {

byte tĩnh c [3];

if (WheelPos <85) {

c [0] = WheelPos * 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] = WheelPos * 3;

} khác {

WheelPos - = 170;

c [0] = 0;

c [1] = WheelPos * 3;

c [2] = 255 - WheelPos * 3;

}

trả lại c;

}

void CylonBounce (byte đỏ, byte xanh, byte xanh, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {

int SpeedDelay;

int ReturnDelay;

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;}

else {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)) | | ((cũA3 + 256)

nghỉ;

}

setAll (0, 0, 0);

setPixel (i, đỏ / 10, xanh lá cây / 10, xanh lam / 10);

for (int j = 1; j <= EyeSize; j ++) {

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

nghỉ;

}

setPixel (i + j, đỏ, lục, lam);

}

setPixel (i + EyeSize + 1, đỏ / 10, xanh lá cây / 10, xanh lam / 10);

showStrip ();

trì hoãn (SpeedDelay);

}

trì hoãn (ReturnDelay);

cho (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {

setAll (0, 0, 0);

setPixel (i, đỏ / 10, xanh lá / 10, xanh lam / 10);

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

nghỉ;

}

for (int j = 1; j <= EyeSize; j ++) {

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

nghỉ;

}

setPixel (i + j, đỏ, lục, lam);

}

setPixel (i + EyeSize + 1, đỏ / 10, xanh lá cây / 10, xanh lam / 10);

showStrip ();

trì hoãn (SpeedDelay);

}

trì hoãn (ReturnDelay);

}

void RunningLights (byte đỏ, byte xanh, byte xanh, int oldA0, int oldA1, int oldA2, int oldA3) {

int Vị trí = 0;

int WaveDelay;

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

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

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

khác {WaveDelay = 20;}

for (int j = 0; j

{

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

nghỉ;

}

Chức vụ ++; // = 0; // Vị trí + Tỷ lệ;

for (int i = 0; i

// sóng sin, 3 sóng bù tạo thành cầu vồng!

// float level = sin (i + Position) * 127 + 128;

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

// float level = sin (i + Position) * 127 + 128;

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

nghỉ;

}

setPixel (i, ((sin (i + Vị trí) * 127 + 128) / 255) * đỏ, ((sin (i + Vị trí) * 127 + 128) / 255) * xanh lục, ((sin (i + Vị trí) * 127 + 128) / 255) * xanh lam);

}

showStrip ();

trì hoãn (WaveDelay);

}

}

void meteorRain (byte đỏ, byte xanh, byte xanh, byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {

setAll (0, 0, 0);

int SpeedDelay;

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

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

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

khác {SpeedDelay = 20;}

cho (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)) | | ((cũA3 + 256)

nghỉ;

}

// giảm độ sáng tất cả các đèn LED một bước

for (int j = 0; j

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

nghỉ;

}

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

fadeToBlack (j, meteorTrailDecay);

}

}

// vẽ sao băng

for (int j = 0; j <meteorSize; j ++) {

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

nghỉ;

}

if ((i-j = 0)) {

setPixel (i-j, đỏ, lục, lam);

}

}

showStrip ();

trì hoãn (SpeedDelay);

}

}

void fadeToBlack (int ledNo, byte fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t oldColor;

uint8_t r, g, b;

giá trị int;

oldColor = strip.getPixelColor (ledNo);

r = (oldColor & 0x00ff0000UL) >> 16;

g = (oldColor & 0x0000ff00UL) >> 8;

b = (Màu cũ & 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);

dải.setPixelColor (ledNo, r, g, b);

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

led [ledNo].fadeToBlackBy (fadeValue);

#endif

}

// *** THAY THẾ VÀO ĐÂY ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

dải.show ();

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#endif

}

void setPixel (int Pixel, byte đỏ, byte xanh, byte xanh) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor (Pixel, dải. Color (đỏ, lục, lam));

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

đèn led [Pixel].r = red;

đèn led [Pixel].g = xanh lục;

led [Pixel].b = blue;

#endif

}

void setAll (byte đỏ, byte xanh, byte xanh) {

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

setPixel (i, đỏ, lục, lam);

}

showStrip ();

}

Bước 3: Tạo đồng hồ

Tạo đồng hồ
Tạo đồng hồ
Tạo đồng hồ
Tạo đồng hồ
Tạo đồng hồ
Tạo đồng hồ

Tôi khuyên bạn nên mua một chiếc đồng hồ bằng kính phẳng ở mặt trong. Khi tôi dán gương dẻo vào bên trong đồng hồ, thì xảy ra sự cố do các con số bên trong đồng hồ bật ra, gương bị uốn dẫn đến hiệu ứng gương vô cực không xảy ra. Bạn cần có tấm gương dẻo và Phim riêng tư càng phẳng càng tốt. Nếu bạn đang mua một chiếc đồng hồ, hãy đảm bảo rằng bạn có thể đặt đèn LED bên trong mà không gặp vấn đề gì.

Bước 1: Mở đồng hồ và tháo kính trước

Bước 2: Dán Film riêng tư lên mặt kính trước (Video này hướng dẫn bạn cách thực hiện)

Bước 3: Dán gương dẻo vào mặt trong đồng hồ (Tháo kim đồng hồ trước khi thực hiện)

Bước 4: Tạo một lỗ ở giữa để đặt các kim đồng hồ vào trong

Bước 5: Đặt dải đèn LED xung quanh các bức tường bên trong đồng hồ (tôi đã sử dụng súng bắn keo nóng cho bước này)

Bước 6: Bật dải đèn LED và đặt mặt kính lên trên đồng hồ xem có hiệu ứng gương vô cực không

Bước 7: Khi bạn đã hoàn tất mọi thứ, hãy đặt đồng hồ lại với nhau và để các dây đi qua mặt sau

Bước 8: Chúc mừng bạn đã hoàn thành dự án và mọi thứ sẽ hoạt động tốt

Nếu bạn có bất kỳ câu hỏi nào vui lòng comment bên dưới (Biết rằng mình có thể không trả lời được nhưng mình sẽ cố gắng hết sức)

Đề xuất: