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

解密交通氣象站:數據驅動的交通氣象服務革新

智慧校園:氣象站引領氣象知識科普
自動氣象站的工作原理與應用
綠色校園,智慧氣象:走進我們的氣象站
自動超聲波氣象站:智慧氣象的重要組成部分
校園內環境監測氣象站
交通氣象站:實時監測道路氣象環境

車載小型氣象站:實時、準確地監測氣象
區域生態自動氣象站:數據監測與傳輸

基于啟揚IMX8MPlus核心板的自動氣象站應用解決方案


評論