首页
/
每日頭條
/
圖文
/
新年燈籠手工制作高難度
新年燈籠手工制作高難度
更新时间:2026-11-11 16:03:22

自制酷炫的新年燈籠

新年了,燈籠是非常有代表性的新年物件。紅紅火火的燈籠,既有美好的寓意,也是點綴新年的裝飾,還有實用的照明功效。作為DIY愛好者,必須自己做一個。

大概思路:使用ws2812b幻彩燈帶,配合亞克力闆,闆上刻上各種祝福語,投射出炫麗效果來;框架采用3D打印;控制闆使用esp01s,(配合直插led模塊),連接wifi使用BLINKER進行手機遠程控制;頂部300減速電機(5轉/分)使燈籠旋轉;3節5号電池供電。

材料與成本:整體還是比較便宜,esp01s,6元;RGB模塊,5元;減速電機、亞克力和3d打印材料都是幾塊錢。最貴的卻是電池,為了堅持長一點的時間,用的比較好的1.5恒壓充電電池,二十塊左右一顆,幾個燈籠電池花了一百多。三顆電池能堅持近二十個小時,幾塊錢的比較好的一次性堿性電池,時間差不多,但是每天都得換電池。

外殼:

新年燈籠手工制作高難度(自制酷炫的新年燈籠)1

Ws2812b燈帶:

新年燈籠手工制作高難度(自制酷炫的新年燈籠)2

亞克力面闆:

新年燈籠手工制作高難度(自制酷炫的新年燈籠)3

Esp01s:

新年燈籠手工制作高難度(自制酷炫的新年燈籠)4

減速電機:

新年燈籠手工制作高難度(自制酷炫的新年燈籠)5

Blinker控制:

新年燈籠手工制作高難度(自制酷炫的新年燈籠)6

App配置了幾個控制按鈕:

新年燈籠手工制作高難度(自制酷炫的新年燈籠)7

亮燈和黑暗環境下:

新年燈籠手工制作高難度(自制酷炫的新年燈籠)8

外殼改進了一點的新版本:

新年燈籠手工制作高難度(自制酷炫的新年燈籠)9

新年燈籠手工制作高難度(自制酷炫的新年燈籠)10

一對燈籠,紅紅火火!

新年燈籠手工制作高難度(自制酷炫的新年燈籠)11

改進版新年燈籠

附錄代碼:

#include <Adafruit_NeoPixel.h> #include <SimpleTimer.h> volatile int g_ms; volatile int g_ld; volatile int g_xh; volatile boolean g_zs; Adafruit_NeoPixel rgb_display_2 = Adafruit_NeoPixel(12,2,NEO_GRB NEO_KHZ800); SimpleTimer timer; #define BLINKER_WIFI #include <Blinker.h> char auth[] = "xxxxxxxxxxx"; char ssid[] = "xxxxx"; char pswd[] = "xxxxxxxx"; // uint32_t Wheel(byte WheelPos){ if(WheelPos < 85){ return rgb_display_2.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } else if(WheelPos < 170){ WheelPos -= 85; return rgb_display_2.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else{ WheelPos -= 170; return rgb_display_2.Color(0, WheelPos * 3, 255 - WheelPos * 3); } } void rainbow(uint8_t wait){ uint16_t i, j; for(j=0; j<256; j ){ for(i=0; i<rgb_display_2.numPixels(); i ){ rgb_display_2.setPixelColor(i, Wheel((i j) & 255)); } rgb_display_2.show(); delay(wait); } } BlinkerRGB RGB1("yanse"); void RGB1_callback(uint8_t r_value, uint8_t g_value, uint8_t b_value, uint8_t bright_value) { g_zs = false; g_ld = bright_value; rgb_display_2.setBrightness(bright_value); for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((r_value & 0xffffff) << 16) | ((g_value & 0xffffff) << 8) | b_value); rgb_display_2.show(); delay(50); } } BlinkerButton Button2("btn-ss"); void Button2_callback(const String & state) { g_ms = 2; g_zs = true; } BlinkerButton Button3("btn-hx"); void Button3_callback(const String & state) { g_ms = 3; g_zs = true; } BlinkerButton Button4("btn-ch"); void Button4_callback(const String & state) { g_ms = 4; g_zs = true; } BlinkerButton Button5("btn-xz"); void Button5_callback(const String & state) { g_ms = 5; g_zs = true; } BlinkerButton Button6("btn-xh"); void Button6_callback(const String & state) { g_ms = 6; g_zs = true; } void shanshuo() { for (int j = 1; j <= 3; j = j (1)) { for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((255 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 0); rgb_display_2.show(); } delay(100); for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 0); rgb_display_2.show(); } delay(50); } for (int j = 1; j <= 3; j = j (1)) { for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((255 & 0xffffff) << 16) | ((255 & 0xffffff) << 8) | 0); rgb_display_2.show(); } delay(100); for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 0); rgb_display_2.show(); } delay(50); } for (int j = 1; j <= 3; j = j (1)) { for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((255 & 0xffffff) << 8) | 0); rgb_display_2.show(); } delay(100); for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 0); rgb_display_2.show(); } delay(50); } for (int j = 1; j <= 3; j = j (1)) { for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((255 & 0xffffff) << 8) | 255); rgb_display_2.show(); } delay(100); for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 0); rgb_display_2.show(); } delay(50); } for (int j = 1; j <= 3; j = j (1)) { for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 255); rgb_display_2.show(); } delay(100); for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 0); rgb_display_2.show(); } delay(50); } for (int j = 1; j <= 3; j = j (1)) { for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((255 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 255); rgb_display_2.show(); } delay(100); for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 0); rgb_display_2.show(); } delay(50); } for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((255 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 0); rgb_display_2.show(); } rgb_display_2.setBrightness(g_ld); rgb_display_2.show(); } void Simple_timer_1() { if (g_zs) { rgb_display_2.setBrightness(g_ld); rgb_display_2.show(); switch (g_ms) { case 2: shanshuo(); break; case 3: huxi(); break; case 4: rainbow(50); rgb_display_2.show(); break; case 5: xuanzh(); break; case 6: g_xh = g_xh 1; if (g_xh == 5) { g_xh = 1; } switch (g_xh) { case 1: xuanzh(); break; case 2: huxi(); break; case 3: rainbow(20); rgb_display_2.show(); break; case 4: shanshuo(); break; } break; } } } void huxi() { for (int j = 1; j <= 5; j = j (1)) { for (int i = 1; i <= 32; i = i (1)) { rgb_display_2.setBrightness((i * 3)); rgb_display_2.show(); delay(20); } delay(100); for (int i = 32; i >= 1; i = i (-1)) { rgb_display_2.setBrightness((i * 3)); rgb_display_2.show(); delay(20); } } rgb_display_2.setBrightness(g_ld); rgb_display_2.show(); } void xuanzh() { for (int j = 1; j <= 2; j = j (1)) { for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((255 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 0); rgb_display_2.show(); delay(40); } for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((255 & 0xffffff) << 16) | ((255 & 0xffffff) << 8) | 0); rgb_display_2.show(); delay(40); } for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((255 & 0xffffff) << 8) | 0); rgb_display_2.show(); delay(40); } for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((255 & 0xffffff) << 8) | 255); rgb_display_2.show(); delay(40); } for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((0 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 255); rgb_display_2.show(); delay(40); } for (int i = 1; i <= 12; i = i (1)) { rgb_display_2.setPixelColor((i)-1, ((255 & 0xffffff) << 16) | ((0 & 0xffffff) << 8) | 255); rgb_display_2.show(); delay(40); } } } void setup(){ g_ms = 6; g_ld = 60; g_xh = 0; g_zs = true; rgb_display_2.begin(); Blinker.begin(auth,ssid,pswd); rainbow(30); rgb_display_2.show(); RGB1.attach(RGB1_callback); Button2.attach(Button2_callback); Button3.attach(Button3_callback); Button4.attach(Button4_callback); Button5.attach(Button5_callback); Button6.attach(Button6_callback); timer.setInterval(10000L, Simple_timer_1); } void loop(){ //1、yanse,顔色與亮度;2、btn-ss,閃爍;3、btn-hx,呼吸; //4、btn-ch,彩虹;5、btn-xz,旋轉;6、btn-xh,循環。 Blinker.run(); timer.run(); }

Blinker界面配置:

{¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨light¨¨background¨{¨img¨´´}}¨dashboard¨|{¨type¨¨col¨¨t0¨¨顔色亮度¨¨clr¨¨#389BEE¨¨bg¨Ë¨cols¨Ï¨rows¨Ï¨key¨¨yanse¨´x´Ê´y´Ê¨speech¨|÷¨lstyle¨É}{ß8¨btn¨¨ico¨¨fad fa-lightbulb-on¨¨mode¨ÊßA¨閃爍¨¨t1¨¨文本2¨ßEËßFËßGËßH¨btn-ss¨´x´Ï´y´ÒßJ|÷ßKÉßC¨#076EEF¨}{ß8ßLßM¨fad fa-heartbeat¨ßOÊßA¨呼吸¨ßQßRßEËßFËßGËßH¨btn-hx¨´x´Ë´y´ÒßJ|÷ßKÉßC¨#EA0909¨}{ß8ßLßM¨fad fa-sun¨ßOÉßA¨彩虹¨ßQßRßEËßFËßGËßH¨btn-ch¨´x´É´y´ÒßJ|÷ßC¨#FBA613¨}{ß8ßLßM¨fad fa-repeat-alt¨ßOÉßA¨循環¨ßQßRßEËßFËßGËßH¨btn-xh¨´x´Ì´y´¤CßJ|÷ßC¨#00A90C¨}{ß8ßLßM¨fad fa-fan¨ßOÉßA¨旋轉¨ßQßRßEËßFËßGËßH¨btn-xz¨´x´Í´y´ÒßJ|÷ßC¨#6010E4¨}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡¨on¨¨打開?name¨¨off¨¨關閉?name¨—÷¨triggers¨|{¨source¨ßm¨source_zh¨¨開關狀态¨¨state¨|ßoßq÷¨state_zh¨|¨打開¨¨關閉¨÷}÷}

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
楊祐甯身材怎麼保持(性格好會做飯愛運動)
楊祐甯身材怎麼保持(性格好會做飯愛運動)
  最近,電視劇《都挺好》爆火,   這部講述家長裡短的都市劇,戳到不少人的痛點。      姚晨飾演的女主蘇明玉是“樊勝美二号”,生長在重男輕女家庭,不到18歲被趕出家門,事業成功後又陷入原生家庭的漩渦中,被壓榨,被嫌棄,又被牽絆。      然而在這一地雞毛裡,無數人意外收獲一枚“完美男神”——楊祐甯。      他飾演的石天東,是一個帥哥名廚,蘇明玉受...
2026-11-11
國漫三大男主霸氣語錄(新鮮出爐的國漫一念永恒)
國漫三大男主霸氣語錄(新鮮出爐的國漫一念永恒)
  視美最近出品的動漫都,太可了。《一念永恒》視美今年的另一部新作,你們看過了嗎?劇情還不錯哦,也是小說改編的哦。《一念永恒》是改編自“網文之王”五大至尊之一的耳根創作的同名小說。      《一念永恒》這部動漫是在今年的8月份開始播出的,跟視美的另一部新動漫《民調局異聞錄》的播出時間就相差幾天,不過也是一部非常好看的國産動漫,動漫中的男主也是十分的逗比,引...
2026-11-11
踔厲奮發勇擔當笃行不怠促發展(踔厲奮發笃行不怠)
踔厲奮發勇擔當笃行不怠促發展(踔厲奮發笃行不怠)
  蒲城縣愛心商會揚帆遠航……   乘着蒲城縣工商聯(總商會)第十二屆代表大會的東風,蒲城縣愛心商會第三屆會員代表大會即将召開。      五月的陽光祥和普照,祖國繁榮昌盛!今天,蒲城縣愛心商會常務委員會組織部分會員代表走訪會員企業,勉勵大家從疫情困境中走出來,要求企業加強管理,提升企業核心競争力。      大家熱情高漲,走訪了【陝西蒲城迪鑫汽車服務有限公...
2026-11-11
長期分居兩地的夫妻有什麼變化(兩地分居的夫妻都是什麼樣的狀态)
長期分居兩地的夫妻有什麼變化(兩地分居的夫妻都是什麼樣的狀态)
  生活中,常常會有很多夫妻因為各種原因兩地分居,仔細想想,其中夾雜了太多的無奈和心酸,讓人不勝唏噓。那麼,現實中,兩地分居的夫妻都是什麼樣子的呢?我們一起來看看網友們的說法~                        ​​​​​​​​​   ,
2026-11-11
浙江十大最美的小衆海島(藏了個世外桃源)
浙江十大最美的小衆海島(藏了個世外桃源)
     ◆ ◆ ◆ ◆ ◆   素有“東海明珠”之稱,小島坐落在東海一隅,雖不見印象中的椰風海韻,甚至沒有細軟的沙灘,卻足夠小衆、足夠治愈,礁岸邊微醺的海風低調地承包了無數人對大海的所有想象↓      視覺旅圖@趙高翔Moor/攝   大陳島,位于台州椒江,其名最早見于《鄭和航海圖》記載。在500年風雲跌蕩中曆經巅簸,她曾經見證了無數硝煙,成就了一段激情...
2026-11-11
Copyright 2023-2026 - www.tftnews.com All Rights Reserved