張嘉宇 DFRobot課程設計工程師,編纂設計“Mind+Python編程入門系列課程”“Mind+Python編程進階系列課程”“BXY高中信息技術教程”等系列課程,曾帶隊參加VEX機器人世界錦標賽獲分區冠軍。
教學背景
在日常生活中,光線的強弱對人類的情緒有著很大的影響。無論是積極還是消極的情緒,愈明亮的光線愈會讓這種情感加劇。也正因此,書房、廚房等一些具有實用功能的家居環境,往往會采用較強光線的燈光,這樣更能讓人集中精神,情緒飽滿地投入工作或家務。而臥室則適合較弱光線的燈光,給人一種溫馨舒適的感覺,有助于放松身心。然而,僅憑主觀的感受很難精準地判斷光線強弱,那如何才能獲悉環境光的大小,繼而判斷家庭中各個房間的燈光是否合理呢?本節課我們將利用行空板來制作一個捕光儀,以便更好地了解房間的環境光強度,適時做出調整。
教學目標
1.認識光線傳感器的特點及功能。
2.了解Pinpong庫的實現原理、設計理念、編程規范等。
3.學會使用Pinpong庫檢測光線值的方法。
4.掌握使用Unihiker庫顯示圖片、切換文字及圖片的方法。
教學重難點
教學重點 在Python環境下,使用Unihiker庫編寫程序顯示并更新圖片和文字,使用Pinpong庫編寫程序檢測環境的光線值。
教學難點 使用Pinpong庫編寫程序檢測環境的光線值。
教學準備
行空板、Type-C&Micro二合一USB線、Mind+編程軟件。
教學過程
一、情境導入
師:同學們,在我們的家中,廚房和臥室使用的燈具是不是往往光線強弱不一樣呢?大家知道這是為什么嗎?
學生思考、回答……
師:同學們說得都很好,廚房常常選擇強光燈,這樣更能讓人集中精神投入家務,臥室選擇弱光燈,給人一種溫馨舒適的感覺,有助于放松身心。然而,我們僅憑主觀的感受很難精準地判斷光線強弱,那如何才能獲悉環境光的強弱,繼而判斷家庭中各個房間的燈光是否合理呢?
學生思考并討論。
師:解決這個問題的方法有很多,這節課上,讓我們利用行空板來制作一個捕光儀,更好地了解房間的環境光強度吧。
二、講授知識
教師先對理論知識進行教授,為學生后期應用開發鋪墊知識基礎。
1.光線傳感器
光線傳感器是一種能夠將光信號轉換成電信號的器件,可用于檢測光線值。行空板的光線傳感器是內置在板子上的,如圖1,檢測時返回的是一個模擬量,數值范圍在0~4095,光線越亮數值越高,光線越暗數值越低。
2.Pinpong庫通用知識及功能
師:通過Mind+軟件,我們可以將行空板與計算機連接起來,但如何才能使行空板上的元器件運行起來呢?這里我們就需要使用Pinpong庫。
Pinpong庫是一套控制開源硬件主控板的Python庫,原理是給開源硬件燒錄一個特定的固件,使開源硬件可以通過串口與電腦通信,執行各種命令。Pinpong庫的名稱由“Pin”和“Pong”組成,“Pin”指引腳,“Pinpong”為“乒乓球”的諧音,指信號的往復。Pinpong庫的設計,能讓開發者在開發過程中將重點放在程序功能的實現,不被繁雜的硬件型號束縛。哪怕程序編寫初期用其他板子開發,部署時改成了行空板,只要修改一下硬件的參數就能正常運行,實現“一次編寫,處處運行”。
師:行空板上的所有硬件都可以通過Pinpong庫來控制嗎?
學生思考、討論并回答。
師:事實上,整個行空板由一塊單板機和單片機系統組成。單片機系統類似一塊Arduino,而單板機我們可以當作一臺小電腦,無論是單片機上接的接口、傳感器等元器件,還是單板機上接的麥克風、USB口等設備,都可以通過Python庫來控制。
使用Pinpong庫控制行空板時,需要先初始化板子,而由于Pinpong庫的“pinpong.board”包中已經提供了相應的Board類,因此我們需要從中先導入這個模塊。同樣的,為了能夠控制行空板上各元器件,我們也需要導入“pinpong.extension.unihiker”模塊,并在初始化語句中輸入主控板型號和主控板端口號,不輸入則進行自動識別。
初始化板子后,可通過Pinpong庫中的“light.read()”指令讀取光線值。其中,“light.read()”表示讀取光線值,是固定用法,可以用“Light”作為變量,存儲讀取到的光線值。
3.Unihiker庫GUI類draw_image()方法顯示圖片
GUI類中的draw_image()方法可以實現在行空板屏幕上顯示圖片,在編程時,通過“對象.方法名()”的形式來實現功能,同時,此方法會返回一個圖片對象,使用變量存儲起來,方便后續進行對象更新操作。
圖片一般按照寬高最小邊等比例縮放,可省略,若寬高參數都省略則保持原圖分辨率,這里我們可以使寬高和屏幕保持一致,如圖2。當需要設定圖片的位置時,也可通過固定x和y的值來確定圖片的橫縱坐標,位置為(0,0)時可省略。
4.Unihiker庫GUI類通用知識及功能
行空板屏幕上顯示的所有元素對象可稱為控件,如圖片、文字、表情、按鈕等。控件對象在初次生成后是可以改變的,我們可以通過“對象.config()”的形式來實現。例如,我們先讓行空板顯示一張初始的背景圖“light-1.png”,并將它存儲到變量img(圖像控件)中,通過config更新控件對象的方式將背景圖換成“light-2.png”。再比如,我們先在(153,28)坐標位顯示一行文字,內容為“800”,并將它存儲到了變量value(文字控件)中,能通過config更新控件對象的方式將文字內容換成“666”。
三、動手實踐
師:接下來,讓我們動動手,通過行空板板載的光線傳感器實時檢測光線值,將它顯示在屏幕上,同時將光線值均勻劃分為4個不同的等級,并以此顯示不同亮度的小燈圖。
1.硬件搭建
學生通過USB連接線將行空板連接到計算機,如圖3。
2.軟件配置
教師指導學生配置Mind+軟件,依次“啟動軟件—創建與保存項目文件—創建與保存Python文件—導入圖片素材”,如圖4。
3.程序編寫
教師講解各分功能段的程序代碼,包括導入所需功能庫、實例化GUI類并在行空板屏幕上顯示背景圖和初始光線值、循環檢測光線值并更新數值顯示及圖片等。在設計循環檢測光線值并更新數值顯示功能段程序時,為了使光線值能夠每隔一秒不間斷地被監測,并更新顯示在屏幕上,建議使用while語句。掃描二維碼可獲取完整代碼資料。
4.運行程序
教師指導學生一起運行程序,并從不同的角度給行空板光線傳感器打光。學生會發現屏幕上方的光線值每隔一定的時間就會變化,而小燈的亮度及進度條的填充度也在相應地改變。光線越強,數值越大,小燈越亮,進度條填充度也越高,如圖5。
四、拓展與提升
教師和學生討論,當光線值過大(光線值>3072)或過小(光線值<1024)時,應如何編寫程序,在行空板屏幕上顯示“光線值過大/過小”的文字提醒。
教學反思
本課通過設計制作捕光儀,讓學生學會觀察生活,發現生活中一些現象背后的原因和問題,然后通過學習新的技術尋找解決問題的方法。
在教學方法上,本節課多數教學環節都會通過提問互動的方式進行,讓學生能夠充分思考。在項目實踐過程中,筆者將任務進行拆解,讓學生在一個個小任務中逐步發現問題和解決問題,不僅鍛煉了學生的思維能力,同時也提升了綜合素養。
(本課件由DF創客社區推薦)