吳俊杰
本期我們開源項目的主題是常見的編程項目——流水燈。如果有兩個LED,每個LED都可以獨立控制,那么它們閃亮的形式可以分為:①一起亮。它們同步亮同步滅。②帶動亮。一個LED亮之后帶動后面的一個LED亮,此前的LED并不熄滅。③接力亮。一個LED亮過之后熄滅一段時間,接下來下一個LED開始亮,就像接力比賽一樣。如果LED比較多,看上去像是一個LED在移動一樣,這種形式更符合流水燈這個名字。④二選一亮。兩個燈每次隨機選擇任意一個LED亮。⑤隨機亮。每個LED都是隨機閃亮,兩個LED之間沒有排他關(guān)系。本次選擇的流水燈,項目涉及更多數(shù)目的LED,但原理是相同的。
● 制作:LED排排站,開始點名了
0號口和1號口空置,將數(shù)字引腳的2號口和3號口插一個LED燈,其中2號接負極,3號接正極。接下來,依次類推,4、6、8、10、12接LED的負極,5、7、9、11、13接LED的正極(如圖1)。LED像是一排站好隊列的士兵,通電以后,發(fā)現(xiàn)它們會像士兵報數(shù)一樣依次亮起來,產(chǎn)生流水燈的效果。
在實驗的過程中,我發(fā)現(xiàn)每位學生的LED閃爍的速度都不一樣,有的很快,有的很慢,因此我鼓勵他們大膽地去“觸摸”電路板(如圖2)。學生在觸摸時發(fā)現(xiàn)手指摸這個區(qū)域后,燈有時閃得很快,甚至幾乎看不到閃爍,有時又閃得很慢,這是因為有一個輸入的信息在控制LED的閃爍速度。
這個信息就是端口A0的輸入電壓轉(zhuǎn)換成了模擬輸入A0的數(shù)值,在連接上,可以使用一個10千歐電位器,將其兩端接power區(qū)的5V和GND(不分左右),中間接A0端口,此時旋轉(zhuǎn)電位器(如圖3),我們就能夠看到電位器旋鈕可以很好地控制LED的閃爍速度,旋轉(zhuǎn)到一端時,不閃爍,所有LED一直亮;旋轉(zhuǎn)到另一端時閃爍時間比較慢,間隔時間大概有兩秒。
● 改裝:認識電位器
通過觀察我們可以判斷每一個LED持續(xù)亮的時間都是相同的,這需要使用Mixly中的“延時……毫秒”來完成,而這個命令中一定包含一個與A0輸入相關(guān)的參數(shù)。我們可以使用一個秒表來研究這一問題,將電位器旋轉(zhuǎn)到閃爍最慢的位置,測量整組燈流水十次所需要的時間,共計112.9秒。通過相應的計算式,我們可以得到每個燈閃亮的時間為122.9/10/6=2.048秒,換算為毫秒是2024毫秒,而旋轉(zhuǎn)到另一端以后所有LED長亮說明此時輸入值為0,通過實驗可以猜想A0數(shù)值伴隨旋鈕的變化而變化,變化范圍為0~2048。
科學研究只是改裝的一個序曲,我們可以將六個LED固定在一個盒子上,拍成一定的形狀,用旋鈕控制LED的閃爍頻率(如圖4)。
在電路的連接上,電位器的連接可以將5V和GND之間的距離拉得稍遠一些,用紅色導線接5V,黑色導線接GND,藍色導線接A0,用排針引線,注意5V和GND處線要繞完,不要搭在外面,因為它們之間的短路會導致Arduino死機,有時還會造成電腦的USB端口短路,但是一般不會損傷電腦,因為絕大部分電腦的USB端口都有短路保護功能。需要說明的一點是:使用手機充電電源或者充電寶供電5V和GND,如果短路,Arduino板子上的短路保護能夠緩解這種情況對手機電源適配器或者充電寶的傷害,但是不要長時間這樣做,而且也要盡可能選擇正規(guī)的帶短路保護功能的電源適配器或者充電寶(如圖5)。
此外在旋鈕的連接上,由于電位器的引腳很短,導致繞線容易脫落,鑒于此我們可以將導線先穿到電位器的小孔里再繞線這樣就不會脫落了,繞線的過程中同樣需要注意防止不同引腳上的導線彼此搭上(如圖6)。
最后是連接LED,可以將一組排針中相鄰的兩個彎折,呈對開狀,3mm六棱銅柱可以作為很好的彎折排針的工具,我們在彎折后的排針上繞線,可以避免短路(如圖7)。
在改裝的過程中,涉及各種各樣的工藝問題,“工藝”就是我們常說的制作技巧或者注意事項。在教學中,比較各種工藝間的優(yōu)缺點,探究和發(fā)現(xiàn)新的工藝常??梢宰鳛橐粋€培養(yǎng)和考查學生能力的測量指標,而主動追求極致的工藝更是我們所要培養(yǎng)的“大國工匠”所需要的一種品質(zhì)。
● 玩轉(zhuǎn):模擬量輸入揭秘
首先,6個發(fā)光二極管的負極接2、4、6、8、10、12端口,他們的電壓被程序的初始化模塊置低,相當于一個可以通過小電流的負極,它的電壓與GND相當,但是不能驅(qū)動馬達等大電流設(shè)備,代碼如圖8所示。
其次,主程序被分割成6個子程序,在Mixly中,子程序的功能很強大,支持參數(shù)和返回值,可以有很多更為復雜的算法,但是在這里我們只用于提高程序的可讀性。下頁圖9的代碼中,z1到z6分別指點亮一盞燈,熄滅其他燈。
看到主程序之后,我們就清楚了之前在改裝緩解測定的最長延時時間2048毫秒的意義了,原來A0端口輸入的范圍是0~1023,擴大兩倍之后放大為0~2046,考慮到實驗誤差,這樣的結(jié)果已經(jīng)很精確了。每個子程序的結(jié)構(gòu)類似,都是置高一個LED正極所在引腳的電壓,置低其他引腳的LED的電壓,代碼如圖10所示。
至此,我們就完成了對程序的解讀,事實上,如果將LED的負極都連接在GND引入的一根導線上,可以將數(shù)字端口0~13共計14個LED都做成流水燈,但是需要注意的是0和1端口,在燒寫程序時不能接插LED,因為這兩個端口在燒寫程序時會被占用。
● 分享:獨一無二的LED燈串
流水燈的效果常用在自動售貨機等單片機控制系統(tǒng)上,一方面它很美觀,能吸引他人的注意力,另一方面也能夠直觀地顯示出控制系統(tǒng)是否工作正常,一旦停止“接力亮”,就說明主程序死機需要重啟。在這個項目的改進過程中,我們發(fā)現(xiàn)一個LED不夠酷,如果是一排LED項目就會炫酷很多,但是采用傳統(tǒng)的繞線方法將10個很密集的LED并聯(lián)非常費時費力,于是我們做了工藝上的改進,發(fā)明了“銅箔膠帶法”并聯(lián)引腳,解決了這個問題,如圖11所示。在具體使用過程中,我將有銅箔的兩部分對折,一排LED的引腳就并聯(lián)起來了。
教師在工程教育中往往希望學生把夢想變成現(xiàn)實,而在夢想變成現(xiàn)實的過程中,很多人都忽視了對工藝的探究。對于一名大國工匠而言,別人解決不了的問題在很大程度上不是技術(shù)的問題,更不是科學知識的問題,而是怎么做得更快更巧的問題。我們在強調(diào)藝術(shù)融入到工程教育的同時,不要忘記工藝本身這個“藝”字就是指出神入化的技藝,這和藝術(shù)的追求在本質(zhì)上是一致的。對工藝的探究,應該成為一個自然的工程教育的教學內(nèi)容和教學目標。而讓學生體會到追求工藝的快樂則是培養(yǎng)大國工匠的一個捷徑,就像研發(fā)帶有銅箔的膠帶一樣,如果沒有這種新工藝,估計很多人就都不得不用電焊完成這么復雜的燈了。
本案例的分享視頻將會在以下公眾號中陸續(xù)登載。