第1步:收集材料和工具。
組件。
這個項目建立在我當地DIY商店的吱吱愛好板上。該板尺寸為850mm寬,500mm高,18mm深。
本項目中使用的LED為5050 WS2812b,安裝在圓形PCB上,直徑約9mm,后面有焊盤。
《我正在使用Arduino Pro Mini兼容的微控制器。它的5V 16 MHZ版本。我之所以選擇這款產品,是因為它具有超薄設計,小尺寸和所有必需的端口以及未來升級的備用空間。它也是5伏特,所以我可以使用單個電源為LED,微控制器和RTC
時間保持由具有DS3231芯片的RTC(實時時鐘)模塊負責。這個芯片非常準確,所以時間不應該漂移太多。
也使用:
電線。焊錫和熱膠。
工具:
電鉆和木鉆頭(10mm和5mm)
烙鐵
熱膠槍
電線狙擊
Dremel和插入式路由器配件
第2步:標記,鉆孔和布線
鉆井
使用海峽邊緣通過從對角處畫一條線來找到板的中心。
使用一根繩子和一支筆標記3個圓圈。最外面的圓圈距離板邊緣約20mm,另外兩條線距離最后一條線15mm。
我使用一個印刷的鐘面來幫助我在內線的外部2行和小時上標出每個分鐘和秒的位置。
每小時,分鐘和秒鐘鉆出約5毫米深的10毫米孔。
使用5毫米鉆頭在板上打小時,分鐘和秒鐘。
路由
雖然這一步驟不是必需的,但它可以讓時鐘與墻壁齊平。
使用路由器和圓形導軌在電路板上布線線路
Mark將RTC和微控制器的凹槽輸出并布線。
將通道從外線布線到凹槽中以便接線
步驟3:如此多的士兵,切割和剝離。
下一部分比說起來容易得多。我的建議是注意趕緊。嘗試找到一個系統并進入一個節奏。
每個LED需要5伏輸入,5伏輸出,數據輸入,數據輸出,接地和接地。包括微控制器和RTC的電源,其400多根電線,兩端均剝離和焊接。
粘性藍色物質對此步驟非常有用。
I首先將2個LED放在彼此相鄰的孔中,以計算出相互連接所需的導線長度。
使用第一根導線作為導向,然后切割60根每根彩色導線。
從每根導線的末端剝去2毫米的套管,并用焊料將它們焊接。
在每個LED焊盤上焊接一小滴焊料。
將導線焊接到LED上,形成兩條60分鐘和幾秒鐘的鏈條,以及一條12小時的鏈條。我用紅線表示5V,黃色表示數據,藍色表示接地。
注意將每個數據輸出(DOUT)連接到下一個LED的數據輸入(DIN)
每個鏈中的最后一個LED不需要數據輸出線。
一旦完成所有鏈條,最好在安裝它們之前測試它們。我用我的Arduino UNO和Adafruit NeoPixel Strand Test來確認每個LED都在工作。
將更長的導線焊接到每個鏈上,用于5V,接地和數據輸入。
此時應該有五條5v線,三根數據線連接到Arduino Pro Mini和5地線。
從5v導線末端剝離5mm并將它們全部焊接在一起并重復接地線。
完成三個鏈條后,將一根5V導線焊接到Arduino Pro Mini的RAW引腳上,也可以放在RTC的VCC引腳上。接地線連接到Arduino Pro Mini和RTC上的GND,再接下來兩條線:
SCL 從RTC到Pro Mini上的 A5
SDA f 將RTC轉換為 A4 o n Pro Mini
來自 LED的數據線應該連接到:
秒》 - 數字Pin 3 。
分鐘 - 數字 Pin 4
小時 - 數字 第5針
第4步:安裝
焊接后,將LED安裝在孔中應該是直線的。需要安裝LED,因此當代碼設置為正面時,數據在逆時針方向運行,因為代碼設置在前面。
我使用了少量的熱膠將它們固定下來希望能夠在將來發生故障時更換單個LED。
我還使用熱膠來保持所有電線整潔,并將桶形連接器固定到電路板上。
有許多arduino pro mini編程指南可供使用。我使用外部USB到串行轉換器方法將此代碼加載到Arduino上:
此代碼還將RTC上的時間設置為編譯時。因此,重要的是只需上傳按鈕,以便它盡快符合并上傳。
這些代碼的大部分都來自Andy Doro的NeoPixel Ring Clock。一些來自Adafruit NeoPixel Strand Test和一些我放在一起。
您需要安裝一些庫。它們可以從Arduino軟件的Libraries Manager獲得。
用于ws2812b LED的Adafruit NeoPixel
和RTClib知道詢問RTC的內容
/**************************************************************************
* *
NeoPixel Ring Clock
by Andy Doro ([email protected])
http://andydoro.com/ringclock/
* *
**************************************************************************
Revision History
Date By What
20140320 AFD First draft
20160105 AFD Faded arcs
20160916 AFD Trinket compatible
20170727 AFD added STARTPIXEL for 3D enclosure, variable starting point, added automatic DST support
20180424 AFD using DST library https://github.com/andydoro/DST_RTC
*
/ include the library code:
#include
#include
#include
// define pins
#define SECPIN 3
#define MINPIN 4
#define HOUPIN 5
#define BRIGHTNESS 20 // set max brightness
#define r 10
#define g 10
#define b 10
RTC_DS3231 rtc; // Establish clock object
Adafruit_NeoPixel stripS = Adafruit_NeoPixel(60, SECPIN, NEO_GRB + NEO_KHZ800); // strip object
Adafruit_NeoPixel stripM = Adafruit_NeoPixel(60, MINPIN, NEO_GRB + NEO_KHZ800); // strip object
Adafruit_NeoPixel stripH = Adafruit_NeoPixel(24, HOUPIN, NEO_GRB + NEO_KHZ800); // strip object
byte pixelColorRed, pixelColorGreen, pixelColorBlue; // holds color values
void setup () {
Wire.begin(); // Begin I2C
rtc.begin(); // begin clock
Serial.begin(9600);
// set pinmodes
pinMode(SECPIN, OUTPUT);
pinMode(MINPIN, OUTPUT);
pinMode(HOUPIN, OUTPUT);
if (rtc.lostPower()) {
Serial.println(“RTC lost power, lets set the time!”);
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
stripS.begin();
stripM.begin();
stripH.begin();
//strip.show(); // Initialize all pixels to ‘off’
// startup sequence
delay(500);
colorWipeS(stripS.Color(0, g, 0), 5); // Blue
colorWipeM(stripM.Color(r, 0, 0), 5); // Blue
colorWipeH(stripH.Color(0, 0, b), 50); // Blue
delay(1000);
DateTime theTime = rtc.now(); // takes into account DST
byte secondval = theTime.second(); // get seconds
byte minuteval = theTime.minute(); // get minutes
int hourval = theTime.hour();
hourval = hourval % 12; // This clock is 12 hour, if 13-23, convert to 0-11`
for (uint16_t i = 0; i 《 secondval ; i++) {
stripS.setPixelColor(i, 0,0,b);
stripS.show();
delay(5);
}
for (uint16_t i = 0; i 《 minuteval ; i++) {
stripM.setPixelColor(i, 0,g,0);
stripM.show();
delay(5);
}
for (uint16_t i = 0; i 《 hourval ; i++) {
stripH.setPixelColor(i, r,0,0);
stripH.show();
delay(5);
}
}
void loop () {
// get time
DateTime theTime = rtc.now(); // takes into account DST
byte secondval = theTime.second(); // get seconds
byte minuteval = theTime.minute(); // get minutes
int hourval = theTime.hour(); // get hours
hourval = hourval % 12; // This clock is 12 hour, if 13-23, convert to 0-11`
stripS.setPixelColor(secondval, 0,0,20);
stripS.show();
delay(10);
if (secondval ==59 ) {
for (uint8_t i = stripS.numPixels(); i 》 0; i--) {
stripS.setPixelColor(i, 0,g,0);
stripS.show();
delay(16);}
}
stripM.setPixelColor(minuteval, 0,g,0);
stripM.show();
delay(10);
if (secondval ==59 && minuteval == 59) {
for (uint8_t i = stripM.numPixels(); i 》 0; i--) {
stripM.setPixelColor(i, r,0,0);
stripM.show();
delay(16);}
}
stripH.setPixelColor(hourval, r,0,0);
stripH.show();
delay(10);
if (secondval == 59 && minuteval == 59 && hourval == 11) {
for (uint8_t i = stripH.numPixels(); i 》 0; i--) {
stripH.setPixelColor(i, 0,0,b);
stripH.show();
delay(83);}
}
// for serial debugging
Serial.print(hourval, DEC);
Serial.print(‘:’);
Serial.print(minuteval, DEC);
Serial.print(‘:’);
Serial.println(secondval, DEC);
}
// Fill the dots one after the other with a color
void colorWipeS(uint32_t c, uint8_t wait) {
for (uint16_t i = 0; i 《 stripS.numPixels(); i++) {
stripS.setPixelColor(i, c);
stripS.show();
delay(wait);
}
}
void colorWipeM(uint32_t c, uint8_t wait) {
for (uint16_t i = 0; i 《 stripM.numPixels(); i++) {
stripM.setPixelColor(i, c);
stripM.show();
delay(wait);
}
}
void colorWipeH(uint32_t c, uint8_t wait) {
for (uint16_t i = 0; i 《 stripH.numPixels(); i++) {
stripH.setPixelColor(i, c);
stripH.show();
delay(wait);
}
}
步驟5:最后的接觸
現在應該留下的只是將RTC和微控制器固定在凹槽中。
我已經將RTC電池安裝在一邊,這樣我就可以輕松如果需要,請更換電池。
將5v電線連接到連接器的+側,將接地連接到 - 側
將電源連接起來!
我已經連接到USB電池組,但USB手機充電器也可以正常工作。
注意:
LED的亮度設置在代碼中。它被設置為低電平以保持低電流。在所有LED點亮的全亮度下,它可以汲取近8安培。當前設置小于1.
-
led
+關注
關注
242文章
23840瀏覽量
673961 -
時鐘
+關注
關注
11文章
1901瀏覽量
133204
發布評論請先 登錄
圖解單片機功能與應用(完整版)
TRCX應用:OLED 像素模擬及電容提取
漫畫圖解 電感器 抗干擾元器件指南(全彩PDF版)
PCB封裝圖解
時空刻度:LED電子時鐘系統如何重塑現代節奏

開源項目!手把手教你制作一個互動式LED墻壁時鐘!
FRED應用:LED發光顏色優化
DS90UB913A-Q1是否支持像素時鐘74.25MHz的1080p 30的分辨率?
時序約束一主時鐘與生成時鐘

評論