这个项目中使用的东西
硬件部件
- Seeed Grove入门套件
- Seeed Grove-RGB LED戒指(20-WS2813 Mini)
- Seeed Grove-RTC
- 木板
- 电缆
- 胶棒
- 激光切割机
当周围没有人或没有风时,风铃时钟将显示当前时间,并用彩色光点亮。当风吹响钟来触发倾斜传感器时,风铃时钟的显示将从被触摸的那一刻开始,记录并显示每分钟的秒数。此时,灯将开始一盏一盏地点亮,直到一分钟结束。在所有20个灯条均点亮后,时钟风铃将恢复正常。
处理
1.请访问BOXES.PY网站以找到所需激光切割盒的参考。使用起来超级简单,方便:https : //www.festi.info/boxes.py/index.html?language=zh_CN
使用AutoCAD设计外壳
操作激光切割机
用激光切割机切出木片
将LED显示屏安装到木箱中2.接下来,我需要对LED显示器进行编程以显示当前时间。时间正常时,编程珠将以多种颜色点亮。使用套件内的倾斜传感器,一旦触摸,将触发一分钟的时间。
在Arduino IDE上编码3.将胶棒磨成平坦的接触平面,然后将其切成适当的长度。我们最初购买的胶棒太细,但后来我们发现我们公司的储藏室具有所需的厚度。用砂光机抛光后,我用UV胶将珠子粘在灯上。总体效果非常好,完全不影响灯光的亮度。但是,我发现它太长了,并且总是变得松散并且掉落,所以后来我将长度减半。
抛光光缆边缘
抛光后的光纤
连接到LED环
完成7条
测试LED效果4.最后,插入相应的一侧(我以错误的方向插入一次,光纤无法点亮),然后用胶枪固定LED显示屏和椰子壳。使用胶枪将LED环插入椰子壳的孔中,将钟形罩连接到倾斜传感器附近,就可以完成!
最终成品!
Code: Select all
#include <FlexiTimer2.h>
#include "Adafruit_NeoPixel.h"
#include <Wire.h>
#include "rgb_lcd.h"
#include <DS1307.h>
#include <rgb_lcd.h>
#define BUTTON_PIN 2
#define PIXEL_PIN 6 // Digital IO pin connected to the NeoPixels.
#define PIXEL_COUNT 20
#define T 60000
int touch_flag = 0;
long Time = 0;
int i = 0;
int frist_time = 0;
DS1307 clock;
rgb_lcd lcd;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
void rainbowCycle(uint8_t wait) {
uint16_t i, j;
for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
if(touch_flag != 1)
{
for(i=0; i< strip.numPixels(); i++) {
if(touch_flag != 1)
{
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
}else{break;}
Serial.println();
}
}else{break;}
strip.show();
clock.getTime();
lcd.setCursor(4, 1);
lcd.print(clock.hour, DEC);
lcd.print(":");
lcd.print(clock.minute, DEC);
lcd.print(":");
if(clock.second < 10)
{
lcd.print(0,DEC);
lcd.print(clock.second, DEC);
}else
{
lcd.print(clock.second, DEC);
}
delay(wait);
}
}
void scan()
{
if(digitalRead(5)==HIGH)
{
delay(10);
if(digitalRead(5)==HIGH)
touch_flag = 1;
Serial.println("iii");
}
}
void setup()
{
Serial.begin(115200);
pinMode(5,INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
strip.setBrightness(255);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
FlexiTimer2::set(5, 1.0/1000, scan);
FlexiTimer2::start();
lcd.begin(16, 2);
lcd.setCursor(1, 0);
lcd.print("hello, beauty!");
clock.begin();
}
void loop()
{
if(touch_flag == 1)
{
if(frist_time == 0)
{
for(int i = 0;i<20;++i)
{
strip.setPixelColor(i, strip.Color(0,0,0));
strip.show();
}
lcd.setCursor(0, 1);
lcd.print(" ");
frist_time = 1;
++i;
strip.setPixelColor(i, strip.Color(255,59,70));
Time = millis();
}
if(i < 20 && millis()-Time >= T/20)
{
strip.setPixelColor(i, strip.Color(255,59,70));
strip.show();
Time = millis();
++i;
}else if(i>=20)
{
i = 0;
frist_time = 0;
Time = 0;
touch_flag = 0;
}
}else
{
rainbowCycle(0);
}
clock.getTime();
lcd.setCursor(7, 1);
if(clock.second < 10)
{
lcd.print(0,DEC);
lcd.print(clock.second, DEC);
}else
{
lcd.print(clock.second, DEC);
}
}
[syntax]