Taula de continguts:

Mirall infinit amb sensor LCD i IR: 5 passos
Mirall infinit amb sensor LCD i IR: 5 passos

Vídeo: Mirall infinit amb sensor LCD i IR: 5 passos

Vídeo: Mirall infinit amb sensor LCD i IR: 5 passos
Vídeo: Тест каравана в -25° . Ночёвка зимой. Как не замёрзнуть? 2024, Desembre
Anonim
Mirall infinit amb LCD i sensor IR
Mirall infinit amb LCD i sensor IR
Mirall infinit amb LCD i sensor IR
Mirall infinit amb LCD i sensor IR
Mirall infinit amb LCD i sensor IR
Mirall infinit amb LCD i sensor IR

Aquest projecte us mostrarà com podeu crear un Mirall Infinit. El concepte bàsic és que els LED que es troben al mirall creen llum que rebota des del mirall posterior fins al mirall frontal, on escapa una mica de llum perquè puguem veure l’interior i alguns es reflecteixin al mirall posterior i produeixin l’efecte infinit. Això es basa en l’Infinity Mirror With Ultra Sonic Sensors, instructiu de Hack Sioux Falls i How to Connect I2C Lcd Display to Arduino Uno de JunezRiyaz.

Subministraments

1. Una caixa d’ombres (50 dòlars)

2. Pel·lícula de mirall d’una manera (17 dòlars)

3. Una tira de llum LED RGB (30 dòlars)

4. Arduino (35 dòlars)

5. Un mirall (10 dòlars)

Opcional:

1. Sensor i control remot IR (20 dòlars)

2. Una pantalla LCD (20 dòlars)

3. 7 Connectors femella a mascle

4. 3 connectors mascle a mascle

Eines

1. Soldador

2. Cortador de filferro i pelador

3. Alguna cosa amb la qual tallar el mirall

* Tingueu en compte que tots els preus en CAD i les mides dependran de la caixa que utilitzeu.

Pas 1: Instal·lació del mirall i de la pel·lícula del mirall

Instal·lació del mirall i de la pel·lícula del mirall
Instal·lació del mirall i de la pel·lícula del mirall
Instal·lació del mirall i de la pel·lícula del mirall
Instal·lació del mirall i de la pel·lícula del mirall

El primer que cal fer és instal·lar el mirall que hi haurà a la part posterior de la caixa d’ombres. Voleu obtenir-ne un de la mida adequada o obtenir-ne un de més gran i després reduir-lo. Però per a això, heu d’utilitzar un mirall i no la pel·lícula, ja que volem que tota la llum es reflecteixi cap enrere, la pel·lícula de mirall també pot adoptar el patró del material on està, si no és de vidre.

Quan instal·leu el mirall, assegureu-vos de fixar-lo a la caixa d’ombres, us recomanaria que feu servir petits trossos de fusta i claus per assegurar-vos que el mirall no es mogui. No tenia un mirall en el temps que vaig haver de completar aquest projecte, així que vaig utilitzar la pel·lícula (es pot veure a les imatges). El concepte funciona, però no molt bé, i dóna un aspecte angular i caòtic que al meu entendre no es veu bé.

Totes les pel·lícules de mirall seran una mica diferents, però la que em va dir per netejar el vidre que estem posant la pel·lícula i després utilitzar-la amb cinta adhesiva per treure la pel·lícula protectora que hi ha a un costat i utilitzar aigua sabonosa amb un spray ampolla posar la pel·lícula sobre el got. A continuació, utilitzeu una targeta de crèdit o un racó per eliminar les bombolles d’aire i l’excés d’aigua. Una vegada més no tenia vidre, però encara funciona igual. A continuació, deixeu assecar el got durant la nit i s’hauria de fer.

Pas 2: Configuració de la tira LED

Configuració de la tira LED
Configuració de la tira LED
Configuració de la tira LED
Configuració de la tira LED

