สารบัญ:

นาฬิกากระจกอินฟินิตี้พร้อมโพเทนชิโอมิเตอร์: 3 ขั้นตอน
นาฬิกากระจกอินฟินิตี้พร้อมโพเทนชิโอมิเตอร์: 3 ขั้นตอน

วีดีโอ: นาฬิกากระจกอินฟินิตี้พร้อมโพเทนชิโอมิเตอร์: 3 ขั้นตอน

วีดีโอ: นาฬิกากระจกอินฟินิตี้พร้อมโพเทนชิโอมิเตอร์: 3 ขั้นตอน
วีดีโอ: วิธีใช้มัลติมิเตอร์แบบดิจิตอลเบื้องต้น ย่านวัดต่างๆ ที่มือใหม่ควรรู้ บอกต่อจากประสบการณ์ตรง 2024, กรกฎาคม
Anonim
นาฬิกากระจกอินฟินิตี้พร้อมโพเทนชิโอมิเตอร์
นาฬิกากระจกอินฟินิตี้พร้อมโพเทนชิโอมิเตอร์

ฉันเจอกระจกอินฟินิตี้และพบว่ามันเจ๋งจริงๆ สิ่งนี้เป็นแรงบันดาลใจให้ฉันสร้างกระจกอินฟินิตี้ แต่ฉันต้องการให้มันมีวัตถุประสงค์ ดังนั้นฉันจึงตัดสินใจสร้างนาฬิกากระจกอินฟินิตี้ที่ใช้งานได้ นี่คือกระจกอินฟินิตี้ที่ช่วยให้คุณสามารถเปลี่ยนโหมด ความเร็ว และสีได้โดยใช้โพเทนชิโอมิเตอร์ (หมายเหตุ: นี่เป็นครั้งแรกที่ฉันทำสิ่งนี้)

เสบียง

มาดำดิ่งลงไปในสิ่งที่คุณต้องทำเพื่อสิ่งนี้กัน!

คุณจะต้องการ…

1) 1 Arduino Uno

3) 1 เขียงหั่นขนม

4) 1 สวิตช์สไลด์

5) 3 โพเทนชิโอมิเตอร์

6) แบตเตอรี่ 9V 1 ก้อน

7) 5 เมตร WS2811 LED Strip

8) สายจัมเปอร์

9) นาฬิกา (นาฬิกาที่ฉันใช้นาฬิกาสมัยใหม่ขนาดใหญ่ 12 นิ้ว)

10) แผ่นกระจกยืดหยุ่น (อันที่ฉันใช้แผ่นกระจก)

11) ฟิล์มความเป็นส่วนตัว (อันที่ฉันใช้กระจกทางเดียว)

12) อาจต้องใช้การบัดกรี ทั้งนี้ขึ้นอยู่กับวัสดุที่คุณมี

ขั้นตอนที่ 1: การเดินสายไฟ

การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ

การเดินสายไฟค่อนข้างง่าย

- สวิตช์ SPST เปิดและปิดไฟ LED (A0)

- โพเทนชิออมิเตอร์ด้านซ้ายควบคุมแสง (A1)

- โพเทนชิออมิเตอร์กลางควบคุมโหมด (A2)

- โพเทนชิออมิเตอร์ด้านขวาควบคุมความเร็ว (A3)

ขั้นตอนที่ 2: รหัส

#รวม

#กำหนด PIN 6

#define NUM_LEDS 54

#define A0 A0

#define A1 A1

#define A2 A2

#define A3 A3

// พารามิเตอร์ 1 = จำนวนพิกเซลในแถบ

// พารามิเตอร์ 2 = หมายเลขพิน (ส่วนใหญ่ถูกต้อง)

// พารามิเตอร์ 3 = แฟล็กประเภทพิกเซล รวมเข้าด้วยกันตามต้องการ:

// NEO_KHZ800 800 KHz bitstream (ผลิตภัณฑ์ NeoPixel ส่วนใหญ่ที่มีไฟ LED WS2812)

// NEO_KHZ400 400 KHz (คลาสสิก 'v1' (ไม่ใช่ v2) พิกเซล FLORA, ไดรเวอร์ WS2811)

