效果图与外观图(因材料为亚克力拍摄无法达到现实中的效果,调低了拍照亮度)
原理
运用亚克力的光学特性制作出外观类似透明的时钟,先在透明的亚克力刻上数字笔画,一个完整的数字有七笔,所以要做出四位时钟需要28片亚克力板外加冒号显示(冒号1秒变化一次能直观体会到时间的变化) 一共29片(厚度1毫米) 在对其外侧进行灯光照射实现动态显示 类似的产品有 拟辉光管。
PCB(嘉创)
元件用的是ws2812的幻彩LED灯珠(1615)考虑到亚克力的数量和灯珠的互不影响,制作成两个pcb板 (15与14排)左右照射。
外壳(inkercad)
用来固定亚克力和放置pcb板 间隔1毫米
辅助工具(用来防止笔画刻歪)
代码(Arduino IDE)
//联网获取时间
#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
// 此示例程序需要使用FastLED库
#include "FastLED.h"
#define NUM_LEDS 60 // LED灯珠数量
#define DATA_PIN D1 // Arduino输出控制信号引脚
#define LED_TYPE WS2812 // LED灯带型号
#define COLOR_ORDER GRB // RGB灯珠中红色、绿色、蓝色LED的排列顺序
uint8_t max_bright = 200; // LED亮度控制变量,可使用数值为 0 ~ 255, 数值越大则光带亮度越高
// 定义变量存储时、分、秒
int hours;
int minutes;
int seconds;
int i; //用来显示冒号的跳动
CRGB leds[NUM_LEDS]; // 建立光带leds
//联网获取时间
const char *ssid = "吕";
const char *password = "66668888";
//联网获取时间
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ntp1.aliyun.com", 60 * 60 * 8, 30 * 60 * 1000);
void setup() {
Serial.begin(115200); //波特率
WiFi.begin(ssid, password); //获取id pass
//WiFi链接判断
while (WiFi.status() != WL_CONNECTED) {
delay(500); //5秒时间
Serial.print(".");
}
timeClient.begin();
LEDS.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); // 初始化光带
FastLED.setBrightness(max_bright); // 设置光带亮度
}
void loop() {
FastLED.clear(); // 清除灯板显示
timeClient.update(); //获取时间
hours = timeClient.getHours();
minutes = timeClient.getMinutes();
seconds = timeClient.getSeconds();
//Sj();
M();
FastLED.show(); // 更新LED色彩
// Serial.println(timeClient.getFormattedTime()); //输出时间
// delay(1000); //1秒
}
// void Sj() {
// seconds++;
// if (seconds >= 60) {
// seconds = 0;
// minutes++;
// if (minutes >= 60) {
// minutes = 0;
// hours++;
// if (hours >= 24) {
// hours = 0;
// }
// }
// }
// }
//冒号的跳动
void M() {
i = (seconds % 10);
if (i == 0) {
leds[7] = CRGB::BurlyWood;
leds[22] = CRGB::Red;
}
if (i == 1) {
leds[7] = CRGB::AntiqueWhite;
leds[22] = CRGB::Aqua;
}
if (i == 2) {
leds[7] = CRGB::Aquamarine;
leds[22] = CRGB::Azure;
}
if (i == 3) {
leds[7] = CRGB::Beige;
leds[22] = CRGB::Bisque;
}
if (i == 4) {
leds[7] = CRGB::BlanchedAlmond;
leds[22] = CRGB::BlueViolet;
}
if (i == 5) {
leds[7] = CRGB::Red;
leds[22] = CRGB::BurlyWood;
}
if (i == 6) {
leds[7] = CRGB::CadetBlue;
leds[22] = CRGB::Chocolate;
}
if (i == 7) {
leds[7] = CRGB::Coral;
leds[22] = CRGB::CornflowerBlue;
}
if (i == 8) {
leds[7] = CRGB::Cornsilk;
leds[22] = CRGB::Honeydew;
}
if (i == 9) {
leds[7] = CRGB::Cyan;
leds[22] = CRGB::DarkCyan;
}
}
总结
代码和外观都很粗糙还有可完善的空间,白天可见度算一般(对我个人的制作而言)应该还有方法提高数字的可见度,不过用做电脑摆件感觉还不错。