Мазмуну:

LCD жана IR сенсорлору менен Infinity Mirror: 5 кадам
LCD жана IR сенсорлору менен Infinity Mirror: 5 кадам

Video: LCD жана IR сенсорлору менен Infinity Mirror: 5 кадам

Video: LCD жана IR сенсорлору менен Infinity Mirror: 5 кадам
Video: КИТАЙЦЫ, ЧТО ВЫ ТВОРИТЕ??? 35 СУПЕР ТОВАРОВ ДЛЯ АВТОМОБИЛЯ С ALIEXPRESS 2024, Ноябрь
Anonim
LCD жана IR сенсорлору менен Infinity Mirror
LCD жана IR сенсорлору менен Infinity Mirror
LCD жана IR сенсорлору менен Infinity Mirror
LCD жана IR сенсорлору менен Infinity Mirror
LCD жана IR сенсорлору менен Infinity Mirror
LCD жана IR сенсорлору менен Infinity Mirror

Бул долбоор сизге Infinity Mirror кантип жасоону көрсөтөт. Негизги түшүнүк - бул күзгүдө турган диоддор жарыкты жаратат, ал арткы күзгүдөн алдыңкы күзгүгө секирет, ал жерде жарык көрүнөт, андыктан биз ичинде көрө алабыз, кээ бирлери арткы күзгүгө кайра чагылдырылат жана чексиз эффект берет. Бул Infinity Mirror негизделген Ultra Sonic сенсорлору менен инструкцияланат Hack Sioux Falls жана I2C Lcd дисплейин кантип Arduino Uno менен JunezRiyaz тарабынан туташтыруу керек.

Жабдуулар

1. Shadow Box ($ 50)

2. Бир тараптуу күзгү тасма ($ 17)

3. RGB LED жарык тилкеси ($ 30)

4. Arduino ($ 35)

5. Күзгү ($ 10)

Кошумча:

1. IR Sensor жана Remote ($ 20)

2. ЖК (20 доллар)

3. 7 Аялдан Эркекке Коннекторлор

4. 3 Эркек - Эркек коннекторлору

Куралдар

1. Лампочка

2. Wire Cutter жана Stripper

3. Күзгү менен кесе турган нерсе

*Эскертүү, бардык баалар CADда жана өлчөмдө сиз колдонгон кутуга жараша болот.

1 -кадам: күзгү жана күзгү тасманы орнотуу

Күзгү жана күзгү тасманы орнотуу
Күзгү жана күзгү тасманы орнотуу
Күзгү жана күзгү тасманы орнотуу
Күзгү жана күзгү тасманы орнотуу

Биринчи нерсе - көлөкө кутучасынын артында боло турган күзгүнү орнотуу. Сиз керектүү өлчөмдү же чоңураак бирин алгыңыз келип, анан аны кесип салгыңыз келет. Бирок бул үчүн пленканы эмес, күзгүнү колдонушуңуз керек, анткени биз бардык жарыктын артка чагылышын каалайбыз, күзгү пленка айнектин ичинде болбосо, ошол материалдын үлгүсүн да ала алат.

Күзгүнү орнотуп жатканда, аны көлөкө кутучасына бекитип коюңуз, мен күзгүнүн кыймылдабашы үчүн жыгачтын жана мыктын кичинекей бөлүктөрүн колдонууну сунуштаар элем. Мен бул долбоорду бүтүрүшүм керек болгондо күзгүм жок болчу, ошондуктан тасманы колдондум (Сиз сүрөттөрдөн көрө аласыз). Концепция иштейт, бирок анча жакшы эмес жана менин оюмча жакшы көрүнбөгөн бурчтуу жана башаламан көрүнүш берет.

Ар бир күзгү пленка бир аз башкача болот, бирок мен алган пленканы биз пленканы коюп жаткан стаканды тазалап, бир жактагы коргоочу пленканы чечүү үчүн лентаны колдонуп, самындуу сууну чачыратуучуга айттым. бөтөлкө пленканы айнекке кой. Андан кийин аба көбүкчөлөрүнөн жана ашыкча суудан арылуу үчүн кредиттик картты же щетканы колдонуңуз. Менде дагы бир жолу айнек жок болчу, бирок ал мурдагыдай эле иштейт. Андан кийин стаканды түнү бою кургатууга калтырыңыз жана ал жасалышы керек.

2 -кадам: LED тилкесин орнотуу

LED тилкесин орнотуу
LED тилкесин орнотуу
LED тилкесин орнотуу
LED тилкесин орнотуу

Светодиоддор үчүн мен жөн эле камтылган эки тараптуу скотчту колдонуп, зымдын чыгып кетиши үчүн тешик жасадым. Ар бир бурчта, коробкалардын формасын тегеректелген четтери жок кылуу үчүн башка тилкеге туташтыруу үчүн коргошундарды коштум. Тилкелерди мындай болууга мүмкүндүк бере турган контакттар болгон жерлерде гана кесип койгула жана полярдыкты артка кайтаруу деп аталган LEDлар бири -бирине туташкан багытын өзгөртпөгүлө. Мен алган тилкеде андай болбошу үчүн жебелер бар болчу, андыктан алардын баары бир багытты көрсөтүп жатканын текшериңиз.

Мен кабелди кутунун сыртына чыгаруу үчүн кичинекей тешик жасадым, менде болгон диоддор 3 пин даректүү светодиод болгондуктан, менде күч, жер жана маалымат туташтыргычы бар болчу. Мен маалымат туташтыргычы үчүн Digital Pin 3тү колдондум, сиздин LED тилкелериңизди текшерип көрүңүз, алар рамкага жабыштырылганга чейин иштээрин текшериңиз жана 5 - 6 В үчүн сунушталган чыңалууну гана колдонуңуз.

