2014年5月15日 星期四

【S4A小專案】白天與夜晚(光敏電阻)

【實作影片】
小專案參考Scratch範例中的Sunrise作品(在Sensors and Motors資料夾)。
先來看一看「白天與夜晚」小專案的實作情形





【使用軟體】
S4A (Scratch  for Arduino)
「白天與夜晚」的範例檔及相關圖檔可於此下載

【硬體介紹】
Arduino UNO r3、S4A感應板(可參考motoduino 網站)


S4A感應板裝在Arduino上,並將Arduino載入S4A1.5韌體

這次使用到S4A感應板的感測器元件有光敏電阻,可偵測光線的亮與暗
位置與針腳號碼如下圖



【S4A核心積木】
使用下圖積木(要選Analog1),可在程式中使用亮度的感測值

(越亮值越大,越暗值越小)


【程式教學順序】

先將舞台載入造型sky.png,加入一個grass.png的普通角色,原有Arduino角色可暫時隱藏,Arduino角色只用一個就好。
(註:新增角色依原來Scratch方式,不使用第二個 Arduino角色。這是因為好幾次當二個Arduino角色使用同一個連線,都會有不預期的錯誤發生,如:角色下次開啟時,會自動多2倍一樣的角色。所以與Arduino板子連線的角色只用一個會讓程式較穩定)

請學生觀察光敏電阻(Analog 1)在環境光源改變時的變化情形(亮時值高如780,暗時值低如300)

可先在舞台程式區,測試亮度特效的值的範圍(0 ~ -100較適合需求,由亮變暗,模擬白天到夜晚),如下圖

因舞台無法使用Analog1積木,所以使用變數[日照值]如下圖
(另外二個變數,太陽高度與月亮高度是後面太陽落下與月亮上升時要用到)

在Arduino角色的程式區,加入將Analog1的值設定至變數[日照值]的程式,並做適當轉換,如下圖

(引導出 Analog1 要減去 792 再除一6或7,數字要依實際情形做修改 ,
將最後值落在0 ~ -100,以配合亮度特效值的範圍,才能符合需求)

舞台區的程式將 [日照值]  設到舞台的亮度,如下圖


完成後測試背景變化值,按下綠旗後,此時遮住光敏電阻時,背景的天空圖將會變成天黑。

接下做日落的部份,新增一個太陽的普通角色,並先觀察一下太陽在白天與夜晚所需的高度變化,Y座標在白天時要100,夜晚時-150或負更多也OK(下方有個草地可遮住)

以下圖的公式 ,將 Analog1 的值對應到變數[太陽高度],來符合我們所需的Y座標範圍



在太陽角色中,只要直接將[太陽高度]與Y座標做連結即可,如下圖



月亮做法與太陽類似,但高度需求相反,白天時, Y座標負越多都OK ,但夜晚時,Y座標要到150,月亮高度的公式可參考前2個圖片,如此應可完成以光敏電阻的亮度值控制白天與夜晚

【後記】
「白天與夜晚」對小學生也不容易,國中生應會較好上手,尤其是要將光敏電阻值對應成所需要的特效值或是座標的高度值,得需要老師好好地、慢慢地引導。(這也難怪Arduino程式語言中會提供map函式方便做數值轉換)。但相信這個數值轉換問題是使用許多外接感應器都會遇到的問題,甚至有時得用公式去過濾一些不要的值,或是取平均值,中位數等等。

這些都需要吃數學能力,但卻是很實際的、很真實的,即使辛苦一點,但可以讓學生體會解決現實世界問題的過程,讓他們使用電腦的經驗可以跳脫虛擬經驗,回歸現實。(如電玩中的角色中槍死了可以一直復活、車子撞了可以很快恢復的虛擬經驗)。


1 則留言:

  1. 你好!想作這個diy(http://m.instructables.com/id/Arduino-CNC/?ALLSTEPS)
    對電子幾乎不懂,想請(付費)的人指導電子方面的組裝及程式解釋,不知你是否有空或有認識的人可當我的老師。
    不用面對面透過line讓我發問就好
    謝謝

    回覆刪除