吳箏



學習背景
從古至今,交通運輸都決定性地影響著經濟的發展與社會水平的高低。隨著數字化城市建設進程的不斷推進,智能交通信號燈作為城市交通的重要組成部分,必將發揮積極的作用。本案例以程小奔機器人為硬件載體,以mBlock5為軟件支撐,以實踐活動、問題解決帶動學習過程,通過參與、操作、體驗,從認知、探究發現到創意創新,使學生的計算思維能力、邏輯思維能力、創新思維能力得以發展和強化。
教學目標
知識與技能 1.描述紅外傳感器的作用;2.區分“重復執行”與“重復執行直到……”;3.解釋計數器的功能;4.識別Python中的循環語句。
過程與方法 1.能根據需要選擇合適的變量、運算符及表達式設計程序;2.能運用“觀察現象—發現問題—分析原因—嘗試解決”的程序調試方法,解決實際問題。
情感態度與價值觀 1.體驗人機交互的過程,培養計算思維,探索實踐精神;2.養成文明交通的意識。
教學重點與難點
教學重點 1.解釋計數器的功能;2.能根據需要選擇合適的變量、運算符及表達式設計程序。
教學難點 1.能夠根據需要選擇合適的變量、運算符及表達式來設計程序;2.能夠識別Python中的循環語句。
案例詳解
一、情境導入
教師播放城市交通車水馬龍的情景以及路口交通信號燈的變化畫面,引導學生在觀看中了解交通信號燈在城市交通中發揮的重要作用,吸引學生動手制作一個交通信號燈模型。
二、舊知鞏固
教師引導學生找出交通信號燈的變化規律,在mBlock5軟件平臺上完成一個路口紅綠黃燈切換的模塊代碼,并將代碼上傳到機器人設備,借助機器人的LED燈查看程序結果。
本案例交通信號燈的設定只有一組紅綠黃燈,不帶轉向及時間倒計時提示功能,因此變換規律比較簡單,就是綠燈亮10秒—黃燈亮3秒—紅燈亮10秒。
學生首先在mBlock5軟件平臺上完成一個路口紅綠黃燈單次切換的模塊代碼,在此基礎上添加重復執行模塊,使得交通信號燈實現循環切換。(如圖1、圖2)
三、討論思辨
傳統的交通信號燈采用定時控制模式,但由于車流量不是固定的,因此可能出現少車路口綠燈時無車通行或多車路口綠燈通行時間短而堵車的情況。為解決這種資源浪費問題,可以設計一個以車流量為核心的智能交通信號燈控制系統,通過使用紅外傳感器檢測車流量,實現對路口交通信號燈的智能控制。
本案例重點討論如何控制一個方向上的紅燈顯示和切換,教師與學生討論制訂的規則是:默認紅燈的顯示時間是10秒,但如果在10秒內等待車輛已經超過15輛,可立即切換成綠燈。為了實現以上規則設定,假定在路口100米處安設一個紅外傳感器,它可以感測經過的車輛,同時需要在程序中設定兩個變量,分別統計經過紅外傳感器的車輛數目以及紅燈持續的秒數。
四、算法探究
紅燈顯示和切換的算法設計:初始狀態為紅燈亮起,統計車輛數目為0,紅燈持續秒數為0;每過去0.5秒,紅燈持續時間+0.5;同時紅外傳感器感測是否有車輛經過,如果有,車輛計數+1;如果車輛數目超過15輛或者紅燈持續時間達到10秒,則紅燈切換為綠燈,否則繼續車輛計數與紅燈持續秒數計數。
這部分算法的結構是循環結構嵌套分支結構,分支結構使用“如果……那么……”模塊實現對經過車輛的感知及計數;循環結構使用“重復執行直到……”模塊實現對紅燈持續時間計數以及經過車輛的判斷,利用混合邏輯運算設定紅燈結束的條件,進而自動調節紅燈的顯示與切換。具體程序如圖3。
五、代碼比較
借助mBlock5軟件的代碼轉換功能,分別將圖1、圖2定時控制的模塊代碼與圖3智能控制的模塊代碼轉換為相應的Python語句代碼。
圖1對應的Python代碼如下:
# generated by mBlock5 for codey & rocky
# codes make you happy
import codey, event
@event.start
def on_start(? ):
codey.led.show(0, 255, 46)
time.sleep(10)
codey.led.show(250, 255, 0)
time.sleep(3)
codey.led.show(255, 0, 0)
time.sleep(10)
圖2對應的Python代碼如下:
# generated by mBlock5 for codey & rocky
# codes make you happy
import codey, event
@event.start
def on_start(? ):
while True:
codey.led.show(0, 255, 46)
time.sleep(10)
codey.led.show(250, 255, 0)
time.sleep(3)
codey.led.show(255, 0, 0)
time.sleep(10)
圖3對應的Python代碼如下:
# generated by mBlock5 for codey & rocky
# codes make you happy
import codey, rocky, event
# initialize variables
cheliangshu = 0
red_time = 0
@event.start
def on_start():
global cheliangshu, red_time
while True:
codey.led.show(0, 255, 46)
time.sleep(10)
codey.led.show(250, 255, 0)
time.sleep(3)
codey.led.show(255, 0, 0)
cheliangshu = 0
red_time = 0
while not (cheliangshu > 15 or red_time > 10 or red_time == 10):
time.sleep(0.5)
red_time = red_time + 0.5
if rocky.color_ir_sensor. is_obstacle
_ahead(? ?):
cheliangshu = cheliangshu + 1
通過對比,學生可以識別Python中循環控制語句while的一般形式(如圖4)。
六、思維拓展
作品交流后,給學生一些時間梳理設計思路、完善提升作品。教師也可以提出一些拓展要求供學生挑戰,比如對十字路口的交通情況通盤考慮,進而智能控制四個方向的交通信號燈,還比如可以添加行人過馬路的因素,等等。
教師還可以引導學生思考將人工智能技術應用到城市交通建設的可能性,比如利用攝像頭進行視頻采集獲取路口各方向車輛的等待情況,實現對不同車型和行人的識別以及檢測控制、抓拍報警等,根據具體獲取的信息來選擇交通信號燈的控制方案,并通過網絡將最終方案反饋給控制中心。
教學反思
“智能交通信號燈”一課的問題設計貼近生活,學生能從已有經驗入手發揮主觀能動性,為改善交通信號燈出謀劃策,容易激發學生的思維火花。任務設計由易到難,從常規定時控制到可根據車流量智能調整紅燈時長,給學生創造了“跳一跳”的機會。借助mBlock5平臺的代碼轉換功能,學生能夠對比模塊代碼與Python代碼,為了解Python語句做了一定的鋪墊。當然,要將思路轉換成代碼是有一定難度的,所以實踐過程中教師需要進一步思考如何更好地設計支架,引導學生實現算法。