Sisukord:
- Tarvikud
- Samm: peegli ja peegelkile paigaldamine
- Samm: LED -riba seadistamine
- Samm: IR -anduri ja LCD -ekraani paigaldamine (valikuline)
- 4. samm: kood
- Samm: paigaldamine
Video: Lõpmatuse peegel koos LCD- ja IR -anduriga: 5 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
See projekt näitab teile, kuidas saate teha lõpmatuse peegli. Põhikontseptsioon on see, et peeglil olevad valgusdioodid loovad valguse, mis põrkab tagapeeglist esipeeglisse, kus osa valgust väljub, nii et näeme seestpoolt ja osa peegeldub tagasi peeglisse ja tekitab lõpmatu efekti. See põhineb Hack Sioux Fallsi juhendatavatel ultraheli anduritega lõpmatuspeeglil ja JunezRiyazi I2C LCD -ekraani ühendamisel Arduino Unoga.
Tarvikud
1. Varjukast (50 dollarit)
2. 1-suunaline peegelfilm (17 dollarit)
3. RGB LED -valgusriba (30 dollarit)
4. Arduino (35 dollarit)
5. Peegel (10 dollarit)
Valikuline:
1. IR -andur ja kaugjuhtimispult (20 dollarit)
2. LCD (20 dollarit)
3. 7 Naiste ja meeste pistikud
4. 3 Meeste ja meeste pistikud
Tööriistad
1. Jootekolb
2. Traadi lõikur ja eemaldaja
3. Midagi, millega peeglit lõigata
*Pange tähele, et kõik CAD -i hinnad ja suurused sõltuvad kasutatavast karbist.
Samm: peegli ja peegelkile paigaldamine
Esimene asi, mida teha, on paigaldada peegel, mis jääb varjukasti taha. Soovite hankida sobiva suurusega või suurema ja hankida see maha. Kuid selleks peate kasutama peeglit, mitte kilet, sest me tahame, et kogu valgus peegelduks tagasi, samuti võib peegelkile omandada materjali mustri, millel see on, kui see pole klaas.
Peegli paigaldamisel kinnitage see kindlasti varjukasti, soovitaksin kasutada väikseid puutükke ja naelu, et peegel ei liiguks. Mul ei olnud selle projekti lõpuleviimiseks peeglit, nii et kasutasin filmi (näete piltidelt). Kontseptsioon toimib, kuid mitte eriti hästi ja annab nurga ja kaootilise ilme, mis minu arvates ei tundu hea.
Iga peegelkile on pisut erinev, kuid see, mille kohta ma ütlesin, et puhastan klaasi, millele me kile paneme, et kasutada teipi, et eemaldada ühel küljel olev kaitsekile ja kasutada seebivett pihustiga pudel pani kile klaasile. Seejärel kasutage õhumullidest ja liigsest veest vabanemiseks krediitkaarti või kaabitsat. Mul ei olnud veel kord klaasi, kuid see töötab endiselt samamoodi. Seejärel jätke klaas üleöö kuivama ja see tuleks teha.
Samm: LED -riba seadistamine
Valgusdioodide jaoks kasutasin raami külge kleepimiseks lihtsalt kaasasolevat kahepoolset kleeplinti ja tegin traadi jaoks välja augu. Igas nurgas jootsin juhtmed teise ribaga ühendamiseks, et hoida karbi kuju ilma ümarate servadeta. Lõigake ribasid kindlasti kohtadesse, kus on kontakte, mis seda võimaldaksid, ja ärge vahetage suunda, millega valgusdioodid omavahel ühenduvad, mida nimetatakse polaarsuse ümberpööramiseks. Ribal, mille sain, olid nooled, et seda ei juhtuks, seega kontrollige kindlasti, kas need kõik on samas suunas.
Tegin väikese augu, et juhtme kaabli välisküljele viia, minu LED -id olid 3 -kontaktilised adresseeritavad LED -id, nii et mul olid toite-, maandus- ja andmesideühendused. Andmeühenduse jaoks kasutasin digitaalset tihvti 3, kontrollige kindlasti oma LED -ribasid ja veenduge, et need enne raami külge kinnitamist toimivad, ning kasutage kindlasti minu jaoks soovitatud pinget, mis on 5–6 V.
Samm: IR -anduri ja LCD -ekraani paigaldamine (valikuline)
Valisin valgusefektide muutmiseks IR -anduri ja kaugjuhtimispuldi ning kasutasin LCD -d, et näidata kasutajale nende efektide valikuid.
LCD- ja infrapuna -anduri paigaldamiseks kasutaksin kuuma liimipüstolit ja kinnitaksin need raami ülaossa ning ühendaksin kõik tahapoole, kuid ei tahtnud, et need fikseeritaks, kuna pean need pärast projekti maha võtma tehakse.
LCD ja IR vastuvõtja ühendamiseks kasutasin meessoost naissoost pistikuid, mis ühendati Arduinoga nii andmete kui ka maanduse ja toite jaoks. Kõigi juhtmete ühendamiseks kasutasin tihvti 12 koos 2 kΩ takistiga IR -anduri andmeklemmil, analoog -tihvti A4 LCD -ekraani SDA jaoks ja analoogpistikut 5 LCD -ekraani SCL -i jaoks.
4. samm: kood
Selle projekti jaoks kasutan vähe raamatukogusid, mille kasutamiseks peate alla laadima. Panen need siia, pidage meeles, et olen Windowsi peal, nii et see võib Macis või Linuxis mõjuda.
Peate muutma pikslite arvu sõltuvalt teie LED -ide arvust. Samuti ehitasin sisse seeriamonitori liidese, nii et saate sellega liidestada, kui te ei kasuta IR -andurit.
// Raamatukogud
#include Adafruit_NeoPixel.h> #include #include #include // Tihvtid ja konstantsed väärtused // Pins ja Constant valuesconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); decode_results tulemused; allkirjastamata pikk võtmeväärtus = 0; const int NUMPIXELS = 27;
Adafruit_NeoPixel pikslid = Adafruit_NeoPixel (NUMPIXELS, 3);
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Muutujad int IRNumb; int IRNumb2; int vikerkaar = 0; uint32_t rainbowColor = pikslit. Värv (0, 0, 0); char sisend = 0; char sisend2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Vormistab elemendid, mida pole vaja korrata. lcd.begin (16, 2); // 16 veeru ja 2 LCD -ekraani rea määramine lcd.backlight (); // Taustavalguse sisselülitamiseks Serial.begin (9600); pixels.begin (); irrecv.enableIRIn (); Serial.println ("Sisestage 0, et tuled välja lülitada"); // Algavad juhised Serial.println ("Sisestage 1, et muuta LED -id valgeks"); Serial.println ("Sisestage 2, et LED -id liiguksid erinevates värvides"); Serial.println ("LED -värvide käsitsi kohandamiseks sisestage 3"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Kontrollib, kas märk on saadaval? input = (char) Serial.read (); } // Valib erinevad valikud if (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Valge komplektKõik (vikerkaarevärv); // Värskendab LED -e} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Väljas setAll (vikerkaarevärv); // Värskendab LED -e} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println ("Selle efekti väljumiseks sisestage kõik, mis pole 2, seejärel mõni uue efekti eelnev valik.");
lcd.clear (); // Puhasta ekraan lcd.setCursor (0, 0); lcd.print ("Välju kasutades mis tahes-"); lcd.setCursor (0, 1); lcd.print ("tuim see! = 2"); jaoks (int i = 0; i = 48 && sisend <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollib, kas efektist tuleb väljuda rainbowColor = colourChange (0, 0, 0); setAll (vikerkaarevärv); breakCondition = 1; murda; } vikerkaarVärv = värvMuuda (i, 0, 0); setAll (vikerkaarevärv); showStrip (); viivitus (100); } jaoks (int i = 0; i = 48 && sisend <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollib, kas efektist tuleb väljuda rainbowColor = colourChange (0, 0, 0); setAll (vikerkaarevärv); breakCondition = 1; murda; } g ++; rainbowColor = colourChange (i, g, 0); setAll (vikerkaarevärv); showStrip (); viivitus (100); } jaoks (int g = 0; g = 48 && sisend <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollib, kas efektist tuleb väljuda rainbowColor = colourChange (0, 0, 0); setAll (vikerkaarevärv); breakCondition = 1; murda; } r+= 2; vikerkaarVärv = värvimuutus (r, g, 0); setAll (vikerkaarevärv); showStrip (); viivitus (100); } jaoks (int b = 0; b = 48 && sisend <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollib, kas efektist tuleb väljuda rainbowColor = colourChange (0, 0, 0); setAll (vikerkaarevärv); breakCondition = 1; murda; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (vikerkaarevärv); showStrip (); viivitus (100); } mainOptions (); } muidu kui (sisend == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;
Serial.println ("Väljumiseks sisestage n");
Serial.println ("Kasutage punaste värvide suurendamiseks või vähendamiseks w ja s"); Serial.println ("Rohelise värvi suurendamiseks või vähendamiseks kasutage r ja f"); Serial.println ("Kasutage y ja h sinise värvi suurendamiseks või vähendamiseks"); lcd.clear (); // ekraani puhastamine lcd.setCursor (0, 0); lcd.print ("väljumine: 0, 4/7: +/- punane"); lcd.setCursor (0, 1); lcd.print ("5/8: roheline, 6/9: sinine");
while (sisend2! = 'n' || IRNumb2! = 0) {
if (Serial.available ()> 0) {// on märk saadaval? input2 = (char) Serial.read (); } //Seriaalne.println(IRNumb2); IRNumb2 = 10; IRScan2 ();
kui (IRNumb2 == 0) {
murda; } kui (sisend2 == 'w' || IRNumb2 == 4) {r+= 2; rainbowColor = colourChange (r, g, b); setAll (vikerkaarevärv); showStrip (); } muidu kui (sisend2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (vikerkaarevärv); showStrip (); } muidu kui (sisend2 == 'r' || IRNumb2 == 5) {g+= 2; rainbowColor = colourChange (r, g, b); setAll (vikerkaarevärv); showStrip (); } muidu kui (sisend2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (vikerkaarevärv); showStrip (); }
muidu kui (sisend2 == 'y' || IRNumb2 == 6) {
b+= 2; rainbowColor = colourChange (r, g, b); setAll (vikerkaarevärv); showStrip (); }
muidu kui (sisend2 == 'h' || IRNumb2 == 9) {
b- = 2; rainbowColor = colourChange (r, g, b); setAll (vikerkaarevärv); showStrip (); }} mainOptions (); } setAll (vikerkaarevärv); showStrip (); } void showStrip () {pixels.show (); } void setAll (uint32_t värv) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, värv); }} // Värviväärtuse saamiseks sisestage väärtus 0 kuni 255. uint32_t colourChange (int r, int g, int b) {return pixels. Color (r, g, b); } void mainOptions () {// Näitab peamiste efektide valikuid lcd.clear (); // Ekraani puhastamine lcd.setCursor (0, 0); lcd.print ("0 Lights off"); lcd.setCursor (0, 1); lcd.print ("1: valge valgus"); viivitus (1000); lcd.clear (); // ekraani puhastamine lcd.setCursor (0, 0); lcd.print ("2: värviefekt"); lcd.setCursor (0, 1); lcd.print ("3: Käsitsi"); viivitus (1000); } tühine IRScan () {if (irrecv.decode (& tulemused)) {
if (results.value == 0XFFFFFFFF)
results.value = võtmeväärtus; 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"); }} võtmeväärtus = tulemused.väärtus; irrecv.resume (); }} tühine IRScan2 () {if (irrecv.decode (ja tulemused)) {
if (results.value == 0XFFFFFFFF)
results.value = võtmeväärtus; 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"); }} võtmeväärtus = tulemused.väärtus; irrecv.resume (); }}
Samm: paigaldamine
Arduino raami külge kinnitamiseks liimiksin selle ja leivalaua raami tagaküljele ning prooviksin kaablid katta/peita, et see hea välja näeks.
Soovitan:
Lihtne lõpmatuse peegel Arduino Gemma ja Neo pikslitega: 8 sammu (piltidega)
Lihtne lõpmatuse peegel koos Arduino Gemma ja NeoPikslitega: Vaata! Vaata sügavale lummavasse ja petlikult lihtsasse lõpmatuspeeglisse! Üks LED -riba särab peegelvõileivale sissepoole, et luua lõputu peegelduse efekt. See projekt rakendab minu sissejuhatava Arduini oskusi ja tehnikaid
Tehke kahepoolne töölaua lõpmatuse peegel: 14 sammu (piltidega)
Tehke kahepoolne töölaua lõpmatuspeegel: Enamik lõpmatuse peeglitest, mida ma olen näinud, on ühepoolsed, kuid ma tahtsin ehitada ühe pisut teistsuguse. See saab olema kahepoolne ja kujundatud nii, et seda saab kuvada töölaual või riiulil. See on lihtne ja väga lahe projekt
Helireaktiivne lõpmatuse peegel: 5 sammu
Helireaktiivne lõpmatuse peegel: selles juhendis näitan teile, kuidas saate selle lõpmatuse peegli teha. Nii et alustame
Interaktiivne lõpmatuse peegel: 9 sammu (piltidega)
Interaktiivne lõpmatuse peegel: selle klassi ülesanne oli lihtne, kuid keeruline: tehke Arduinoga midagi interaktiivset. See pidi olema hästi kujundatud, piisavalt tehniliselt väljakutsuv ja originaalne, nii palju kui algupärased ideed käivad sellistel saitidel nagu Instructables. Fro
Käänduv lõpmatuse peegel: 4 sammu (piltidega)
Kõverdav lõpmatuspeegel: Lõpmatuse peegel on osa minu eelseisvast ehitamisest. Saidil on juba palju suurepäraseid kirjeldusi selle kohta, kuidas neid teha, ja ma kontrollisin paljusid neist - eriti Ben Finio suurepärast ja julgustavat Arduino -toega versiooni. Howev