回到顶部 回到顶部

旋转六角灯笼 简单

头像 江志灏 2021.01.13 1091 0

复刻方向 

既然是REMAKE再造,我的想法的复刻中国古代皇宫的六角宫灯。复刻的原因好简单,制作灯笼是我校的传统特色课程、,每年的中秋节,学校会组织学生进行传统手工灯笼的制作的教学课程。经调查发现由于传统手工技术的限制,学生制作灯笼的工艺只能用剪纸,或者用矿泉水瓶或塑料,纸片等来做外壳,发光装置普遍用传统的蜡烛。这种制作过程周期比较长,制作灯笼的结构不够稳定,使用的周期不够长,中秋节过后,这些灯笼就就要扔掉,造成一种浪费。同时蜡烛只能一次性使用,不能够循环使用。为解决这些问题,我对灯笼的制作方法进行了改良。我利用3Donecut三维建模软件进行灯笼的三维建模,利用LaserMaker进行灯笼外观设计的深加工,培养了学生的数学计算思维。然后用激光切割机切割出灯笼的外观,改变了传统灯笼外观的制作方式。灯笼发光部分我将传统的蜡烛,改为全彩的ws2812B幻彩灯带,颜色和亮度可以根据需要进行调节,让灯笼可以发射出绚丽多姿的灯光颜色。为了让灯光的效果更好,灯笼的外观采用雕花镂空设计,灯笼的灯柱利用进步电机进行旋转控制,让灯光同过镂空的外观使灯光变得更加丰富多彩。本课程设计培养学生三维建模的能力,能够理解好物体空间的三维关系,培养学生的想象力和创新能力,学生可以根据自己的爱好和想象设计出不同的外观镂空图案,培养学生三维图转二维图再到三维图形的空间变换能力。通过动手实践,外观的制作和拼接培养学生的的动手能力,工程思维,和艺术的审美能力。灯笼发光装置的电路连接,培养的学生对电路原理的理解。编写程序,控制进步电机的旋转和LED灯带的灯光控制,培养了学生的编程思维能力。在灯笼的制作过程中,学生会遇到各种困难和挫折,例如设计出的图纸的尺寸大小不合适,学生要重新设计,培养学生面对挫折,热爱科学,热爱中国传统文化的爱国情感。

步骤1 先利用3Done cut三维建模软件进行六角灯笼的三维建模。

project-image

步骤2 将建模好的三维模型进行投影,转换到二维平面。如图2所示

project-image

步骤3 将二维图形以dxf格式导出。如图3所示

project-image

步骤4 将导出的dxf文件在LaserMaker中打开。如图4所示

project-image

步骤5 在LaserMaker中绘制六角灯笼外观的镂空部分。如图5所示

project-image

步骤6 在LaserMaker中绘制六角灯笼的底座结构部分。如图6所示

project-image

步骤7 完成图纸设计后,将图纸导出,放到激光切割机中进行切割。如图7所示

project-image

步骤8 切割完成后拼装六角灯笼的整体外观,如图8所示

project-image

步骤9 组装好外观后,对进步电机的电路进行连接,如图9所示

project-image

步骤10 做到这一步,为了找到合适的灯柱,因我家在农村,所以我到竹园用游标卡尺来测量灯柱半径,找了一根比较合适的竹子作为灯柱如图10所示

project-image

步骤11 将灯柱和LED灯带连接起来,如图11所示

project-image

步骤12 将灯柱和底座用热熔胶枪固定在一起,如图12所示

project-image

步骤13 用mixly编写进步电机的控制程序,程序如图13所示

project-image

步骤14 14、用arduino IDE编写LDE灯带的控制程序,程序如下:

