16X16像素屏


ChangeCode
原创
发布时间: 2025-06-11 10:06:26 | 阅读数 0收藏数 0评论数 0
封面
起因:看到有博主自己做的像素屏,能玩俄罗斯方块、贪吃蛇啥的,我也买了一个像素屏。买回来以后就一直吃灰,今天又手痒了,拿出来玩玩,先给他套一个外壳。 目的:制作16X16像素屏的外壳。

准备工作:

材料:

材料名称
数量
备注
16X16像素屏(WS2812b)
1
/
160mmX160mmX2mm透明亚克力板
1
(可用A4纸替代)
arduino nano单片机
1
/

工具:

工具名称
数量
备注
尺子
1
/
游标卡尺
1
/
剪刀/小刀
1
/
3D打印机
1
/
电脑:Arduino IDE
1
/
1

外壳部分

这里使用的123D Design软件建模,完成后导出为STL文件。

这里是我的外壳文件,通过蓝奏云分享:https://qyfalse.lanzouy.com/i473v1fviepa

我用的绿色的PLA材料打印的外壳

2

格栅部分

格栅部分也是使用的123D Design软件建模并且在完成后导出为STL文件。

这里是我的格栅文件,通过蓝奏云分享: https://qyfalse.lanzouy.com/iKKWB1fvieqb

我用的绿色的PLA材料打印的格栅,高度为8mm,格栅横竖宽度为3mm

3

后盖部分

后盖部分也是使用的123D Design软件建模,但是并没有完全包住背部,因为像素屏的背部还有3组线,我这里预留了线的晃动空间。

这里是我的后盖文件,通过蓝奏云分享:https://qyfalse.lanzouy.com/ieHDU1fvierc

我用的绿色的PLA材料打印的后盖

4

屏幕部分

如果直直的盯着像素屏看,眼睛扛不住,估计也没人这么看。网上有卖扩散板的,到货需要3天,我的这些3D打印件一天就打印完了,就拿A4纸来替代了。也是一个很好的平替了。

1.A4纸充当扩散板

取一张空白A4纸,长宽为160mmX160mm,直接裁剪好就行了。

2.淘宝购买长X宽X高为160mmX160mmX2mm的透明亚克力板

5

组装

具体组装过程就不赘述了,异常简单,自行组装即可。

6

程序调试

像素屏的背部有三组线,左边这组为DIN、右边这组为OUT、中间组为供电,这里只接DIN组。

红线VCC←→电源正极+5V 白线GND←→电源负极 绿线DIN←→信号输入线

7

arduino nano单片机

我这里使用的是arduino NANO单片机,且它的引脚如下:


主要技术参数

型号

微控制器

ATmega328P

工作电压

5伏特

Flash Memory(闪存)

32 KB (ATmega328P) 其中由 0.5 KB用于系统引导(bootloader)

SRAM(静态存储器)

2 KB (ATmega328P)

EEPROM

1 KB (ATmega328P)

模拟输入引脚

8个

EEPROM

1Kb

输入/输出引脚直流电流

40 毫安

输入电压

7-12伏特

数字输入输出引脚

22个(其中有6个引脚可作为PWM引脚)

PWM引脚

6个

3.3V引脚电流

50 毫安

45 mm

18 mm

7克

时钟频率

16 MHz

8

程序烧录

打开arduino IDE软件,将如下程序复制进去:

#include <FastLED.h>

#define LED_PIN 5 //引脚编号
#define NUM_LEDS 256 //灯珠数量
#define BRIGHTNESS 64 //灯珠亮度
#define LED_TYPE WS2811 //灯珠型号(默认即可)
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];

#define UPDATES_PER_SECOND 100

CRGBPalette16 currentPalette;
TBlendType currentBlending;

extern CRGBPalette16 myRedWhiteBluePalette;
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;


void setup() {
delay( 3000 ); //上电安全延迟
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(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());
}
}

void SetupBlackAndWhiteStripedPalette()
{
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 );
}

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
};

上传到Arduino NANO单片机中,并且接好线即可

温馨提示

arduino nano +5V ←→ 像素屏VCC

arduino nano GND ←→ 像素屏GND

arduino nano D5 ←→ 像素屏DIN

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载