×

使用Raspberry Pi或Arduino:DIY LED矩阵彩灯

消耗积分:2 | 格式:zip | 大小:0.01 MB | 2022-11-04

李静

分享资料个

描述

介绍

这种矩阵彩灯采用标准的WS2812B LED组成圆柱形灯体,最后由木框组合而成。灯光效果还不错,我们来试试吧。

材料

790×384纸板×若干(这里用1.5mm木板)

WS2812b LED ×100(30个/米)

树莓派或 Arduino ×1

木贴片或其他柔性材料 × 几

线×数

外形设计和激光切割

主要设计参数是所用材料的厚度。

poYBAGNkWsuAGVReAABpdea6K1g474.jpg
3D模型
 
pYYBAGNkWs6AQ5EjAAB1jYHCf18797.jpg
激光切割
 

1) 此版本使用 1.5 毫米纸板,易于切割。顺便说一句,如果厚度发生变化,CAD 数据必须相应更改。

2) 3D 设计有助于避免装配过程中的问题,节省时间和金钱。

3) 对于激光切割,零件的放置必须便于切割。使用的纸板尺寸为 790×384 厘米。

4) 推荐使用 Inkscape 作为工具。附加的 SVG 文件包含有关项目所有部分的信息。

注意:您可以调整材料的厚度并生成自己的激光切割文件。

请在工程文件库中下载用于激光切割的 SVG 文件。

激光切割和局部组装

poYBAGNkWtCAOSNrAACBiVyu3H8898.jpg
灯体零件切割
 
pYYBAGNkWtKAPpIHAAB5Vpkvvpc299.jpg
灯体零件总成
 
pYYBAGNkWtWAeYsPAABZY4tcIQw964.jpg
半圆柱
 
poYBAGNkWteAUzAYAAB6_WUVw_A719.jpg
圆柱
 

激光切割以下零件:

C字横部×12

垂直卡槽×18

垂直连接件×2

LED承载件×20

8个C形、9个卡槽和1个连接部分可以组合成半圆形。

在此步骤中,所有部件均由卡槽连接,无需胶水。

 

LED接线

每个灯条上有五个 LED 灯,它们粘在主载体上。

pYYBAGNkWtmAF8ncAABe8nwhf7w619.jpg
LED灯条
 
poYBAGNkWtuAORyZAACHgmzVujY082.jpg
LED 连接
 
pYYBAGNkWt6APyquAACMcNZm5h8092.jpg
LED接线
 

1)灯条的DI(数据输入)和DO(数据输出)引脚Z形连接,将第一个灯条的DO连接到下一个灯条的DI,以此类推。

2) 每个半圆需要 10 条。5V 和 GND 仅连接在条带的一侧。导线的长度与矩阵条所需的布线长度相匹配。

3)在将LED灯条安装到位之前,所有节点必须用胶水固定。

4) 用胶水将十根灯条固定在圆柱体的每一半上。一个半圆 DO 连接到另一个半圆 DI。第一个半圆形 DI 将是 Raspberry Pi 或 Arduino 的输入。

 

测试

poYBAGNkWuCAXdvSAAButT1vRRk865.jpg
照明测试
 
pYYBAGNkWuKAYEowAAA5ldlGqVw609.jpg
照明测试

为确保一切正常,将对 LED 灯进行正常使用测试。使用 Arduino 和 Neopixel 应该是最简单的方法。

木制装饰

poYBAGNkWuSAYCt7AABDMj7EvyA651.jpg
粘贴木饰
 
pYYBAGNkWuaAZeqqAABAbvDjMcY248.jpg
检查效果

测量圆柱体的直径和高度后,将木饰面安装到位。

树莓派、Arduino 和电源

poYBAGNkWuiAKf1LAAA4pRntVEI445.jpg
原理图,示意图
 

为了用 Python 写出漂亮的矩阵效果,你可以使用树莓派。树莓派Zero可以做到,通过GPIO 18脚连接到矩阵,通过74HCT245转换器,树莓派的3.3V可以适配WS2812的5V。当使用更多 Neopixel / WS2812 LED 灯时,将使用更大的电容器 (2200 uF) 和串联电阻 (470 ohms)。

电源

100 个 WS2812b LED 的最大功率为 100x60mA = 6A。当然,如果亮度降低,功率损耗也会大大降低。5V电源可以达到你想要的亮度。

阿杜诺

这个矩阵可以直接在 Arduino 设备上使用 Adafruit 的NeoPixel 库NeoMatrix 库。如果使用以下情况,则必须修改 PIN 并初始化:

新矩阵:

Adafruit_NeoMatrix 矩阵 = Adafruit_NeoMatrix(20, 5, PIN, NEO_MATRIX_TOP + NEO_MATRIX_LEFT+ NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, NEO_GRB + NEO_KHZ800);

 

您可以使用 Adafruit 的 GFX 库,它可以下载不同的位图字体,高度为 5 像素。请使用随附的 Arduino 草图作为起点(使用 PIN 4 作为矩阵的起点)。它是 Neomatrix 示例草图的改编版本。

新像素:

Adafruit_NeoPixel 条 = Adafruit_NeoPixel(100, PIN, NEO_GRB + NEO_KHZ800)

 

模拟

pYYBAGNkWuqAMY4TAABAkaSahnI403.jpg
 
pYYBAGNkWu2AO0R9AABDt2BH7A0795.jpg
 
pYYBAGNkWu-AN8YIAABC6GGHu2A333.jpg
 
poYBAGNkWvGAauXLAAAsgj-nclg857.jpg
 

Python 源代码可以从Github存储库下载。

编程

这里设置了两种模式。PI 变量在 cylinder.py 的开头定义。

1) PI=False,即仿真模式。将启动一个 Python 程序来测试所有动画效果。您需要安装程序所需的所有库(如 pygame、numpy 等)。在模拟模式下,圆柱体显示为 5×20 像素矩阵。

poYBAGNkWvOAA8TRAABMKP0c25Q690.jpg
灯光效果
 
pYYBAGNkWvWAO1LqAABA65r_q5w791.jpg
灯光效果
 

2) PI=True,这将驱动树莓派的 GPIO 18# 引脚。您可以使用参数自由添加其他效果。

文本使用 3×5 像素字体。由于高度有限,并非所有字母都能完整显示。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'使用Raspberry Pi或Arduino:DIY LED矩阵彩灯',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);