×

带150个数字LED像素的圣诞树

消耗积分:0 | 格式:zip | 大小:0.38 MB | 2022-12-22

王磊

分享资料个

描述

0. 项目

有一天,我决定更换圣诞树上的灯泡来自定义灯泡的颜色并创建我自己的动画!

在 Adafruit 网站上,我发现 12毫米扩散薄数字 RGB LED 像素 WS2801是可寻址的(您可以告诉每个 LED 做什么和什么时候做!)并且可以由Arduino MEGA 2560 rev3板控制(我有从经销商处购买 LED )。

我在我的项目中添加了一个实时时钟(RTC) 芯片,以便为 Arduino 提供实时信息。电线总是插在电源插座上,但树只在下午 5 点到早上 8 点亮着!

Adafruit 通过专门的 WS2801 LED 教程帮助我完成了我的项目!查看更多详细信息和更准确的信息!

如果您使用不同型号的 LED,请参阅其接线和编码指南/说明。如果它们与 FastLED 兼容,则代码将需要稍作改动!

1.组装和接线

我建议您在将 LED 放在树上之前测试该项目!

 
pYYBAGOiqgeAL6OIABjdZWb0GN4265.jpg
 

使用连接器将 LED 串相互连接。条带上的 4 个输入应为:

  • 红色-> 5V
  • 白色->接地
  • 蓝色->数据
  • 绿色->时钟

将链数据引脚连接到 Arduino PIN 2 CLOCK pin 到 Arduino PIN 3 注意:数据和时钟颜色可能会颠倒,寻找每个 LED 芯片上的标记)。

实时时钟 ( RTC ) DS3231 允许 Arduino 获得实时时间,因为板载芯片不够精确,无法保持数小时和数天的时间。SDA引脚连接到 Arduino PIN 20 ,将SCL引脚连接到 Arduino PIN 21

 
pYYBAGOiqkiAPZ68AA7G9IG_G40747.jpg
 

2.电源

5V 10A电源适用于150颗LED 每个WS2801 LED需要60mA,所以50个LED需要3A;150 个 LED 需要9A

将电源 2.1 毫米插孔连接到母适配器(“2.1 毫米到螺钉/接线端子”)。将 6 根电线连接到适配器(或使用面包板以更简单的方式分配电源)

  • 2(1 个5V和 1 个GND )用于前 75 个 LED ->在 LED 50 和 51 之间,应该有一对电源线。否则,将它们连接在绞线连接器中;
  • 2(1 个5V和 1 个GND )用于最后 75 个 LED -> 插入LED 100 和 101 之间
  • 2(1 个5V和 1 个GND )到面包板,为 Arduino 和 RTC 供电。

注意:务必将(+正极接5V,(-负极接GND。可以焊接电线,特别是在永久性/户外项目的情况下。您可以使用一个 Header Pin Housing Kit 来制作您自己的跳线!时钟线和数据线必须仅连接在链的开头。权力应该在整个链中至少分成两点。这样每个LED都有足够的功率!

使用BREADBOARD ,将电源线连接到其他跳线到Arduino 5V引脚和GND引脚)和RTC 5VGND引脚)。

3.代码

为了使代码正常运行,您必须在计算机上安装以下库:

  • FastLED的 FastLED(点击克隆或下载然后下载 ZIP

3.1 设置时间

在 Arduino 上上传示例文件TimeRTCSet(文件-> 示例 -> 时间 -> TimeRTCSet )或下载并运行RTC_set.ino参见代码部分)。然后打开串行监视器(工具 -> 串行监视器)。它会在 RTC 上复制您计算机的时间。您只需执行一次此过程。

注意:RTC时间因PC与板卡同步,会有少许几秒的误差此外,我建议您使用此代码,这是我在 Internet 上找到的最简单的代码。相反,您可以使用库中包含的示例。

您可以通过运行RTC_read.ino(在本页末尾下载)来检查存储的时间。

3.2 动画编码

现在您可以下载文件Christmas_tree.ino (这是主要代码)并将其上传到 Arduino。它已准备好使用,但您可以自定义它!颜色通过命名的 HTML web colors设置

3 个动画我认为最好的是 Adafruit 的彩虹)。我创建了另外两个动画:每 300 毫秒(= 0.3 秒)树上的 LED 将其颜色更改为红色、橙色、黄色、绿色、蓝色等。我更喜欢动画速度很慢的树;在你观看圣诞树的每一秒,一些灯光的颜色都与之前不同,但你不会被闪烁的灯光所蒙蔽。

代码将在下午 5 点打开 LED,并在早上8 点关闭LED 白天,Arduino 会每隔 10 分钟检查一次时间,看看是不是5 点钟!(这是绕过缺少继电器的最佳解决方案)。

我写了一个更新版本的代码,Christmas_tree_UPDATED.ino. 有相同的动画和功能,但颜色更加校准,因为它们是通过HSV 方法(色调、饱和度、值)设置的。如果您不是专家用户,请查看FastLED 像素参考指南

4.准备点亮!

绳子现在可以放在树上了!你的圣诞树已经准备好了!

 
pYYBAGOiqp6AJE_zABFA5ViuU5Y227.jpg
 

如果您喜欢本教程,请在评论中张贴您项目的照片!欢迎反馈和改进建议!

5. 接下来...

我目前正在添加 50 个 LED 以达到 200 个(不过我必须添加第二个电源)。

我也在编写代码以使树看起来更好;我正在纠正颜色编码(使它们更加校准)并添加新动画!

本教程的最新主要更新:2017 年 10 月 31 日

免责声明:对于复制此项目时可能发生的任何人或事损害,我概不负责。该脚本是对我所创建内容的简化回顾。如果您不确定自己在做什么,请在下面发表评论或在网络上寻求有能力的帮助。


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

评论(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.jibsdb.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:'带150个数字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:"https://www.elecfans.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);