Мазмұны:
- Жабдықтар
- 1 -қадам: Айна мен айна пленкасын орнату
- 2 -қадам: жарық диодты жолақты орнату
- 3 -қадам: IR сенсоры мен СКД орнату (міндетті емес)
- 4 -қадам: код
- 5 -қадам: монтаждау
Бейне: СКД мен ИК сенсоры бар шексіздік айнасы: 5 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:22
Бұл жоба сізге шексіз айнаны қалай жасауға болатынын көрсетеді. Негізгі тұжырымдама - бұл айнадағы жарық диодтары жарық береді, ол артқы айнадан алдыңғы айнаға қарай секіреді, онда кейбір жарықтар сыртқа шығады, біз оны көре аламыз, ал кейбіреулері артқы айнаға шағылысады және шексіз әсер береді. Бұл Hack Sioux Falls нұсқайтын Ultra Sonic датчиктері бар Infinity айнасына негізделген және I2C Lcd дисплейін Arduino Uno -ға JunezRiyaz қалай қосуға болады.
Жабдықтар
1. Көлеңке қорабы ($ 50)
2. Бір жақты айналы фильм (17 доллар)
3. RGB жарықдиодты жарық жолағы ($ 30)
4. Arduino (35 доллар)
5. Айна ($ 10)
Қосымша:
1. IR сенсоры мен қашықтан басқару құралы ($ 20)
2. СКД (20 доллар)
3. 7 аналықтан еркекке дейін жалғағыштар
4. 3 Еркек пен еркек жалғағыштары
Құралдар
1. Пісіру үтігі
2. Сым кескіш және стриппер
3. Айнаны кесуге болатын нәрсе
*АЖЖ мен өлшемдегі барлық бағалар сіз қолданатын қорапқа байланысты болатынын ескеріңіз.
1 -қадам: Айна мен айна пленкасын орнату
Ең алдымен, көлеңкелі қораптың артында болатын айнаны орнату керек. Сіз не дұрыс мөлшерін алғыңыз келеді, не үлкенін алыңыз, содан кейін оны кесіңіз. Бірақ бұл үшін сізге пленканы емес, айна қолдану керек, өйткені біз барлық жарықтың кері шағылуын қалаймыз, әйнекті пленка, егер ол әйнек болмаса, сол материалдың үлгісін қабылдай алады.
Айнаны орнатқан кезде оны көлеңкелі қорапқа бекітіңіз, мен айнаның қозғалмайтынына көз жеткізу үшін ағаш пен тырнақтың кішкене бөліктерін қолдануды ұсынамын. Мен бұл жобаны аяқтауым керек болған кезде менде айна болмады, сондықтан мен фильмді қолдандым (Сіз суреттерден көре аласыз). Тұжырымдама жұмыс істейді, бірақ өте жақсы емес және менің ойымша, жақсы көрінбейтін бұрыштық және хаотикалық көрініс береді.
Әр айна пленкасы сәл өзгеше болады, бірақ мен алған пленканы әйнекті тазалауды, содан кейін біз пленканы киетін пленканы пайдаланып, бір жағындағы қорғаныс қабығын алып тастап, сабынды суды шашыратқышта қолданыңыз деді. бөтелке пленканы әйнекке қойды. Содан кейін ауа көпіршіктері мен артық судан құтылу үшін несие картасын немесе сыпырғышты пайдаланыңыз. Менде тағы да әйнек болмады, бірақ ол бұрынғыдай жұмыс істейді. Содан кейін әйнекті түні бойы кептіруге қалдырыңыз және мұны істеу керек.
2 -қадам: жарық диодты жолақты орнату
Светодиодтар үшін мен жақтауға бекітілген екі жақты таспаны қолдандым және сым шығатын тесік жасадым. Әр бұрышта мен қораптың пішінін дөңгеленген жиектерсіз сақтау үшін басқа жолаққа қосылу үшін сымдарды дәнекерледім. Жолақтарды тек контактілер бар жерде ғана қиып алуды ұмытпаңыз, светодиоды полярлықты өзгерту деп аталатын бір -біріне қосылатын бағытты өзгертпеңіз. Менде болған жолақта бұл болмайтындығына көз жеткізу үшін жебелер болды, сондықтан олардың барлығы бір бағытта бағытталғанын тексеріңіз.
Мен кабельді қораптың сыртына өткізу үшін кішкене тесік жасадым, мендегі светодиодтар 3 істікшелі адресті жарықдиодты болды, сондықтан менде қуат, жер және деректер қосқыштары болды. Мен деректер коннекторы үшін Digital Pin 3 қолдандым, светодиодты жолақтарды жақтауға бекітпес бұрын олардың жұмыс істейтініне көз жеткізіңіз және тек 5 - 6 В кернеуі үшін тек ұсынылған кернеуді қолданыңыз.
3 -қадам: IR сенсоры мен СКД орнату (міндетті емес)
Мен жарық әсерлерін өзгерту үшін инфрақызыл сенсор мен қашықтан басқару пультін қолдануды таңдадым және пайдаланушыға эффектілердің нұсқаларын көрсету үшін СКД қолдандым.
СКД мен ИК сенсорын орнату үшін мен ыстық желім пистолетін қолданып, оларды жақтаудың жоғарғы жағына жабыстырып, бәрін артқы жағына сыммен қосатын едім, бірақ мен олардың бекітілуін қаламадым, себебі мен оларды жобадан кейін алып тастауым керек еді. жасалады.
СКД мен инфрақызыл қабылдағышты қосу үшін мен Arduino -ға деректер, сондай -ақ жер мен қуат үшін қосылатын Әйел -Еркек қосқышын қолдандым. Барлығын жалғау үшін мен ИК сенсорының деректер түйреуішінде 2 кОм резисторы бар 12 -ші түйреуішті, СКД -дің SDA -ға арналған А4 аналогтық түйінін және СКД -нің Аналогтық түйреуішін 5 қолдандым.
4 -қадам: код
Бұл жоба үшін мен сізге жүктеу үшін бірнеше кітапхананы қолданамын. Мен оларды осында орналастырамын, егер сіз Mac немесе Linux -те болсаңыз, бұл әсер етуі мүмкін терезелерде екенімді есте сақтаңыз.
Светодиодтардың санына байланысты пиксель санын өзгерту керек. Мен сондай -ақ сериялық монитор интерфейсін құрдым, егер сіз IR сенсорын пайдаланбасаңыз, онымен интерфейс жасай аласыз.
// Кітапханалар
#include Adafruit_NeoPixel.h> #include #include #include // түйреуіштер мен тұрақты мәндер // түйреуіштер мен тұрақты мәндерconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); decode_results нәтижелері; белгісіз ұзақ key_value = 0; const int NUMPIXELS = 27;
Adafruit_NeoPixel пиксельдері = Adafruit_NeoPixel (NUMPIXELS, 3);
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, Позитивті); // IRNumb айнымалысы; int IRNumb2; int кемпірқосақ = 0; uint32_t rainbowColor = пиксель. Түс (0, 0, 0); char енгізу = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Қайталауды қажет етпейтін элементтерді инициализациялайды. lcd.begin (16, 2); // lcd дисплейінің 16 бағаны мен 2 жолын анықтау lcd.backlight (); // артқы жарығын қосу үшін Serial.begin (9600); piksel.begin (); irrecv.enableIRIn (); Serial.println («Шамды өшіру үшін 0 енгізіңіз»); // Бастапқы нұсқаулық Serial.println («Светодиодты ақ түске айналдыру үшін 1 енгізіңіз»); Serial.println («Жарық диодтарының әр түрлі түстермен айналуы үшін 2 енгізіңіз»); Serial.println («Жарық диодты түстерді қолмен реттеу үшін 3 енгізіңіз»); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Таңба бар -жоғын тексереді? input = (char) Serial.read (); } // Әр түрлі опцияларды таңдайды, егер (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // White setAll (rainbowColor); // Светодиодтарды жаңартады} else if if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (rainbowColor); // Светодиодтарды жаңартады} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println («Бұл әсерден шығу үшін 2 емес нәрсені енгізіңіз, содан кейін жаңа эффектке арналған кез келген опцияларды енгізіңіз.»);
lcd.clear (); // Экранды тазалаңыз lcd.setCursor (0, 0); lcd.print («Any- көмегімен шығу»); lcd.setCursor (0, 1); lcd.print («ессіз! = 2»); үшін (int i = 0; i = 48 && енгізу <= 57) || breakCondition == 1 || IRNumb! = 2) {// Әсерден шығу керек екенін тексереді rainbowColor = colourChange (0, 0, 0); setAll (кемпірқосақ түсі); breakCondition = 1; үзіліс; } rainbowColor = colourChange (i, 0, 0); setAll (кемпірқосақ түсі); showStrip (); кешіктіру (100); } үшін (int i = 0; i = 48 && енгізу <= 57) || breakCondition == 1 || IRNumb! = 2) {// Әсерден шығу керек екенін тексереді rainbowColor = colourChange (0, 0, 0); setAll (кемпірқосақ түсі); breakCondition = 1; үзіліс; } g ++; rainbowColor = colourChange (i, g, 0); setAll (кемпірқосақ түсі); showStrip (); кешіктіру (100); } үшін (int g = 0; g = 48 && енгізу <= 57) || breakCondition == 1 || IRNumb! = 2) {// Әсерден шығу керек екенін тексереді rainbowColor = colourChange (0, 0, 0); setAll (кемпірқосақ түсі); breakCondition = 1; үзіліс; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (кемпірқосақ түсі); showStrip (); кешіктіру (100); } үшін (int b = 0; b = 48 && енгізу <= 57) || breakCondition == 1 || IRNumb! = 2) {// Әсерден шығу керек екенін тексереді rainbowColor = colourChange (0, 0, 0); setAll (кемпірқосақ түсі); breakCondition = 1; үзіліс; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (кемпірқосақ түсі); showStrip (); кешіктіру (100); } mainOptions (); } if if (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;
Serial.println («Шығу үшін n енгізіңіз»);
Serial.println («Қызыл түсті ұлғайту немесе азайту үшін w және s пайдаланыңыз»); Serial.println («Жасыл түсті көбейту немесе азайту үшін r және f пайдаланыңыз»); Serial.println («көк түсті ұлғайту немесе азайту үшін y және h пайдаланыңыз»); lcd.clear (); // Экранды тазалаңыз lcd.setCursor (0, 0); lcd.print («шығу: 0, 4/7: +/- қызыл»); lcd.setCursor (0, 1); lcd.print («5/8: жасыл, 6/9: көк»);
while (input2! = 'n' || IRNumb2! = 0) {
if (Serial.available ()> 0) {// таңба қол жетімді ме? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();
егер (IRNumb2 == 0) {
үзіліс; } if (input2 == 'w' || IRNumb2 == 4) {r+= 2; rainbowColor = colourChange (r, g, b); setAll (кемпірқосақ түсі); showStrip (); } else if (input2 == 's || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (кемпірқосақ түсі); showStrip (); } else if (input2 == 'r' || IRNumb2 == 5) {g+= 2; rainbowColor = colourChange (r, g, b); setAll (кемпірқосақ түсі); showStrip (); } if if (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (кемпірқосақ түсі); showStrip (); }
әйтпесе (input2 == 'y' || IRNumb2 == 6) {
b+= 2; rainbowColor = colourChange (r, g, b); setAll (кемпірқосақ түсі); showStrip (); }
әйтпесе (input2 == 'h' || IRNumb2 == 9) {
b- = 2; rainbowColor = colourChange (r, g, b); setAll (кемпірқосақ түсі); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } жарамсыз showStrip () {piksel.show (); } void setAll (uint32_t color) {for (int i = 0; i <NUMPIXELS; i ++) {piksel.setPixelColor (i, түс); }} // Түс мәнін алу үшін 0 -ден 255 -ке дейінгі мәнді енгізіңіз. uint32_t colourChange (int r, int g, int b) {пикселдерді қайтару. Түс (r, g, b); } void mainOptions () {// Негізгі әсер параметрлерін көрсетеді lcd.clear (); // Экранды тазалаңыз lcd.setCursor (0, 0); lcd.print («0 жарық өшірілгенде»); lcd.setCursor (0, 1); lcd.print («1: Ақ жарық»); кешіктіру (1000); lcd.clear (); // Экранды тазалаңыз lcd.setCursor (0, 0); lcd.print («2: Түс әсері»); lcd.setCursor (0, 1); lcd.print («3: Қолмен»); кешіктіру (1000); } жарамсыз IRScan () {if (irrecv.decode (& нәтижелер)) {
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 «); } 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 = results.value; irrecv. resume (); }} жарамсыз IRScan2 () {if (irrecv.decode (& нәтижелер)) {
if (results.value == 0XFFFFFFFF)
results.value = key_value; else {// 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 = results.value; irrecv. resume (); }}
5 -қадам: монтаждау
Arduino -ны жақтауға бекіту үшін мен оны және жақтаудың артқы жағындағы тақтаны жабыстырып, жақсы көрінуі үшін кабельдерді жабуға/жасыруға тырысамын.
Ұсынылған:
СКД -мен 8051 мен IR сенсоры бар келушілердің есептегіші: 3 қадам
СКД -мен 8051 мен IR сенсорын пайдаланатын келушілердің есептегіші: Құрметті достар, мен келушілердің есептегішін 8051 және IR сенсорының көмегімен қалай жасау керектігін түсіндірдім және оны СКД -де көрсеттім. 8051 - бұл бүкіл әлемде коммерциялық қосымшалар мен хобби жасау үшін қолданылатын ең танымал микроконтроллердің бірі. Мен визаны жасадым
Arduino Gemma & NeoPixels көмегімен жеңіл шексіздік айнасы: 8 қадам (суреттермен)
Arduino Gemma & NeoPixels көмегімен жеңіл шексіздік айнасы: қараңыз! Сиқырлы және алдамшы қарапайым шексіздік айнасына терең қараңыз! Светодиодтардың бір жолағы шексіз шағылысу әсерін жасау үшін айна сэндвичке ішке қарай жарқырайды. Бұл жоба менің кіріспе Ардуиннің дағдылары мен әдістерін қолданады
Gyro сенсоры мен Nokia 5110 СКД бар «ғарыштық әсер» ойыны: 3 қадам
Gyro сенсоры мен Nokia 5110 LCD көмегімен «ғарыштық әсер» ойыны: менің Тамаготчи қайтыс болғаннан кейін (соңғы жоба) мен уақытты босқа өткізудің жаңа әдісін іздей бастадым. Мен Arduino -да классикалық «Space Impact» ойынын бағдарламалауды шештім. Ойынды қызықты әрі қызықты ету үшін менде гироскоп сенсоры қолданылды
Шексіздік айнасы бар торды жылжыту: 7 қадам
Шексіздік айнасы бар жылжымалы тор: бұл бейнелер бейне мен жылжымалы бейнені жасайды. Біз кеңістіктің сезімін тиімдірек көрсету үшін қозғалыстағы торлар мен шексіз айнаның көмегімен тербелетін кеңістікті көрсеткіміз келді. Біздің жұмыс екі акрил пластинадан тұрады, алдыңғы және артқы тақталар, олар
Шексіздік айнасы мен үстел (қарапайым құралдармен): 7 қадам (суреттермен)
Шексіздік айнасы мен үстел (кездейсоқ құралдармен): Сәлеметсіз бе, мен біраз уақыт бұрын осы нұсқаулыққа келдім, мен оны бірден қабылдадым, бірақ мен өз қолыммен жасағым келді, бірақ қолымды ұстай алмадым 1) 2) CNC маршрутизаторы. Кішкене ізденістен кейін мен ойладым