Cuprins:
- Provizii
- Pasul 1: Instalarea oglinzii și a filmului oglindă
- Pasul 2: Configurarea benzii LED
- Pasul 3: Montarea senzorului IR și a ecranului LCD (opțional)
- Pasul 4: Cod
- Pasul 5: Montare
Video: Oglindă infinită cu senzor LCD și IR: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:41
Acest proiect vă va arăta cum puteți crea o oglindă infinită. Conceptul de bază este că LED-urile care se află pe oglindă creează lumină care sare de la oglinda din spate la oglinda din față, unde poate scăpa o lumină, astfel încât să putem vedea în interior, iar unele sunt reflectate înapoi la oglinda din spate și produc efectul infinit. Acest lucru se bazează pe oglinda infinită cu senzori ultra sonici instruiți de Hack Sioux Falls și How to Connect I2C Lcd Display to Arduino Uno by JunezRiyaz.
Provizii
1. O cutie de umbră (50 USD)
2. Film cu oglindă într-un singur sens (17 USD)
3. O bandă de lumină LED RGB (30 USD)
4. Arduino (35 USD)
5. O oglindă (10 USD)
Opțional:
1. Senzor IR și telecomandă (20 USD)
2. Un LCD (20 USD)
3. 7 conectori de la mamă la tată
4. 3 conectori de la tată la tată
Instrumente
1. Fier de lipit
2. Tăietor de sârmă și decapant
3. Ceva cu care să tai oglinda
* Rețineți că toate prețurile în CAD și dimensiunile vor depinde de caseta pe care o utilizați.
Pasul 1: Instalarea oglinzii și a filmului oglindă
Primul lucru de făcut este să instalați oglinda care va fi în partea din spate a cutiei de umbre. Doriți fie să obțineți una care are dimensiunea potrivită, fie să obțineți una mai mare și apoi să o reduceți. Dar, pentru aceasta, trebuie să folosiți o oglindă, nu filmul, deoarece dorim ca toată lumina să fie reflectată înapoi, filmul oglindă poate prelua și modelul materialului pe care este, dacă nu este din sticlă.
Când instalați oglinda, asigurați-vă că o fixați în cutia de umbre, aș recomanda utilizarea unor bucăți mici de lemn și cuie pentru a vă asigura că oglinda nu se mișcă. Nu am avut o oglindă în timpul în care a trebuit să finalizez acest proiect, așa că am folosit filmul (puteți vedea în imagini). Conceptul funcționează, dar nu foarte bine și oferă un aspect unghiular și haotic care, după părerea mea, nu arată bine.
Fiecare folie oglindă va fi puțin diferită, dar cea pe care am primit-o mi-a spus să curăț sticla pe care o punem, apoi să folosim bandă pentru a scoate folia de protecție pe o parte și folosind apă cu săpun într-un spray sticla pune filmul pe pahar. Apoi folosiți un card de credit sau racletă pentru a scăpa de bulele de aer și de excesul de apă. Nu am avut din nou sticlă, dar funcționează la fel. Apoi lăsați paharul să se usuce peste noapte și ar trebui să fie gata.
Pasul 2: Configurarea benzii LED
Pentru LED-uri tocmai am folosit banda dublă inclusă pentru a o lipi de cadru și am făcut o gaură pentru ca firul să iasă. La fiecare colț, am lipit cablurile pentru a mă conecta la o altă bandă pentru a păstra forma cutiei fără margini rotunjite. Asigurați-vă că tăiați benzile numai în punctele în care există contacte care ar permite să se întâmple astfel și să nu schimbați direcția în care LED-urile se conectează între ele, cunoscută sub numele de inversarea polarității. Banda pe care am primit-o avea săgeți pentru a mă asigura că acest lucru nu se întâmplă, așa că asigurați-vă că verificați dacă toate sunt îndreptate în aceeași direcție.
Am făcut o mică gaură pentru a pune cablul prin exteriorul cutiei, LED-urile pe care le aveam erau LED-uri cu 3 pini adresabile, așa că aveam conectori de alimentare, masă și date. Am folosit pinul digital 3 pentru conectorul de date, asigurați-vă că testați benzile LED pentru a vă asigura că funcționează înainte de a le lipi de cadru și asigurați-vă că folosesc doar tensiunea recomandată pentru cea care este 5 - 6 V.
Pasul 3: Montarea senzorului IR și a ecranului LCD (opțional)
Am ales să folosesc un senzor IR și telecomandă pentru a schimba efectele de iluminare și să folosesc și un LCD pentru a arăta utilizatorului opțiunile pe care le au pentru efecte.
Pentru a monta senzorul LCD și IR, aș folosi un pistol de lipit fierbinte și le-aș lipi de partea superioară a cadrului și le-am conectat totul în spate, dar nu am vrut să fie fixate pentru că ar trebui să le scot după proiect este gata.
Pentru a conecta receptorul LCD și IR, am folosit conectori de la masculin la feminin, care se conectează la Arduino pentru date, precum și pentru împământare și alimentare. Pentru a conecta totul, am folosit pinul 12 cu un rezistor de 2 kΩ pe pinul de date pentru senzorul IR, Pinul analogic A4 pentru SDA-ul LCD și Pinul analogic 5 pentru SCL-ul LCD.
Pasul 4: Cod
Pentru acest proiect, folosesc câteva biblioteci pe care ar trebui să le descărcați pentru a le utiliza. Am de gând să le pun aici, ținând cont de faptul că sunt pe Windows, astfel încât să poată avea efect dacă sunteți pe Mac sau Linux.
Va trebui să schimbați numărul de pixeli în funcție de numărul de LED-uri pe care le aveți. De asemenea, am construit o interfață Serial Monitor, astfel încât să puteți interfața astfel cu ea dacă nu utilizați un senzor IR.
// Biblioteci
#include Adafruit_NeoPixel.h> #include #include #include // Pinii și valorile constante // Pinii și valorile constantei const REC REC_PIN = 12; IRrecv irrecv (RECV_PIN); rezultate decode_results; key_value long semnat = 0; const int NUMPIXELS = 27;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, 3);
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIV); // Variabile în IRNumb; int IRNumb2; int curcubeu = 0; uint32_t rainbowColor = pixeli. Color (0, 0, 0); intrare char = 0; intrare char2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Inițializează elemente care nu trebuie repetate. lcd.begin (16, 2); // Definirea a 16 coloane și 2 rânduri de afișaj LCD lcd.backlight (); // Pentru a activa iluminarea din spate Serial.begin (9600); pixeli.begin (); irrecv.enableIRIn (); Serial.println („Introduceți un 0 pentru a stinge luminile”); // Instrucțiuni de început Serial.println („Introduceți un 1 pentru a transforma LED-urile în alb”); Serial.println („Introduceți un 2 pentru ca LED-urile să parcurgă diferite culori”); Serial.println ("Introduceți un 3 pentru a personaliza manual culorile LED"); } bucla void () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Verifică dacă un caracter este disponibil? input = (char) Serial.read (); } // Alege diferitele opțiuni dacă (input == '1' || IRNumb == 1) {rainbowColor = colorChange (255, 255, 255); // White setAll (rainbowColor); // Actualizează LED-urile} else if (input == '0' || IRNumb == 0) {rainbowColor = colorChange (0, 0, 0); // Off setAll (rainbowColor); // Actualizează LED-urile} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println ("Introduceți orice nu este un 2 pentru a ieși din acest efect, apoi oricare dintre opțiunile anterioare pentru un efect nou.");
lcd.clear (); // Curățați ecranul lcd.setCursor (0, 0); lcd.print („Ieșiți folosind orice-”); lcd.setCursor (0, 1); lcd.print ("amorțit că! = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Verifică dacă trebuie ieșit efectul rainbowColor = colorChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pauză; } rainbowColor = colorChange (i, 0, 0); setAll (rainbowColor); showStrip (); întârziere (100); } pentru (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Verifică dacă trebuie ieșit efectul rainbowColor = colorChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pauză; } g ++; rainbowColor = colorChange (i, g, 0); setAll (rainbowColor); showStrip (); întârziere (100); } pentru (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Verifică dacă trebuie ieșit efectul rainbowColor = colorChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pauză; } r + = 2; rainbowColor = colorChange (r, g, 0); setAll (rainbowColor); showStrip (); întârziere (100); } pentru (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Verifică dacă trebuie ieșit efectul rainbowColor = colorChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pauză; } r + = 2; g + = 5; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); întârziere (100); } mainOptions (); } else if (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;
Serial.println ("Introduceți n pentru a ieși");
Serial.println („Folosiți w și s pentru a crește sau a reduce culoarea roșie”); Serial.println („Folosiți r și f pentru a crește sau a micșora culoarea verde”); Serial.println („Folosiți y și h pentru a crește sau a micșora culoarea albastră”); lcd.clear (); // Curățați ecranul lcd.setCursor (0, 0); lcd.print („exit: 0, 4/7: +/- red”); lcd.setCursor (0, 1); lcd.print („5/8: verde, 6/9: albastru”);
while (input2! = 'n' || IRNumb2! = 0) {
if (Serial.available ()> 0) {// este un caracter disponibil? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();
if (IRNumb2 == 0) {
pauză; } if (input2 == '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 (input2 == 'r' || IRNumb2 == 5) {g + = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); }
else if (input2 == 'y' || IRNumb2 == 6) {
b + = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); }
else if (input2 == '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); }} // Introduceți o valoare de la 0 la 255 pentru a obține o valoare a culorii. uint32_t colorChange (int r, int g, int b) {returnează pixeli. Culoare (r, g, b); } void mainOptions () {// Afișează opțiunile de efect principale lcd.clear (); // Curățați ecranul lcd.setCursor (0, 0); lcd.print („0 pentru lumini stinse”); lcd.setCursor (0, 1); lcd.print („1: Lumina albă”); întârziere (1000); lcd.clear (); // Curățați ecranul lcd.setCursor (0, 0); lcd.print ("2: Efect de culoare"); lcd.setCursor (0, 1); lcd.print („3: Manual”); întârziere (1000); } void IRScan () {if (irrecv.decode (& results)) {
if (results.value == 0XFFFFFFFF)
results.value = valoare_cheie; 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 (& results)) {
if (results.value == 0XFFFFFFFF)
results.value = valoare_cheie; 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"); }} key_value = results.value; irrecv.resume (); }}
Pasul 5: Montare
Pentru a monta Arduino pe cadru, l-aș lipi și panoul pe care l-am folosit în spatele cadrului și aș încerca să acoperiți / ascundeți cablurile pentru a arăta bine.
Recomandat:
Faceți un ceas cu oglindă infinită: 15 pași (cu imagini)
Faceți un ceas cu oglindă infinită: într-un proiect anterior am construit o oglindă infinită, în care scopul meu final era să-l transforme într-un ceas. (Fă o oglindă infinită colorată) Nu am urmărit asta după ce am construit-o, deoarece, deși părea grozav, erau câteva lucruri cu
Realizați o oglindă infinită pe 2 fețe, desktop: 14 pași (cu imagini)
Faceți o oglindă infinită de birou pe două fețe: majoritatea oglinzilor infinite pe care le-am văzut sunt unilaterale, dar am vrut să construiesc una puțin diferită. Acesta va fi pe 2 fețe și proiectat astfel încât să poată fi afișat pe un desktop sau un raft. Este un proiect ușor de realizat
Grilă în mișcare cu oglindă infinită: 7 pași
Moving Grid With Infinity Mirror: acele videoclipuri realizează videoclipuri și video în mișcare. Am vrut să arătăm spațiul oscilant prin grile mobile și Infinity Mirror pentru a arăta sensul spațiului mai eficient. Lucrarea noastră constă din două plăci acrilice, fața și plăcile posterioare, care
Ceas cu oglindă infinită cu potențiometre: 3 pași
Ceas cu oglindă infinită cu potențiometre: am dat peste oglindă infinită și mi s-a părut foarte cool. Acest lucru m-a inspirat să fac o oglindă infinită, dar aveam nevoie de ea pentru a avea un scop. Deci, am decis să fac un ceas oglindă infinită funcțional. Aceasta este o oglindă infinită care vă permite să
Ceas ușor DIY cu oglindă infinită: 3 pași
Ceas ușor DIY cu oglindă infinită: dacă te plictisești cu ceasul tău normal, încearcă să faci acest ceas DIY cu oglindă infinit. Pentru a vă ridica nivelul