3 -кадам: IR сенсорун жана ЖКны орнотуу (Милдеттүү эмес)

IR сенсорун жана ЖКны орнотуу (милдеттүү эмес)
IR сенсорун жана ЖКны орнотуу (милдеттүү эмес)
IR сенсорун жана ЖКны орнотуу (милдеттүү эмес)
IR сенсорун жана ЖКны орнотуу (милдеттүү эмес)
IR сенсорун жана ЖКны орнотуу (милдеттүү эмес)
IR сенсорун жана ЖКны орнотуу (милдеттүү эмес)

Мен жарыктын эффектилерин өзгөртүү үчүн IR сенсорун жана алыстан башкарууну колдонууну тандадым жана колдонуучуга эффекттердин параметрлерин көрсөтүү үчүн ЖКны колдонууну чечтим.

ЖК жана IR сенсорун орнотуу үчүн мен ысык желим мылтыкты колдонуп, аларды рамканын үстүнө жабыштырып, баарын артка зым менен байлап койгом, бирок мен аларды оңдоону каалаган жокмун, анткени мен аларды долбоордон кийин чечип алышым керек болчу. жасалат.

ЖК жана IR кабылдагычты туташтыруу үчүн, мен Arduinoго маалыматтарды, ошондой эле жерди жана кубатты кошуу үчүн Эркекти Аял Коннекторуна колдондум. Баарын зым менен жабыш үчүн, IR сенсорунун маалымат түйүнүндөгү 2 кОм каршылыгы бар 12 -пинди, ЖКнын СКА үчүн Аналогдук пин А4 жана аналогдук пин 5ти ЖКнын SCL үчүн колдондум.

4 -кадам: Код

Бул долбоор үчүн мен жүктөп алышыңыз керек болгон бир нече китепканаларды колдоном. Мен аларды бул жерге коёюн деп жатам, эсиңизде болсун, мен терезелердемин, эгер сиз Mac же Linuxта болсоңуз, бул таасир этиши мүмкүн.

Сизде болгон светодиоддорго жараша пикселдердин санын өзгөртүүгө туура келет. Мен ошондой эле Сериялык Монитордун интерфейсин кургам, ошондуктан сиз IR сенсорун колдонбосоңуз, аны менен интерфейске чыга аласыз.

// Китепканалар

#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 жыйынтыктары; белгисиз узун 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 rainbow = 0; uint32_t rainbowColor = пиксел. Color (0, 0, 0); char input = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Кайталануунун кереги жок элементтерди инициализациялайт. lcd.begin (16, 2); // 16 колонканы жана 2 катар lcd дисплейин аныктоо lcd.backlight (); // Арткы жарыкты күйгүзүү үчүн Serial.begin (9600); piksel.begin (); irrecv.enableIRIn (); Serial.println ("Жарыкты өчүрүү үчүн 0 киргизиңиз"); // Begining Instructions Serial.println ("Светодиоддорду ак түскө айландыруу үчүн 1 киргизиңиз"); Serial.println ("Светодиоддордун ар кандай түстөрдө айланышы үчүн 2 киргизиңиз"); Serial.println ("LED түстөрүн кол менен тууралоо үчүн 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); // Өчүрүү setAll (rainbowColor); // Светодиоддорду жаңыртат} else if 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 ("numb that that = = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Эффекттен чыгуу керек экендигин текшерет rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; тыныгуу; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); кечиктирүү (100); } үчүн (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Эффекттен чыгуу керек экендигин текшерет rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; тыныгуу; } g ++; rainbowColor = colourChange (i, g, 0); setAll (rainbowColor); showStrip (); кечиктирүү (100); } үчүн (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Эффекттен чыгуу керек экендигин текшерет rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; тыныгуу; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (rainbowColor); showStrip (); кечиктирүү (100); } үчүн (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Эффекттен чыгуу керек экендигин текшерет rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; тыныгуу; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); кечиктирүү (100); } mainOptions (); } else 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 ("exit: 0, 4/7: +/- red"); 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 (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 (); } жараксыз showStrip () {piksel.show (); } void setAll (uint32_t color) {for (int i = 0; i <NUMPIXELS; i ++) {piksel.setPixelColor (i, color); }} // Түс маанисин алуу үчүн 0дон 255ке чейин маанини киргизиңиз. uint32_t colourChange (int r, int g, int b) {пикселдерди кайтаруу. Color (r, g, b); } void mainOptions () {// Негизги эффект параметрлерин көрсөтөт lcd.clear (); // Экранды тазалоо lcd.setCursor (0, 0); lcd.print ("0 Lights off"); 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 (& results)) {

эгер (results.value == 0XFFFFFFFF)

results.value = key_value; башка {//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 "); } 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 "); } if 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 (); }} жараксыз IRScan2 () {if (irrecv.decode (& results)) {

эгер (results.value == 0XFFFFFFFF)

results.value = key_value; башка {// 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 "); } if 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 "); } if 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 (); }}

5 -кадам: Монтаж

Монтаж
Монтаж

Ардуинону алкакка орнотуу үчүн, мен жөн эле аны жана кадрдын арткы жагындагы нанды чаптап, жакшы көрүнүшү үчүн кабелдерди жаап/жашырууга аракет кылмакмын.

Сунушталууда: