Table des matières:
- Fournitures
- Étape 1: Faisons-le
- Étape 2: Préparation du matériel
- Étape 3: Découpe de l'acrylique
- Étape 4: Faire des côtés avec des imprimantes 3D
- Étape 5: Filmer
- Étape 6: Fixez la bande LED + la bande LED à souder (NeoPixel) avec des fils
- Étape 7: Souder le commutateur tactile avec des fils
- Étape 8: Assemblage - Insérez le boulon sur le côté = ①
- Étape 9: Attachez Ⓛⓣ au Ⓒ= ②
- Étape 10: Assemblage -Utilisez un et Ⓝ pour combiner ① et ②= ③
- Étape 11: Assemblage - Attachez Ⓐⓔ et ③ à l'aide d'un liant acrylique = ④
- Étape 12: Attachez Ⓢ à Ⓓ= ⑤
- Étape 13: Assemblage -Combinez ④ et ⑤ En utilisant Ⓦ et Ⓝ= ⑥
- Étape 14: Assemblage complet de la pièce
- Étape 15: L'apparence fonctionnelle d'un projet
- Étape 16: NeoPixel, câblage du connecteur
- Étape 17: Câblage NeoPixel et Arduino
- Étape 18: programmer l'Arduino
- Étape 19:
- Étape 20: Modèles
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
membres de l'équipe de projet
(Hyewon Shin, Eunjeong Ko, Junsung Yi)
Et si vous pouviez toucher et concevoir la lumière ? Que ressentiriez-vous si vous aviez un beau motif de lumière que vous avez conçu vous-même avec une animation intéressante ? Light me up sera un carnet de croquis intéressant qui touche et conçoit la lumière elle-même et fait des motifs intéressants ! Ce projet a plusieurs triangles qui forment un forme hexagonale. Ainsi, vous pouvez créer des motifs stéréoscopiques selon votre façon de concevoir la lumière ! Appuyez simplement sur chaque pièce et différentes couleurs seront graduées, et lorsque la couleur que vous voulez sortira, frappez simplement la main que vous avez appuyée et elle continuera à briller magnifiquement avec la couleur que vous vouliez ! Le projet a utilisé environ 312 triangles, mais il pourrait créer une belle lumière qui fonctionne bien avec 6 triangles. Maintenant, laissez-moi vous montrer comment le faire avec six triangles. Suivez les étapes et vous aurez votre propre travail merveilleux !
Fournitures
Matériel: Arduino (j'ai utilisé arduino mega 2560), acrylique (clair, blanc), bande LED (NeoPixel), film diffuseur, bouton, connecteur 4 broches, fil, carte de circuit imprimé, alimentation
Outils: Machine de découpe à guidage laser, Imprimante 3D
Étape 1: Faisons-le
Faisons cette jolie pièce hexagonale avec moi !
Le Light Me Up est composé de 312 triangles, mais même 6 triangles peuvent créer une lumière merveilleuse. Si vous souhaitez le faire à plus grande échelle, vous pouvez le faire en vous référant au fichier joint ci-dessous.
Étape 2: Préparation du matériel
Étape 3: Découpe de l'acrylique
Utilisez un cutter laser pour couper l'avant et l'arrière de chaque partie. La couleur de l'acrylique au dos peut être celle que vous voulez, mais assurez-vous d'utiliser de l'acrylique transparent car le devant doit être estompé ! Si vous utilisez une couleur acrylique autre que transparente, vous ne verrez pas bien la lumière.
Étape 4: Faire des côtés avec des imprimantes 3D
Il est maintenant temps de faire les côtés de chaque pièce. Allons-y ! Les fichiers de modélisation 3D sur le côté sont joints ci-dessous. Nous avons utilisé le PLA pour faire des côtés Le PLA est plus fort et moins de contractions que l'ABS, donc les filaments sont recommandés pour utiliser le PLA.
Étape 5: Filmer
Posons maintenant un léger film de diffusion sur l'acrylique sur le devant. Si vous mettez un film dessus, il s'étale et brille beaucoup plus joli. Tout d'abord, coupez le film en forme de triangle. (Vous feriez mieux de couper le film plus grand que l'acrylique coupé) Il est simple de mettre un film, comme un film protecteur sur votre téléphone. Si vous voulez donner un pourboire ici, vous pouvez utiliser une carte pour le pousser afin qu'il puisse être soigneusement collé !
Étape 6: Fixez la bande LED + la bande LED à souder (NeoPixel) avec des fils
Si vous avez été si doué pour souder la bande LED, il est temps de mettre la bande LED à l'arrière. Tout d'abord, fixez un pistolet à colle ou du ruban adhésif double face à l'arrière de la bande LED. Et retirez d'abord les fils des deux côtés du fil à souder à travers les trous des deux côtés. Enfin, fixez la bande LED à l'acrylique arrière et c'est fini !
C'est l'heure de la soudure ! préparez des bandes LED, des connecteurs à 4 broches (connecteur ou fils) et ce dont vous avez besoin pour la soudure. J'ai utilisé des LED dans trois unités. Vous pouvez utiliser une ou deux LED si vous le souhaitez, mais je recommande d'en utiliser trois. Lorsque tous les matériaux sont prêts, soudez les fils dans les deux lignes de données, les lignes 5 V et les lignes de masse de la bande LED.
Étape 7: Souder le commutateur tactile avec des fils
Étape 8: Assemblage - Insérez le boulon sur le côté = ①
Maintenant, c'est une partie vraiment facile! Placez un boulon sur chacun des trois côtés imprimés en 3D. La raison pour laquelle l'utilisation du bouton de boulon comme l'utilisation d'un boulon et d'écrous structurels sera en mesure de faire. Lorsque la pièce est terminée, je vais mettre la pièce dans l'étui et la finir avec un écrou.
Étape 9: Attachez Ⓛⓣ au Ⓒ= ②
Étape 10: Assemblage -Utilisez un et Ⓝ pour combiner ① et ②= ③
Étape 11: Assemblage - Attachez Ⓐⓔ et ③ à l'aide d'un liant acrylique = ④
Si vous mettez un boulon sur le côté, nous le mettrons sur le côté et l'avant. Le devant est en acrylique, vous devez donc le mettre avec un lien acrylique dédié. Si vous attachez de l'acrylique à un lien régulier, cela laissera une marque.
Étape 12: Attachez Ⓢ à Ⓓ= ⑤
Étape 13: Assemblage -Combinez ④ et ⑤ En utilisant Ⓦ et Ⓝ= ⑥
Étape 14: Assemblage complet de la pièce
Étape 15: L'apparence fonctionnelle d'un projet
Étape 16: NeoPixel, câblage du connecteur
Étape 17: Câblage NeoPixel et Arduino
Étape 18: programmer l'Arduino
extern volatile non signé long timer0_millis;
#comprendre
#define MODEBTNNUM 3 int ani_mode = 0; long non signé preM1, preM2, preM3;
void setup() {
Fil.begin(); for (int i = 0; i < MODEBTNNUM; i++) { pinMode(i + 2, INPUT_PULLUP); } //Serial.begin(9600); }
boucle vide() {
for (int i = 0; i < MODEBTNNUM; i++) { if (!digitalRead(i + 2)) ani_mode = i + 1; } pour (int i = 0; i < 6; i++) { Wire.requestFrom(i + 1, 1); while (Wire.available()) { int x = Wire.read(); // Serial.println(x); if (x == 5) { ani_mode = 0; // Serial.println("x=5"); } } } ///////////////////////////////////////////// /////// if (ani_mode == 0) { for (int i = 1; i 3000) { preM1 = current1; for (int i = 1; i 5000) { preM2 = current2; pour (int i = 1; i 3000) { preM3 = courant3; // timer0_millis = 0; // preM1 = 0; // preM2 = 0; // préM3 = 0; // Serial.println("timer reset"); for (int i = 1; i < 7; i++) { Wire.beginTransmission(i); Wire.write(ani_mode); //Série.println("3000"); Wire.endTransmission(i); } } } }
Étape 19:
extern volatile non signé long timer0_millis;
#comprendre
#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 couleurs[num][3]; int teinte[num]; int sat[num]; int brillant[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, 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]; booléen 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, 1 }; #include #define BTNNUM 1 int f_v = 1; long preMillis1 non signé; long preM non signé; int ani_mode = 0; int ani2_Counter = 0; compteur entier = 0; //////////////////////////////////////// void setup() { Wire. commencer(Numesclave); Wire.onRequest(requestEvent); Wire.onReceive(receiveEvent); for (int i = 0; i < num; i++) { pinMode(btnPin, INPUT_PULLUP); } //Serial.begin(9600); strip.begin(); } /////////////////////////////////////////
boucle vide() {
if (f_v == 1) { for (int i = 0; i < num; i++) { hue = 50; sat = 95; brillant = 100; } f_v = 0; } //////////////////////////////////// //버튼 입력 체크:멈춤신호 보내기 btnMode = faux; for (int i = 0; i < num; i++) { if (!digitalRead(btnPin)) { btnMode = true; } } btnEvent(5); // Serial.println(ani_mode); /////////////////////////////////// switch (ani_mode) { case 0: ani0(); Pause; cas 1: ani1(); ani_mode = 0; ani2_Counter = 0; Pause; cas 2: ani2_Counter = 1; ani_mode = 0; Pause; cas 3: ani3(); ani_mode = 0; ani2_Counter = 0; Pause; par défaut: readyState(); Pause; } si (ani2_Counter == 1) { ani2(); } setPixels(nombre); }
///////////////////////////////////////////
void receiveEvent(int howMany) { int x = Wire.read(); if (x == 5) { // Serial.println("reçu 5"); ani_mode = 0; } mode_ani = x; // Serial.println(ani_mode); } //////////////////////////////////////// void requestEvent() {
if (btnMode == vrai) {
Wire.write(5); // Serial.println("5 보냄"); } else { Wire.write(0); }
}
vide ani0() {
// Serial.println("0"); }
vide ani1() {
// Serial.println("1"); if (pNumber == 0) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } entier a1 = {25, 26}; int b1 = {39, 52}; int c1 = {40, 53}; for (int a = 0; a < 2; a++) { hue[a1[a] = 100; sat[a1[a] = 95; brillant[a1[a] = 100; } pour (int b = 0; b < 2; b++) { teinte[b1 = 200; sat[b1 = 95; brillant[b1 = 100; } pour (int c = 0; c < 2; c++) { teinte[c1[c] = 300; sat[c1[c] = 95; brillant[c1[c] = 100; } // Serial.println("0"); } else if (pNumber == 1) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } entier a2 = {21, 22, 34, 35, 37, 46, 47, 51}; // int b2 = {}; // int c2 = {}; entier d2 = {36, 48, 49, 50}; for (int a = 0; a < 8; a++) { hue[a2[a] = 26; sat[a2[a] = 95; brillant[a2[a] = 100; } pour (int d = 0; d < 4; d++) { teinte[d2[d] = 63; sat[d2[d] = 95; brillant[d2[d] = 100; } // Serial.println("1"); } else if (pNumber == 2) { // motif de cube géant pour (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } int a14 = {34, 35, 46, 47, 48, 49};//jaune 06 pour (int a = 0; a < 6; a++) { hue[a14[a] = 35; sat[a14[a] = 95; brillant[a14[a] = 100; } } else if (pNumber == 3) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } int a3 = {34, 35, 46, 47, 48, 49};//jaune pour (int a = 0; a < 6; a++) { hue[a3[a] = 53; sat[a3[a] = 95; brillant[a3[a] = 100; } } else if (pNumber == 4) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } int a4 = {34, 35};//jaune int b4 = {47};//bleu int c4 = {48};//violet
for (int a = 0; a < 2; a++) { hue[a4[a] = 53; sat[a4[a] = 95; brillant[a4[a] = 100; }
pour (int b = 0; b < 1; b++) { teinte[b4 = 210; sat[b4 = 95; brillant[b4 = 100; } pour (int c = 0; c < 1; c++) { teinte[c4[c] = 307; sat[c4[c] = 95; brillant[c4[c] = 100; } } else if (pNumber == 5) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } entier a5 = {34, 35, 46, 47, 48, 49};
for (int a = 0; a < 6; a++) { hue[a5[a] = 100; sat[a5[a] = 95; brillant[a5[a] = 100; } } else if (pNumber == 6) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } int a6 = {34, 35, 46, 47, 48, 49};//jaune pour (int a = 0; a < 6; a++) { hue[a6[a] = 53; sat[a6[a] = 95; brillant[a6[a] = 100; } } else if (pNumber == 7) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } int c7 = {34, 35, 46, 47, 48, 49};//violet pour (int c = 0; c < 6; c++) { hue[c7[c] = 307; sat[c7[c] = 95; brillant[c7[c] = 100; } } else if (pNumber == 8) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } entier c8 = {34, 35, 46, 47, 48, 49}; //violet pour (int c = 0; c < 6; c++) { hue[c8[c] = 307; sat[c8[c] = 95; brillant[c8[c] = 100; } } else if (pNumber == 9) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } entier c9 = {34, 35, 46, 47, 48, 49}; //violet pour (int c = 0; c < 6; c++) { hue[c9[c] = 307; sat[c9[c] = 95; brillant[c9[c] = 100; } } else if (pNumber == 10) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } entier c10 = {34, 35, 46, 47, 48, 49}; //violet pour (int c = 0; c < 6; c++) { hue[c10[c] = 307; sat[c10[c] = 95; brillant[c10[c] = 100; } } else if (pNumber == 11) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } entier c11 = {34, 35, 46, 47, 48, 49}; //violet pour (int c = 0; c < 6; c++) { hue[c11[c] = 307; sat[c11[c] = 95; brillant[c11[c] = 100; } } else if (pNumber == 12) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } entier c12 = {34, 35, 46, 47, 48, 49}; //violet pour (int c = 0; c < 6; c++) { hue[c12[c] = 307; sat[c12[c] = 95; brillant[c12[c] = 100; } } else if (pNumber == 13) { for (int i = 0; i < num; i++) { bright = 0; gValeur = 1; } entier a13 = {34, 35}; //jaune int b13 = {47}; //bleu int c13 = {48}; //violet pour (int a = 0; a < 2; a++) { hue[a13[a] = 53; sat[a13[a] = 95; brillant[a13[a] = 100; } pour (int b = 0; b < 1; b++) { teinte[b13 = 210; sat[b13 = 95; brillant[b13 = 100; } pour (int c = 0; c < 1; c++) { teinte[c13[c] = 307; sat[c13[c] = 95; brillant[c13[c] = 100; } } pNumber = pNumber + 1;
si (pNombre == 14) {
pNombre = 0; } }
vide ani2() {
// Serial.println("2"); curM long non signé = millis();
if (curM - preM >= 10) {
preM = curM; for (int i = 0; i < num; i++) { if (hue = 360) { gValue = -1; } teinte = teinte + gValeur; } compteur++; if (compteur == 360) { // Serial.print("compteur: "); // Serial.println(compteur); // Serial.println(curM); compteur = 0; ani2_Counter = 0; } } }
vide ani3() {
// Serial.println("3"); } //////////////////////////////////////// void readyState() { / / Serial.println("prêt"); } //////////////////////////////////////// void btnEvent(int b_interval) { long curMillis1 non signé = millis();
for (int i = 0; i < num; i++) { btnState = digitalRead(btnPin); }
if (curMillis1 - preMillis1 > b_interval) {
preMillis1 = curMillis1; pour (int i = 0; i = 360) { hueV = -1; } else if (teinte <= 0) { teinteV = 1; } teinte = teinte + teinteV; brillant = 100; } } } } ///////////////////////////////////////// void setPixels(int k) { pour (int i = 0; i < k; i++) { H2R_HSBtoRGB(hue, sat, bright, colours); entier num1 = i * 3; strip.setPixelColor(num1, couleurs[0], couleurs[1], couleurs[2]); strip.setPixelColor(num1 + 1, couleurs[0], couleurs[1], couleurs[2]); strip.setPixelColor(num1 + 2, couleurs[0], couleurs[1], couleurs[2]); } strip.show(); }
Étape 20: Modèles
Ce projet a plusieurs triangles qui forment une forme hexagonale. Ainsi, vous pouvez créer des motifs stéréoscopiques selon votre façon de concevoir la lumière ! Appuyez simplement sur chaque pièce et différentes couleurs seront graduées, et lorsque la couleur que vous voulez sortira, frappez simplement la main sur laquelle vous avez appuyé et elle continuera à briller magnifiquement avec la couleur que vous vouliez !