Per als LEDs, només he utilitzat la cinta de doble cara inclosa per enganxar-la al marc i he fet un forat perquè surti el cable. A cada cantonada, vaig soldar cables per connectar-me a una altra tira per mantenir la forma de la caixa sense vores arrodonides. Assegureu-vos de tallar les tires només en punts on hi hagi contactes que permetin que això passi i no canvieu la direcció que es connecten els LED entre si, coneguda com a inversió de la polaritat. La tira que he obtingut tenia fletxes per assegurar-me que això no passi, així que assegureu-vos de comprovar que tots apunten en la mateixa direcció.

Vaig fer un petit forat per posar el cable a l'exterior de la caixa, els LED que tenia eren LEDs de 3 pins dirigibles, de manera que tenia connectors d'alimentació, de terra i de dades. He utilitzat el pin digital 3 per al connector de dades, assegureu-vos de provar les vostres tires LED per assegurar-vos que funcionen abans d’enganxar-les al marc i assegureu-vos d’utilitzar només la tensió recomanada per a la meva que sigui de 5 a 6 V.

Pas 3: muntatge del sensor IR i de la pantalla LCD (opcional)

Muntatge del sensor IR i de la pantalla LCD (opcional)
Muntatge del sensor IR i de la pantalla LCD (opcional)
Muntatge del sensor IR i de la pantalla LCD (opcional)
Muntatge del sensor IR i de la pantalla LCD (opcional)
Muntatge del sensor IR i de la pantalla LCD (opcional)
Muntatge del sensor IR i de la pantalla LCD (opcional)

Vaig optar per utilitzar un sensor IR i un comandament a distància per canviar els efectes d’il·luminació i fer servir un LCD per mostrar a l’usuari les opcions que tenen per als efectes.

Per muntar el sensor LCD i IR, faria servir una pistola de cola calenta i les enganxaria a la part superior del quadre i ho connectaré tot a la part posterior, però no volia que es fixessin perquè podria haver de treure-les després del projecte està fet.

Per connectar el receptor LCD i IR he utilitzat connectors de femella a femella que es connecten a l’Arduino per obtenir dades, així com connectar-se a terra i alimentar-se. Per connectar-ho tot, he utilitzat el pin 12 amb una resistència de 2 kΩ al pin de dades per al sensor IR, el pin A4 analògic per a l'SDA del LCD i el pin analògic 5 per al SCL del LCD.

Pas 4: Codi

Per a aquest projecte, faig servir algunes biblioteques que hauríeu de descarregar per utilitzar-les. Vaig a posar-los aquí, tingueu en compte que estic a Windows, de manera que pot tenir un efecte si sou a Mac o Linux.

Haureu de canviar el nombre de píxels en funció del nombre de LED que tingueu. També he incorporat una interfície Serial Monitor perquè pugueu interactuar d’aquesta manera si no feu servir un sensor IR.

// Biblioteques

#include Adafruit_NeoPixel.h> #include #include #include // Pins i valors constants // Pins i constants valuesconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); resultats decode_results; key_value llarg sense signar = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIU); // Variables int IRNumb; int IRNumb2; int arc de Sant Martí = 0; uint32_t rainbowColor = pixels. Color (0, 0, 0); entrada de caràcters = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Inicialitza elements que no cal repetir. lcd.begin (16, 2); // Definició de 16 columnes i 2 files de pantalla lcd lcd.backlight (); // Per activar la llum de fons Serial.begin (9600); pixels.begin (); irrecv.enableIRIn (); Serial.println ("Introduïu un 0 per apagar els llums"); // Instruccions inicials Serial.println ("Introduïu un 1 per convertir els LED en blanc"); Serial.println ("Introduïu un 2 per fer que els LED passin per diferents colors"); Serial.println ("Introduïu un 3 per personalitzar els colors del LED manualment"); } bucle buit () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Comprova si hi ha un caràcter disponible? input = (char) Serial.read (); } // Trieu les diferents opcions si (entrada == '1' || IRNumb == 1) {rainbowColor = colorChange (255, 255, 255); // White setAll (rainbowColor); // Actualitza els LED} else if (entrada == '0' || IRNumb == 0) {rainbowColor = colorChange (0, 0, 0); // Off setAll (rainbowColor); // Actualitza els LED} else if (entrada == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;

Serial.println ("Introduïu qualsevol cosa que no sigui un 2 per sortir d'aquest efecte i, a continuació, qualsevol de les opcions prèvies d'un nou efecte.");

lcd.clear (); // Neteja la pantalla lcd.setCursor (0, 0); lcd.print ("Surt amb qualsevol-"); lcd.setCursor (0, 1); lcd.print ("adormit! = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Comprova si cal sortir de l'efecte rainbowColor = colorChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; trencar; } rainbowColor = colorChange (i, 0, 0); setAll (rainbowColor); showStrip (); retard (100); } per a (int i = 0; i = 48 && entrada <= 57) || breakCondition == 1 || IRNumb! = 2) {// Comprova si cal sortir de l'efecte rainbowColor = colorChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; trencar; } g ++; rainbowColor = colorChange (i, g, 0); setAll (rainbowColor); showStrip (); retard (100); } per a (int g = 0; g = 48 && entrada <= 57) || breakCondition == 1 || IRNumb! = 2) {// Comprova si cal sortir de l'efecte rainbowColor = colorChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; trencar; } r + = 2; rainbowColor = colorChange (r, g, 0); setAll (rainbowColor); showStrip (); retard (100); } per a (int b = 0; b = 48 && entrada <= 57) || breakCondition == 1 || IRNumb! = 2) {// Comprova si cal sortir de l'efecte rainbowColor = colorChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; trencar; } r + = 2; g + = 5; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); retard (100); } mainOptions (); } else if (entrada == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;

Serial.println ("Introduïu n per sortir");

Serial.println ("Utilitzeu w i s per augmentar o disminuir el color vermell"); Serial.println ("Utilitzeu r i f per augmentar o disminuir el color verd"); Serial.println ("Utilitzeu yh per augmentar o disminuir el color blau"); lcd.clear (); // Neteja la pantalla lcd.setCursor (0, 0); lcd.print ("sortida: 0, 4/7: +/- vermell"); lcd.setCursor (0, 1); lcd.print ("5/8: verd, 6/9: blau");

while (entrada2! = 'n' || IRNumb2! = 0) {

if (Serial.available ()> 0) {// hi ha un caràcter disponible? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();

if (IRNumb2 == 0) {

trencar; } if (entrada2 == 'w' || IRNumb2 == 4) {r + = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (input2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (entrada2 == 'r' || IRNumb2 == 5) {g + = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (entrada2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); }

else if (entrada2 == 'y' || IRNumb2 == 6) {

b + = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); }

else if (entrada2 == 'h' || IRNumb2 == 9) {

b- = 2; rainbowColor = colorChange (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); }} // Introduïu un valor de 0 a 255 per obtenir un valor de color. uint32_t colorChange (int r, int g, int b) {return pixels. Color (r, g, b); } void mainOptions () {// Mostra les opcions d'efecte principals lcd.clear (); // Neteja la pantalla lcd.setCursor (0, 0); lcd.print ("0 per a llums apagades"); lcd.setCursor (0, 1); lcd.print ("1: llum blanca"); retard (1000); lcd.clear (); // Neteja la pantalla lcd.setCursor (0, 0); lcd.print ("2: efecte de color"); lcd.setCursor (0, 1); lcd.print ("3: Manual"); retard (1000); } void IRScan () {if (irrecv.decode (& results)) {

if (results.value == 0XFFFFFFFF)

results.value = valor_clau; else {//Serial.println(results.value, HEX); if (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"); }} valor_clau = resultats.valor; irrecv.resume (); }} void IRScan2 () {if (irrecv.decode (& results)) {

if (results.value == 0XFFFFFFFF)

results.value = valor_clau; else {// Serial.println (results.value, HEX); if (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"); }} valor_clau = resultats.valor; irrecv.resume (); }}

Pas 5: muntatge

Muntatge
Muntatge

Per muntar l’Arduino al marc, només l’enganxaria i la tauleta que he utilitzat a la part posterior del marc i intentar tapar / amagar els cables perquè quedi bé.

Recomanat: