Πίνακας περιεχομένων:

Καθρέπτης Infinity με LCD και αισθητήρα IR: 5 βήματα
Καθρέπτης Infinity με LCD και αισθητήρα IR: 5 βήματα

Βίντεο: Καθρέπτης Infinity με LCD και αισθητήρα IR: 5 βήματα

Βίντεο: Καθρέπτης Infinity με LCD και αισθητήρα IR: 5 βήματα
Βίντεο: КИТАЙЦЫ, ЧТО ВЫ ТВОРИТЕ??? 35 СУПЕР ТОВАРОВ ДЛЯ АВТОМОБИЛЯ С ALIEXPRESS 2024, Νοέμβριος
Anonim
Καθρέπτης Infinity με LCD και αισθητήρα IR
Καθρέπτης Infinity με LCD και αισθητήρα IR
Καθρέπτης Infinity με LCD και αισθητήρα IR
Καθρέπτης Infinity με LCD και αισθητήρα IR
Καθρέπτης Infinity με LCD και αισθητήρα IR
Καθρέπτης Infinity με LCD και αισθητήρα IR

Αυτό το έργο θα σας δείξει πώς μπορείτε να φτιάξετε έναν καθρέφτη απείρου. Η βασική ιδέα είναι ότι οι λυχνίες 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
Ρύθμιση της λωρίδας LED

Για τα LED απλώς χρησιμοποίησα τη συμπεριλαμβανόμενη ταινία διπλής όψης για να την κολλήσω στο πλαίσιο και έκανα μια τρύπα για να βγει το σύρμα. Σε κάθε γωνία, κόλλησα καλώδια για να συνδεθώ με μια άλλη λωρίδα για να διατηρήσω το σχήμα του κουτιού χωρίς στρογγυλεμένες άκρες. Βεβαιωθείτε ότι κόβετε τις λωρίδες μόνο σε σημεία όπου υπάρχουν επαφές που θα επέτρεπαν κάτι τέτοιο και μην αλλάζετε την κατεύθυνση που συνδέονται τα LED μεταξύ τους, γνωστή ως αντιστροφή της πολικότητας. Η λωρίδα που πήρα είχε βέλη για να βεβαιωθείτε ότι αυτό δεν συμβαίνει, οπότε βεβαιωθείτε ότι όλα δείχνουν προς την ίδια κατεύθυνση.

Έκανα μια μικρή τρύπα για να βάλω το καλώδιο στο εξωτερικό του κουτιού, οι λυχνίες LED που είχα ήταν 3 διευθύνσιμες λυχνίες LED, οπότε είχα συνδετήρες ισχύος, γείωσης και δεδομένων. Χρησιμοποίησα το Digital Pin 3 για τη σύνδεση δεδομένων, βεβαιωθείτε ότι έχετε δοκιμάσει τις λωρίδες LED για να βεβαιωθείτε ότι λειτουργούν πριν τις κολλήσετε στο πλαίσιο και βεβαιωθείτε ότι χρησιμοποιείτε μόνο τη συνιστώμενη τάση για αυτήν που είναι 5 - 6 V.

Βήμα 3: Τοποθέτηση του αισθητήρα IR και της οθόνης LCD (προαιρετικό)

Τοποθέτηση αισθητήρα IR και LCD (προαιρετικό)
Τοποθέτηση αισθητήρα IR και LCD (προαιρετικό)
Τοποθέτηση αισθητήρα IR και LCD (προαιρετικό)
Τοποθέτηση αισθητήρα IR και LCD (προαιρετικό)
Τοποθέτηση αισθητήρα IR και LCD (προαιρετικό)
Τοποθέτηση αισθητήρα 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 στο πλαίσιο, απλά θα το κολλήσω και το ψωμί που χρησιμοποιούσα στο πίσω μέρος του πλαισίου και θα προσπαθούσα να καλύψω/κρύψω τα καλώδια για να φαίνεται καλό.

Συνιστάται: