
Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-23 14:39

Συνάντησα τον καθρέφτη του άπειρου και το βρήκα πολύ δροσερό. Αυτό με ενέπνευσε να φτιάξω έναν καθρέφτη απείρου, αλλά τον χρειαζόμουν για να έχω έναν σκοπό. Έτσι, αποφάσισα να φτιάξω ένα λειτουργικό ρολόι καθρέφτη άπειρου. Αυτός είναι ένας καθρέφτης απείρου που σας επιτρέπει να αλλάξετε τις λειτουργίες, την ταχύτητα και τα χρώματα χρησιμοποιώντας ποτενσιόμετρα. (Σημείωση: Είναι η πρώτη μου φορά που φτιάχνω κάτι τέτοιο)
Προμήθειες
Ας δούμε τι χρειάζεστε για να φτιάξετε αυτό το πράγμα!
Θα χρειαστείτε…
1) 1 Arduino Uno
3) 1 Breadboard
4) 1 διακόπτης διαφάνειας
5) 3 Ποτενσιόμετρα
6) 1 μπαταρία 9V
7) Λωρίδα LED 5 μέτρων WS2811
8) Καλώδια καλωδίων άλτη
9) Ένα ρολόι (Το ρολόι χρησιμοποίησα μεγάλο μοντέρνο ρολόι 12 ιντσών)
10) Ευέλικτο φύλλο καθρέφτη (αυτό που χρησιμοποίησα φύλλο καθρέφτη)
11) Ταινία απορρήτου (αυτή που χρησιμοποίησα One Way Mirror)
12) Μπορεί να απαιτείται συγκόλληση, αυτό εξαρτάται από τα υλικά που έχετε
Βήμα 1: Καλωδίωση