// NEO_GRB Pixels ต่อสายสำหรับ GRB bitstream (ผลิตภัณฑ์ NeoPixel ส่วนใหญ่)

// NEO_RGB Pixels ต่อสายสำหรับ RGB bitstream (v1 FLORA พิกเซล ไม่ใช่ v2)

แถบ Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

การตั้งค่าเป็นโมฆะ () {

แถบ.begin();

แถบ.show(); // เริ่มต้นพิกเซลทั้งหมดเป็น 'ปิด'

}

วงเป็นโมฆะ () {

ถ้า (อ่านแบบแอนะล็อก (A0)>=512){

ถ้า(analogRead(A2)>=768){

ถ้า (อ่านแบบแอนะล็อก (A3)>=768){

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

}อื่น if(analogRead(A3)>=512){

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

}อื่น if(analogRead(A3)>=256){

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

}

อื่น{

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

}

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

ถ้า (อ่านแบบแอนะล็อก (A1)>=768){

CylonBounce(สุ่ม(255), สุ่ม(255), สุ่ม(255), 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}อื่น if(analogRead(A1)>=512){

CylonBounce(สุ่ม(255), 0, 0, 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}อื่น if(analogRead(A1)>=256){

CylonBounce(0, สุ่ม(255), 0, 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}

อื่น{

CylonBounce(0, 0, สุ่ม(255), 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));

}

}อื่น if(analogRead(A2)>=256){

ถ้า (อ่านแบบแอนะล็อก (A1)>=768){

ไบต์ r, g, b;

r = สุ่ม (255);

ก. = สุ่ม (255);

b = สุ่ม (255);

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

}อื่น if(analogRead(A1)>=512){

ไบต์ r, g, b;

r = สุ่ม (255);

ก. = 0;

ข = 0;

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

}อื่น if(analogRead(A1)>=256){

ไบต์ r, g, b;

r = 0;

ก. = สุ่ม (255);

ข = 0;

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

}

อื่น{

ไบต์ r, g, b;

r = 0;

ก. = 0;

b = สุ่ม (255);

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

}

}

อื่น{ if(analogRead(A1)>=768){

RunningLights (สุ่ม (255), สุ่ม (255), สุ่ม (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}อื่น if(analogRead(A1)>=512){

RunningLights (สุ่ม (255), 1, 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}อื่น if(analogRead(A1)>=256){

RunningLights (1, สุ่ม (255), 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

อื่น{

RunningLights (1, 1, สุ่ม (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

}

}อื่น{

setAll(0, 0, 0);

}

}

เป็นโมฆะ rainbowCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {

ไบต์ *c;

uint16_t ผม, เจ;

สำหรับ (j=0; j<256*5; j++) { // 5 รอบของสีทั้งหมดบนล้อ

ถ้า(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((เก่าA3+256)

หยุดพัก;

}

สำหรับ (i=0; i< NUM_LEDS; i++) {

ถ้า(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((เก่าA3+256)

หยุดพัก;

}

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

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

}

showStrip();

ล่าช้า (SpeedDelay);

}

}

ไบต์ * ล้อ (ไบต์ WheelPos) {

ไบต์คงที่ c[3];

ถ้า (WheelPos <85) {

c[0]=WheelPos * 3;

c[1]=255 - WheelPos * 3;

ค[2]=0;

} else if (WheelPos <170) {

WheelPos -= 85;

c[0]=255 - WheelPos * 3;

ค[1]=0;

c[2]=WheelPos * 3;

} อื่น {

WheelPos -= 170;

ค[0]=0;

c[1]=WheelPos * 3;

c[2]=255 - WheelPos * 3;

}

กลับค;

}

เป็นโมฆะ CylonBounce (ไบต์สีแดง, ไบต์สีเขียว, ไบต์สีน้ำเงิน, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3){

int ความเร็วดีเลย์;

int ReturnDelay;

ถ้า(analogRead(A3)>=768){SpeedDelay=80;ReturnDelay=120;}

อื่น if(analogRead(A3)>=512){SpeedDelay=60;ReturnDelay=100;}

อื่น if(analogRead(A3)>=256){SpeedDelay=40;ReturnDelay=80;}

อื่น{SpeedDelay=20;ReturnDelay=60;}

สำหรับ (int i = 0; i < NUM_LEDS-EyeSize-2; i++) {

ถ้า(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((เก่าA3+256)

หยุดพัก;

}

setAll(0, 0, 0);

setPixel(i, แดง/10, เขียว/10, น้ำเงิน/10);

สำหรับ (int j = 1; j <= EyeSize; j++) {

ถ้า(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((เก่าA3+256)

หยุดพัก;

}

setPixel(i+j, แดง, เขียว, น้ำเงิน);

}

setPixel(i+EyeSize+1, แดง/10, เขียว/10, น้ำเงิน/10);

showStrip();

ล่าช้า (SpeedDelay);

}

ล่าช้า (ReturnDelay);

สำหรับ (int i = NUM_LEDS-EyeSize-2; i > 0; i--) {

setAll(0, 0, 0);

setPixel(i, แดง/10, เขียว/10, น้ำเงิน/10);

ถ้า(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((เก่าA3+256)

หยุดพัก;

}

สำหรับ (int j = 1; j <= EyeSize; j++) {

ถ้า(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((เก่าA3+256)

หยุดพัก;

}

setPixel(i+j, แดง, เขียว, น้ำเงิน);

}

setPixel(i+EyeSize+1, แดง/10, เขียว/10, น้ำเงิน/10);

showStrip();

ล่าช้า (SpeedDelay);

}

ล่าช้า (ReturnDelay);

}

เป็นโมฆะ RunningLights (ไบต์สีแดง, ไบต์สีเขียว, ไบต์สีน้ำเงิน, int oldA0, int oldA1, int oldA2, int oldA3) {

ตำแหน่ง int=0;

ภายใน WaveDelay;

ถ้า(analogRead(A3)>=768){WaveDelay=80;}

อื่น if(analogRead(A3)>=512){WaveDelay=60;}

อื่น if(analogRead(A3)>=256){WaveDelay=40;}

อื่น{WaveDelay=20;}

สำหรับ(int j=0; j

{

ถ้า(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((เก่าA3+256)

หยุดพัก;

}

ตำแหน่ง++; // = 0; //ตำแหน่ง + อัตรา;

สำหรับ(int i=0; i

// คลื่นไซน์ 3 คลื่นออฟเซ็ตสร้างรุ้ง!

//ระดับลอย = บาป(i+ตำแหน่ง) * 127 + 128;

//setPixel(i, ระดับ, 0, 0);

//ระดับลอย = บาป(i+ตำแหน่ง) * 127 + 128;

ถ้า(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((เก่าA3+256)

หยุดพัก;

}

setPixel(i, ((sin(i+Position) * 127 + 128)/255)*สีแดง, ((บาป(i+ตำแหน่ง) * 127 + 128)/255)*สีเขียว, ((บาป(i+ตำแหน่ง) * 127 + 128)/255)*สีน้ำเงิน);

}

showStrip();

ล่าช้า (WaveDelay);

}

}

โมฆะ meteorRain (ไบต์สีแดง ไบต์สีเขียว ไบต์สีน้ำเงิน ไบต์ meteorSize ไบต์ meteorTrailDecay บูลีน meteorRandomDecay int oldA0, int oldA1, int oldA2, int oldA3) {

setAll(0, 0, 0);

int ความเร็วดีเลย์;

ถ้า(analogRead(A3)>=768){SpeedDelay=80;}

อื่น if(analogRead(A3)>=512){SpeedDelay=60;}

อื่น if(analogRead(A3)>=256){SpeedDelay=40;}

อื่น{SpeedDelay=20;}

สำหรับ (int i = 0; i < NUM_LEDS+NUM_LEDS; i++) {

ถ้า(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((เก่าA3+256)

หยุดพัก;

}

// หรี่ไฟ LED ทั้งหมดในขั้นตอนเดียว

สำหรับ(int j=0; j

ถ้า(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((เก่าA3+256)

หยุดพัก;

}

if((!meteorRandomDecay) || (สุ่ม(10)>5)) {

fadeToBlack(j, meteorTrailDecay);

}

}

//วาดดาวตก

สำหรับ (int j = 0; j <meteorSize; j++) {

ถ้า(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((เก่าA3+256)

หยุดพัก;

}

ถ้า((i-j =0)) {

setPixel(i-j, แดง, เขียว, น้ำเงิน);

}

}

showStrip();

ล่าช้า (SpeedDelay);

}

}

เป็นโมฆะ fadeToBlack (int ledNo, ไบต์ fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t oldColor;

uint8_t r, g, b;

มูลค่าที่แท้จริง;

oldColor = strip.getPixelColor (ledNo);

r = (สีเก่า & 0x00ff0000UL) >> 16;

g = (สีเก่า & 0x0000ff00UL) >> 8;

b = (สีเก่า & 0x000000ffUL);

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

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

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

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

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

ไฟ LED[ledNo].fadeToBlackBy(fadeValue);

#endif

}

// *** แทนที่ที่นี่ ***

เป็นโมฆะ showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

แถบ.show();

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show();

#endif

}

เป็นโมฆะ setPixel (พิกเซล int, ไบต์สีแดง, ไบต์สีเขียว, ไบต์สีน้ำเงิน) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor(Pixel, strip. Color(แดง เขียว น้ำเงิน));

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

ไฟ LED[พิกเซล].r = สีแดง;

ไฟ LED[พิกเซล].g = สีเขียว;

ไฟ LED [พิกเซล].b = สีน้ำเงิน;

#endif

}

เป็นโมฆะ setAll (ไบต์สีแดง ไบต์สีเขียว ไบต์สีน้ำเงิน) {

สำหรับ (int i = 0; i < NUM_LEDS; i++) {

setPixel(i, แดง, เขียว, น้ำเงิน);

}

showStrip();

}

ขั้นตอนที่ 3: การสร้างนาฬิกา

การสร้างนาฬิกา
การสร้างนาฬิกา
การสร้างนาฬิกา
การสร้างนาฬิกา
การสร้างนาฬิกา
การสร้างนาฬิกา

ฉันขอแนะนำให้ซื้อนาฬิกาแก้วที่แบนด้านใน เมื่อฉันใช้กระจกแบบยืดหยุ่นกับด้านในของนาฬิกา มีปัญหาเนื่องจากตัวเลขในนาฬิกาโผล่ออกมา กระจกโค้งงอส่งผลให้กระจกเงาไร้ขอบไม่เกิดขึ้น คุณต้องมีแผ่นกระจกแบบยืดหยุ่นและฟิล์มป้องกันความเป็นส่วนตัวให้แบนราบได้มากที่สุด หากคุณได้รับนาฬิกา ตรวจสอบให้แน่ใจว่าคุณสามารถวาง LED ไว้ข้างในได้โดยไม่มีปัญหา

ขั้นตอนที่ 1: เปิดนาฬิกาและถอดกระจกด้านหน้าออก

ขั้นตอนที่ 2: ติดฟิล์มความเป็นส่วนตัวที่กระจกด้านหน้า (วิดีโอนี้แสดงวิธีการทำ)

ขั้นตอนที่ 3: ใช้กระจกยืดหยุ่นด้านในนาฬิกา (ถอดเข็มนาฬิกาออกก่อนทำสิ่งนี้)

ขั้นตอนที่ 4: ทำรูตรงกลางเพื่อใส่เข็มนาฬิกากลับเข้าที่

ขั้นตอนที่ 5: วางแถบ LED รอบผนังด้านในของนาฬิกา (ฉันใช้ปืนกาวร้อนสำหรับขั้นตอนนี้)

ขั้นตอนที่ 6: เปิดแถบ LED และวางกระจกบนนาฬิกาเพื่อดูว่ามีเอฟเฟกต์กระจกอินฟินิตี้หรือไม่

ขั้นตอนที่ 7: เมื่อคุณทำทุกอย่างเสร็จแล้ว ให้ใส่นาฬิกาเข้าด้วยกันแล้วปล่อยให้สายไฟลอดไปทางด้านหลัง

ขั้นตอนที่ 8: ยินดีด้วยที่คุณทำโปรเจ็กต์เสร็จเรียบร้อยแล้ว และทุกอย่างน่าจะใช้ได้ดี

หากคุณมีคำถามใด ๆ โปรดแสดงความคิดเห็นด้านล่าง (รู้ว่าฉันอาจไม่สามารถตอบได้ แต่ฉันจะทำให้ดีที่สุด)

แนะนำ: