Πίνακας περιεχομένων:
- Προμήθειες
- Βήμα 1: Εγκατάσταση του καθρέφτη και της ταινίας καθρέφτη
- Βήμα 2: Ρύθμιση της λωρίδας LED
- Βήμα 3: Τοποθέτηση του αισθητήρα IR και της οθόνης LCD (προαιρετικό)
- Βήμα 4: Κωδικός
- Βήμα 5: Τοποθέτηση
Βίντεο: Καθρέπτης Infinity με LCD και αισθητήρα IR: 5 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:32
Αυτό το έργο θα σας δείξει πώς μπορείτε να φτιάξετε έναν καθρέφτη απείρου. Η βασική ιδέα είναι ότι οι λυχνίες LED που βρίσκονται στον καθρέφτη δημιουργούν φως το οποίο αναπηδά από τον πίσω καθρέφτη στον μπροστινό καθρέφτη όπου κάποιο φως διαφεύγει ώστε να βλέπουμε μέσα και μερικά αντανακλώνται πίσω στον πίσω καθρέφτη και παράγουν το άπειρο εφέ. Αυτό βασίζεται στο Infinity Mirror With Ultra Sonic Sensors Instructable by Hack Sioux Falls και How to Connect I2C Lcd Display to Arduino Uno by JunezRiyaz.
Προμήθειες
1. A Shadow Box ($ 50)
2. Καθρέφτης 1 κατεύθυνσης ($ 17)
3. Μια λωρίδα φωτισμού LED RGB ($ 30)
4. Arduino ($ 35)
5. Ένας καθρέφτης ($ 10)
Προαιρετικός:
1. Αισθητήρας IR και τηλεχειριστήριο (20 $)
2. LCD (20 $)
3. 7 Συνδέσεις Γυναικών σε Άνδρες
4. 3 Συνδέσεις αρσενικού σε αρσενικό
Εργαλεία
1. Συγκολλητικό σίδερο
2. Κόφτης και απογυμνωτής καλωδίων
3. Κάτι για να κόψετε τον καθρέφτη
*Σημειώστε ότι όλες οι τιμές σε CAD και μεγέθη θα εξαρτηθούν από το κουτί που χρησιμοποιείτε.
Βήμα 1: Εγκατάσταση του καθρέφτη και της ταινίας καθρέφτη
Το πρώτο πράγμα που πρέπει να κάνετε είναι να εγκαταστήσετε τον καθρέφτη που θα βρίσκεται στο πίσω μέρος του κουτιού σκιών. Θέλετε είτε να πάρετε ένα που έχει το σωστό μέγεθος είτε να πάρετε ένα μεγαλύτερο και μετά να το κόψετε. Αλλά για αυτό, πρέπει να χρησιμοποιήσετε έναν καθρέφτη και όχι την ταινία, επειδή θέλουμε όλο το φως να αντανακλάται πίσω, η ταινία καθρέφτη μπορεί επίσης να πάρει το μοτίβο του υλικού που είναι αν δεν είναι γυαλί.
Όταν εγκαθιστάτε τον καθρέφτη, φροντίστε να τον ασφαλίσετε στο κουτί σκιών, θα συνιστούσα να χρησιμοποιείτε μικρά κομμάτια ξύλου και καρφιά για να βεβαιωθείτε ότι ο καθρέφτης δεν κινείται. Δεν είχα καθρέφτη τη στιγμή που έπρεπε να ολοκληρώσω αυτό το έργο, οπότε χρησιμοποίησα την ταινία (Μπορείτε να δείτε στις εικόνες). Το concept λειτουργεί αλλά όχι πολύ καλά και δίνει μια γωνιακή και χαοτική εμφάνιση που κατά τη γνώμη μου δεν φαίνεται καλή.
Κάθε μεμβράνη καθρέφτη θα είναι λίγο διαφορετική, αλλά αυτή που είπα να καθαρίσει το γυαλί που βάζουμε την ταινία και στη συνέχεια να χρησιμοποιήσω ταινία για να αφαιρέσω το προστατευτικό φιλμ που είναι από τη μία πλευρά και χρησιμοποιώντας σαπουνόνερο σε ένα σπρέι μπουκάλι βάλτε το φιλμ στο ποτήρι. Στη συνέχεια, χρησιμοποιήστε μια πιστωτική κάρτα ή ένα σφουγγάρι για να απαλλαγείτε από τυχόν φυσαλίδες αέρα και περίσσεια νερού. Για άλλη μια φορά δεν είχα γυαλί αλλά εξακολουθεί να λειτουργεί το ίδιο. Στη συνέχεια αφήστε το ποτήρι να στεγνώσει όλη τη νύχτα και πρέπει να γίνει.
Βήμα 2: Ρύθμιση της λωρίδας LED
Για τα LED απλώς χρησιμοποίησα τη συμπεριλαμβανόμενη ταινία διπλής όψης για να την κολλήσω στο πλαίσιο και έκανα μια τρύπα για να βγει το σύρμα. Σε κάθε γωνία, κόλλησα καλώδια για να συνδεθώ με μια άλλη λωρίδα για να διατηρήσω το σχήμα του κουτιού χωρίς στρογγυλεμένες άκρες. Βεβαιωθείτε ότι κόβετε τις λωρίδες μόνο σε σημεία όπου υπάρχουν επαφές που θα επέτρεπαν κάτι τέτοιο και μην αλλάζετε την κατεύθυνση που συνδέονται τα LED μεταξύ τους, γνωστή ως αντιστροφή της πολικότητας. Η λωρίδα που πήρα είχε βέλη για να βεβαιωθείτε ότι αυτό δεν συμβαίνει, οπότε βεβαιωθείτε ότι όλα δείχνουν προς την ίδια κατεύθυνση.
Έκανα μια μικρή τρύπα για να βάλω το καλώδιο στο εξωτερικό του κουτιού, οι λυχνίες LED που είχα ήταν 3 διευθύνσιμες λυχνίες LED, οπότε είχα συνδετήρες ισχύος, γείωσης και δεδομένων. Χρησιμοποίησα το Digital Pin 3 για τη σύνδεση δεδομένων, βεβαιωθείτε ότι έχετε δοκιμάσει τις λωρίδες LED για να βεβαιωθείτε ότι λειτουργούν πριν τις κολλήσετε στο πλαίσιο και βεβαιωθείτε ότι χρησιμοποιείτε μόνο τη συνιστώμενη τάση για αυτήν που είναι 5 - 6 V.
Βήμα 3: Τοποθέτηση του αισθητήρα IR και της οθόνης LCD (προαιρετικό)
Επέλεξα να χρησιμοποιήσω έναν αισθητήρα IR και τηλεχειριστήριο για να αλλάξω τα εφέ φωτισμού και να χρησιμοποιήσω και ένα LCD για να δείξω στο χρήστη τις επιλογές που έχει για τα εφέ.
Για να τοποθετήσω τον αισθητήρα LCD και IR θα χρησιμοποιούσα ένα πιστόλι θερμής κόλλας και θα το κολλούσα στο πάνω μέρος του πλαισίου και θα το έκανα καλώδιο πίσω, αλλά δεν ήθελα να διορθωθούν γιατί ίσως χρειαστεί να τα βγάλω μετά το έργο Εγινε.
Για να συνδέσω τον δέκτη LCD και IR χρησιμοποίησα συνδέσμους Male to Female που συνδέονται στο Arduino για δεδομένα, καθώς και γείωση και ισχύ. Για να συνδέσω τα πάντα χρησιμοποίησα τον πείρο 12 με μια αντίσταση 2 kΩ στην ακίδα δεδομένων για τον αισθητήρα IR, Analog Pin A4 για το SDA της οθόνης LCD και Analog Pin 5 για το SCL της LCD.
Βήμα 4: Κωδικός
Για αυτό το έργο, χρησιμοποιώ λίγες βιβλιοθήκες που πρέπει να κατεβάσετε για να τις χρησιμοποιήσετε. Θα τα βάλω εδώ, να έχετε κατά νου ότι βρίσκομαι στα παράθυρα, ώστε να έχει αποτέλεσμα εάν χρησιμοποιείτε Mac ή Linux.
Θα πρέπει να αλλάξετε τον αριθμό των pixel ανάλογα με τον αριθμό των LED που έχετε. Έχω επίσης ενσωματώσει μια διεπαφή Serial Monitor, ώστε να μπορείτε να διασυνδέεστε με αυτόν τον τρόπο εάν δεν χρησιμοποιείτε αισθητήρα IR.
// Βιβλιοθήκες
#include Adafruit_NeoPixel.h> #include #include #include // Pins and Constant values // Pins and Constant valuesconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); decode_results αποτελέσματα? ανυπόγραφο μεγάλο key_value = 0; const int NUMPIXELS = 27;
Εικονοστοιχεία Adafruit_NeoPixel = Adafruit_NeoPixel (NUMPIXELS, 3);
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Μεταβλητές στο IRNumb; int IRNumb2; int ουράνιο τόξο = 0; uint32_t rainbowColor = pixels. Color (0, 0, 0); εισροή char = 0; εισροή char2 = 0; int r? int g? int β? int breakCondition = 0; void setup () {// Αρχικοποιεί στοιχεία που δεν χρειάζεται να επαναληφθούν. lcd.begin (16, 2); // Καθορισμός 16 στηλών και 2 σειρών οθόνης lcd lcd.backlight (); // Ενεργοποίηση του οπίσθιου φωτισμού Serial.begin (9600); pixels.begin (); irrecv.enableIRIn (); Serial.println ("Εισαγάγετε ένα 0 για να σβήσετε τα φώτα"); // Οδηγίες έναρξης Serial.println ("Εισαγάγετε ένα 1 για να μετατρέψετε τα LED σε λευκό"); Serial.println ("Εισαγάγετε ένα 2 για να περνούν οι λυχνίες LED σε διαφορετικά χρώματα"). Serial.println ("Εισαγάγετε ένα 3 για να προσαρμόσετε τα χρώματα LED με μη αυτόματο τρόπο"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Ελέγχει εάν είναι διαθέσιμος ένας χαρακτήρας; input = (char) Serial.read (); } // Επιλέγει τις διαφορετικές επιλογές εάν (εισαγωγή == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Λευκό setAll (rainbowColor); // Ενημερώνει τις λυχνίες LED} else if (εισαγωγή == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (rainbowColor); // Ενημερώνει τις λυχνίες LED} else if (εισαγωγή == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println ("Εισαγάγετε οτιδήποτε δεν είναι 2 για να βγείτε από αυτό το εφέ, στη συνέχεια οποιαδήποτε από τις δημοφιλείς επιλογές για ένα νέο εφέ.");
lcd.clear (); // Καθαρίστε την οθόνη lcd.setCursor (0, 0); lcd.print ("Έξοδος χρησιμοποιώντας οποιοδήποτε"); lcd.setCursor (0, 1); lcd.print ("μουδιάζω αυτό! = 2"); για (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Ελέγχει εάν πρέπει να βγει το εφέ rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; Διακοπή; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); καθυστέρηση (100)? } για (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Ελέγχει εάν πρέπει να βγει το εφέ rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; Διακοπή; } g ++; rainbowColor = colourChange (i, g, 0); setAll (rainbowColor); showStrip (); καθυστέρηση (100)? } για (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Ελέγχει εάν το εφέ πρέπει να εξέλθει rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; Διακοπή; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (rainbowColor); showStrip (); καθυστέρηση (100)? } για (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Ελέγχει εάν το εφέ πρέπει να εξέλθει rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; Διακοπή; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); καθυστέρηση (100)? } mainOptions (); } else if (εισαγωγή == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;
Serial.println ("Εισαγάγετε n για έξοδο");
Serial.println ("Χρησιμοποιήστε τα w και s για να αυξήσετε ή να μειώσετε το κόκκινο χρώμα"). Serial.println ("Χρησιμοποιήστε r και f για να αυξήσετε ή να μειώσετε το πράσινο χρώμα"); Serial.println ("Χρησιμοποιήστε τα y και h για να αυξήσετε ή να μειώσετε το μπλε χρώμα"). lcd.clear (); // Καθαρίστε την οθόνη lcd.setCursor (0, 0); lcd.print ("έξοδος: 0, 4/7: +/- κόκκινο"); lcd.setCursor (0, 1); lcd.print ("5/8: πράσινο, 6/9: μπλε");
while (input2! = 'n' || IRNumb2! = 0) {
εάν (Serial.available ()> 0) {// είναι διαθέσιμος χαρακτήρας; input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();
αν (IRNumb2 == 0) {
Διακοπή; } if (input2 == 'w' || IRNumb2 == 4) {r+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (input2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (input2 == 'r' || IRNumb2 == 5) {g+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }
else if (input2 == 'y' || IRNumb2 == 6) {
b+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }
else if (input2 == 'h' || IRNumb2 == 9) {
b- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } void showStrip () {pixels.show (); } void setAll (uint32_t color) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, color); }} // Εισαγάγετε μια τιμή 0 έως 255 για να λάβετε μια τιμή χρώματος. uint32_t colourChange (int r, int g, int b) {επιστροφή pixel. Color (r, g, b); } void mainOptions () {// Εμφανίζει τις επιλογές κύριου εφέ lcd.clear (); // Καθαρίστε την οθόνη lcd.setCursor (0, 0); lcd.print ("0 For Lights off"); lcd.setCursor (0, 1); lcd.print ("1: White Light"); καθυστέρηση (1000)? lcd.clear (); // Καθαρίστε την οθόνη lcd.setCursor (0, 0); lcd.print ("2: Color effect"); lcd.setCursor (0, 1); lcd.print ("3: Manual"); καθυστέρηση (1000)? } void IRScan () {if (irrecv.decode (& results)) {
εάν (results.value == 0XFFFFFFFF)
results.value = key_value; else {//Serial.println(results.value, HEX); εάν (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb = 0; //Serial.println("0 "); } else if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb = 1; //Serial.println("1 "); } else if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb = 2; //Serial.println("2 "); } else if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb = 3; // Serial.println ("3"); } else if (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb = 4; //Serial.println("4 "); } else if (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb = 5; // Serial.println ("5"); } else if (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb = 6; // Serial.println ("6"); } else if (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb = 7; //Serial.println("7 "); } else if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb = 8; //Serial.println("8 "); } else if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb = 9; // Serial.println ("9"); }} key_value = results.value; irrecv.resume (); }} void IRScan2 () {if (irrecv.decode (& results)) {
εάν (results.value == 0XFFFFFFFF)
results.value = key_value; else {// Serial.println (results.value, HEX); εάν (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb2 = 0; //Serial.println("0 "); } else if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } else if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb2 = 2; //Serial.println("2 "); } else if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb2 = 3; // Serial.println ("3"); } else if (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb2 = 4; //Serial.println("4 "); } else if (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb2 = 5; // Serial.println ("5"); } else if (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb2 = 6; // Serial.println ("6"); } else if (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb2 = 7; //Serial.println("7 "); } else if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8; //Serial.println("8 "); } else if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} key_value = results.value; irrecv.resume (); }}
Βήμα 5: Τοποθέτηση
Για να τοποθετήσω το Arduino στο πλαίσιο, απλά θα το κολλήσω και το ψωμί που χρησιμοποιούσα στο πίσω μέρος του πλαισίου και θα προσπαθούσα να καλύψω/κρύψω τα καλώδια για να φαίνεται καλό.
Συνιστάται:
Καθρέπτης αναγνώρισης προσώπου με μυστικό διαμέρισμα: 15 βήματα (με εικόνες)
Καθρέφτης αναγνώρισης προσώπου με μυστικό διαμέρισμα: Πάντα με ενθουσίαζαν τα πάντα δημιουργικά μυστικά διαμερίσματα που χρησιμοποιούνται σε ιστορίες, ταινίες και άλλα παρόμοια. Έτσι, όταν είδα τον Διαγωνισμό Secret Compartment, αποφάσισα να πειραματιστώ με την ιδέα και να φτιάξω έναν συνηθισμένο καθρέφτη που ανοίγει ένα
Διασύνδεση Arduino με αισθητήρα υπερήχων και αισθητήρα θερμοκρασίας χωρίς επαφή: 8 βήματα
Διασύνδεση Arduino με αισθητήρα υπερήχων και αισθητήρα θερμοκρασίας χωρίς επαφή: Σήμερα, οι κατασκευαστές, οι προγραμματιστές προτιμούν το Arduino για την ταχεία ανάπτυξη του πρωτοτύπου των έργων. Το Arduino είναι μια ηλεκτρονική πλατφόρμα ανοιχτού κώδικα που βασίζεται σε εύχρηστο υλικό και λογισμικό. Το Arduino έχει πολύ καλή κοινότητα χρηστών. Σε αυτό το έργο
Video Time Shifting - ο ηλεκτρονικός καθρέπτης για προπόνηση τένις: 4 βήματα
Video Time Shifting - the E -mirror for Tennis Training: Σε ποιον δεν αρέσει ο καθρέφτης. Εκτός από τη θαυμάσια ομορφιά, χρησιμοποιείται από bodybuilders, χορευτές … για να τελειοποιήσουν τις ικανότητές τους. Το τένις είναι ένα άθλημα που απαιτεί συντονισμό από το σώμα σε ακριβείς χρονισμούς. Αν κάποιος κοιτούσε υποθετικά έναν καθρέφτη και
Μέθοδοι ανίχνευσης επιπέδου νερού Arduino χρησιμοποιώντας υπερηχητικό αισθητήρα και αισθητήρα νερού Funduino: 4 βήματα
Μέθοδοι ανίχνευσης επιπέδου νερού Arduino χρησιμοποιώντας υπερηχητικό αισθητήρα και αισθητήρα νερού Funduino: Σε αυτό το έργο, θα σας δείξω πώς να δημιουργήσετε έναν φθηνό ανιχνευτή νερού χρησιμοποιώντας δύο μεθόδους: 1. Αισθητήρας υπερήχων (HC-SR04) .2. Αισθητήρας νερού Funduino
Καθρέπτης από σπασμένη οθόνη LCD: 3 βήματα
Καθρέφτης από σπασμένη οθόνη LCD: Εάν έχετε μια οθόνη LCD με μια τεράστια ρωγμή, φτιάξτε έναν καθρέφτη αντί να τον πετάξετε. Η ρωγμή είναι σχεδόν αόρατη μετά τη λειτουργία, δείτε την εικόνα. Αυτό είναι πραγματικά εύκολο και ισοδυναμεί με το σπάσιμο της οθόνης σας, ανατρέποντας το