Tabla de contenido:

Espejo infinito con LCD y sensor de infrarrojos: 5 pasos
Espejo infinito con LCD y sensor de infrarrojos: 5 pasos

Video: Espejo infinito con LCD y sensor de infrarrojos: 5 pasos

Video: Espejo infinito con LCD y sensor de infrarrojos: 5 pasos
Video: Espejo Inteligente Casero Con Raspberry Pi - Tutorial Completo 2024, Noviembre
Anonim
Espejo infinito con LCD y sensor de infrarrojos
Espejo infinito con LCD y sensor de infrarrojos
Espejo infinito con LCD y sensor de infrarrojos
Espejo infinito con LCD y sensor de infrarrojos
Espejo infinito con LCD y sensor de infrarrojos
Espejo infinito con LCD y sensor de infrarrojos

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

Instalación del espejo y la película de espejo
Instalación del espejo y la película de espejo
Instalación del espejo y la película de espejo
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

Configuración de la tira de LED
Configuración de la tira de LED
Configuración de la tira de LED
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)

Montaje del sensor de infrarrojos y la pantalla LCD (opcional)
Montaje del sensor de infrarrojos y la pantalla LCD (opcional)
Montaje del sensor de infrarrojos y la pantalla LCD (opcional)
Montaje del sensor de infrarrojos y la pantalla LCD (opcional)
Montaje del sensor de infrarrojos y la pantalla LCD (opcional)
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

Montaje
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: