Espelho infinito com LCD e sensor IR: 5 etapas
Espelho infinito com LCD e sensor IR: 5 etapas
Anonim
Espelho infinito com LCD e sensor infravermelho
Espelho infinito com LCD e sensor infravermelho
Espelho infinito com LCD e sensor infravermelho
Espelho infinito com LCD e sensor infravermelho
Espelho infinito com LCD e sensor infravermelho
Espelho infinito com LCD e sensor infravermelho

Este projeto vai mostrar como você pode fazer um espelho infinito. O conceito básico é que os LEDs que estão no espelho criam luz que salta do espelho traseiro para o espelho frontal, onde alguma luz escapa para que possamos ver o interior e outra é refletida de volta para o espelho traseiro e produz o efeito infinito. Baseia-se no espelho infinito com sensores ultrassônicos instruídos por Hack Sioux Falls e como conectar o monitor I2C Lcd ao Arduino Uno por JunezRiyaz.

Suprimentos

1. Uma caixa de sombra ($ 50)

2. Filme espelho unidirecional (US $ 17)

3. Uma tira de luz LED RGB ($ 30)

4. Arduino ($ 35)

5. Um espelho ($ 10)

Opcional:

1. Sensor IR e remoto ($ 20)

2. Um LCD ($ 20)

3. 7 conectores fêmea para macho

4. 3 conectores macho para macho

Ferramentas

1. Ferro de soldar

2. Cortador de fio e descascador

3. Algo para cortar o espelho

* Observe que todos os preços em CAD e tamanhos dependem da caixa que você usa.

Etapa 1: Instalando o espelho e a película do espelho

Instalando o Espelho e o Filme Espelho
Instalando o Espelho e o Filme Espelho
Instalando o Espelho e o Filme Espelho
Instalando o Espelho e o Filme Espelho

A primeira coisa a fazer é instalar o espelho que ficará atrás da caixa de sombra. Você deseja obter um do tamanho certo ou um maior e, em seguida, cortá-lo. Mas para isso, você tem que usar um espelho e não o filme, porque queremos que toda a luz seja refletida de volta, o filme do espelho também pode assumir o padrão do material em que está se não for vidro.

Quando você estiver instalando o espelho, certifique-se de prendê-lo na caixa de sombra, eu recomendaria usar pequenos pedaços de madeira e pregos para garantir que o espelho não se mova. Eu não tinha espelho no tempo que tive para terminar esse projeto então usei o filme (você pode ver nas fotos). O conceito funciona, mas não muito bem e dá uma aparência angulada e caótica que na minha opinião não parece boa.

Cada filme de espelho vai ser um pouco diferente, mas o que me disseram para limpar o vidro em que estamos colocando o filme, em seguida, usar fita adesiva para tirar a película protetora que está de um lado e usar água com sabão em um spray garrafa coloque o filme no vidro. Em seguida, use um cartão de crédito ou rodo para se livrar de quaisquer bolhas de ar e excesso de água. Mais uma vez, não tinha vidro, mas ainda funciona da mesma forma. Em seguida, deixe o vidro secar durante a noite e assim deve ser.

Etapa 2: Configurando a Faixa de LED

Configurando a Faixa de LED
Configurando a Faixa de LED
Configurando a Faixa de LED
Configurando a Faixa de LED

Para os LEDs, usei apenas a fita dupla-face incluída para colar na moldura e fiz um orifício para o fio sair. Em cada canto, soldei condutores para conectar a outra tira para manter a forma de caixa sem bordas arredondadas. Certifique-se de cortar as tiras apenas em pontos onde há contatos que permitiriam que isso acontecesse e não mude a direção em que os LEDs se conectam, conhecida como inversão da polaridade. A tira que recebi tinha setas para garantir que isso não acontecesse, então certifique-se de verificar se todas estão apontando na mesma direção.

Fiz um pequeno orifício para passar o cabo para fora da caixa, os LEDs que eu tinha eram LEDs endereçáveis de 3 pinos, então eu tinha conectores de energia, aterramento e dados. Usei o pino digital 3 para o conector de dados, certifique-se de testar suas tiras de LED para se certificar de que funcionam antes de colá-las na moldura e certifique-se de usar apenas a voltagem recomendada para o meu que é 5 - 6 V.

Etapa 3: montagem do sensor infravermelho e do LCD (opcional)

Montagem do sensor infravermelho e do LCD (opcional)
Montagem do sensor infravermelho e do LCD (opcional)
Montagem do sensor infravermelho e do LCD (opcional)
Montagem do sensor infravermelho e do LCD (opcional)
Montagem do sensor infravermelho e do LCD (opcional)
Montagem do sensor infravermelho e do LCD (opcional)

Optei por usar um sensor IR e remoto para alterar os efeitos de iluminação e usar um LCD para mostrar ao usuário as opções que ele tem para os efeitos.

Para montar o LCD e o sensor de infravermelho, eu usaria uma pistola de cola quente e os colaria no topo da moldura e conectaria tudo na parte de trás, mas não queria que fossem consertados porque poderia ter que retirá-los após o projeto é feito.

Para conectar o LCD e o receptor IR, usei conectores macho para fêmea que se conectam ao Arduino para dados, aterramento e alimentação. Para conectar tudo, usei o pino 12 com um resistor de 2 kΩ no pino de dados para o sensor IR, pino analógico A4 para o SDA do LCD e pino analógico 5 para o SCL do LCD.

Etapa 4: Código

Para este projeto, uso algumas bibliotecas que você teria que baixar para usar. Vou colocá-los aqui, lembre-se que estou no windows então isso pode surtir efeito se você estiver no Mac ou no Linux.

Você terá que alterar o número de pixels dependendo do número de LEDs que possui. Também criei uma interface Serial Monitor para que você possa interagir dessa forma com ele, se não estiver usando um sensor de infravermelho.

// Bibliotecas

#include Adafruit_NeoPixel.h> #include #include #include // Pins e valores constantes // Pins e valores constantesconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); resultados de decode_results; key_value longo sem sinal = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVO); // Variáveis int IRNumb; int IRNumb2; arco-íris int = 0; uint32_t rainbowColor = pixels. Color (0, 0, 0); entrada char = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Inicia os elementos que não precisam ser repetidos. lcd.begin (16, 2); // Definindo 16 colunas e 2 linhas do display LCD lcd.backlight (); // Para ligar a luz de fundo Serial.begin (9600); pixels.begin (); irrecv.enableIRIn (); Serial.println ("Digite 0 para desligar as luzes"); // Instruções de início Serial.println ("Digite 1 para tornar os LEDs brancos"); Serial.println ("Digite 2 para que os LEDs percorram cores diferentes"); Serial.println ("Digite 3 para personalizar as cores do LED manualmente"); } loop vazio () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Verifica se um caractere está disponível? input = (char) Serial.read (); } // Escolhe as diferentes opções if (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // White setAll (rainbowColor); // Atualiza os LEDs} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (rainbowColor); // Atualiza os LEDs} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;

Serial.println ("Insira qualquer coisa que não seja 2 para sair deste efeito e, a seguir, qualquer uma das opções anteriores para um novo efeito.");

lcd.clear (); // Limpe a tela lcd.setCursor (0, 0); lcd.print ("Sair usando qualquer-"); lcd.setCursor (0, 1); lcd.print ("entorpece isso! = 2"); para (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Verifica se o efeito precisa ser encerrado rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pausa; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); atraso (100); } para (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Verifica se o efeito precisa ser encerrado rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pausa; } g ++; rainbowColor = colourChange (i, g, 0); setAll (rainbowColor); showStrip (); atraso (100); } para (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Verifica se o efeito precisa ser encerrado rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pausa; } r + = 2; rainbowColor = colourChange (r, g, 0); setAll (rainbowColor); showStrip (); atraso (100); } para (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Verifica se o efeito precisa ser encerrado rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pausa; } r + = 2; g + = 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); atraso (100); } mainOptions (); } else if (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;

Serial.println ("Digite n para sair");

Serial.println ("Use w e s para aumentar ou diminuir a cor vermelha"); Serial.println ("Use r e f para aumentar ou diminuir a cor verde"); Serial.println ("Use y e h para aumentar ou diminuir a cor azul"); lcd.clear (); // Limpe a tela lcd.setCursor (0, 0); lcd.print ("saída: 0, 4/7: +/- vermelho"); lcd.setCursor (0, 1); lcd.print ("5/8: verde, 6/9: azul");

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

if (Serial.available ()> 0) {// um caractere está disponível? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();

if (IRNumb2 == 0) {

pausa; } 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); }} // Insira um valor de 0 a 255 para obter um valor de cor. uint32_t mudança de cor (int r, int g, int b) {retornar pixels. Cor (r, g, b); } void mainOptions () {// Mostra as opções do efeito principal lcd.clear (); // Limpa a tela lcd.setCursor (0, 0); lcd.print ("0 para luzes apagadas"); lcd.setCursor (0, 1); lcd.print ("1: luz branca"); atraso (1000); lcd.clear (); // Limpe a tela lcd.setCursor (0, 0); lcd.print ("2: Efeito de cor"); lcd.setCursor (0, 1); lcd.print ("3: Manual"); atraso (1000); } void IRScan () {if (irrecv.decode (& results)) {

if (results.value == 0XFFFFFFFF)

results.value = key_value; 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"); }} key_value = results.value; irrecv.resume (); }} void IRScan2 () {if (irrecv.decode (& resultados)) {

if (results.value == 0XFFFFFFFF)

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

Etapa 5: Montagem

Montagem
Montagem

Para montar o Arduino na estrutura, eu apenas colaria o Arduino e a placa de ensaio que usei na parte de trás da estrutura e tentaria cobrir / ocultar os cabos para que ficasse bem.