Мазмуну:
- Жабдуулар
- 1 -кадам: күзгү жана күзгү тасманы орнотуу
- 2 -кадам: LED тилкесин орнотуу
- 3 -кадам: IR сенсорун жана ЖКны орнотуу (Милдеттүү эмес)
- 4 -кадам: Код
- 5 -кадам: Монтаж
Video: LCD жана IR сенсорлору менен Infinity Mirror: 5 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:36
Бул долбоор сизге 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лар бири -бирине туташкан багытын өзгөртпөгүлө. Мен алган тилкеде андай болбошу үчүн жебелер бар болчу, андыктан алардын баары бир багытты көрсөтүп жатканын текшериңиз.
Мен кабелди кутунун сыртына чыгаруу үчүн кичинекей тешик жасадым, менде болгон диоддор 3 пин даректүү светодиод болгондуктан, менде күч, жер жана маалымат туташтыргычы бар болчу. Мен маалымат туташтыргычы үчүн Digital Pin 3тү колдондум, сиздин LED тилкелериңизди текшерип көрүңүз, алар рамкага жабыштырылганга чейин иштээрин текшериңиз жана 5 - 6 В үчүн сунушталган чыңалууну гана колдонуңуз.
3 -кадам: 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 -кадам: Монтаж
Ардуинону алкакка орнотуу үчүн, мен жөн эле аны жана кадрдын арткы жагындагы нанды чаптап, жакшы көрүнүшү үчүн кабелдерди жаап/жашырууга аракет кылмакмын.
Сунушталууда:
Infinity Mirror жана стол (Күнүмдүк шаймандар менен): 7 кадам (Сүрөттөр менен)
Чексиздик күзгүсү жана стол (Күнүмдүк шаймандар менен): Эй, баардыгы, Бир аз мурун мен бул көрсөтмөлүү нерсеге туш болдум жана ошол замат аны менен бирге алып, өзүмдүкүн жасагым келди, бирок колума тийген жок 1) Бир тараптуу плексигласс күзгүсү 2) CNC роутери. Бир аз издеп жүрүп, ойлоп таптым
Arduino жана RGB Leds менен Infinity Mirror Heart кантип жасалат: 8 кадам (сүрөттөр менен)
Arduino жана RGB Leds менен Infinity Mirror Жүрөгүн Кантип Жасоо керек: Бир жолу партияда, мен жана жубайым чексиздик күзгүсүн көрүштү, ал сырткы келбетине таң калып, мен каалайм! Жакшы күйөө дайыма угат жана эстейт, ошондуктан мен аны сүйүү күнүнө белек катары курууну чечтим
Ным сенсорлору жана ARDUINO менен бампердин түшүмүн алыңыз: 4 кадам (сүрөттөр менен)
Ным сенсорлору жана ARDUINO менен бампер эгинге ээ болуңуз: Мен башка тапшырманы жазуу үчүн Instructables боюнча акчам жок билимимди бөлүшүп туруу үчүн, жумуш менен үй тапшырмаларын аткаруунун ортосунда Instructablesга көз каранды болушум керек. Мен азыр судьямын, көптөгөн Instructables аркылуу жана Инструкцияны табыңыз
IduC LCD менен Arduino Nano жана эки DS18B20 температура сенсорлору: 5 кадам
Arduino Nano жана I2C LCD менен эки DS18B20 температура сенсорлору: Бүгүн мен сизге Arduino Nano Clone жана I2C LCD менен DS18B20 эки температура сенсорун кантип жасоону көрсөткүм келет. I2C displejem.I Arduino IDE 1.8.8 колдоном // Pouziv
DIY магниттик стол хоккейи картон, RGB чырактары жана сенсорлору менен: 11 кадам (сүрөттөр менен)
DIY магниттик стол хоккейи картон, RGB чырактары жана сенсорлору менен: Сиз аба хоккейин ойносоңуз керек! Оюн зонасына бир нече $$ доллар $$ төлөп, досторуңузду жеңүү үчүн гол киргизе баштаңыз. Бул абдан көзкаранды эмеспи? Сиз үйдө бир дасторкон кармоо жөнүндө ойлонсоңуз керек, бирок эй! өзүңүз жасоону ойлонуп көрдүңүз беле?