Mundarija:
- Ta'minotlar
- 1 -qadam: Ko'zgu va oyna plyonkasini o'rnatish
- 2 -qadam: LED chizig'ini o'rnatish
- 3 -qadam: IQ sensori va LCD -ni o'rnatish (ixtiyoriy)
- 4 -qadam: kod
- 5 -qadam: o'rnatish
Video: LCD va IQ sensori bilan cheksiz oyna: 5 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
Ushbu loyiha sizga cheksiz oynani qanday yasashni ko'rsatib beradi. Asosiy tushuncha shundaki, oynadagi LEDlar orqa oynadan oldingi oynaga o'tadigan nurni yaratadi, u erda yorug'lik chiqib ketadi, biz ichkarini ko'ramiz, ba'zilari esa orqa oynaga qaytariladi va cheksiz effekt beradi. Bu Hack Sioux Falls tomonidan ko'rsatiladigan Ultra Sonic sensorlar bilan Infinity Mirror va I2C Lcd displeyini Arduino Uno -ga JunezRiyaz tomonidan qanday ulash mumkin.
Ta'minotlar
1. Soyali quti (50 dollar)
2. Bir tomonlama oynali film (17 dollar)
3. RGB LED yorug'lik chizig'i ($ 30)
4. Arduino (35 dollar)
5. Oyna (10 dollar)
Majburiy emas:
1. IQ sensori va masofadan boshqarish pulti (20 dollar)
2. LCD (20 dollar)
3. Ayol -erkak konnektori 7
4. 3 Erkak -erkak ulagichlari
Asboblar
1. Lehimlash temir
2. Tel kesuvchi va striptizchi
3. Oynani kesib o'tadigan narsa
*E'tibor bering, SAPR va o'lchamdagi barcha narxlar siz foydalanadigan qutiga bog'liq bo'ladi.
1 -qadam: Ko'zgu va oyna plyonkasini o'rnatish
Birinchi narsa - oynaning orqa qismidagi oynani o'rnatish. Siz kerakli o'lchamdagi bo'lakni olmoqchisiz, yoki kattaroqini oling va keyin kesib oling. Lekin buning uchun siz plyonkani emas, oynani ishlatishingiz kerak, chunki biz hamma yorug'likni qaytarilishini xohlaymiz, oynali plyonka, agar u shisha bo'lmasa, u ishlatilgan materialning namunasini ham olishi mumkin.
Ko'zguni o'rnatayotganda, uni soya qutisiga mahkamlang, men oynaning qimirlamasligiga ishonch hosil qilish uchun yog'och va mixlarning kichik bo'laklarini ishlatishni maslahat beraman. Men bu loyihani bajarishim kerak bo'lgan paytda oynam yo'q edi, shuning uchun men filmni ishlatardim (Rasmlarda ko'rishingiz mumkin). Kontseptsiya juda yaxshi ishlamaydi va menimcha, yaxshi ko'rinmaydigan burchakli va tartibsiz ko'rinish beradi.
Har bir oynali plyonka biroz boshqacha bo'ladi, lekin men aytganimdek, biz oynani tozalaymiz, keyin plyonkani yopamiz, lentani ishlatib, himoya plyonkasini olib tashlaymiz va sovunli suv bilan purkagichda ishlatamiz. shisha plyonkani stakanga qo'ying. Keyin havo pufakchalari va ortiqcha suvdan qutulish uchun kredit karta yoki silliqdan foydalaning. Menda yana shisha yo'q edi, lekin u hali ham xuddi shunday ishlaydi. Keyin stakanni bir kechada quritib qo'ying va buni qilish kerak.
2 -qadam: LED chizig'ini o'rnatish
LEDlar uchun men ramkaga yopishtirish uchun kiritilgan ikki tomonlama lentani ishlatdim va sim chiqib ketishi uchun teshik qildim. Har bir burchakda, men qutilarini yumaloq qirralarsiz ushlab turish uchun boshqa chiziqqa ulanish uchun simlarni lehimladim. Chiziqlarni faqat shunday bo'ladigan kontaktlar bo'linadigan joylardan kesib o'tganingizga ishonch hosil qiling va LEDlarning bir -biriga ulanish yo'nalishini polaritni qaytarish deb o'zgartirmang. Men olgan chiziqda bunday bo'lmasligiga ishonch hosil qilish uchun o'qlar bor edi, shuning uchun ularning hammasi bir tomonga ishora qilganini tekshirib ko'ring.
Men kabelni qutining tashqarisiga o'tkazish uchun kichik bir teshik qildim, menda bo'lgan LEDlar 3 pinli manzilli LEDlar edi, shuning uchun menda quvvat, er va ma'lumotlar ulagichlari bor edi. Men ma'lumot ulagichi uchun Digital Pin 3 -dan foydalanardim, LED tasmalarini ramkaga yopishtirishdan oldin ularning ishlashini tekshirib ko'ring va faqat 5 - 6 V bo'lgan kuchlanish uchun tavsiya etilgan kuchlanishni ishlatganingizga ishonch hosil qiling.
3 -qadam: IQ sensori va LCD -ni o'rnatish (ixtiyoriy)
Men yorug'lik effektlarini o'zgartirish uchun IR sensori va masofadan boshqarish pultidan foydalanishni tanladim va foydalanuvchiga effektlar uchun imkoniyatlarini ko'rsatish uchun LCD displeyni ishlatdim.
LCD va IQ sensorini o'rnatish uchun men issiq yopishtiruvchi tabancadan foydalanardim va ularni ramkaning yuqori qismiga yopishtirardim va hamma narsani orqa tomonga o'tkazdim, lekin men ularni tuzatishni xohlamadim, chunki ularni loyihadan keyin olib tashlashim kerak edi. amalga oshiriladi.
LCD va IR qabul qilgichni ulash uchun men Erkak va ayol konnektorlarini ishlatardim, ular Arduino -ga ma'lumotlarni, shuningdek erni va quvvatni ulash uchun ulangan edi. Hamma narsani ulash uchun men IK sensori uchun 2 pinli rezistorli 12 -pinli pinni, LCD -ning SDA uchun analog pin A4 va LCD -ning SCL -dagi analog pin -5 -ni ishlatardim.
4 -qadam: kod
Ushbu loyiha uchun men foydalanish uchun yuklab olishingiz kerak bo'lgan bir nechta kutubxonalardan foydalanaman. Men ularni bu erga qo'yaman, shuni esda tutingki, men derazada turibman, agar siz Mac yoki Linuxda bo'lsangiz, bu ta'sir qilishi mumkin.
LEDlar soniga qarab siz piksellar sonini o'zgartirishingiz kerak. Men shuningdek, ketma -ket monitor interfeysini o'rnatdim, shuning uchun agar siz IQ sensoridan foydalanmasangiz, u bilan shunday aloqa o'rnatishingiz mumkin.
// kutubxonalar
#include Adafruit_NeoPixel.h> #include #include #include // Pins and Constant values // Pins and Constant valuesconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); decode_results natijalari; imzosiz uzun key_value = 0; const int NUMPIXELS = 27;
Adafruit_NeoPixel piksellari = Adafruit_NeoPixel (NUMPIXELS, 3);
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // IRNumb o'zgaruvchilari; int IRNumb2; int kamalak = 0; uint32_t rainbowColor = piksel. Color (0, 0, 0); char kiritish = 0; char kiritish2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Takrorlashga hojat bo'lmagan elementlarni initsallashtiradi. lcd.begin (16, 2); // 16 ta ustun va 2 qatorli LCD displeyni aniqlash lcd.backlight (); // Orqa nuri yoqish uchun Serial.begin (9600); piksel.begin (); irrecv.enableIRIn (); Serial.println ("Chiroqlarni o'chirish uchun 0 kiriting"); // Serial.println boshlang'ich ko'rsatmalari ("LEDlarni oq rangga aylantirish uchun 1 kiriting"); Serial.println ("LEDlar turli ranglarda aylanishi uchun 2 kiriting"); Serial.println ("LED ranglarini qo'lda sozlash uchun 3 kiriting"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Belgilar mavjudligini tekshiradimi? input = (char) Serial.read (); } // Boshqa variantlarni tanlaydi, agar (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Oq setAll (kamalak rang); // LEDlarni yangilaydi} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // O'chirish setAll (kamalak rangi); // LEDlarni yangilaydi} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println ("Bu effektdan chiqish uchun 2 bo'lmagan har qanday narsani kiriting, so'ngra yangi effekt uchun oldingi variantlardan birini kiriting.");
lcd.clear (); // Ekranni tozalang lcd.setCursor (0, 0); lcd.print ("Any- yordamida chiqish"); lcd.setCursor (0, 1); lcd.print ("xiralashgan! = 2"); uchun (int i = 0; i = 48 && kiritish <= 57) || breakCondition == 1 || IRNumb! = 2) {// Effektdan chiqish kerakligini tekshiradi rainbowColor = colourChange (0, 0, 0); setAll (kamalak rangi); breakCondition = 1; tanaffus; } rainbowColor = colourChange (i, 0, 0); setAll (kamalak rangi); showStrip (); kechikish (100); } uchun (int i = 0; i = 48 && kiritish <= 57) || breakCondition == 1 || IRNumb! = 2) {// Effektdan chiqish kerakligini tekshiradi rainbowColor = colourChange (0, 0, 0); setAll (kamalak rangi); breakCondition = 1; tanaffus; } g ++; rainbowColor = colourChange (i, g, 0); setAll (kamalak rangi); showStrip (); kechikish (100); } uchun (int g = 0; g = 48 && kiritish <= 57) || breakCondition == 1 || IRNumb! = 2) {// Effektdan chiqish kerakligini tekshiradi rainbowColor = colourChange (0, 0, 0); setAll (kamalak rangi); breakCondition = 1; tanaffus; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (kamalak rangi); showStrip (); kechikish (100); } uchun (int b = 0; b = 48 && kiritish <= 57) || breakCondition == 1 || IRNumb! = 2) {// Effektdan chiqish kerakligini tekshiradi rainbowColor = colourChange (0, 0, 0); setAll (kamalak rangi); breakCondition = 1; tanaffus; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (kamalak rangi); showStrip (); kechikish (100); } mainOptions (); } if if (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;
Serial.println ("Chiqish uchun n kiriting");
Serial.println ("Qizil rangni oshirish yoki kamaytirish uchun w va s dan foydalaning"); Serial.println ("Yashil rangni oshirish yoki kamaytirish uchun r va f dan foydalaning"); Serial.println ("Moviy rangni oshirish yoki kamaytirish uchun y va h dan foydalaning"); lcd.clear (); // Ekranni tozalash lcd.setCursor (0, 0); lcd.print ("chiqish: 0, 4/7: +/- qizil"); lcd.setCursor (0, 1); lcd.print ("5/8: yashil, 6/9: ko'k");
while (input2! = 'n' || IRNumb2! = 0) {
if (Serial.available ()> 0) {// belgi mavjudmi? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();
agar (IRNumb2 == 0) {
tanaffus; } if (input2 == 'w' || IRNumb2 == 4) {r+= 2; rainbowColor = colourChange (r, g, b); setAll (kamalak rangi); showStrip (); } if if (input2 == 's || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (kamalak rangi); showStrip (); } if if (input2 == 'r' || IRNumb2 == 5) {g+= 2; rainbowColor = colourChange (r, g, b); setAll (kamalak rangi); showStrip (); } if if (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (kamalak rangi); showStrip (); }
aks holda (input2 == 'y' || IRNumb2 == 6) {
b+= 2; rainbowColor = colourChange (r, g, b); setAll (kamalak rangi); showStrip (); }
aks holda (input2 == 'h' || IRNumb2 == 9) {
b- = 2; rainbowColor = colourChange (r, g, b); setAll (kamalak rangi); showStrip (); }} mainOptions (); } setAll (kamalak rang); showStrip (); } void showStrip () {piksel.show (); } void setAll (uint32_t color) {for (int i = 0; i <NUMPIXELS; i ++) {piksel.setPixelColor (i, rang); }} // Rang qiymatini olish uchun 0 dan 255 gacha bo'lgan qiymatni kiriting. uint32_t colourChange (int r, int g, int b) {piksellarni qaytarish. Rang (r, g, b); } void mainOptions () {// Asosiy effekt variantlarini ko'rsatadi lcd.clear (); // Ekranni tozalash lcd.setCursor (0, 0); lcd.print ("0 Chiroqlar o'chishi uchun"); lcd.setCursor (0, 1); lcd.print ("1: Oq yorug'lik"); kechikish (1000); lcd.clear (); // Ekranni tozalash lcd.setCursor (0, 0); lcd.print ("2: Rang effekti"); lcd.setCursor (0, 1); lcd.print ("3: Qo'llanma"); kechikish (1000); } bo'sh IRScan () {if (irrecv.decode (& natijalar)) {
agar (natijalar qiymati == 0XFFFFFFFF)
natijalar.value = key_value; boshqa {//Serial.println(results.value, HEX); if (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb = 0; //Serial.println("0 "); } if if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb = 1; //Serial.println("1 "); } if if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb = 2; //Serial.println("2 "); } if if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb = 3; // Serial.println ("3"); } if if (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb = 4; //Serial.println("4 "); } if if (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb = 5; // Serial.println ("5"); } if if (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb = 6; // Serial.println ("6"); } if if (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb = 7; //Serial.println("7 "); } if if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb = 8; //Serial.println("8 "); } if if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb = 9; // Serial.println ("9"); }} key_value = natijalar.value; irrecv.resume (); }} bekor IRScan2 () {if (irrecv.decode (& natijalar)) {
agar (natijalar qiymati == 0XFFFFFFFF)
results.value = key_value; boshqa {// Serial.println (results.value, HEX); if (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb2 = 0; //Serial.println("0 "); } if if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } if if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb2 = 2; //Serial.println("2 "); } if if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb2 = 3; // Serial.println ("3"); } if if (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb2 = 4; //Serial.println("4 "); } if if (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb2 = 5; // Serial.println ("5"); } if if (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb2 = 6; // Serial.println ("6"); } if if (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb2 = 7; //Serial.println("7 "); } if if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8; //Serial.println("8 "); } if if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} key_value = natijalar.value; irrecv.resume (); }}
5 -qadam: o'rnatish
Arduino -ni ramkaga o'rnatish uchun men uni va ramkaning orqa qismiga yopishtirilgan taxtani yopishtirib qo'yardim va kabellarni yaxshi ko'rinishi uchun yashirishga harakat qilardim.
Tavsiya:
Cheksiz oyna soati yarating: 15 qadam (rasmlar bilan)
Cheksiz oyna soati yarating: Oldingi loyihada men cheksiz oynani qurgan edim, u erda mening asosiy maqsadim soatga aylantirish edi. (Rangli cheksizlik oynasini yarating) Men uni qurganimdan keyin buni ta'qib qilmadim, chunki u ajoyib ko'rinishga ega bo'lsa -da, unda bir nechta narsalar bor edi
Cheksiz oyna bilan harakatlanuvchi panjara: 7 qadam
Infinity Mirror bilan harakatlanuvchi panjara: bu videolar video va harakatlanuvchi video. Biz tebranayotgan bo'shliqni harakatlanuvchi panjara orqali ko'rsatishni xohladik va Infinity Mirror makon tuyg'usini yanada samarali ko'rsatish uchun. Bizning ishimiz ikkita akril plastinkadan iborat: old va orqa panellar, ular
Cheksiz oyna kubini yasang: 12 qadam (rasmlar bilan)
Cheksiz oyna kubini yarating: Men birinchi cheksiz oynani yaratishda ma'lumot qidirayotganimda, cheksiz kubiklar tasvirlari va videolariga duch keldim va, albatta, o'zimnikini yasashni xohladim. Meni ushlab turgan asosiy narsa, men buni boshqacha qilmoqchi edim
Interfaol cheksiz oyna: 9 qadam (rasmlar bilan)
Interfaol cheksiz oyna: Bu sinf uchun topshiriq oddiy, ammo murakkab edi: Arduino bilan interaktiv narsalarni yarating. U yaxshi ishlab chiqilgan bo'lishi kerak, texnik jihatdan etarlicha murakkab va original bo'lishi kerak, chunki asl g'oyalar Instructables kabi saytlarda. Fro
Cheksiz oyna soati: 5 qadam (rasmlar bilan)
Infinity Mirror Clock: Bu asosan bezatish uchun qo'lda ishlangan soat. Soatda bir nechta LED chiroqlar bor, u yoqilganda yotoqxona uchun ajoyib bezakdir. O'chirilganda, bu kichik oyna. Albatta, bu soatning o'zi