Innehållsförteckning:
- Tillbehör
- Steg 1: Låt oss göra det
- Steg 2: Materialberedning
- Steg 3: Skärning av akryl
- Steg 4: Gör sidor med 3D -skrivare
- Steg 5: Filma
- Steg 6: Fäst LED -remsa + Löd -LED -remsa (NeoPixel) med trådar
- Steg 7: Lödning av taktbrytare med trådar
- Steg 8: Montering -Sätt in bult på sidan = ①
- Steg 9: Fäst Ⓛⓣ på Ⓒ = ②
- Steg 10: Montering -Använd Ⓦ och Ⓝ för att kombinera ① och ② = ③
- Steg 11: Montering -Fäst Ⓐⓔ och ③ Använd en akrylbindning = ④
- Steg 12: Koppla Ⓢ till Ⓓ = ⑤
- Steg 13: Montering -Combine ④ och ⑤ Använda Ⓦ och Ⓝ = ⑥
- Steg 14: Komplett delmontering
- Steg 15: Ett projekts utseende
- Steg 16: NeoPixel, Anslutningskablar
- Steg 17: NeoPixel och Arduino Wiring
- Steg 18: Programmera Arduino
- Steg 19:
- Steg 20: Mönster
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
projektgruppens medlemmar
(Hyewon Shin, Eunjeong Ko, Junsung Yi)
Tänk om du kunde röra och designa ljuset? Hur skulle det kännas om du hade ett vackert ljusmönster som du själv designade med en intressant animering? Tänd mig blir en intressant skissbok som berör och designar själva ljuset och gör intressanta mönster! Detta projekt har flera trianglar som bildar en sexkantig form. Så du kan skapa stereoskopiska mönster efter hur du designar ljus! Tryck bara på varje bit så kommer olika färger att graderas, och när färgen du vill ha kommer ut trycker du bara på handen du tryckte på så fortsätter den att lysa vackert med den färg du ville ha! Projektet använde cirka 312 trianglar, men det kan skapa ett fint ljus som fungerar bra med 6 trianglar. Låt mig nu visa dig hur du gör det med sex trianglar. Följ stegen så får du ditt eget underbara arbete!
Tillbehör
Hårdvara: Arduino (jag använde arduino mega 2560), akryl (klar, vit), LED -remsa (NeoPixel), diffusorfilm, knapp, 4 -stifts kontakt, tråd, kretskort, strömförsörjning
Verktyg: Laserstyrd skärmaskin, 3D-skrivare
Steg 1: Låt oss göra det
Låt oss göra denna söta sexkantiga bit med mig!
Light Me Up är gjord med 312 trianglar, men även 6 trianglar kan designa underbart ljus. Om du vill göra det i större skala kan du göra det genom att hänvisa till filen som bifogas nedan.
Steg 2: Materialberedning
Steg 3: Skärning av akryl
Använd en laserskärare för att skära fram- och baksidan av varje del. Färgen på akrylen på baksidan kan vara vad du vill, men se till att använda transparent akryl eftersom fronten måste dämpas! Om du använder en annan akrylfärg än transparent ser du inte ljuset bra.
Steg 4: Gör sidor med 3D -skrivare
Nu är det dags att göra sidorna på varje bit. Låt oss göra det! 3D -modelleringsfilerna på sidan bifogas nedan. Vi använde PLA för att göra sidor PLA är starkare och mindre sammandragningar än ABS, så filament rekommenderas för att använda PLA.
Steg 5: Filma
Låt oss nu lägga en lätt diffusionsfilm på akrylen på framsidan. Om du lägger film på det sprids det ut och lyser mycket vackrare. Klipp först filmen i form av en triangel. (Det är bättre att klippa filmen större än den skurna akrylen) Det är enkelt att sätta på film som en skyddsfilm på din telefon. Om du vill tipsa här kan du använda ett kort för att trycka på det så att det kan fastna snyggt!
Steg 6: Fäst LED -remsa + Löd -LED -remsa (NeoPixel) med trådar
Om du har varit så bra på att lödda LED -remsan är det dags att sätta LED -remsan på baksidan. Fäst först en limpistol eller dubbelsidig tejp på baksidan av LED-remsan. Och ta först bort trådarna från båda sidorna av lödtråden genom hålen på båda sidor. Slutligen fäst LED -remsan på baksidan av akryl och det är över!
Det är lödningstid! förbereda LED-remsor, 4-poliga kontakter (kontakt eller ledningar) och vad du behöver för lödning. Jag använde lysdioder i tre enheter. Du kan använda en eller två lysdioder om du vill, men jag rekommenderar att du använder tre. När allt material är klart, löd kablarna i både datalinjer, 5v -linjer och jordledningar på LED -remsan.
Steg 7: Lödning av taktbrytare med trådar
Steg 8: Montering -Sätt in bult på sidan = ①
Nu är det en riktigt enkel del! Placera en bult på var och en av de tre 3D -tryckta sidorna. Anledningen till att använda bultknappen som att använda strukturella bultar och muttrar kommer att kunna göra. När biten är klar lägger jag biten i fodralet och avslutar den med en mutter.
Steg 9: Fäst Ⓛⓣ på Ⓒ = ②
Steg 10: Montering -Använd Ⓦ och Ⓝ för att kombinera ① och ② = ③
Steg 11: Montering -Fäst Ⓐⓔ och ③ Använd en akrylbindning = ④
Om du sätter en bult på sidan sätter vi den på sidan och framsidan. Framsidan är akryl, så du måste sätta på den med en dedikerad akrylbindning. Om du fäster akryl på en vanlig bindning kommer det att lämna ett märke.
Steg 12: Koppla Ⓢ till Ⓓ = ⑤
Steg 13: Montering -Combine ④ och ⑤ Använda Ⓦ och Ⓝ = ⑥
Steg 14: Komplett delmontering
Steg 15: Ett projekts utseende
Steg 16: NeoPixel, Anslutningskablar
Steg 17: NeoPixel och Arduino Wiring
Steg 18: Programmera Arduino
extern flyktig osignerad lång timer0_millis;
#omfatta
#define MODEBTNNUM 3 int ani_mode = 0; osignerad lång preM1, preM2, preM3;
void setup () {
Wire.begin (); för (int i = 0; i <MODEBTNNUM; i ++) {pinMode (i+2, INPUT_PULLUP); } //Serial.begin(9600); }
void loop () {
för (int i = 0; i <MODEBTNNUM; i ++) {if (! digitalRead (i + 2)) ani_mode = i + 1; } för (int i = 0; i <6; i ++) {Wire.requestFrom (i+1, 1); medan (Wire.available ()) {int x = Wire.read (); // Serial.println (x); om (x == 5) {ani_mode = 0; // Serial.println ("x = 5"); }}} ////////////////////////////////////////////// /////// if (ani_mode == 0) {för (int i = 1; i 3000) {preM1 = current1; för (int i = 1; i 5000) {preM2 = current2; för (int i = 1; i 3000) {preM3 = current3; // timer0_millis = 0; // preM1 = 0; // preM2 = 0; // preM3 = 0; // Serial.println ("timeråterställning"); för (int i = 1; i <7; i ++) {Wire.beginTransmission (i); Wire.write (ani_mode); //Serial.println("3000 "); Wire.endTransmission (i); }}}}
Steg 19:
extern flyktig osignerad lång timer0_millis;
#omfatta
#include #define PIN 12 #define NUMPIXELS 162 Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); const int num = NUMPIXELS / 3; const int slaveNum = 1; int färger [num] [3]; int nyans [num]; int satt [num]; int ljus [num]; int pNumber = 0; int gValue [num] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; const int btnPin [num] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 16, 17, 18, 19, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 54, 55, 56, 57, 58, 59}; int btnState [num]; booleskt btnMode; int hueV [num] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; #include #define BTNNUM 1 int f_v = 1; osignerad lång preMillis1; osignerad lång preM; int ani_mode = 0; int ani2_Counter = 0; int räknare = 0; ///////////////////////////////////////////////// begin (slaveNum); Wire.onRequest (requestEvent); Wire.onReceive (ReceiveEvent); för (int i = 0; i <num; i ++) {pinMode (btnPin , INPUT_PULLUP); } //Serial.begin(9600); strip.begin (); }/////////////////////////////////////////////
void loop () {
if (f_v == 1) {för (int i = 0; i <num; i ++) {hue = 50; satt = 95; ljus = 100; } f_v = 0; } ////////////////////////////////////////////////// falsk; för (int i = 0; i <num; i ++) {if (! digitalRead (btnPin )) {btnMode = true; }} btnEvent (5); // Serial.println (ani_mode); ////////////////////////////////////////////// switch (ani_mode) {case 0: ani0 (); ha sönder; fall 1: ani1 (); ani_mode = 0; ani2_Counter = 0; ha sönder; fall 2: ani2_Counter = 1; ani_mode = 0; ha sönder; fall 3: ani3 (); ani_mode = 0; ani2_Counter = 0; ha sönder; default: readyState (); ha sönder; } om (ani2_Counter == 1) {ani2 (); } setPixels (num); }
///////////////////////////////////////////
void ReceiveEvent (int howMany) {int x = Wire.read (); if (x == 5) {// Serial.println ("fått 5"); ani_mode = 0; } ani_mode = x; // Serial.println (ani_mode); }////////////////
om (btnMode == true) {
Wire.write (5); // Serial.println ("5 보냄"); } annat {Wire.write (0); }
}
void ani0 () {
// Serial.println ("0"); }
void ani1 () {
// Serial.println ("1"); if (pNumber == 0) {for (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int a1 = {25, 26}; int b1 = {39, 52}; int c1 = {40, 53}; för (int a = 0; a <2; a ++) {nyans [a1 [a] = 100; satt [a1 [a] = 95; ljus [a1 [a] = 100; } för (int b = 0; b <2; b ++) {hue [b1 = 200; satt [b1 = 95; ljus [b1 = 100; } för (int c = 0; c <2; c ++) {hue [c1 [c] = 300; satt [c1 [c] = 95; ljus [c1 [c] = 100; } // Serial.println ("0"); } annars if (pNumber == 1) {for (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int a2 = {21, 22, 34, 35, 37, 46, 47, 51}; // int b2 = {}; // int c2 = {}; int d2 = {36, 48, 49, 50}; för (int a = 0; a <8; a ++) {nyans [a2 [a] = 26; satt [a2 [a] = 95; ljus [a2 [a] = 100; } för (int d = 0; d <4; d ++) {hue [d2 [d] = 63; satt [d2 [d] = 95; ljus [d2 [d] = 100; } // Serial.println ("1"); } annars om (pNumber == 2) {// jättekubmönster för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int a14 = {34, 35, 46, 47, 48, 49}; // gul 06 för (int a = 0; a <6; a ++) {hue [a14 [a] = 35; satt [a14 [a] = 95; ljus [a14 [a] = 100; }} annat om (pNumber == 3) {för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int a3 = {34, 35, 46, 47, 48, 49}; // gul för (int a = 0; a <6; a ++) {hue [a3 [a] = 53; satt [a3 [a] = 95; ljus [a3 [a] = 100; }} annat om (pNumber == 4) {för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int a4 = {34, 35}; // gul int b4 = {47}; // blå int c4 = {48}; // lila
för (int a = 0; a <2; a ++) {nyans [a4 [a] = 53; satt [a4 [a] = 95; ljus [a4 [a] = 100; }
för (int b = 0; b <1; b ++) {nyans [b4 = 210; satt [b4 = 95; ljus [b4 = 100; } för (int c = 0; c <1; c ++) {hue [c4 [c] = 307; satt [c4 [c] = 95; ljus [c4 [c] = 100; }} annat om (pNumber == 5) {för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int a5 = {34, 35, 46, 47, 48, 49};
för (int a = 0; a <6; a ++) {nyans [a5 [a] = 100; satt [a5 [a] = 95; ljus [a5 [a] = 100; }} annat om (pNumber == 6) {för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int a6 = {34, 35, 46, 47, 48, 49}; // gul för (int a = 0; a <6; a ++) {hue [a6 [a] = 53; satt [a6 [a] = 95; ljus [a6 [a] = 100; }} annat om (pNumber == 7) {för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int c7 = {34, 35, 46, 47, 48, 49}; // lila för (int c = 0; c <6; c ++) {hue [c7 [c] = 307; satt [c7 [c] = 95; ljus [c7 [c] = 100; }} annat om (pNumber == 8) {för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int c8 = {34, 35, 46, 47, 48, 49}; // lila för (int c = 0; c <6; c ++) {nyans [c8 [c] = 307; satt [c8 [c] = 95; ljus [c8 [c] = 100; }} annat om (pNumber == 9) {för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int c9 = {34, 35, 46, 47, 48, 49}; // lila för (int c = 0; c <6; c ++) {nyans [c9 [c] = 307; satt [c9 [c] = 95; ljus [c9 [c] = 100; }} annat om (pNumber == 10) {för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int c10 = {34, 35, 46, 47, 48, 49}; // lila för (int c = 0; c <6; c ++) {nyans [c10 [c] = 307; satt [c10 [c] = 95; ljus [c10 [c] = 100; }} annat om (pNumber == 11) {för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int c11 = {34, 35, 46, 47, 48, 49}; // lila för (int c = 0; c <6; c ++) {hue [c11 [c] = 307; satt [c11 [c] = 95; ljus [c11 [c] = 100; }} annat om (pNumber == 12) {för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int c12 = {34, 35, 46, 47, 48, 49}; // lila för (int c = 0; c <6; c ++) {nyans [c12 [c] = 307; satt [c12 [c] = 95; ljus [c12 [c] = 100; }} annat om (pNumber == 13) {för (int i = 0; i <num; i ++) {bright = 0; gVärde = 1; } int a13 = {34, 35}; // gul int b13 = {47}; // blue int c13 = {48}; // lila för (int a = 0; a <2; a ++) {nyans [a13 [a] = 53; satt [a13 [a] = 95; ljus [a13 [a] = 100; } för (int b = 0; b <1; b ++) {hue [b13 = 210; satt [b13 = 95; ljus [b13 = 100; } för (int c = 0; c <1; c ++) {hue [c13 [c] = 307; satt [c13 [c] = 95; ljus [c13 [c] = 100; }} pNumber = pNumber + 1;
om (pNumber == 14) {
pNumber = 0; }}
void ani2 () {
// Serial.println ("2"); osignerad lång curM = millis ();
if (curM - preM> = 10) {
preM = curM; för (int i = 0; i <num; i ++) {if (nyans = 360) {gValue = -1; } nyans = nyans + gVärde ; } räknare ++; if (counter == 360) {// Serial.print ("counter:"); // Serial.println (räknare); // Serial.println (curM); räknare = 0; ani2_Counter = 0; }}}
void ani3 () {
// Serial.println ("3"); }///////////////////////////////////////////////////////////////////////// / Serial.println ("klar"); }/////////////////////////// {osignerad lång curMillis1 = millis ();
för (int i = 0; i <num; i ++) {btnState = digitalRead (btnPin ); }
if (curMillis1 - preMillis1> b_interval) {
preMillis1 = curMillis1; för (int i = 0; i = 360) {hueV = -1; } annars if (nyans <= 0) {hueV = 1; } nyans = nyans + hueV ; ljus = 100; }}}} ///////////////////////////////////////////////////// void setPixels (int k) {för (int i = 0; i <k; i ++) {H2R_HSBtoRGB (nyans , lör , ljus , färger ); int num1 = i * 3; strip.setPixelColor (num1, färger [0], färger [1], färger [2]); strip.setPixelColor (num1 + 1, färger [0], färger [1], färger [2]); strip.setPixelColor (num1 + 2, färger [0], färger [1], färger [2]); } strip.show (); }
Steg 20: Mönster
Detta projekt har flera trianglar som bildar en sexkantig form. Så du kan skapa stereoskopiska mönster efter hur du designar ljus! Tryck bara på varje bit så kommer olika färger att graderas, och när färgen du vill ha kommer ut, tryck bara på handen du tryckte på så fortsätter den att lysa vackert med den färg du ville ha!