风铃钟

创意展示、DIY分享、经验交流
回复
头像
shaoziyang
帖子: 3919
注册时间: 2019年 10月 21日 13:48

风铃钟

#1

帖子 shaoziyang »

来自:https://www.hackster.io/firstname-lastn ... ind-c4e852

图片


这个项目中使用的东西

硬件部件 
  • 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]

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章