基于Arduino Esp266制作的亚克力时钟(联网获取时间显示WS2812)

 效果图与外观图(因材料为亚克力拍摄无法达到现实中的效果,调低了拍照亮度)

原理
  运用亚克力的光学特性制作出外观类似透明的时钟,先在透明的亚克力刻上数字笔画,一个完整的数字有七笔,所以要做出四位时钟需要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;
  }

}


总结

  代码和外观都很粗糙还有可完善的空间,白天可见度算一般(对我个人的制作而言)应该还有方法提高数字的可见度,不过用做电脑摆件感觉还不错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值