Агуулгын хүснэгт:
- Хангамж
- Алхам 1: Толин тусгал ба толин тусгал хальсыг суулгах
- Алхам 2: LED зурвасыг тохируулах
- Алхам 3: IR мэдрэгч ба LCD -ийг суурилуулах (заавал биш)
- Алхам 4: Код
- Алхам 5: Суулгах
Видео: LCD ба IR мэдрэгч бүхий хязгааргүй толь: 5 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:00
Энэхүү төсөл нь Infinity Mirror хэрхэн хийх талаар танд үзүүлэх болно. Үндсэн ойлголт бол толин тусгал дээрх LED нь арын толиноос урд талын толин тусгал руу гэрэл тусдаг бөгөөд зарим гэрэл нь тэндээс гадагш гардаг тул бид заримыг нь арын толинд тусгаж, хязгааргүй эффект өгдөг. Энэ нь Hack Sioux Falls -ийн зааварладаг Ultra Sonic мэдрэгч бүхий Infinity Mirror болон I2C Lcd дэлгэцийг Arduino Uno -той хэрхэн холбох талаар JunezRiyaz дээр суурилсан болно.
Хангамж
1. Сүүдрийн хайрцаг (50 доллар)
2. Нэг талын толин тусгал кино (17 доллар)
3. RGB LED гэрлийн зурвас ($ 30)
4. Arduino (35 доллар)
5. Толин тусгал (10 доллар)
Нэмэлт:
1. IR мэдрэгч ба алсын удирдлага (20 доллар)
2. LCD (20 доллар)
3. 7 Эмэгтэй -Эр холбогч
4. 3 Эрэгтэй эрэгтэй холбогч
Багаж хэрэгсэл
1. Гагнуурын төмөр
2. Утас таслагч ба хуулагч
3. Толин тусгал хийх зүйл
*CAD болон размерын бүх үнэ таны хэрэглэж буй хайрцгаас хамаарна гэдгийг анхаарна уу.
Алхам 1: Толин тусгал ба толин тусгал хальсыг суулгах
Хамгийн эхний хийх зүйл бол сүүдрийн хайрцгийн ар талд байрлах толин тусгалыг суулгах явдал юм. Та өөрт тохирох хэмжээтэй эсвэл том хэмжээтэйг нь аваад дараа нь хайчилж авмаар байна. Гэхдээ үүний тулд та гэрэл биш харин толин тусгал ашиглах ёстой, учир нь бид бүх гэрлийг буцааж тусгахыг хүсч байна, хэрэв шил биш бол толин тусгал нь байгаа материалынхаа хэв маягийг авах боломжтой болно.
Та толин тусгалыг суулгахдаа сүүдрийн хайрцагт бэхлэхээ мартуузай, толь хөдлөхгүй байхын тулд мод, хадаасны жижиг хэсгүүдийг ашиглахыг зөвлөж байна. Энэ төслийг дуусгахад надад толь байхгүй байсан тул киног ашигласан (Та зургуудаас харж болно). Энэхүү үзэл баримтлал нь үр дүнгээ өгч байгаа боловч тийм ч сайн биш бөгөөд миний бодлоор тийм ч сайн биш мэт өнцөг, эмх замбараагүй харагдуулдаг.
Толин тусгал кино бүр арай өөр байх болно, гэхдээ надад өгсөн кино нь хальсыг тавьж байгаа шилийг цэвэрлэж, дараа нь хамгаалалтын хальсыг соронзон хальсаар тайлж, шүршиж усаар угаана гэж хэлсэн. лонх хальсыг шилэн дээр тавь. Дараа нь агаарын хөөс болон илүүдэл уснаас салахын тулд зээлийн карт эсвэл хусуур ашиглаарай. Надад дахиад шил байхгүй байсан ч тэр хэвээрээ л байна. Дараа нь шилийг нэг шөнийн турш хатаагаад үлдээх хэрэгтэй.
Алхам 2: LED зурвасыг тохируулах
LED -ийн хувьд би хоёр талт соронзон хальсны тусламжтайгаар хүрээ рүү наалдаж, утас гарах нүх гаргав. Булан бүрт би хайрцгийн хэлбэрийг бөөрөнхий ирмэггүй байлгахын тулд өөр тууз руу холбохын тулд тугалгануудыг гагнав. Ийм туузыг буцаах гэж нэрлэдэг LED -үүдийн хоорондоо холбогддог чиглэлийг өөрчлөхгүй байхын тулд туузыг зөвхөн холбоо барих цэгүүд дээр огтлох хэрэгтэй. Надад авсан зурвас нь ийм зүйл болохгүй гэдгийг баталгаажуулахын тулд сумтай байсан тул бүгд нэг зүг рүү чиглэсэн эсэхийг шалгаарай.
Би кабелийг хайрцагны гадна талд оруулахын тулд жижиг нүх гаргав, надад байгаа LED нь 3 зүү хаягтай LED байсан тул би хүч, газардуулга, өгөгдлийн холбогчтой болсон. Би дижитал зүү 3 -ийг өгөгдөл холбогч болгон ашигласан бөгөөд LED туузыг хүрээ рүү наахаасаа өмнө ажиллаж байгаа эсэхийг шалгаж, зөвхөн 5-6 вольтоор санал болгож буй хүчдэлийг ашиглана уу.
Алхам 3: IR мэдрэгч ба LCD -ийг суурилуулах (заавал биш)
Би гэрэлтүүлгийн эффектийг өөрчлөхийн тулд IR мэдрэгч, алсын удирдлага ашиглан эффектийн сонголтыг хэрэглэгчдэд харуулахын тулд LCD ашиглахаар шийдсэн.
LCD ба IR мэдрэгчийг суурилуулахын тулд би халуун цавуугаар буу хийж, хүрээний дээд хэсэгт наалдуулж, бүх зүйлийг ар талд нь утастай холбосон боловч төслийн дараа тэдгээрийг салгах шаардлагатай болж магадгүй тул тэдгээрийг засахыг хүсээгүй. хийгддэг.
LCD болон IR хүлээн авагчийг холбохын тулд би эрэгтэй, эмэгтэй холбогчийг Arduino -д холбож өгөгдөл, газар, хүчийг ашигладаг байсан. Бүх зүйлийг холбохын тулд би IR мэдрэгчийн өгөгдлийн зүү дээр 2 кОм эсэргүүцэлтэй 12 -р зүү, LCD -ийн SDA -ийн аналог Pin A4, LCD -ийн SCL -ийн аналог Pin 5 -ийг ашигласан.
Алхам 4: Код
Энэ төслийн хувьд би ашиглахын тулд татаж авах шаардлагатай цөөн хэдэн номын санг ашигладаг. Би тэдгээрийг энд байрлуулах гэж байна, хэрэв та Mac эсвэл Linux дээр байгаа бол энэ нь нөлөөлж магадгүй тул цонхнууд дээр байгаа гэдгийг санаарай.
Та LED -ийн тооноос хамааран пикселийн тоог өөрчлөх шаардлагатай болно. Би бас Цуваа монитор интерфэйсийг суурилуулсан бөгөөд хэрэв та 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; солонго = 0; uint32_t rainbowColor = пиксел. Өнгө (0, 0, 0); char оролт = 0; char оролт2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Дахин давтах шаардлагагүй элементүүдийг оруулдаг. lcd.begin (16, 2); // lcd дэлгэцийн 16 багана, 2 мөрийг тодорхойлох lcd.backlight (); // Арын гэрэлтүүлэгийг асаахын тулд Serial.begin (9600); пиксел.begin (); irrecv.enableIRIn (); Serial.println ("Гэрлийг унтраахын тулд 0 оруулна уу"); // Эхлэх заавар Serial.println ("LED -ийг цагаан болгохын тулд 1 оруулна уу"); Serial.println ("LED -ийг өөр өнгөөр эргүүлэхийн тулд 2 оруулна уу"); Serial.println ("LED өнгийг гараар тохируулахын тулд 3 оруулна уу"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Тэмдэгт байгаа эсэхийг шалгадаг уу? input = (char) Serial.read (); } // Янз бүрийн сонголтыг сонгоно if (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Цагаан багцAll (солонгын өнгө); // LED -г шинэчилнэ} else if if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (солонгын өнгө); // LED -г шинэчилнэ} 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"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Эффектийг солихын тулд солонгын өнгөColorColourChange (0, 0, 0) эсэхийг шалгах; setAll (солонгын өнгө); breakCondition = 1; завсарлага; } rainbowColor = colourChange (i, 0, 0); setAll (солонгын өнгө); showStrip (); саатал (100); } (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Эффектийг солихын тулд солонгын өнгөColorColourChange (0, 0, 0) эсэхийг шалгах; setAll (солонгын өнгө); breakCondition = 1; завсарлага; } g ++; rainbowColor = colourChange (i, g, 0); setAll (солонгын өнгө); showStrip (); саатал (100); } (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Эффектийг солихын тулд солонгын өнгөColorColourChange (0, 0, 0) эсэхийг шалгах; setAll (солонгын өнгө); breakCondition = 1; завсарлага; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (солонгын өнгө); showStrip (); саатал (100); } (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Эффектийг солихын тулд солонгын өнгөColorColourChange (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 (); } if if (input2 == 's || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (солонгын өнгө); showStrip (); } if 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 (); }
өөр бол (оролт2 == 'y' || IRNumb2 == 6) {
b+= 2; rainbowColor = colourChange (r, g, b); setAll (солонгын өнгө); showStrip (); }
өөр if (input2 == 'h' || IRNumb2 == 9) {
b- = 2; rainbowColor = colourChange (r, g, b); setAll (солонгын өнгө); showStrip (); }} mainOptions (); } setAll (солонгын өнгө); showStrip (); } void 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; өөр {//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; өөр {// 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 = үр дүнгийн утга; irrecv. resume (); }}
Алхам 5: Суулгах
Arduino -ийг хүрээ рүү холбохын тулд би зүгээр л жаазныхаа ар талд байрлуулсан талхны хавтанг нааж, сайн харагдуулахын тулд кабелийг таглах/нуухыг хичээх болно.
Зөвлөмж болгож буй:
Хязгааргүй толь цаг хийх: 15 алхам (зурагтай)
Хязгааргүй толь цаг хийх: Өмнөх төсөл дээр би эцэс төгсгөлгүй толь бүтээсэн бөгөөд түүний эцсийн зорилго бол цаг болгох явдал байв. (Өнгөлөг хязгааргүй толь хий) Би үүнийг хийснийхээ дараа үүнийг хөөцөлдөөгүй, учир нь энэ нь дажгүй харагдаж байсан ч хэд хэдэн зүйл байсан
Хязгааргүй толь шоо хийх хялбар - 3D хэвлэх, програмчлал байхгүй: 15 алхам (зурагтай)
Хялбар Infinity толин шоо хий 3D хэвлэх, програмчлал байхгүй: Хүн бүр хязгааргүй сайн шоо дуртай, гэхдээ хийхэд хэцүү мэт харагддаг. Энэхүү зааварчилгааны талаархи миний зорилго бол хэрхэн яаж хийхийг алхам алхамаар харуулах явдал юм. Зөвхөн үүгээр ч зогсохгүй миний танд өгч буй зааврын дагуу та үүнийг хийх боломжтой болно
Arduino Gemma & NeoPixels бүхий хялбар хязгааргүй толь: 8 алхам (зурагтай)
Arduino Gemma & NeoPixels бүхий хялбар Infinity толь: Хараач! Гайхамшигтай, хууран мэхэлсэн энгийн хязгааргүй толинд гүн гүнзгий хараарай! LED -ийн ганц зурвас нь толин тусгалтай сэндвич дээр дотогшоо гэрэлтэж эцэс төгсгөлгүй тусгалын эффектийг бий болгодог. Энэхүү төсөл нь миний танилцуулга Ардуины ур чадвар, техникийг ашиглах болно
Хоёр талт, ширээний хязгааргүй толь хийх: 14 алхам (зурагтай)
2 талт, ширээний хязгааргүй толь хийх: Миний үзсэн хязгааргүй тольны ихэнх нь нэг талыг барьсан боловч би арай өөрөөр бүтээхийг хүссэн юм. Энэ нь 2 талтай байх бөгөөд үүнийг ширээний компьютер эсвэл тавиур дээр байрлуулахаар төлөвлөсөн болно. Энэ бол хийхэд хялбар, маш дажгүй төсөл
Хязгааргүй толь бүхий хөдөлгөөнт сүлжээ: 7 алхам
Хязгааргүй толь бүхий хөдөлгөөнт сүлжээ: эдгээр видеонууд нь видео хийж, хөдөлгөж байна. Бид орон зайн мэдрэмжийг илүү үр дүнтэй харуулахын тулд дүүжин орон зайг хөдөлгөөнт сүлжээгээр, хязгааргүй тольоор харуулахыг хүссэн. Бидний ажил бол хоёр нийлэг хавтан, урд ба арын хавтангаас бүрдэнэ