基于3D打印+Arduino的LED时钟
基于3D打印+Arduino的LED时钟成品效果https://mc.dfrobot.com.cn/static/image/hrline/1.gif
-----------------------------------------------前言---------------------------------------------------
最近瞎逛Thingiverse找3D模型时,无意间看到某个外国小哥做的Grid LED时钟。觉得挺好看,想到家里刚好缺个时钟。那就动手整个吧。然后开始研究外国小哥的作品,发现他做了好几个版本,还有加长版(如下图),感觉有点长。
--------------------------------------------设计思路------------------------------------------------
1、翻看外国小哥的制作说明,一开始想直接用他的模型的,但是他的作品不是太长就是太短。短的显示4位数时间(24小时制)有点紧凑,长的我又不是很喜欢。
2、想要显示4位数时间(24小时制),至少都要17x5点阵。还是自己用solidworks画结构吧。
3、一开始想做锂电池供电式的,后来发现这么多灯珠实在耗电,还是选择做插电式的。
4、用Excel模拟排版,方便灯带安装和编程。
-----------------------------------制作过程----------------------------------
一、材料准备
主要材料清单如下:1. Arduino Nano及数据线 x 1;2.DS3231时钟模块 x 1;(功能很强大的一个时钟模块,精度高,且内置温度测量,但是温度误差±3℃)
3. 电源适配器5V/1A适配器(带DC5.5圆孔插头,有多余的usb充电器可以只买个USB转DC5.5电源线) x 1;
4.DC5.5圆孔插座 x 1;
5.WS2812B灯带2米,规格60灯/米,裸板带背胶;推荐灯带购买网址6.电路板、排针、插座、导线若干(最好是22#线,因为这么多灯珠,电流还是蛮大的)。7.3D打印结构,模型stl文件
8.3x10mm自攻螺丝,8个。
可选材料:
1.有源蜂鸣器 x 1;
2.18B20温度传感器 x 1和4.7k电阻 x 1 ;
二、结构打印
1.主要结构都可以用0.2mm层厚进行打印,颜色还是建议黑色;
2.面板(白色蒙板)可以用0.1~0.2mm层厚进行打印,因为不同3D打印机切片软件识别度不一样,本来0.4mm厚度,使用0.2mm层厚只会打一层;
三、结构组装
组装部分我没拍到什么照片,因为比较着急做出来。
1.组装比较简单,先把左右前盖用卡扣连接;
2.先说明一点,因为灯带店家坑了我,说灯珠大小是5mm,产品图标明两个灯之间12mm,所以应该两个灯距17mm。等我安装时候才发现灯距是实际上是16.5mm,两个灯之间其实是11.5mm。造成的后果就是:设计的模型灯带固定间隔跟实际灯带灯珠间隔有误差。
3.灯带按17个灯珠为一条剪开,然后用导线连接起来。这里为什么从0号灯珠开始标注?因为灯带在编程控制上,第一个就是第0号。(注意检查,不要搞错方向和正负极,建议这里同步把电子部分制作出来,控制灯带显示一下,是否正常)。
4.然后把灯带背胶撕开,贴到并排的左右后盖上。因为间隔不匹配,所以就让中心的灯珠对齐左右后盖的中间。
5.把网格装上。
6.白色面板装上,可以用热熔胶固定旁边。
7.使用螺丝固定后盖和前盖,以及支架。(这里我没拍照,我就借用外国小哥的吧)
四、电子部分
1.使用数字引脚2,连接控制灯带;
2.蜂鸣器连接数字引脚6;
3.供电就接Arduino Nano的5V口;
4.18B20温度传感器接数字引脚3。(需要加多一个4.7k的上拉电阻)
5.把电路部分塞到电路盒子里面。可以用泡沫胶和热熔胶固定。
五、编程部分
1.使用Excel表格排版模拟,显示什么数字时,哪些灯要亮。然后苦逼地编写了显示字库。(这里写的有点晕)
2.功能设计了时间显示、整点提示、日期显示、温度显示、星期显示,增加呼吸效果及半夜休息模式;具体可以详看程序
3.需要DS3231时钟库文件;
4.灯带控制库文件;
DS3231和灯带库文件在Arduino IDE管理库那里都可以找到。
---------------------------------------作品其他效果----------------------------------------
最后因为放桌面有点碍地方,所以把它挂起来了。
LED_clock:15:8: error: no matching function for call to 'DS3231::DS3231()'
DS3231 Clock; //定义时钟对象
^~~~~
In file included from C:\Users\S7\AppData\Local\Temp\arduino_modified_sketch_447217\LED_clock.ino:2:0:
d:\Users\S7\Documents\Arduino\libraries\DS3231/DS3231.h:80:3: note: candidate: DS3231::DS3231(uint8_t, uint8_t)
DS3231(uint8_t data_pin, uint8_t sclk_pin);
^~~~~~
d:\Users\S7\Documents\Arduino\libraries\DS3231/DS3231.h:80:3: note: candidate expects 2 arguments, 0 provided
d:\Users\S7\Documents\Arduino\libraries\DS3231/DS3231.h:77:7: note: candidate: constexpr DS3231::DS3231(const DS3231&)
class DS3231
^~~~~~
d:\Users\S7\Documents\Arduino\libraries\DS3231/DS3231.h:77:7: note: candidate expects 1 argument, 0 provided
d:\Users\S7\Documents\Arduino\libraries\DS3231/DS3231.h:77:7: note: candidate: constexpr DS3231::DS3231(DS3231&&)
d:\Users\S7\Documents\Arduino\libraries\DS3231/DS3231.h:77:7: note: candidate expects 1 argument, 0 provided
C:\Users\S7\AppData\Local\Temp\arduino_modified_sketch_447217\LED_clock.ino: In function 'void ReadDS3231()':
LED_clock:108:20: error: 'class DS3231' has no member named 'getSecond'
second_now=Clock.getSecond();
^~~~~~~~~
LED_clock:109:20: error: 'class DS3231' has no member named 'getMinute'; did you mean 'getTime'?
minute_now=Clock.getMinute();
^~~~~~~~~
getTime
LED_clock:110:18: error: 'class DS3231' has no member named 'getHour'
hour_now=Clock.getHour(h12, PM);
^~~~~~~
LED_clock:111:18: error: 'class DS3231' has no member named 'getDate'; did you mean 'setDate'?
date_now=Clock.getDate();
^~~~~~~
setDate
LED_clock:112:19: error: 'class DS3231' has no member named 'getMonth'; did you mean 'getMonthStr'?
month_now=Clock.getMonth(Century);
^~~~~~~~
getMonthStr
LED_clock:113:18: error: 'class DS3231' has no member named 'getYear'; did you mean 'getTemp'?
year_now=Clock.getYear();
^~~~~~~
getTemp
LED_clock:116:20: error: 'class DS3231' has no member named 'getDoW'; did you mean 'setDOW'?
week_now = Clock.getDoW();//获取星期
^~~~~~
setDOW
exit status 1
no matching function for call to 'DS3231::DS3231()'
请问这个是为什么? 改亮度直接可以让时间的显示长一些,不然看时间还要等 一会time_show()中标红的两个12改大,我试了一下,30比较好.(Adafruit_NeoPixel库亮度范围是0-255),但在这里不要设太大,因为这个程序亮度是渐变的,如果太大的话显示时间会较长,如果要亮度大点的话,可以把循环的步长设大点.
for(int j=0; j < 12; j++)
{
strip.clear();//灭掉所有灯
delay(5);
brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 12)
{
fadeAmount = -fadeAmount ;
}
以下是楼主大神的源码
void time_show()
{
brightness = 0; //LED灯亮度
int fadeAmount = 1;// 亮度渐变值
int R_1;
for(int i=0; i<2; i++)
{
for(int j=0; j < 12; j++)
{
strip.clear();//灭掉所有灯
delay(5);
brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 12)
{
fadeAmount = -fadeAmount ;
}
if(brightness > 5 )
{ R_1 = 1 ;}
else
{R_1 = 0 ;}
strip.setPixelColor(25, R_1, brightness, 0);
strip.setPixelColor(59, R_1, brightness, 0);//显示中间两个点
/*--------------------------*///获取时数十位,发送数据给灯珠
int H_ten = hour_now / 10 % 10;
for(int i=1;i<=Hour_ten;i++)
{
strip.setPixelColor(Hour_ten, R_1, brightness, 0);
}
/*--------------------------*///获取时数个位,发送数据给灯珠
int H_unit = hour_now / 1 % 10;
for(int i=1;i<=Hour_unit;i++)
{
strip.setPixelColor(Hour_unit, R_1, brightness, 0);
}
/*--------------------------*///获取分数十位,发送数据给灯珠
int M_ten = minute_now / 10 % 10;
for(int i=1;i<=Min_ten;i++)
{
strip.setPixelColor(Min_ten, R_1, brightness, 0);
}
/*--------------------------*///获取分数个位,发送数据给灯珠
int M_unit = minute_now / 1 % 10;
for(int i=1;i<=Min_unit;i++)
{
strip.setPixelColor(Min_unit, R_1, brightness, 0);
}
strip.show();//LED显示数据
delay(100);//延迟
}
/*----------------------------------*///整点提示
if(minute_now == 0)
{
if(second_now < 10)
{
for(int t = 0; t<3; t++)
{
digitalWrite(Buzz,HIGH);
delay(200);
digitalWrite(Buzz,LOW);
delay(200);
}
}
}
/*-------------------------------------*///整点提示
}
}
/*-----------------------------------------------------------------*/
为什么一直提示 吧 Arduino:1.8.12 (Windows 10), 开发板:"Arduino Nano, ATmega328P"
In file included from C:\Users\32003\Documents\arduino代码\LED_clock\LED_clock.ino:3:0:
C:\Users\32003\Documents\Arduino\libraries\DS18B20\src/DS18B20.h:5:10: fatal error: OneWire.h: No such file or directory
#include <OneWire.h>
^~~~~~~~~~~
compilation terminated.
exit status 1
为开发板 Arduino Nano 编译时出错。
在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。
?
有哪位大佬告知一下 真漂亮啊~~~ 首先我要有一个3D打印机{:5_177:} chenhanzhong 发表于 2019-7-23 00:08
基于3D打印+Arduino的LED时钟
成品效果
炫酷。。。。。。 好看! 好看又实用 楼主真帅 厉害!! chenhanzhong 发表于 2019-7-23 00:08
基于3D打印+Arduino的LED时钟
成品效果
牛 楼主 灯条控制的库文件 是自己写的吗?可否共享一下?等级不够无法下载! jokerlzn 发表于 2019-7-27 09:50
楼主 灯条控制的库文件 是自己写的吗?可否共享一下?等级不够无法下载! ...
在Arduino IDE 管理库里面搜Adafruit_NeoPixel 厉害 为啥查看不了附件 顶一个,东西不错,缺个打印机{:5_126:} 感谢分享。。 太漂亮了 如何能够下载文件呢
{:5_131:} 谢谢,很棒,很想试试,但是等级不够不能下载附件,编程太难不会写, 不错不错,学习了 非常不错,准备做一个谢谢分享 学习学习