复刻方向
既然是REMAKE再造,我的想法的复刻中国古代皇宫的六角宫灯。复刻的原因好简单,制作灯笼是我校的传统特色课程、,每年的中秋节,学校会组织学生进行传统手工灯笼的制作的教学课程。经调查发现由于传统手工技术的限制,学生制作灯笼的工艺只能用剪纸,或者用矿泉水瓶或塑料,纸片等来做外壳,发光装置普遍用传统的蜡烛。这种制作过程周期比较长,制作灯笼的结构不够稳定,使用的周期不够长,中秋节过后,这些灯笼就就要扔掉,造成一种浪费。同时蜡烛只能一次性使用,不能够循环使用。为解决这些问题,我对灯笼的制作方法进行了改良。我利用3Donecut三维建模软件进行灯笼的三维建模,利用LaserMaker进行灯笼外观设计的深加工,培养了学生的数学计算思维。然后用激光切割机切割出灯笼的外观,改变了传统灯笼外观的制作方式。灯笼发光部分我将传统的蜡烛,改为全彩的ws2812B幻彩灯带,颜色和亮度可以根据需要进行调节,让灯笼可以发射出绚丽多姿的灯光颜色。为了让灯光的效果更好,灯笼的外观采用雕花镂空设计,灯笼的灯柱利用进步电机进行旋转控制,让灯光同过镂空的外观使灯光变得更加丰富多彩。本课程设计培养学生三维建模的能力,能够理解好物体空间的三维关系,培养学生的想象力和创新能力,学生可以根据自己的爱好和想象设计出不同的外观镂空图案,培养学生三维图转二维图再到三维图形的空间变换能力。通过动手实践,外观的制作和拼接培养学生的的动手能力,工程思维,和艺术的审美能力。灯笼发光装置的电路连接,培养的学生对电路原理的理解。编写程序,控制进步电机的旋转和LED灯带的灯光控制,培养了学生的编程思维能力。在灯笼的制作过程中,学生会遇到各种困难和挫折,例如设计出的图纸的尺寸大小不合适,学生要重新设计,培养学生面对挫折,热爱科学,热爱中国传统文化的爱国情感。
步骤1 先利用3Done cut三维建模软件进行六角灯笼的三维建模。
步骤2 将建模好的三维模型进行投影,转换到二维平面。如图2所示
步骤4 将导出的dxf文件在LaserMaker中打开。如图4所示
步骤5 在LaserMaker中绘制六角灯笼外观的镂空部分。如图5所示
步骤6 在LaserMaker中绘制六角灯笼的底座结构部分。如图6所示
步骤7 完成图纸设计后,将图纸导出,放到激光切割机中进行切割。如图7所示
步骤8 切割完成后拼装六角灯笼的整体外观,如图8所示
步骤9 组装好外观后,对进步电机的电路进行连接,如图9所示
步骤10 做到这一步,为了找到合适的灯柱,因我家在农村,所以我到竹园用游标卡尺来测量灯柱半径,找了一根比较合适的竹子作为灯柱如图10所示
步骤11 将灯柱和LED灯带连接起来,如图11所示
步骤12 将灯柱和底座用热熔胶枪固定在一起,如图12所示
步骤13 用mixly编写进步电机的控制程序,程序如图13所示
步骤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所示
向技术大佬学习学习2023.03.29
好厉害,求分享
腿毛利小五郎2023.03.02
很漂亮的灯