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