Tabla de contenido:
- Suministros
- Paso 1: Instalación del espejo y la película de espejo
- Paso 2: Configuración de la tira de LED
- Paso 3: Montaje del sensor de infrarrojos y la pantalla LCD (opcional)
- Paso 4: Código
- Paso 5: Montaje
Video: Espejo infinito con LCD y sensor de infrarrojos: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:40
Este proyecto te mostrará cómo puedes hacer un Infinity Mirror. El concepto básico es que los LED que están en el espejo crean una luz que rebota desde el espejo trasero hacia el espejo frontal, donde se escapa algo de luz para que podamos ver el interior y otra parte se refleja en el espejo trasero y produce el efecto infinito. Esto se basa en Infinity Mirror With Ultra Sonic Sensors Instructable por Hack Sioux Falls y How to Connect I2C Lcd Display to Arduino Uno por JunezRiyaz.
Suministros
1. Una caja de sombras ($ 50)
2. Película de espejo unidireccional ($ 17)
3. Una tira de luz LED RGB ($ 30)
4. Arduino ($ 35)
5. Un espejo ($ 10)
Opcional:
1. Sensor de infrarrojos y control remoto ($ 20)
2. Una pantalla LCD ($ 20)
3. 7 conectores hembra a macho
4. 3 conectores macho a macho
Instrumentos
1. Soldador
2. Cortador y pelacables de alambre
3. Algo para cortar el espejo
* Tenga en cuenta que todos los precios en CAD y los tamaños dependerán de la caja que utilice.
Paso 1: Instalación del espejo y la película de espejo
Lo primero que debe hacer es instalar el espejo que va a estar en la parte posterior de la caja de sombra. Desea obtener uno que sea del tamaño correcto u obtener uno que sea más grande y luego cortarlo. Pero para esto, debe usar un espejo y no la película porque queremos que toda la luz se refleje hacia atrás, la película del espejo también puede tomar el patrón del material en el que está si no es vidrio.
Cuando instale el espejo, asegúrese de asegurarlo en la caja de sombra, recomendaría usar pequeños trozos de madera y clavos para asegurarse de que el espejo no se mueva. No tenía espejo en el tiempo que tuve para completar este proyecto, así que usé la película (se puede ver en las fotos). El concepto funciona pero no muy bien y le da un aspecto caótico y en ángulo que en mi opinión no se ve bien.
Cada película de espejo va a ser un poco diferente, pero la que me dijeron que limpie el vidrio en el que estamos colocando la película y luego use cinta para quitar la película protectora que está en un lado y use agua jabonosa en un spray. botella poner la película sobre el cristal. Luego, use una tarjeta de crédito o una escobilla de goma para eliminar las burbujas de aire y el exceso de agua. Una vez más no tenía vidrio, pero sigue funcionando igual. Luego, deja que el vaso se seque durante la noche y ya está listo.
Paso 2: Configuración de la tira de LED
Para los LED, solo usé la cinta de doble cara incluida para pegarlo al marco e hice un agujero para que saliera el cable. En cada esquina, soldé cables para conectarlos a otra tira para mantener la forma de la caja sin bordes redondeados. Asegúrese de cortar las tiras solo en puntos donde haya contactos que permitirían que esto suceda y no cambie la dirección en la que los LED se conectan entre sí, lo que se conoce como inversión de polaridad. La tira que obtuve tenía flechas para asegurarme de que esto no suceda, así que asegúrese de verificar que todas apunten en la misma dirección.
Hice un pequeño orificio para pasar el cable por el exterior de la caja, los LED que tenía eran LED direccionables de 3 pines, por lo que tenía conectores de alimentación, tierra y datos. Usé Digital Pin 3 para el conector de datos, asegúrese de probar sus tiras de LED para asegurarse de que funcionen antes de pegarlas al marco y asegúrese de usar solo el voltaje recomendado para el mío que es 5-6 V.
Paso 3: Montaje del sensor de infrarrojos y la pantalla LCD (opcional)
Elegí usar un sensor de infrarrojos y un control remoto para cambiar los efectos de iluminación y usar una pantalla LCD para mostrar al usuario las opciones que tiene para los efectos.
Para montar el sensor LCD e IR, usaría una pistola de pegamento caliente y los pegaría en la parte superior del marco y conecté todo a la parte posterior, pero no quería que los arreglaran porque podría tener que quitármelos después del proyecto. está hecho.
Para conectar la pantalla LCD y el receptor de infrarrojos, utilicé conectores macho a hembra que se conectan al Arduino para obtener datos, así como tierra y energía. Para conectar todo, utilicé el pin 12 con una resistencia de 2 kΩ en el pin de datos para el sensor de infrarrojos, el pin analógico A4 para el SDA del LCD y el pin analógico 5 para el SCL del LCD.
Paso 4: Código
Para este proyecto, utilizo algunas bibliotecas que tendrías que descargar para usarlas. Los voy a poner aquí, tenga en cuenta que estoy en Windows, por lo que puede tener un efecto si está en Mac o Linux.
Tendrá que cambiar la cantidad de píxeles en función de la cantidad de LED que tenga. También construí una interfaz de monitor en serie para que pueda interactuar de esa manera con él si no está utilizando un sensor de infrarrojos.
// Bibliotecas
#include Adafruit_NeoPixel.h> #include #include #include // Pines y valores constantes // Pines y valores constantesconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); decode_results resultados; valor_clave largo sin firmar = 0; const int NUMPIXELS = 27;
Adafruit_NeoPixel píxeles = Adafruit_NeoPixel (NUMPIXELS, 3);
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVO); // Variables int IRNumb; int IRNumb2; int arcoiris = 0; uint32_t rainbowColor = píxeles. Color (0, 0, 0); char input = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Inicia elementos que no necesitan repetirse. lcd.begin (16, 2); // Definición de 16 columnas y 2 filas de pantalla lcd lcd.backlight (); // Para encender la retroiluminación Serial.begin (9600); pixels.begin (); irrecv.enableIRIn (); Serial.println ("Ingrese un 0 para apagar las luces"); // Instrucciones iniciales Serial.println ("Ingrese un 1 para que los LED se vuelvan blancos"); Serial.println ("Introduzca un 2 para que los LED cambien de color"); Serial.println ("Ingrese un 3 para personalizar los colores del LED manualmente"); } bucle vacío () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// ¿Comprueba si hay un personaje disponible? input = (char) Serial.read (); } // Elige las diferentes opciones if (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // White setAll (rainbowColor); // Actualiza los LED} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (rainbowColor); // Actualiza los LED} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println ("Ingrese cualquier cosa que no sea un 2 para salir de este efecto, luego cualquiera de las opciones preventivas para un nuevo efecto.");
lcd.clear (); // Limpiar la pantalla lcd.setCursor (0, 0); lcd.print ("Salir usando cualquier-"); lcd.setCursor (0, 1); lcd.print ("adormecer eso! = 2"); para (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Comprueba si es necesario salir del efecto rainbowColor = colourChange (0, 0, 0); setAll (color arcoíris); breakCondition = 1; rotura; } rainbowColor = cambio de color (i, 0, 0); setAll (color arcoíris); showStrip (); retraso (100); } para (int i = 0; i = 48 && entrada <= 57) || breakCondition == 1 || IRNumb! = 2) {// Comprueba si es necesario salir del efecto rainbowColor = colourChange (0, 0, 0); setAll (color arcoíris); breakCondition = 1; rotura; } g ++; rainbowColor = colourChange (i, g, 0); setAll (color arcoíris); showStrip (); retraso (100); } para (int g = 0; g = 48 && entrada <= 57) || breakCondition == 1 || IRNumb! = 2) {// Comprueba si es necesario salir del efecto rainbowColor = colourChange (0, 0, 0); setAll (color arcoíris); breakCondition = 1; rotura; } r + = 2; rainbowColor = cambio de color (r, g, 0); setAll (color arcoíris); showStrip (); retraso (100); } para (int b = 0; b = 48 && entrada <= 57) || breakCondition == 1 || IRNumb! = 2) {// Comprueba si es necesario salir del efecto rainbowColor = colourChange (0, 0, 0); setAll (color arcoíris); breakCondition = 1; rotura; } r + = 2; g + = 5; rainbowColor = cambio de color (r, g, b); setAll (color arcoíris); showStrip (); retraso (100); } mainOptions (); } más si (entrada == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;
Serial.println ("Ingrese n para salir");
Serial.println ("Use wys para aumentar o disminuir el color rojo"); Serial.println ("Utilice ryf para aumentar o disminuir el color verde"); Serial.println ("Use y y h para aumentar o disminuir el color azul"); lcd.clear (); // Limpiar la pantalla lcd.setCursor (0, 0); lcd.print ("salida: 0, 4/7: +/- rojo"); lcd.setCursor (0, 1); lcd.print ("5/8: verde, 6/9: azul");
while (input2! = 'n' || IRNumb2! = 0) {
if (Serial.available ()> 0) {// ¿hay un carácter disponible? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();
si (IRNumb2 == 0) {
rotura; } si (entrada2 == 'w' || IRNumb2 == 4) {r + = 2; rainbowColor = cambio de color (r, g, b); setAll (color arcoíris); showStrip (); } más si (input2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = cambio de color (r, g, b); setAll (color arcoíris); showStrip (); } más si (input2 == 'r' || IRNumb2 == 5) {g + = 2; rainbowColor = cambio de color (r, g, b); setAll (color arcoíris); showStrip (); } más si (entrada2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = cambio de color (r, g, b); setAll (color arcoíris); showStrip (); }
else if (input2 == 'y' || IRNumb2 == 6) {
b + = 2; rainbowColor = cambio de color (r, g, b); setAll (color arcoíris); showStrip (); }
más si (input2 == 'h' || IRNumb2 == 9) {
b- = 2; rainbowColor = cambio de color (r, g, b); setAll (color arcoíris); showStrip (); }} mainOptions (); } setAll (color arcoíris); showStrip (); } void showStrip () {pixels.show (); } void setAll (uint32_t color) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, color); }} // Ingrese un valor de 0 a 255 para obtener un valor de color. uint32_t colourChange (int r, int g, int b) {devolver píxeles. Color (r, g, b); } void mainOptions () {// Muestra las opciones de efectos principales lcd.clear (); // Limpiar la pantalla lcd.setCursor (0, 0); lcd.print ("0 para luces apagadas"); lcd.setCursor (0, 1); lcd.print ("1: Luz blanca"); retraso (1000); lcd.clear (); // Limpiar la pantalla lcd.setCursor (0, 0); lcd.print ("2: Efecto de color"); lcd.setCursor (0, 1); lcd.print ("3: Manual"); retraso (1000); } void IRScan () {if (irrecv.decode (& results)) {
si (resultados.valor == 0XFFFFFFFF)
results.value = key_value; else {//Serial.println(results.value, HEX); if (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb = 0; //Serial.println("0 "); } más si (resultados.valor == 0x9716BE3F || resultados.valor == 0xFF30CF) {IRNumb = 1; //Serial.println("1 "); } más si (resultados.valor == 0x3D9AE3F7 || resultados.valor == 0xFF18E7) {IRNumb = 2; //Serial.println("2 "); } else if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb = 3; // Serial.println ("3"); } más si (resultados.valor == 0x8C22657B || resultados.valor == 0xFF10EF) {IRNumb = 4; //Serial.println("4 "); } más si (resultados.valor == 0xFF38C7 || resultados.valor == 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 "); } más si (resultados.valor == 0x1BC0157B || resultados.valor == 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)) {
si (resultados.valor == 0XFFFFFFFF)
results.value = key_value; else {// Serial.println (resultados.valor, HEX); if (resultados.valor == 0xFF6897 || resultados.valor == 0xC101E57B) {IRNumb2 = 0; //Serial.println("0 "); } más si (resultados.valor == 0x9716BE3F || resultados.valor == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } más si (resultados.valor == 0x3D9AE3F7 || resultados.valor == 0xFF18E7) {IRNumb2 = 2; //Serial.println("2 "); } else if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb2 = 3; // Serial.println ("3"); } más si (resultados.valor == 0x8C22657B || resultados.valor == 0xFF10EF) {IRNumb2 = 4; //Serial.println("4 "); } más si (resultados.valor == 0xFF38C7 || resultados.valor == 0x488F3CBB) {IRNumb2 = 5; // Serial.println ("5"); } más si (resultados.valor == 0x449E79F || resultados.valor == 0xFF5AA5) {IRNumb2 = 6; // Serial.println ("6"); } más si (resultados.valor == 0xFF42BD || resultados.valor == 0x32C6FDF7) {IRNumb2 = 7; //Serial.println("7 "); } else if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8; //Serial.println("8 "); } más si (resultados.valor == 0xFF52AD || resultados.valor == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} key_value = results.value; irrecv.resume (); }}
Paso 5: Montaje
Para montar el Arduino en el marco, simplemente lo pegaría y la placa de pruebas que usé en la parte posterior del marco y trataría de cubrir / ocultar los cables para que se vea bien.
Recomendado:
Hacer un reloj de espejo infinito: 15 pasos (con imágenes)
Hacer un reloj con espejo infinito: en un proyecto anterior construí un espejo infinito, donde mi objetivo final era convertirlo en un reloj. (Haz un Espejo Infinito de Colores) No busqué eso después de construirlo porque, aunque se veía genial, había algunas cosas con
Reloj Vortex: un reloj de pulsera con espejo infinito: 10 pasos (con imágenes)
Vortex Watch: un reloj de pulsera con espejo infinito: el objetivo de este proyecto era crear una versión portátil de un reloj con espejo infinito. Utiliza sus LED RGB para indicar el tiempo asignando horas, minutos y segundos a las luces roja, verde y azul respectivamente y superponiendo estos tonos t
Cómo hacer un corazón de espejo infinito con Arduino y LED RGB: 8 pasos (con imágenes)
Cómo hacer un corazón de espejo infinito con Arduino y LED RGB: una vez en una fiesta, mi esposa y yo vimos un espejo infinito, y ella estaba fascinada con el aspecto y seguía diciendo ¡Quiero uno! Un buen esposo siempre escucha y recuerda, así que decidí construirle uno como regalo de San Valentín
Control de 8 relés con NodeMCU y receptor de infrarrojos mediante WiFi, control remoto de infrarrojos y aplicación de Android: 5 pasos (con imágenes)
Control de 8 relés con NodeMCU y receptor de infrarrojos mediante WiFi, control remoto por infrarrojos y aplicación de Android: Control de 8 interruptores de relé con nodemcu y receptor de infrarrojos a través de wifi y control remoto por infrarrojos y aplicación de Android. El control remoto por infrarrojos funciona independientemente de la conexión wifi. AQUÍ
Espejo infinito hexagonal con luces LED y cable láser: 5 pasos (con imágenes)
Espejo Hexagon Infinity con luces LED y cable láser: si está buscando crear una pieza de iluminación única, este es un proyecto realmente divertido. Debido a la complejidad, algunos de los pasos realmente requieren algo de precisión, pero hay algunas direcciones diferentes que puede seguir, dependiendo del aspecto general