步驟1:解釋代碼。..。..
我試著盡可能地注釋代碼。我發(fā)現(xiàn)在學(xué)習(xí)Arduino和C ++編程(這里是前Fortran人)時(shí),需要花費(fèi)大量的自學(xué)時(shí)間,并且跟隨別人的代碼并不總是那么明顯(至少對(duì)于初學(xué)者而言)。所以轉(zhuǎn)到鏈接并將LINE#引用到我所描述的關(guān)鍵事項(xiàng)中,如下所示:
LINES 2-3 - 這些帶來(lái)支持庫(kù)代碼以使您的時(shí)鐘模塊到工作并定義您正在使用的時(shí)鐘模塊。
#include
DS3231 rtc(SDA,SCL);
左側(cè)《- p》
線路6 - 27:為了保持代碼筆直,我在看N1,N2,N3和N4時(shí)從左到右分配了每根管子。然后我必須將4根控制線(ABCD)分組,將每根管子的芯片驅(qū)動(dòng)到這些相應(yīng)的管子上。
#define N1C 28//C 《《《--- N1是小時(shí)數(shù)十位Nixie Tube,所以每管重復(fù)這4行!#define N1B 26//B
#define N1D 24//D
#define N1A 22//A 《《《-----這是將引腳22的輸出分配給線路的線路最左邊的Nixie Tube芯片。它插入輸出引腳22并焊接到芯片的“A”引線上。通過(guò)真值表,“A”引線是最低有效數(shù)字,D引線是最高有效數(shù)字。所以我打賭你想知道為什么引腳分配不按字母順序排列到ABCD 。..。..這是因?yàn)樾酒瑥纳系较?a target="_blank">ADBC有它們,我希望焊接時(shí)焊絲沒(méi)有交叉扭曲。讓它們保持平直更容易(我想)。但任何一致性的技巧都必須防止接線錯(cuò)誤。您可以隨時(shí)更改程序以匹配,但故障排除是時(shí)間丟失的地方。
LINE 49 - 字節(jié)dig1,dig2,dig3,dig4;每個(gè)管必須顯示給定的數(shù)字,無(wú)論它是時(shí)間還是溫度的數(shù)字,無(wú)論如何。..。..程序取數(shù)字并使用一個(gè)字節(jié)來(lái)保存在程序中稍后從寄存器中剝離的數(shù)字,但是它被定義這里。
LINE 53 - 60這是DHT22的固定代碼,來(lái)自互聯(lián)網(wǎng)上幾個(gè)來(lái)源的示例。找到很多地方。注意我為其他型號(hào)的傳感器(DHT11)剪切了代碼,因?yàn)槲蚁胍粋€(gè)精益程序。
LINES 64-77只是設(shè)置BME傳感器和Servo for Library支持的代碼。第77行將伺服控制分配給該引腳61.
LINES 79 - 104這將為4個(gè)N1 - N4數(shù)碼管中的每一個(gè)分配4條BINARY控制線ABCD的所有引腳作為輸出。注意我試圖在評(píng)論中顯示“A”輸出是2 ** 0(最小信號(hào)位),“B”是2 ** 1,“C”是2 ** 2,最后和“ D“是2 ** 2或最重要的位。那么這是什么意思?查看附加照片中芯片的Truth表。如果我想在數(shù)碼管上點(diǎn)亮數(shù)字“6”,我需要在ABCD線上發(fā)送二進(jìn)制位模式以打開(kāi)芯片的引腳6?;蛘逜關(guān)閉,B打開(kāi),C打開(kāi),D關(guān)閉。如果它們打開(kāi),芯片只查看ABCD線并將它們相加以打開(kāi)相應(yīng)的輸出。 2 ** 1 = 2,2 ** 2 = 4,所以0 + 2 + 4 + 0 = 6.現(xiàn)在,如果我將芯片引腳6的導(dǎo)線焊接到#6導(dǎo)線管的端子引腳上激活,它將從陽(yáng)極170VDC完成電路并點(diǎn)亮。
LINES 106-113定義按鈕面板輸入的Mega引腳。
LINES 122-128設(shè)置RTC模塊的初始時(shí)間和日期。在第一次掃描時(shí),它將使用您在此代碼行上實(shí)際擁有的值加載模塊。一旦Arduino運(yùn)行您的總代碼,您將使用按鈕面板更改時(shí)間。
LINES 129 - 234 BME280標(biāo)準(zhǔn)設(shè)置代碼。只需使用這些參數(shù)和代碼行,這里沒(méi)有問(wèn)題。我希望我有更多的時(shí)間來(lái)真正了解BMP280是否可以通過(guò)最后幾行校準(zhǔn),但我真的沒(méi)有得到這個(gè)代碼的良好參考。我的BMP對(duì)實(shí)際溫度不準(zhǔn)確,不得不通過(guò)從程序中稍后測(cè)量的數(shù)字中減去一個(gè)整數(shù)來(lái)強(qiáng)制進(jìn)行校準(zhǔn)??纯茨闶欠衲苷业剿?!
LINES 237 - 240 - 設(shè)置DHT傳感器。這里不用擔(dān)心。
LINES 246-253聲明如果按下按鈕,則將變量名稱“butXstate”設(shè)置為HIGH狀態(tài)。
LINES 262 - 300和392-409 - 如果nixies顯示不正確,這對(duì)于解決項(xiàng)目問(wèn)題至關(guān)重要。這些行使用串口讓你知道什么是內(nèi)存寄存器的溫度,時(shí)間等數(shù)據(jù)。..這就是你看到的地方。然后從那里進(jìn)行調(diào)試,以便在管上進(jìn)行調(diào)試。串口不在這些寄存器中,有時(shí)我想知道我的SDA/SCL通訊速度是否緩慢。問(wèn)題。不 - 接線錯(cuò)誤!
LINES 302 -304 - 這會(huì)調(diào)出DISPLAYWHAT()。查看是否有某個(gè)參數(shù)的請(qǐng)求(按鈕被按下)。然后它進(jìn)入DriveTubes(),根據(jù)“DisplayWhat()”下的內(nèi)容,實(shí)際將ABCD控制模式寫入4個(gè)管中的每一個(gè)。
LINES 307 - 390是滾動(dòng)的順序時(shí)鐘的功能,用于顯示時(shí)間,溫度,時(shí)間,壓力,時(shí)間,濕度,時(shí)間周期。它使用“freq = t.sec”查看已經(jīng)過(guò)的秒的總值,并顯示“分鐘”的任何象限“它是在.IF語(yǔ)句說(shuō)明如果在這個(gè)時(shí)間范圍內(nèi)經(jīng)過(guò)幾秒鐘并且沒(méi)有按下按鈕,那么從寄存器中獲取數(shù)字,然后根據(jù)該數(shù)字驅(qū)動(dòng)管子。同時(shí)點(diǎn)亮綠色LED讓人知道數(shù)字代表什么。
LINES 412 - 424這些只是讓傳感器的濕度從寄存器刷新到使用。
LINES 427 - 454 DisplayWhat(這只是檢查是否按下按鈕,如果是,按哪一個(gè)。然后去做該按鈕所要求的。如果按下按鈕0,1,2或3然后轉(zhuǎn)到更改時(shí)間,因?yàn)榇巳讼胍臅r(shí)鐘時(shí)間。如果按鈕4然后去獲得溫度并顯示它,按鈕5 - 去獲得壓力并顯示它,按鈕6去獲取濕度并顯示它。如果按鈕7,則按順序沖洗所有管子,以防止管子陰極中毒。
LINES 456 - 473 DisplayTime()從RTC獲取小時(shí)和分鐘的時(shí)間并從軍隊(duì)中取出時(shí)間為12小時(shí)基本時(shí)間(第462-3行)。然后無(wú)論是幾分鐘還是幾小時(shí),它都會(huì)除去第一個(gè)數(shù)字除以10,然后通過(guò)取得該部分的剩余部分來(lái)獲取第二個(gè)數(shù)字。如果小時(shí)小于“10”,要關(guān)閉第一個(gè)Nixie管,我將芯片驅(qū)動(dòng)到全值16,這樣所有ABCD都會(huì)打開(kāi),真值表會(huì)關(guān)閉芯片的所有輸出,所以沒(méi)有數(shù)字會(huì)亮。這是以這種方式去除數(shù)字的唯一值。
LINES 474 - 512 ChangeTime()如果按下前4個(gè)按鈕中的任何一個(gè)按鈕,則調(diào)出。 newhour等的變量名稱通過(guò)每次按下按鈕(對(duì)于分鐘相同)遞增或遞減,然后在行510上將新值寫入RTC存儲(chǔ)器并且時(shí)鐘采用新的時(shí)間設(shè)置。
LINES 513 - 594 DisplayTemp()或DisplayPress()或DisplayHumid()都以相同的方式運(yùn)行。天氣變量定義為浮點(diǎn)數(shù),然后從傳感器讀取。然后將該數(shù)字分解為4位數(shù),并逐個(gè)單獨(dú)剝離,因?yàn)閿?shù)字除以10然后減去以得到下一個(gè)數(shù)字。將其乘以10,并將數(shù)字轉(zhuǎn)換為要驅(qū)動(dòng)到該管的數(shù)字,并對(duì)剩余的管重復(fù)。示例:Temp = 71.25然后temp變?yōu)?.125,dig1 = 7. Temp仍然是7.125 - 7 = 0.125然后* 10 = 1.25現(xiàn)在設(shè)置為Dig2,依此類推。
LINES 598 - 822 RunPoission ()驅(qū)動(dòng)四個(gè)數(shù)碼管以每秒0.1秒的持續(xù)時(shí)間滾動(dòng)數(shù)字0到9。我們?cè)谒鼈兏髯缘囊_上寫入相應(yīng)控制線的低電平或高電平,以獲得正確的BINARY模式,以打開(kāi)芯片上的右側(cè)輸出,以點(diǎn)亮管內(nèi)正確的電線。
//3 - 例如在Nixie管N1上顯示數(shù)字3 。..。..
digitalWrite(N1D,LOW);//D1這是2 ** 3,所以我們不需要8,所以“寫”引腳N1D關(guān)閉或低電平。
digitalWrite(N1C,LOW);//C1這是2 ** 2,所以我們不需要4,所以“寫”引腳N1D關(guān)閉或低電平。
digitalWrite(N1B,HIGH);//B1這是2 ** 1,所以我們需要一個(gè)2來(lái)“寫”引腳N1D或HIGH。
digitalWrite(N1A,HIGH);//A1這是2 ** 0,所以我們需要一個(gè)1來(lái)“寫”引腳N1D或高電平。
2 + 1是3,芯片將輸出3驅(qū)動(dòng)為ON,因此將170VDC傳遞到管內(nèi)的電線。
延遲(10);延遲0.010秒并繼續(xù)掃描并顯示“4”然后顯示“5”等。
LINES 828 - 1119 DriveTubes()的工作類似于RunPoission(),檢查Dig1,Dig2的值是否有效,Dig3和Dig 4等于,然后如果該條件為真,則它會(huì)通過(guò)并將控制線圖案驅(qū)動(dòng)到相應(yīng)的寫入模式。
步驟2:清理案例
我知道Syncroscope并不大足以容納項(xiàng)目所需的所有電源,而不是Arduino Mega,芯片和布線。所以我建造了一個(gè)丙烯酸盒子,給它一個(gè)爆炸式的外觀。
我摧毀了范圍內(nèi)部,為時(shí)鐘的其余部分讓路。我知道這會(huì)很緊張。我只保存了大氣指示的面板和指示器。裝配丙烯酸外殼有點(diǎn)棘手,沒(méi)有全面的玻璃斜坡。有點(diǎn)走了很長(zhǎng)的路。這肯定需要練習(xí),我使用畫家的膠帶來(lái)防止膠水接觸我不想破壞的區(qū)域。建議:學(xué)習(xí)如何用拋光輪或丙烷罐火焰對(duì)邊緣進(jìn)行打磨和拋光。這兩種方法都很有效,但需要耐心和實(shí)踐。
我試圖最小化這種情況下的訪問(wèn)面板,并發(fā)現(xiàn)我組裝完整的工作結(jié)構(gòu)非常困難。我試圖保持原始儀表的內(nèi)部支撐,將它們?nèi)勘3衷谝黄?,至少可以證明這是非常具有挑戰(zhàn)性的。請(qǐng)注意,只有一側(cè)可以進(jìn)入透明盒子,我不得不使用長(zhǎng)鉸接式尖嘴鉗將遠(yuǎn)端桿固定到位并擰緊這些螺母。整個(gè)組件作為夾鉗式設(shè)計(jì)拉在一起。換句話說(shuō)。..。..做一些不太復(fù)雜的事情,這將更容易一起,麻煩也更容易。麻煩拍攝它真是太糟糕了,我將它全部拆開(kāi)并重新安裝在廢料板上的所有組件以使一切工作,然后在最后的情況下重新組裝時(shí)鐘。我做了兩次!?。?/p>
第3步:設(shè)置面板
由于我只有一次切割鋁面板,所以我非常小心地先用圖形方式將其打好并仔細(xì)測(cè)量。測(cè)量?jī)纱吻懈钜淮?。我甚至將面部?fù)印作為切割有機(jī)玻璃面板的指導(dǎo),以確保它是正確的。然后我在鉆床上拋光/拋光邊緣。
第4步:構(gòu)建電路。..。..
我在時(shí)鐘中有三個(gè)變壓器,我放入了后殼圓形部分:
1。 120 VAC至5 VDC為Arduino和傳感器供電。
2。 120 VAC至12 VDC為高壓轉(zhuǎn)換器供電。
3。一個(gè)12 VDC到200 VDC的變壓器 - 為Nixie管供電。
A切換器為它們供電,我使用兩個(gè)120 VAC氖燈,表示120 VAC已打開(kāi)。
I然后按照所示的接線圖,必須多次測(cè)試每個(gè)焊接連接,以確保良好的連接。請(qǐng)仔細(xì)按照Arduino輸出到4芯片驅(qū)動(dòng)器的接線。確保IO編號(hào)與所有4個(gè)芯片的芯片的ABCD一致。然后確保SOCKETS的芯片始終連線,以便將芯片輸出與正確的數(shù)字相匹配以進(jìn)行顯示。請(qǐng)注意,IN12引腳編號(hào)不是點(diǎn)亮數(shù)字的數(shù)字。很容易忘記這一點(diǎn),所以檢查并再次檢查。
步驟5:焊接電路。..。..
焊接芯片需要鉛筆尖鐵,大量使用焊劑和技術(shù),以確保沒(méi)有兩個(gè)引腳短路。我使用電路板保持一切整潔,并使用Arduino引腳插件。剝離這些細(xì)導(dǎo)線是非常保守的,因?yàn)闊崃繒?huì)導(dǎo)致大部分絕緣層拉回或收縮。將ABCD導(dǎo)線分成四組焊接到引腳上,然后將4個(gè)聯(lián)接的引腳插入到母模塊中,焊接到芯片上。
為了將引腳固定到位,我將引腳的兩側(cè)熱熔化女性的側(cè)面。如果您需要返工,可以使用Xacto刀移除熱熔膠。慢慢來(lái)。但膠水將所有東西固定在一起,避免了連接松動(dòng)。
我保持良好的電線顏色方案,以保持直線。..。
黃色 - 數(shù)字為170 VDC
p》
紅色-5 vdc
黑色 - 接地
白色/黑色120 VAC
紫色12 VDC
Orange Browns等。.. Servo,Nixie等的具體線索
步驟6:設(shè)置時(shí)鐘
按鈕板。..(參見(jiàn)接線圖)。這些按鈕用于設(shè)置上/下的小時(shí)和分鐘,并根據(jù)需要調(diào)用溫度,濕度和大氣壓力。最后一個(gè)按鈕運(yùn)行一個(gè)防中毒程序來(lái)清洗管子。
當(dāng)按下按鈕時(shí),務(wù)必使用8K歐姆電阻器(6K - 10K工作正常)將輸入拉到地面。這可以防止麻煩的雜散電壓導(dǎo)通輸入。關(guān)于這些面板的其他地方的一些例子不使用這種方法,并且它們通過(guò)編程來(lái)縮短它,但它不可靠。只是以正確的方式做到這一點(diǎn)。請(qǐng)參閱接線圖,并按照正確的方案進(jìn)行無(wú)故障工作按鈕。
我通過(guò)焊接在黃銅銷底部的小黃銅墊圈上將按鈕延伸穿過(guò)外殼,黃銅針腳從桿架上切割和打磨。如果倒置,桿不會(huì)掉出來(lái)。這也使得通過(guò)側(cè)壁的按鈕沒(méi)有大的切口,外觀整潔,外觀干凈。
步驟7:裝配
裝配將取決于您的時(shí)鐘設(shè)計(jì)和外殼。這些照片顯示了一些裝配階段,坦率地說(shuō)有些不能很好地完成,然后我重新進(jìn)行了構(gòu)建。如果你仔細(xì)觀察這里的圖片和完成的項(xiàng)目,你會(huì)看到我做的很多改變。最值得注意的是,nixie插座在安裝到電路板上時(shí)一直焊接到芯片驅(qū)動(dòng)器引腳。然后ABCD控制線是從芯片到引腳進(jìn)入Arduino的引腳。
我使用了大量的遮蔽膠帶來(lái)防止丙烯酸刮傷。大量的線束可以訓(xùn)練電線而不會(huì)在各自的焊點(diǎn)處脫落,并且大量的熱熔膠使電線絕緣,然后將它們剝離。
步驟8:最終組裝和故障排除
我在建立時(shí)鐘,編寫程序和解決問(wèn)題之間交替進(jìn)行。我基本上構(gòu)建了一小段代碼來(lái)使一件事工作,然后為另一個(gè)功能添加代碼。如果某些東西不起作用那么。..。..我知道這是添加的新功能,它會(huì)擾亂掃描或者流程結(jié)構(gòu)不好。
我的右邊有一個(gè)數(shù)字沒(méi)有顯示全部數(shù)字正確,我不知道這是代碼還是錯(cuò)誤的接線工作/交叉短路,或壞的數(shù)碼管。所以我換了管。..。..所有的管子都以同樣的方式運(yùn)轉(zhuǎn),所以它不是管子。然后我找到了布線,發(fā)現(xiàn)兩根電線交叉連接到插座(數(shù)字將我從要顯示的數(shù)字中剔除)。這只發(fā)生過(guò)一次,但我仍然沒(méi)有走出困境。我?guī)缀踉谀抢铮玫蒋偪竦臄?shù)字,并最終發(fā)現(xiàn)我有一個(gè)錯(cuò)字推動(dòng)數(shù)字“2”。 AAAARGH!發(fā)現(xiàn)這是一個(gè)大海撈針,一旦發(fā)現(xiàn)它當(dāng)然是完美的意義。這是讓這一位數(shù)發(fā)揮作用的日子。
-
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1735瀏覽量
131543 -
氣象站
+關(guān)注
關(guān)注
1文章
753瀏覽量
15692
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論