#include #define LED_PIN 5 //连接WS2812B灯带 D5 #define NUM_LEDS 60 //LED数量(可更改) #define BRIGHTNESS 64 //亮度(可更改最大为100) #define LED_TYPE WS2811 #define COLOR_ORDER GRB CRGB leds[NUM_LEDS]; #define UPDATES_PER_SECOND 100 // 此示例显示了设置和使用颜色“调色板”的几种方法 // 使用FastLED. /* // 这些紧凑的调色板为您重新着色提供了简便的方法 // 动态,快速,轻松且开销低的动画。 // // 实际上,使用调色板比理论上更简单,所以首先 // 运行此项目,并观看漂亮的灯光编码。 // 尽管此草图具有八种(或更多)不同的配色方案, // 整个项目在AVR上可编译为大约6.5K程序。 // // FastLED提供了一些预配置的调色板,并使其成为 // 非常容易用调色板组成自己的配色方案。 // // 有关以下内容的更抽象的“理论和实践”的一些注释 // FastLED紧凑调色板的解释位于此文件的底部。 */ CRGBPalette16 currentPalette; TBlendType currentBlending; extern CRGBPalette16 myRedWhiteBluePalette; extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM; void setup() { delay( 3000 ); // 上电安全延迟 FastLED.addLeds(leds, NUM_LEDS).setCorrection( TypicalLEDStrip ); FastLED.setBrightness( BRIGHTNESS ); currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; } void loop() { ChangePalettePeriodically(); static uint8_t startIndex = 0; startIndex = startIndex + 1; /* 运动速度 */ FillLEDsFromPaletteColors( startIndex); FastLED.show(); FastLED.delay(1000 / UPDATES_PER_SECOND); } void FillLEDsFromPaletteColors( uint8_t colorIndex) { uint8_t brightness = 255; for( int i = 0; i < NUM_LEDS; i++) { leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending); colorIndex += 3; } } /* // 这里展示了几种不同的调色板。 // // FastLED提供了几种“预设”调色板:RainbowColors_p,RainbowStripeColors_p, // OceanColors_p,CloudColors_p,LavaColors_p,ForestColors_p和PartyColors_p。 // // 另外,您可以手动定义自己的调色板,也可以编写 // 即时创建调色板的代码。 全部显示在这里。 */ void ChangePalettePeriodically() { uint8_t secondHand = (millis() / 1000) % 60; static uint8_t lastSecond = 99; if( lastSecond != secondHand) { lastSecond = secondHand; if( secondHand == 0) { currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; } if( secondHand == 10) { currentPalette = RainbowStripeColors_p; currentBlending = NOBLEND; } if( secondHand == 15) { currentPalette = RainbowStripeColors_p; currentBlending = LINEARBLEND; } if( secondHand == 20) { SetupPurpleAndGreenPalette(); currentBlending = LINEARBLEND; } if( secondHand == 25) { SetupTotallyRandomPalette(); currentBlending = LINEARBLEND; } if( secondHand == 30) { SetupBlackAndWhiteStripedPalette(); currentBlending = NOBLEND; } if( secondHand == 35) { SetupBlackAndWhiteStripedPalette(); currentBlending = LINEARBLEND; } if( secondHand == 40) { currentPalette = CloudColors_p; currentBlending = LINEARBLEND; } if( secondHand == 45) { currentPalette = PartyColors_p; currentBlending = LINEARBLEND; } if( secondHand == 50) { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND; } if( secondHand == 55) { currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; } } } // 此功能使用完全随机的颜色填充调色板。 void SetupTotallyRandomPalette() { for( int i = 0; i < 16; i++) { currentPalette[i] = CHSV( random8(), 255, random8()); } } /* // 此函数设置了黑白条纹的调色板, // 使用代码。 由于调色板实际上是一个数组 // 16种CRGB颜色,可以使用各种fill_ *函数 // 进行设置。 */ void SetupBlackAndWhiteStripedPalette() { // “遮盖”所有16个调色板条目... fill_solid( currentPalette, 16, CRGB::Black); // 并将每四分之一设置为白色。 currentPalette[0] = CRGB::White; currentPalette[4] = CRGB::White; currentPalette[8] = CRGB::White; currentPalette[12] = CRGB::White; } // 此功能设置了紫色和绿色条纹的调色板。 void SetupPurpleAndGreenPalette() { CRGB purple = CHSV( HUE_PURPLE, 255, 255); CRGB green = CHSV( HUE_GREEN, 255, 255); CRGB black = CRGB::Black; currentPalette = CRGBPalette16( green, green, black, black, purple, purple, black, black, green, green, black, black, purple, purple, black, black ); } /* // 此示例说明如何设置静态调色板 // 存储在PROGMEM(闪存)中,几乎总是 // 比RAM丰富。 像这样的静态PROGMEM调色板 // 占用64个字节的Flash。 */ const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM = { CRGB::Red, CRGB::Gray, // 与红色和蓝色相比,“白色”太亮 CRGB::Blue, CRGB::Black, CRGB::Red, CRGB::Gray, CRGB::Blue, CRGB::Black, CRGB::Red, CRGB::Red, CRGB::Gray, CRGB::Gray, CRGB::Blue, CRGB::Blue, CRGB::Black, CRGB::Black };

步骤15 将程序上传到mini红板上面,连接好12V课可充电锂电池。执行效果如图15所示

project-image

步骤16 下面观看一下视频,看一下总体效果。

评论

user-avatar