Η καλωδίωση είναι αρκετά απλή
- Ο διακόπτης SPST ενεργοποιεί και απενεργοποιεί τα LED (A0)
- Το αριστερό ποτενσιόμετρο ελέγχει το φως (A1)
- Το μεσαίο ποτενσιόμετρο ελέγχει τις λειτουργίες (A2)
- Το σωστό ποτενσιόμετρο ελέγχει την ταχύτητα (A3)
Βήμα 2: Ο κώδικας
#περιλαμβάνω
#ορίστε τον κωδικό PIN 6
#ορίστε NUM_LEDS 54
#define A0 A0
#define A1 A1
#ορίστε το Α2 Α2
#ορίστε το Α3 Α3
// Παράμετρος 1 = αριθμός εικονοστοιχείων σε λωρίδα
// Παράμετρος 2 = αριθμός pin (οι περισσότεροι είναι έγκυροι)
// Παράμετρος 3 = σημαίες τύπου pixel, προσθέστε μαζί όπως απαιτείται:
// NEO_KHZ800 800 KHz bitstream (τα περισσότερα προϊόντα NeoPixel με LEDs WS2812)
// NEO_KHZ400 400 KHz (κλασικά «v1» (όχι v2) εικονοστοιχεία FLORA, προγράμματα οδήγησης WS2811)
// Τα εικονοστοιχεία NEO_GRB είναι ενσύρματα για bitstream GRB (τα περισσότερα προϊόντα NeoPixel)
// Τα εικονοστοιχεία NEO_RGB είναι ενσύρματα για ροή bitGB RGB (εικονοστοιχεία v1 FLORA, όχι v2)
Λωρίδα Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup () {
strip.begin ();
strip.show (); // Αρχικοποίηση όλων των εικονοστοιχείων σε "απενεργοποίηση"
}
void loop () {
εάν (analogRead (A0)> = 512) {
εάν (analogRead (A2)> = 768) {
εάν (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));
}
αλλού{
rainbowCycle (20, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} else if (analogRead (A2)> = 512) {
εάν (analogRead (A1)> = 768) {
CylonBounce (τυχαία (255), τυχαία (255), τυχαία (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 512) {
CylonBounce (τυχαία (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else 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));
}
} else if (analogRead (A2)> = 256) {
εάν (analogRead (A1)> = 768) {
byte r, g, b;
r = τυχαίο (255);
g = τυχαίο (255);
b = τυχαίο (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 = τυχαίο (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 = τυχαίο (255);
b = 0;
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
αλλού{
byte r, g, b;
r = 0;
g = 0;
b = τυχαίο (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
else {if (analogRead (A1)> = 768) {
RunningLights (τυχαία (255), τυχαία (255), τυχαία (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3)).
} else if (analogRead (A1)> = 512) {
RunningLights (τυχαία (255), 1, 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3)).
} else 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);
}
}
void rainbowCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {
byte *c;
uint16_t i, j;
για (j = 0; j <256*5; j ++) {// 5 κύκλοι όλων των χρωμάτων στον τροχό
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((παλιάΑ3+256)
Διακοπή;
}
για (i = 0; i <NUM_LEDS; i ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((παλιάΑ3+256)
Διακοπή;
}
c = Τροχός (((i * 256 / NUM_LEDS) + j) & 255);
setPixel (i, *c, *(c+1), *(c+2));
}
showStrip ();
καθυστέρηση (SpeedDelay)?
}
}
byte * Wheel (byte WheelPos) {
στατικό byte c [3];
αν (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;
} αλλο {
WheelPos -= 170;
c [0] = 0;
c [1] = WheelPos * 3;
c [2] = 255 - WheelPos * 3;
}
επιστροφή c?
}
void CylonBounce (κόκκινο byte, πράσινο byte, μπλε byte, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {
int SpeedDelay;
int ReturnDelay;
εάν (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;}
για (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)) | | ((παλιάΑ3+256)
Διακοπή;
}
setAll (0, 0, 0);
setPixel (i, κόκκινο/10, πράσινο/10, μπλε/10)
για (int j = 1; j <= EyeSize; j ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((παλιάΑ3+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)
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((παλιάΑ3+256)
Διακοπή;
}
για (int j = 1; j <= EyeSize; j ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((παλιάΑ3+256)
Διακοπή;
}
setPixel (i+j, κόκκινο, πράσινο, μπλε).
}
setPixel (i+EyeSize+1, κόκκινο/10, πράσινο/10, μπλε/10).
showStrip ();
καθυστέρηση (SpeedDelay)?
}
καθυστέρηση (ReturnDelay)?
}
void RunningLights (κόκκινο byte, πράσινο byte, μπλε byte, int oldA0, int oldA1, int oldA2, int oldA3) {
int Θέση = 0;
int WaveDelay;
εάν (analogRead (A3)> = 768) {WaveDelay = 80;}
else if (analogRead (A3)> = 512) {WaveDelay = 60;}
else if (analogRead (A3)> = 256) {WaveDelay = 40;}
else {WaveDelay = 20;}
για (int j = 0; j
{
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((παλιάΑ3+256)
Διακοπή;
}
Θέση ++; // = 0; // Θέση + Ποσοστό;
για (int i = 0; i
// ημιτονοειδές κύμα, 3 μετατοπισμένα κύματα κάνουν ουράνιο τόξο!
// float level = sin (i + Position) * 127 + 128;
// setPixel (i, επίπεδο, 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)) | | ((παλιάΑ3+256)
Διακοπή;
}
setPixel (i, ((sin (i + Position) * 127 + 128)/255) * κόκκινο, ((αμαρτία (i + Θέση) * 127 + 128)/255) * πράσινο, ((αμαρτία (i + Θέση) * 127 + 128)/255) * μπλε);
}
showStrip ();
καθυστέρηση (WaveDelay)?
}
}
void meteorRain (byte red, byte green, byte blue, byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {
setAll (0, 0, 0);
int SpeedDelay;
εάν (analogRead (A3)> = 768) {SpeedDelay = 80;}
else if (analogRead (A3)> = 512) {SpeedDelay = 60;}
else if (analogRead (A3)> = 256) {SpeedDelay = 40;}
else {SpeedDelay = 20;}
για (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)) | | ((παλιάΑ3+256)
Διακοπή;
}
// εξασθενίστε τη φωτεινότητα όλων των LED σε ένα βήμα
για (int j = 0; j
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((παλιάΑ3+256)
Διακοπή;
}
εάν ((! meteorRandomDecay) || (τυχαία (10)> 5)) {
fadeToBlack (j, meteorTrailDecay);
}
}
// σχεδιάζω μετέωρο
για (int j = 0; j <meteorSize; j ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((παλιάΑ3+256)
Διακοπή;
}
εάν ((i-j = 0)) {
setPixel (i-j, κόκκινο, πράσινο, μπλε).
}
}
showStrip ();
καθυστέρηση (SpeedDelay)?
}
}
void fadeToBlack (int ledNo, byte fadeValue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
uint32_t oldColor;
uint8_t r, g, b;
int τιμή?
oldColor = strip.getPixelColor (ledNo);
r = (oldColor & 0x00ff0000UL) >> 16;
g = (oldColor & 0x0000ff00UL) >> 8;
b = (oldColor & 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);
#τέλος εαν
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds [ledNo].fadeToBlackBy (fadeValue);
#τέλος εαν
}
// *** ΑΝΤΙΚΑΤΑΣΤΗΣΗ ΕΔΩ ***
void showStrip () {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.show ();
#τέλος εαν
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show ();
#τέλος εαν
}
void setPixel (int Pixel, κόκκινο byte, πράσινο byte, μπλε byte) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.setPixelColor (Pixel, strip. Color (κόκκινο, πράσινο, μπλε));
#τέλος εαν
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds [Pixel].r = κόκκινο;
leds [Pixel].g = πράσινο;
leds [Pixel].b = μπλε;
#τέλος εαν
}
void setAll (κόκκινο byte, πράσινο byte, μπλε byte) {
για (int i = 0; i <NUM_LEDS; i ++) {
setPixel (i, κόκκινο, πράσινο, μπλε)
}
showStrip ();
}
Βήμα 3: Δημιουργία ρολογιού



Θα συνιστούσα να πάρετε ένα γυάλινο ρολόι που είναι επίπεδο στο εσωτερικό. Όταν εφάρμοζα τον εύκαμπτο καθρέφτη στο εσωτερικό του ρολογιού, υπήρχε πρόβλημα λόγω των αριθμών μέσα στο ρολόι που έβγαιναν έξω, ο καθρέφτης κάμπτονταν με αποτέλεσμα το φαινόμενο του καθρέφτη άπειρου να μην συμβαίνει. Πρέπει να έχετε το εύκαμπτο φύλλο καθρέφτη και την ταινία απορρήτου για να είναι όσο το δυνατόν πιο επίπεδη. Εάν παίρνετε ένα ρολόι, βεβαιωθείτε ότι μπορείτε να τοποθετήσετε το LED μέσα χωρίς πρόβλημα.
Βήμα 1: Ανοίξτε το ρολόι και αφαιρέστε το μπροστινό γυαλί
Βήμα 2: Βάλτε την ταινία απορρήτου στο μπροστινό γυαλί (Αυτό το βίντεο σας δείχνει πώς να το κάνετε)
Βήμα 3: Εφαρμόστε τον εύκαμπτο καθρέφτη στο εσωτερικό του ρολογιού (Αφαιρέστε τους δείκτες των ρολογιών πριν το κάνετε αυτό)
Βήμα 4: Κάντε μια τρύπα στη μέση για να τοποθετηθούν ξανά οι δείκτες του ρολογιού
Βήμα 5: Τοποθετήστε τη λωρίδα LED γύρω από τα εσωτερικά τοιχώματα του ρολογιού (χρησιμοποίησα πιστόλι θερμής κόλλας για αυτό το βήμα)
Βήμα 6: Ενεργοποιήστε τη λωρίδα LED και τοποθετήστε το γυαλί πάνω από το ρολόι για να δείτε αν υπάρχει το εφέ καθρέφτη άπειρου
Βήμα 7: Μόλις τελειώσετε με όλα, βάλτε το ρολόι μαζί και αφήστε τα καλώδια να περάσουν στο πίσω μέρος
Βήμα 8: Συγχαρητήρια που ολοκληρώσατε το έργο και όλα πρέπει να λειτουργούν καλά
Εάν έχετε οποιεσδήποτε ερωτήσεις, σχολιάστε τις παρακάτω (ξέρετε ότι μπορεί να μην μπορώ να απαντήσω, αλλά θα κάνω το καλύτερο δυνατό)
Συνιστάται:
Δημιουργήστε ένα ρολόι καθρέφτη Infinity: 15 βήματα (με εικόνες)

Make a Infinity Mirror Clock: Σε προηγούμενο έργο έφτιαξα έναν καθρέφτη άπειρου, όπου ο τελικός μου στόχος ήταν να το κάνω ρολόι. (Φτιάξτε έναν πολύχρωμο καθρέφτη του άπειρου) Δεν το επιδίωξα αφού το έχτισα γιατί, αν και φαινόταν υπέροχο, υπήρχαν μερικά πράγματα με
Παλμικό LED χρησιμοποιώντας χρονοδιακόπτη 555 και ποτενσιόμετρα: 4 βήματα

Pulsating LED Using 555 Timer and Potentiometers: Greetings! Σε αυτό το διδακτικό, θα σας δείξουμε πώς να φτιάξετε ένα κύκλωμα LED Dimmer που λειτουργεί με ρυθμιζόμενο χρονομετρημένο βρόχο χρησιμοποιώντας ποτενσιόμετρο, χρονοδιακόπτη 555 και άλλα βασικά εξαρτήματα κυκλώματος. Πρώτα πήραμε την ιδέα για αυτό το έργο από
2 Ποτενσιόμετρα & 2 Servos: Ελεγχόμενη κίνηση με Arduino: 4 βήματα

2 Potentiometers & 2 Servos: Controlled Motion With Arduino: Πρώτα πρέπει να συγκεντρώσετε τα σχετικά υλικά για να συνδυάσετε αυτό το κύκλωμα
Διαβάστε τιμές ADC από ποτενσιόμετρα: 4 βήματα

Διαβάστε τιμές ADC από ποτενσιόμετρα: Σε αυτό το άρθρο θα σας δείξω πώς να διαβάζετε τιμές ADC από ένα ποτενσιόμετρο. Αυτό αποτελεί τη βάση του προγραμματισμού Arduino. που διαβάζει αναλογικές τιμές χρησιμοποιώντας την αναλογική ακίδα που παρέχεται από το Arduino. εκτός από τη χρήση του potentio, υπάρχουν αρκετοί αισθητήρες που
Ρολόι τοίχου καθρέφτη Infinity σε πλαίσιο εικόνας IKEA: 4 βήματα

Infinity Mirror Clock Wall in IKEA Picture Frame: Γεια σας, πάντα ήθελα να φτιάξω ένα ρολόι τοίχου. Υπάρχουν πολλά υπέροχα ρολόγια τοίχου σε καταστήματα όπως το ΙΚΕΑ. Είχα κάποια προβλήματα με αυτά τα εμπορικά ρολόγια. Είναι πολύ δυνατά για μένα (το συνεχές τικ-τακ είναι ενοχλητικό), δεν μπορώ να δω τους δείκτες της ώρας