牟曉東
藍橋杯大賽是工信部人才交流中心舉辦的全國性專業信息技術賽事,為了更加全面和科學地評測學生的科技素養、邏輯思維和編程能力,從2021年的第12屆起,青少組地區選拔賽開始采用STEMA評測考試。在11~18歲青少年創意編程大賽的STEMA測評Raspberry Pi樹莓派-高級組中,編程題往往會被精心設置一定難度的“坑兒”,需要參賽者仔細審題并慎重作答,《電腦報》將通過解析一系列模擬題讓大家更好地理解大賽的新變化。
第一題“智能燈”(難度系數1,18個計分點):
隨著科技的發展,越來越多的設備都擁有了自己的“智能”,現在我們就來制作一個可以自己調節亮度的“智能燈”。
硬件準備:
1個光敏傳感器【接入A0#管腳】,1個LED小燈【接入5#管腳】,1個模數轉換模塊【接入專用接口】,杜邦線若干(公對母,母對母,公對公)
編程實現:
(1)程序開始時,LED燈點亮;
(2)當環境光線變暗時,LED燈的亮度自動調高變亮;
(3)當環境光線變亮時,LED燈的亮度自動調低變暗;
(4)如此循環。
判斷標準:
3分:實現“編程實現”中的(1); 6分:實現“編程實現”中的(2);
6分:實現“編程實現”中的(3); 3分:完全符合題意。
1.審清題意,抓住關鍵點
“智能燈”的關鍵考點是“自己調節亮度”,通過光敏傳感器來監測周圍環境的光線值范圍,作為控制信號對LED燈進行亮度調節。
(1)光敏傳感器有兩種信號輸出:D(Digital)數字和A(Analog)模擬,本題需要使用的是模擬信號,數字信號的兩個值(0和1)無法實現信號的梯度大范圍變化,所以要安裝模數轉換模塊。
(2)編程時對LED燈進行“點亮”和“熄滅”有多種方法(包括“智能硬件”→“常用”中的“控制2號小燈亮”和“基礎”中的“設置GPIO2為有電”),但要實現亮度的明暗程度調節只能使用“基礎”中的“控制18號GPIO輸出PWM1000”語句來實現。PWM即“Pulse Width Modulation”,意思是“脈沖寬度調制”,在開源硬件編程中通常用來控制電機的轉速或LED燈的明暗程度(類似于武俠小說中“使用三成功力”的描述)。
(3)LED燈的PWM值范圍是0-3000,而光敏傳感器所檢測到的周圍環境光線模擬值是0-32767,二者間必須要使用“映射”進行數據比例轉換后才能去控制LED的亮度控制。
2.實驗器材的安裝
按照題目要求,首先將一支LED燈插入擴展板的5#管腳,特別要注意“長腿為正極、短腿為負極”;然后將模數轉換模塊的長針腳插入IIC區域,注意標注一定要正確對應;接著將光敏傳感器插入24號插孔,同樣要特別注意四個針腳的標注,VCC代表電源正極,GND代表接地,模擬信號端連接的是擴展板A0#管腳;最后,給樹莓派接通電源,啟動操作系統(如圖1)。

3.編程實現“智能燈”
(1)進入平臺編程環境
瀏覽器訪問http://www.gdwrobot.cn/登錄古德微機器人平臺,點擊“設備控制”切換至“積木”編程區。
(2)光敏傳感器模擬信號的處理
建立變量“光線強度”,為其賦值為“基礎”中的“從ADS 0 獲取模擬信號”,因為光敏傳感器模擬信號端是插接在擴展板24號的A0#管腳;同時,可構建使用“輸出調試信息‘光線強度”語句,將該數據輸出顯示在LOG區。
(3)映射LED的PWM值
建立第二個變量“小燈PWM”,使用“映射數字”語句將“光線強度”的0-32767映射為自己的取值范圍:0-3000。由于中間很多數據不能整除會產生小數,因此需要在前面添加一個“獲取整數”模塊;同樣是為了程序調試的方便,再構建使用“輸出調試信息‘小燈PWM”語句。
(4)控制LED燈的亮度
添加“控制5號GPIO輸出PWM”語句,其參數設置為變量“小燈PWM”,實現從“光線強度”到“小燈PWM”控制LED燈亮度的功能。
(5)其他細節
將以上語句全部放置于“重復當真”的循環結構中,同時別忘記在循環體最后添加一條“等待0.1秒”語句,目的是防止該循環過快,大量占用系統資源。另外,在循環結構開始之前要添加“控制5號小燈亮”語句,實現題目第(1)問(程序開始時點亮LED燈)的要求(如圖2)。

4.運行程序,檢測“智能燈”
點擊“連接設備”,出現五個綠色對鉤提示,說明與樹莓派操作系統連接成功;接著點擊“運行”按鈕,可以觀察到LED燈被點亮。此時,借助小擋板將光敏電阻進行部分遮蓋(模擬環境光線變暗),LED燈的亮度開始提高,同時在LOG區也分別顯示有“光線強度”值(如15476、15998等)和“小燈PWM”值(如1416、1464等)(如圖3)。如果再嘗試使用手機的“手電筒”去照射光敏傳感器的話,也會觀察到LED燈的亮度會降低——需要將LED燈與光敏傳感器用擋板“隔離”(手電筒的光線會影響到對LED亮度的觀察)。

最后將程序按照要求保存為“01.txt”,下載并上傳至考試系統中即可。