电子说
第1步:材料/工具:
材料:
在本地购买:
- Mdf板(80 * 30 cm)
- 用于框架的木材(必须宽5厘米,总长度至少200厘米)
- 128乒乓球球(白色的,最好是乳白色)
- 一些(4)小钉子
- 旧USB线(可以为Arduino nano供电)
- 旧电子设备的电源线
在线购买(中国)
- 5V 10A电源(较低的安培数也可能有效)
- Arduino nano(克隆)
- ws2812b LED灯条(5m 30Leds/米IP30)
- DS3231 RTC
- 带3芯(2米以上)的电线
可选
- 母针连接器
- 电阻器(介于两者之间) 300和500欧姆)
工具:
- 可以切割30度角的锯(斜切锯)
- 带细齿的手锯(金属) -saw)
- 剥线钳
- 烙铁
- 12mm钻头
- 32mm孔锯
- 木胶
- 热胶
- 手电筒
- 砂纸
注意:
选择正确类型的乒乓球对于这个项目非常重要。乒乓球通常具有两个加在一起的接缝。这本身不是问题,因为通过在这些半部中间形成一个孔,在显示器中将看不到接缝。然而,当乒乓球在一侧也具有印花时,重要的是球上的印花朝向背面。这可能导致从前面看到一块接缝。购买乒乓球时,也不要购买闪耀的球(反射光)。它们会不那么好地散射光线而且看起来会很奇怪(你不应该买乒乓球的例子)。
摘要:最好使用无白色打印的无缝乒乓球并做不反射光。
第2步:在乒乓球中打洞。
每个乒乓球都有自己的LED背后。为了获得尽可能多的光线照射,需要移除乒乓球背面的一块,因此LED的光线只需穿过球的一侧。这些孔需要非常大(大约30mm),因为LED不会在球后面居中。
在乒乓球中制作这些大洞是一个挑战。由于球本身很弱,因此在制作球之前需要一些支撑。我是通过在一块MDF上钻一些32毫米的孔来做到这一点的。在锯球时,我用一只手在乒乓球上施压,将它们压在孔上。由于孔的直径比球小约8mm,因此球将被压在孔上。虽然在一侧提供压力,但我在另一侧切断了乒乓球的顶部,只是在直线上对着MDF进行锯切。
在锯切它们之前,我确保了徽标印在球上的,是在我要去的那边。我还用手电筒找到了将两半加在一起的接缝。我把球转得更多了,所以从前面看不到徽标,而且从接缝处可以看到很少的东西。
注意:如果不是所有的孔都完全相同也没关系尺寸,尺寸可以变化几毫米。在构建完成时,无法从任何方向看到这一点。
步骤3:在行中粘合所有球
在所有大洞中他们需要将乒乓球按行(2行(17,18和19)和1行20)粘在一起。这些行应该尽可能直,并且球之间应该没有空间。我用我买的木头来制作框架来做到这一点。通过两块木头支撑球,我确信它们在一条线上。在放置几个球之后,确保孔朝上并且球彼此接触,我将它们粘在一起。只需要一点点胶水即可。如果你使用大量胶水,它将从正面看到。我再次使用手电筒来确保乒乓球的正面没有丑陋的斑点(有些人因为便宜的球而有了这些斑点)。
步骤4:胶合行一起。
要做到这一点,我使用框架的木材来保持2行压在一起。请记住使用小滴胶水,如果使用量很大,从前面可以看到。在每次在8个连接处放置胶水之后,我用双手提供压力以确保球紧紧地粘在一起。
步骤5:制作框架
框架中有6件。 2件长件和4件短款。这些部件的所有边缘应具有60度角。由于乒乓球的大小不是40毫米,而是(39,5个东西),我计算了框架件的大致长度(这可以通过测量面板的高度或宽度并使用^来完成。 2 + b ^ 2 = c ^ 2)。我计算出2个长件的内部长度应为66.3cm,4个短件的内部长度应为14.3cm。由于我的锯不太准确,所以我确保将它们剪得更大一些,所以它们不会短路。
在切断所有6个之后,我将它们放在乒乓球面板周围,看看如果它很合适它没有,所以我看到几毫米的一些碎片。我把所有东西粘在乒乓球面板上,以确保它的形状完全正确,这是必要的,因为角度没有在60度完美切割,但更可能是59.5毫米。
步骤6:焊接LED灯条
需要切割LED灯条(一个1个LED,一个3个LED,一个5个LED和17个7个LED)。 LED条带需要接线,如图中所示(首先是一个LED,然后是5个LED,接下来是17个带有7个LED,最后是带有3个LED的部分)。连接较短条带的金属丝应该比其他零件长,因为它需要覆盖更大的距离。我在一块MDF上录下条带,看看每个led是否都在自己的球后面。将所有部件焊接在一起之后,我通过逐个激活每个LED(checkIfLedsAreBehindBalls.ino)来测试所有焊接连接是否良好。
步骤7:切割MDF
一帧已完成我将框架和乒乓球面板放在MDF上,MDF上贴着LED。确保每个LED都在自己的球后,我取下了乒乓球面板。接下来,我沿着MDF上的框架内侧绘制,以获得我需要剪切的形状。我是这样做的,因为LED不在球的中心,这样我就能看到LED与框架的相对位置。在取下贴在电路板上的LED后,我剪下了面板的形状并打磨了边缘,因此它很好地贴合在框架内。
注意:请注意,LED指示灯不会以乒乓球为中心,见草图
步骤8:向MDF添加孔和LED
如前所述,连接LED的导线有点像。它现在的方式,从前面可以看到电线。我决定通过在每个垂直LED条的位置末端钻孔来解决这个问题,因此电线可以放在背面。我将带状导线穿过孔并暂时用胶带粘住。在再次确定之后,每个LED都在自己的乒乓球后面,我取下了磁带,并用LED条上已有的胶条将LED条连接到电路板上。
注意:在MDF上钻孔时,要非常小心,你可以轻松打破板。
步骤9:将球粘到框架上
我将乒乓球面板倒置在框架中,然后我涂上胶水乒乓球接触(或几乎没有碰到框架)的每个点。
步骤10:将LED面板安装到框架
我将LED面板放在球的背面顶部。接下来,我用4个小钉子将面板固定在框架上。我是通过将钉子放在框架内侧来做到这一点的。我选择这样做,因为它允许我修复一些东西,如果它曾经破坏(它也允许我加倍LED的数量,因为许多流明不存在)
步骤11:电子设备
好的,我(几乎)没有经验Arduino所以这可能不完美。但我尝试以尽可能简单的方式做到这一点。
我将连接器焊接到Arduino nano(图像中的黑色东西)(不是必需的)。
我决定这样做,所以如果我想要添加按钮或光依赖电阻(LDR)或其他功能,一切都可以轻松拆开。
接下来,我将RTC连接到Arduino,只需确保时钟模块的SDA和SCl连接到Arduino Nano的SDA和SCL。然后连接引脚9和LED灯条数据之间的电阻。
最后,电线连接到LED灯条的末端,以便为LED灯条的末端提供电源,以便防止电压下降。
是的,它真的很简单。
为了提供所有功能,我切断了一根USB线,可以将Arduino nano连接到一半并连接5V两条电缆的一侧连接到LED灯条和切成两半的USB电缆。我对另一方做了同样的事情。这样我就可以在不通过Arduino供电的情况下为LED灯条供电。
旧灯泡的电缆用于连接5V 10A电源和时钟。
我也是在框架一侧底部钻一个洞,让电源线穿过。这使得时钟可以平放在墙上,同时如果愿意的话仍然能够站在表面上。
唯一要做的就是编写一些代码。
步骤12:代码
上传代码时,请确保电源已关闭!
时钟前模块知道当前时间,必须在模块上设置时间。幸运的是,有一些代码可以做到这一点。在仅添加4行代码并安装DS1307RTC模块后,我们可以运行此命令(SetTime_on_ds3231_nano.ino,链接到原始代码/关于如何在DS3231RTC上设置时间的指令)代码以将Arduino上的时间设置为PC的时间。
设置时间后,我们可以开始考虑为这个时钟编写一些代码。我在程序中使用了2个库,FastLED库和DS3232RTC库。这两个库将为您完成几乎所有工作,并允许编程经验很少的人编写程序。
在这里,您可以看到我在此Instructable顶部的视频中使用的代码,在大多数图片中。 (timeWhiteBackgroundRainbow.ino)
#include
#include
#define LED_PIN 9
#define NUM_LEDS 128
DS3232RTC myRTC(false);
tmElements_t tm;
CRGB leds[NUM_LEDS];
CHSV colour( 0, 255, 180);
int counter=0;
const int Digits[10][10] =
{
{7,8,10,11,14,18,22,24},
{14,16,18,22,24},
{7,8,9,11,14,16,18,24},
{7,9,11,14,16,18,22,24},
{9,10,11,16,18,22,24},
{7,9,10,11,14,16,18,22},
{7,8,9,14,15,16,18,22},
{7,11,14,16,17,24},
{7,8,9,10,11,14,16,18,22,24},
{7,9,10,11,14,16,17,24},
};
void setup()
{
pinMode(17, OUTPUT); //ground and v5 for clock module
pinMode(16, OUTPUT);
digitalWrite(17, HIGH);
digitalWrite(16, LOW);
FastLED.addLeds《WS2812, LED_PIN, GRB》(leds, NUM_LEDS);
myRTC.begin();
}
//function that uses the Digit aray to display numbers between 0 and 100
void displaynumber( int place , int number){
for (int i = 0 ; i 《 10 ; i++) {
if (Digits[number/10][i] != 0) {
leds[(Digits[number/10][i]+place)] = CRGB(255,255,255);;
}
if (Digits[number%10][i] != 0) {
leds[(Digits[number%10][i]+28+place)] = CRGB(255,255,255);;
}
}
}
void loop(){
RTC.read(tm);
//changes the colour of background every 10 cycles
if (counter《10){
counter++;
}else{
colour.hue = (colour.hue+1)%256;
counter=0;
}
// sets background to rainbow colours
for ( int i=0; i《 128;i++){
colour.hue = (colour.hue+1)%256;
leds[i]= colour;
}
colour.hue = (colour.hue+128)%256;
displaynumber(0,tm.Hour);
displaynumber(70,tm.Minute);
//display colons
if ( tm.Second%2 == 0 ){
leds[64] = CRGB(255,255,255);
leds[66] = CRGB(255,255,255);
}
FastLED.show();
}
我认为守则相对较短,但当然可以改进。它只是从RTC读取时间并显示该时间。应点亮以形成数字的LED的位置在矩阵“数字”中硬编码。例如,Digits [0]包含应该点亮以形成零的LED的位置。
我还提供了我制作的其他程序,它们是对上述程序的轻微改动。程序‘CycleThroughDigits.ino’只计算9999,以演示所有数字的外观。程序‘onlyTime.ino’只显示更改颜色的时间,没有背景颜色。最后,‘FastledExampleCode.ino’是由FastLED库提供的一些代码,用于演示一些简单的动画。
步骤13:添加您想要的每个功能
这个项目不仅仅是一个基本的时钟,你可以添加按钮,让它根据光线改变亮度,让它只显示一些颜色,制作它对音乐有反应,用ESP连接到wifi。它基本上是连接到显示器的Arduino,一切皆有可能
全部0条评论
快来发表一下你的评论吧 !