顯示具有 運算思維 標籤的文章。 顯示所有文章
顯示具有 運算思維 標籤的文章。 顯示所有文章

2018年7月21日 星期六

Jector 9453 NANO Bootloader過程全紀錄

2015年2月,曾經因為興趣,寫了一篇《自造你的ARDUINO UNO板》教程,希望透過Step by Step的方式,紀錄並分享我自己的製作經驗,和大家一起學習與研究。製作過程是利用ATMEGA328P-PU PDIP-28 微控制器、麵包板和相關的電子零配件,自造一片自己的Arduino UNO板子。

因緣際會,剛好台灣的捷達科技也開發了一片Jector 9453控制板,不過Jector 9453控制板的設定是Arduino NANO+L293D相容板,所以如需進行Bootloader時,部份過程需要調整,本文主要內容就是介紹Jector 9453控制板,並說明如何進行Bootloader燒錄。

接線:
  1. Jector 9453控制板燒錄Bootloader(Optiboot)需要一片arduino nano來完成燒錄,燒錄過程LED13一直閃爍,如果不閃爍即表示無回應。

  2.  
  3. 利用雙頭母杜邦線,接好線路。上方是支援燒錄的Arduino NANO,下方則是改接Jector 9453 ICSP的位置。

設定「偏好設定」
(這個步驟是為部份版本的Arduino IDE設定,一般可以忽略。)

  1. 打開偏好設定

  2. 加入網址:https://github.com/Optiboot/optiboot/releases/download/v6.2/package_optiboot_optiboot-additional_index.json

  3. 接著選 工具→板子→板子管理員,在最後應該就可以看到Optiboot 6.2的項目,選安裝。

載入ArduinoISP燒錄範本

將ArduinoISP程式上傳到Arduino版子,ISP程式可在IDE介面 檔案 > 範例 >ArduinoISP目錄內的ArduinoISP.ino 檔案,開啟後,上傳到Arduino Nano上。
**這個步驟就是讓Arduino Nano成為ISP燒錄器**



進行燒錄


依照順序選擇
  1. 工具
  2. 開發板:Arduino Nano
  3. 處理器:ATmega328P
  4. 序列埠(選擇你的Arduino Nano連接埠)
  5. 燒錄器:Arduino as ISP
  6. 按下燒錄Bootloader
  7. 接著,你會看見Arduino Nano板子上的TX、RX燈號不斷閃爍,不到一分鐘即可燒錄完成。




Jector 9453控制板的參數:
  1. 主控晶片:ATmage328P-AU(默認Arduino NANO bootloader)
  2. USB串口晶片:CH340
  3. USB介面:MicroUSB
  4. 電機驅動晶片:L293D
  5. 電源要求:+6-12V
  6. 數位I / O:12組(D2 \ D3 \ D4 \ D5 \ D6 \ D7 \ D8 \ D9 \ D10 \ D11 \ D12 \ D13)
  7. PWM腳位:6組(D3\ D5\ D6\ D9\ D10\ D11)
  8. 類比腳位:8組(A0\ A1\ A2\ A3\ A4\ A5\ A6\ A7)
  9. I / O輸出:40 mA
  10. Flash:32 KB(ATmega328P)4 KB用於bootloader
  11. SRAM:2.5 KB(ATmega328P)
  12. EEPROM:1 KB(ATmega328P)
  13. 時脈速度:16 MHz
  14. 工作電流:50MA(不含電機驅動器電流)
  15. 接腳(Pin)形式:3Pin GVS(杜邦)標準介面
    (G-地V-5V S-訊號黃色對應數位;藍色對應類比)
  16. 指撥開關:控制晶片D4 / D5/ D6 / D7訊號與電機驅動器通斷
  17. 電機控制管脚:
    D4(方向)/ D5(速度)控制電機AO1/ AO2
    D7(方向)/ D6(速度)控制電機BO1/ BO2
  18. 電機驅動:≤1000MA

驅動程式下載:連結


2017年4月21日 星期五

Motoblockly Sensor board學Blockly (運算式 (Expressions))

大多數的程式組成涵蓋有判斷式、運算式,判斷式主要作為判斷程式執行是否滿足相應的條件,如果滿足,就執行程式。這裡所謂的「條件」正是我們這個 Section 要討論的 「運算式」。嚴格的說,運算式不等於條件,但運算式的結果可以滿足條件。
那麼,甚麼是運算式?
EX. integerl=2+3
一個運算式是由運算元(Operands)、運算子(Operators)所組成,運算式常常是程式判斷式裡非常重要的條件式。上例運算式,是由 運算元 (integerl;2;3) 與 運算子 (=;+) 所組成,常見的運算式有算術運算式(Arithmetic Expressions)、關係(比較)運算式(Comparison Expressions),邏輯運算式(Logical Expressions)...等。

Example 01. 算術運算式(Arithmetic Expressions)。

說明:
我們將結合變數與串列埠的使用,透過數學運算積木中的算數運算式(+、-、×、÷、^)積木。計算數值,並利用計算的數值作為程式判斷的條件或結果。
範例:
  • 如圖一,在「程式開始」的設定迴圈中,設定序列埠的傳輸率值及變數的初始值;本範例利用 Arduino IDE的序列埠監控視窗呈現程式執行的結果數值,傳輸率為 9600 bps。
  • 設定變數的初始值為"1",算術運算的範圍"1~100",在 Arduino IDE 的序列埠監控視窗列印出結果。
  • 範例檔:請選擇匯入 XML_Arithmetic_Expressions_01.xml ,可開啟本 Example 的範例,或利用 Arduino IDE 開啟 IDE_Arithmetic_Expressions_01.ino 執行程式的結果。

Example 02. 比較運算式或關係運算式(Comparison Expressions)。


說明:
這個 Example 我們將利用【積木範例】中的「藍芽LED」程式,透過邏輯積木中的比較運算式積木,作為條件判斷。比較運算式積木有:<、>、=、≦、≧、≠ 六種運算子。
範例:
  1. 如圖二,在「程式開始」的迴圈中,設定藍芽連結與變數;設定變數積木,於設定中宣告變數"C"的初始電位為「空白」字元。
  2. 利用運算式判斷變數從藍芽串送來的字元,如果是"H",則設定數位腳位D13(操作是可以變更為D10、D11、D12) 為高電位;如果是"L",則設定數位腳位D13(操作是可以變更為D10、D11、D12) 為低電位。
  3. 範例檔:請選擇匯入 XML_Comparison_Expressions_01.xml ,可開啟本 Example 的範例,或利用 Arduino IDE 開啟 IDE_Comparison_Expressions_01.ino 執行程式的結果。

Example 03. 邏輯運算式(Logical Expressions)。


說明:
motoBlockly 邏輯運算積木包含有 且(And)"、"或(Or)"、"非(Not)"  積木。藉由邏輯積木的運用,作為程式判斷的條件。
範例:
  1. 如圖三,在這個範例,我們的學習內容將結合 Example 02 (比較運算式或關係運算式) 與前一個 Section (Step 07;如果...執行...(if/elif/else) 條件判斷句) 所提到【 if...elif...else】的應用。
  2. 藉由邏輯積木的應用與比較運算式的條件結果,執行程式中不同的流程,透過【 if...elif...else】的應用,作為程式執行的流程迴圈。
  3. 範例檔:請選擇匯入 XML_Logical_Expressions_01.xml ,可開啟本 Example 的範例,或利用 Arduino IDE 開啟 IDE_Logical_Expressions_01.ino 執行程式的結果。

Motoblockly Sensor board學Blockly (流程控制:如果...執行...(if/elif/else) 條件判斷句)

在這個 Section,我們將利用 Button (D2)進行流程控制:如果...執行...(if/elif/else) 條件判斷句學習,常見的條件判斷句有:
  1. if...(then)
  2. if...else
  3. if...elif...else
為什麼會有 elif 這種關鍵字呢?那是因為我們在每個 if 分支裏只能有一個 if 和一個 else,所以如果你需要判斷好幾次,你就需要很多 elif 語句。只要你有需要,寫多少個 elif 都是可以的。在這一個 Section ,我們暫時不會練習到 elif 的程序,會在後面的Section 練習時再進行說明。

Example 01. 利用if...(then),讓 Button 控制 LED 燈(1)

說明:
這個 Example 延續變數的利用,同時加入運算式的概念(下一個 Section 說明)。 利用 if...(then) 迴圈,判斷 Button (D2) 是否被按下(執行),如果Button(D2)被執行,就執行 LED 燈(D10)亮燈,然後關燈。
範例:
  1. 如圖一,在「程式開始」的迴圈中,先放入邏輯積木【如果(if)...執行(then)】的積木模組;第二步驟設定變數積木,於設定中宣告 i (=Button 電位) 的初始電位為「低」電位,並賦予 i 表示 Button (D2)腳位。
  2. 利用運算式判斷,如果 Button (D2) 為高電位(Button被按下),執行 LED (D10) 燈亮 5 秒,然後關閉 LED 燈。
  3. 範例檔:請選擇匯入 XML_Button_IF01.xml ,可開啟本 Example 的範例,或利用 Arduino IDE 開啟 IDE_Button_IF01.ino 執行程式的結果。

Example 02. 利用if...(then),讓 Button 控制 LED 燈(2)

說明:
  1. 這個 Example 是簡化 Example 01,利用 if...(then) 迴圈,判斷 Button (D2) 是否被按下(執行),如果Button(D2)被執行,就執行LED燈(D10)亮燈。
  2. 學習這個範例時,可以直接將本範例與 Example 01、Example 03 的範例進行參照,觀察範例執行的差異。
範例:
  1. 如圖二,在「程式開始」的迴圈中,先放入邏輯積木【如果(if)...執行(then)】的積木模組;第二步驟設定變數積木,於設定中宣告 i (=Button 電位) 的初始電位為「低」電位,並賦予 i 表示 Button (D2)腳位。
  2. 利用邏輯運算式判斷,如果 Button (D2) 為高電位(Button被按下),執行讓 LED (D10) 燈亮。
  3. 範例檔:請選擇匯入 XML_Button_IF02.xml ,可開啟本 Example 的範例,或利用 Arduino IDE 開啟 IDE_Button_IF02.ino 執行程式的結果。

Example 03. 利用if...else,讓 Button 控制 LED 燈

說明:
  1. 這個 Example 主要延續 Example 02,利用 if...else 迴圈,判斷 Button (D2) 是否被按下(執行),如果Button(D2)被執行,就執行LED燈(D10)亮燈,如果如果 Button(D2) 沒有被執行,就不執行LED燈(D10)。
  2. 學習這個範例時,可以直接將本範例與 Example 02、Example 01 的範例進行參照,觀察範例執行的差異。
範例:
    1. 如圖三,在「程式開始」的迴圈中,先放入邏輯積木【如果(if)...執行(then)】的積木模組;第二步驟在【如果(if)...執行(then)】的積木中點選藍色齒輪樣式的「設定」符號,在「如果」迴圈中堆疊入「否則」積木,【如果(if)...執行(then)】就會變成【如果(if)...執行(then)...否則(else)】,這就是【IF...ELSE】迴圈。
    2. 接下來設定變數積木,於設定中宣告 i (=Button 電位) 的初始電位為「低」電位,並賦予 i 表示 Button (D2)腳位。
    3. 利用邏輯運算式判斷,如果 Button (D2) 為高電位(Button被按下),執行讓 LED (D10) 燈亮。
    4. 範例檔:請選擇匯入 XML_Button_ELSE03.xml ,可開啟本 Example 的範例,或利用 Arduino IDE 開啟 IDE_Button_ELSE03.ino 執行程式的結果。

    Motoblockly Sensor board學Blockly (利用副程式(函數)與變數)

    延續前面Section的課程:閃耀的彩色LED燈、利用「變數(Variables)」控制LED燈,我們會發現有一個共同的現象,程式因為執行的步驟較多,會造成迴圈非常的壟長,這在程式編輯過程容易出錯,在Debug時有不容易處理。這一個Section,我們將學習利用副程式(函數)及變數的應用,解決在程式編輯時的這些問題。

    Example 01. 利用副程式(函數)控制 LED 燈


    說明:
    1. 這個 Example 是延續上一個 Step 的內容;在程式中,我們會將紅燈、黃燈、綠燈的程式,利用副程式(函數)的方式,分別獨立在不同的副程式迴圈中。
    2. 利用程式的呼叫功能,在主程式中呼叫副程式(函數),執行副程式的迴圈內容。
    範例:
    1. 如圖一,依序啟動 (數位腳位為高) 和關閉(數位腳位為低) LED 數位腳位 D10、D11、D12,將積木方塊堆疊在副程式積木的【流程】中,並在主程式建立呼叫副程式積木【流程】的積木,依序呼叫綠燈、黃燈、紅燈的副程式,觀察執行程式的變化。
    2. 範例檔:請選擇匯入 XML_ColorLED_SP01.xml ,可開啟本 Example 的範例,或利用 Arduino IDE 開啟 IDE_ColorLED_SP01.ino 執行程式的結果。
    備註:
    副程式的迴圈可以依據腳位,設定不同的流程名稱,本範例依據腳位分別有綠燈、黃燈、紅燈三個副程式(函數)。

    Example 02. 利用副程式(函數)及變數控制 LED 燈


    說明:
    1. 這個 Example 是延續上一個 Step 及 Example 01 的內容;在程式中,我們會將紅燈、黃燈、綠燈的程式,利用副程式(函數)的方式,分別獨立在不同的副程式迴圈中。
    2. 除了利用副程式(函數)迴圈的功能,方便掌握不同腳位燈號的控制;在這個 Example,我們也嘗試將之前學習變數的概念應用,利用變數來控制時間的變化。
    3. 利用程式的呼叫功能,在主程式中呼叫副程式(函數),執行副程式的迴圈內容。並利用「變數」來增加效率,只要設定一次變數,未來要改變時間間隔時,只要更動變數內容即可。
    範例:
    1. 如圖二,依序啟動 (數位腳位為高) 和關閉(數位腳位為低) LED 數位腳位 D10、D11、D12,將積木方塊堆疊在副程式積木的【流程】中,並在主程式建立呼叫副程式積木【流程】的積木,依序呼叫綠燈、黃燈、紅燈的副程式,觀察執行程式的變化。
    2. 匯入XML範例檔,在「程式開始」的【設定 (Setup)】中,宣告Time01、Time02、DelayTime為時間變數,利用變數,觀察時間變化時,程式執行的結果。
    3. 範例檔:請選擇匯入 XML_ColorLED_SPV01.xml ,可開啟本 Example 的範例,或利用 Arduino IDE 開啟 IDE_ColorLED_SPV01.ino 執行程式的結果。
    備註:
    副程式的迴圈可以依據腳位,設定不同的流程名稱,本範例依據腳位分別有綠燈、黃燈、紅燈三個副程式(函數)。

    Motoblockly Sensor board學Blockly (利用「變數(Variables)」控制LED燈)

    所謂「變數(Variables)」,可以用於表示或定義一段文字、數字、陣列、函式、物件...等內容,又可稱之為「變量」。程式裡的變數定義為:可以修改儲存記憶體內容的命名空間。跟數學變數最大的不同就是,程式的變數存放的不一定是數值(其實還是以數值的方式儲存),也可以是文字,這些類型的不同就稱為「資料型別」。變數就像一個儲藏箱一樣,程式設計者可以把一些要用到的數值或是字元字串,丟到裡面儲存。(節錄自電腦不難,作者幻嵐)
    在這個 Section,我們將利用變數的特點,將一些需要調整、變更,或在程式中需要改變的變量,透過變數的功能來進行控制。
    在認識變數(變量)的使用之前,要先認識在C語言的變數的設定,有幾種變數型態。C 語言的基本資料型態可分為三大類,分別是字元 (character) 、整數 (integer) 及浮點數 (floating-point number) 。下列是在motoBlockly會用到的變數型態:
    1. long(長整數)
    2. float浮點數(小數)
    3. string(字串(文句))
    4. byte
    5. unsigned
    6. int (整數)
    7. char(字元(半形字))

    Example 01. 利用變數控制 LED 燈

    說明:
    1. 這個 Example 是延續上一個 Step 的 Example 2內容,將時間設定成變數,利用變數的功能來進行時間的控制,透過變數方便時間的調整。
    2. 假設我們要將紅綠燈的亮燈與閃爍時間從間隔5秒改為間隔3秒或0.5秒,要手動改變每個設定就會很累,這時就可利用「變數」來增加效率,我們只要設定一次變數,未來要改變時間間隔時就只要更動一次變數內容即可。
    範例:
    1. 如圖,依序啟動 (數位腳位為高) 和關閉(數位腳位為低) LED 數位腳位 D10、D11、D12,將積木方塊堆疊在程式開始棕色積木的【迴圈 (Loop)】中,觀察執行程式的變化。
    2. 匯入XML範例檔,觀察在「程式開始」的【設定 (Setup)】中,設定Time為時間變數,利用變數,觀察時間變化時,程式執行的結果。
    3. 範例檔:請選擇匯入 XML_ColorLED_V01.xml ,可開啟本 Example 的範例,或利用 Arduino IDE 開啟 IDE_ColorLED_V01.ino 執行程式的結果。

    2017年4月16日 星期日

    Motoblockly Sensor board學Blockly (閃耀的彩色LED燈 (Loop & For... 迴圈))

    在 S4A Sensor Board 上有三顆,分別是D10(綠色)、D11(紅色)、D12(黃色);在這個Section開始,我們將學習如何一次控制三顆LED,進而學習迴圈的進階應用。

    Step 01. 一閃一閃彩色 LED 燈

    說明:
    1. 這個 Step 將利用程式的時間差,同時控制D10、D11、D12三顆LED燈。
    2. 練習過程,請學習者自行調整不同腳位LED的順序與時間量,並觀察調整後的變化。
    範例:
    1. 如圖一,依序啟動 (數位腳位為 高) 和關閉(數位腳位為 低) LED 數位腳位 D10、D11、D12,將積木方塊堆疊在程式開始棕色積木的【迴圈】中,觀察執行程式的變化。
    2. 範例檔:請選擇匯入 XML_ColorLED_01.xml ,可開啟本Step的範例,或利用 Arduino IDE 開啟 IDE_ColorLED_01.ino 執行程式的結果。

    Step 02. 模擬紅綠燈

    說明:
    1. 這個 Step 將利用程式迴圈與時間差,同時控制D10、D11、D12三顆LED燈。
    2. 模擬紅綠燈號時,須注意紅綠燈的變化順序,燈號長亮時間與閃爍時間,可以透過不同的時間輛進行控制。
    3. 練習過程,請學習者自行調整不同腳位LED的順序與時間量,並觀察調整後的變化。
    範例:
    1. 如圖二,依序啟動 (數位腳位為 高) 和關閉(數位腳位為 低) LED 數位腳位 D10、D11、D12,將積木方塊堆疊在程式開始棕色積木的【迴圈】中,觀察執行程式的變化。
    2. 在這個Step有 XML_ColorLED_02.xml、XML_ColorLED_03.xml 兩個範例,XML_ColorLED_02.xml 這個範例是利用時間差依序執行所有的程式,XML_ColorLED_03.xml 則是利用了迴圈(for...)的概念,在程式迴圈中,將部分重複的程式,利用迴圈(for...),判斷執行次數,執行需要程式重複執行的部分,比較兩個範例可以發現,透過迴圈(for...)的應用,可以有效縮短程式的行列數與檔案大小。
    3. 範例檔:請選擇匯入 XML_ColorLED_02.xml、XML_ColorLED_03.xml 兩個範例,可開啟本Step的範例,或利用 Arduino IDE 開啟 IDE_ColorLED_02.ino、IDE_ColorLED_03.ino 執行程式的結果。從執行結果可以發現這兩個程式的執行結果是一樣,唯一的差別在程式的編輯差異,這也是程式因人而異與有趣的地方。
    備註:
    在執行上列 Step 練習時,有一個小問題必須注意,S4A Sensor Board V2 擴充板因為批號的不同,D10、D11、D12腳位的 LED 燈號顏色不見得與本課程的範例一致。例如,以筆者的擴充板來說,分別有D10(綠色)、D11(紅色)、D12(黃色)和D10(紅色)、D11(黃色)、D12(綠色)兩種。為了解決類似問題或時間量變更的問題,方便程式的變更與程式版本的控制,我們在後續的課程 Session,將提到利用「變數」或副程式的概念來解決這類問題。

    Motoblockly Sensor board學Blockly (點亮LED燈)

    點亮LED燈
    S4A Sensor Board V2 擴充板上有三顆,分別是D10(綠色)、D11(紅色)、D12(黃色);點亮LED燈是編程學習中較為簡易的入門課程,我們也從這個步驟作為學習開始。

    Step 01. 點亮第一盞 LED 燈

    說明:
    1. 這個 Step 是認識 motoBlockly 的第一步,在打開 motoblockly 時,會從「程式開始」進入程式編輯,您會在程式編輯區看見第一個積木【設定、迴圈】棕色積木。實際上,在 Blockly 的工作積木中,它是可以被省略;但是在 motoblockly 中,為了在學習過程更容易理解 IDE 編輯的邏輯,所以做了這個積木,方便學習比對與教學說明。
    2. 點亮第一盞 LED 燈這個步驟,我們將先點亮 D10 這一顆 LED 燈作為學習的開始。
    範例:
    1. 點亮 LED D10:如圖三,LED位於數位腳位 D10,所以積木塊選擇設定【數位腳位 D10 為 高】,設定電位為高,啟動LED。
    2. 範例檔:請選擇匯入 XML_LED_01.xml ,可開啟本Step的範例,或利用 Arduino IDE 開啟 IDE_LED_01.ino 執行程式的結果。

    Step 02. 讓 LED 燈閃爍(1)

    說明:
    1. 讓 LED 燈閃爍,就必須在程式執行中加入時間控制,時間控制積木裡的時間量有【毫秒】與【微秒】兩種,1秒=1000毫秒=1000*1000微秒,依此類推。
    2. 在 motoBlockly 中,除了可以利用電子積木進行編程,使用者如果對於 C 語言熟悉,點選功能表列上【Arduino】欄位,可以直接進行 IDE 語言的編輯或修改。(如圖四)
    範例:
    1. 將積木塊堆疊入【程式開始】的【迴圈】中,設定【數位腳位 D10 為 高】,加入時間量進行控制。觀察程式執行的結果。
    2. 範例檔:請選擇匯入 XML_LED_02.xml ,可開啟本Step的範例,或利用 Arduino IDE 開啟 IDE_LED_02.ino 執行程式的結果。


    Step 03. 讓 LED 燈閃爍(2)

    說明:
    1. 將 Step 02 【迴圈】中的程式積木,堆疊放入【程式開始】的【設定】中,觀察程式執行的結果。
    2. 比較 Setp 02 與 Setp 03 兩組程式堆疊的位置差異,觀察程式執行結果的不同。
    範例:
    1. 將積木塊堆疊入【程式開始】的【迴圈】中,設定【數位腳位 D10 為 高】,加入時間量進行控制。觀察程式執行的結果。
    2. 範例檔:請選擇匯入 XML_LED_03.xml ,可開啟本Step的範例,或利用 Arduino IDE 開啟 IDE_LED_03.ino 執行程式的結果。

    2017年4月9日 星期日

    Motoblockly Sensor board學Blockly (用motoBlockly學Blockly玩Arduino)


    Blockly 是 Google於2012年6月發布完全可視化的編程語言,類似 MIT 的兒童編程語言 Scratch,你可以通過類似玩積木的方式用一塊塊電子圖形積木構建出應用程式。每個圖形都是一個代碼積木塊,你可以將它們拼接起來,創造出簡單功能,然後將一個個簡單功能 組合起來,構建出一組程式。
    Blockly 一種在網頁上運行的圖形化編程語言,Blockly 所編輯的程式碼可以轉換成 JavaScript、Dart、Python 或 XML。對於剛剛接觸程式的小朋友或學習者,Google 亦開發了 Blockly-Games,讓入門的學習者增添更多的樂趣,除此之外,諸如 Code.org、Ozobot、Wonder、Open Roberta ...等,都是非常有趣的 Blockly 應用入門。讀者也可以在我們的課程協作平台「EduMakerLab Transformer 教室」進階與延伸學習更多的課程內容。
    本課程配合硬體需求,將以慧手科技所開發的 motoblockly 平台作為 Blocklyduino 學習平台,motoBlockly 的編輯頁面主要分為:1. 程式積木區;2. 功能表列;3. 程式編輯區;4. 語言選擇(目前僅支援English、繁體中文)。慧手科技在功能上做了調整,可以讓使用者直接儲存成 Arduino IDE 檔案,直接寫入 Arduino 硬體,也可以匯出成 XML 檔作為後續編輯,對於一般入門使用者來說,已經非常足夠。接下來我們的課程內容,也會以此為主。

    Motoblockly Sensor board學Blockly (認識 Arduino!)


    Arduino 是一種硬體開放授權的互動環境開發板,互動裝置其實無所不在,例如冷氣的恆溫裝置,便是透過溫度感測器偵測環境溫度,再進行室內溫度的自動調節;還有汽車的倒車雷達,當過於靠近障礙物體時,會發出聲音警告駕駛者。這些裝置為生活增加不少安全及便利,甚至在互動玩具上,帶給使用者驚喜,有時候,也會利用藝術品呈現在生活當中,增添生活上的精采。
    Arduino 主要可區分為三個部分,Arduino 硬體(例如 UNO、Leonardo...)、Arduino 軟體及 Arduino 擴充元件(Sensor;傳感器)。Arduino 學習門檻較為簡單,不需要電子電機相關科系的背景,也可以很容易學會 Arduino 相關互動裝置的開發。由於 Arduino 以公開共享為基礎,多數人都樂於分享自己的的創品,網路上能找的創作案子非常豐富。以此會基礎,有時只需要參考分享者的作品,依據自身的需求行調整,就可以在短時間內完成自己的創作。 (更多內容請參考 -ITs通訊:認識 Arduino 與維基百科)
    本課程使用 Arduino 的開發板選用 Motoduino U1 (Arduino 主控板) 開發板,Motoduino U1 是結合Arduino UNO 和L293D 馬達驅動晶片的一塊整合板,可以驅動兩顆直流馬達(電流最大到 1.2A)及利用利用 PWM 特性控制馬達轉速。 Motoduino U1 完全相容於 Arduino UNO R3,大部分可以堆疊上去 Arduino 的擴充板都可以使用。Motoduino U1 搭配藍芽模組(已預留孔位,請注意安裝藍芽模組腳位一定要正確對應 Motoduino U1 主板),可以跟其它藍芽裝置溝通傳遞訊息。適合應用在如遙控車、溫度監控器...等。
    在進行本課程前,您除了必須準備好硬體設備(可以洽詢慧手科技),必須還要準備下載並安裝 Arduino IDE,軟體安裝非常容易,礙於篇幅,不再贅述。相關軟硬體需求如下:
    硬體:
    1. Motoduino U1。
    2. S4A/S2A Sensor Board for Arduino V2 (S4A/S2A感測互動擴充板第二版)。
    軟體:
    1. Arduino IDE。
    2. motoBlockly。

    Motoblockly Sensor board學Blockly (前言)


    不論是 STEM(STEAM) 教育、運算思維...,編程教學都是主要的學習內容。在中小學的課程中,Scratch、Blockly...等圖像式的編程學習,較為普遍與簡易、有趣,又能兼顧相對抽象的邏輯性思維。
    本課程將以台灣慧手科技的 S4A/S2A Sensor Board for Arduino V2 (S4A/S2A感測互動擴充板第二版),搭配 Motoduino U1 (Arduino 主控板),作為課程學習的主要硬體元件。同時,利用 motoBlockly 作為編程學習的主要學習平台。motoBlockly 是以 Blockly 為基礎的 Blockyduino 編程工具,具有簡易、直觀的特點,讓學習者藉由簡單的電子積木堆疊,可以直接控制 Arduino 及其相關的模組。
    雖然 Blockly 語言是非常簡易、直觀的語言工具,但是對於初入門或相對年齡較小的孩子,相對趣味性較低,教師在課程之前可以配合 Blockly-Games 來增加學童學習的趣味性。或者是,我們另外的課程 「用S4A Sensor Board玩Scratch 2.0」,結合 Scratch 2.0 作為初階課程。本課程除了強調利用 Blockly 語言進行編輯,課程的內容也會著重程式語言的邏輯訓練;同時,為了方便對照學習,針對每一個Section的Step範例,提供了利用KodoRobot Transformer編輯的Scratch 2.0範例檔,作為教學與學習參考。

    2017年1月2日 星期一

    從 Scratch 學習運算思維

    從 Scratch 學習運算思維

    在 ScratchED 網站中對於Scratch 學習運算思維的定義:(1) computational concepts, (2) computational practices, and (3) computational perspectives。從程式編輯的角度,正是:(1)程式設計概念 (Concepts);(2)程式設計技巧 (Practices);(3)程式設計觀點 (Perspectives)。
    Scratch是一種具有物件概念的積木式程式語言,透過角色、行為與時間的不同搭配方法,藉由使用迴圈、條件和變數的程式編輯觀念來完成指派的行為動作或任務。
    接下來將進入本課程探討的焦點,如何利用 Scratch 培養運算思維 (Computational Thinking)?
    我們將從 ScratchEd 這些資訊教育專家所設計的 Scratch 課程,讓學生在實作中,學會運算思維。基於上述對於Scratch 學習運算思維的定義,我們將更深入探討關於定義中:概念 (Concepts)、實踐(Practices)、觀點 (Perspectives),所發散出來的教學策略與學習技巧。
    運算的概念 (Concepts)~程式設計概念
    1. 序列(sequence):對某一個任務,確定一系列的步驟 。
    2. 迴圈(loops):重複執行相同的序列。
    3. 平行(parallelism):在同一時間讓許多事同時發生。
    4. 事件(events):一件事引發另一件事的發生。
    5. 條件(conditionals):根據條件做決定。
    6. 運算子(operators):支援數學與邏輯的表達。
    7. 資料(data):儲存資料、讀取資料與更新資料。

    實踐作法 (Practices)~程式設計技巧
    1. 反覆地增加(being iteratively and incrementally):
      發展了一點點,試試看,然後再發展一些。
    2. 測試與除錯(testing and debugging):
      確保事情能執行,發現錯誤並解決問題。
    3. 重複使用與混合(reusing and remixing):
      在現有的專案或想法上做點什麼。
    4. 抽象與模組化(abstracting and modularizing):
      探索整個問題與其他部分的連結。

    建立觀點 (Perspectives)~程式設計觀點
    1. 表達(expressing):
      了解「電腦運算」是一種創作的媒介,「我可以創造」。
    2. 連接(connecting):
      體認到「與他人一起創造」和「為他人創造」的力量,「當我有機會接觸他人,我可以做不一樣的事!」。
    3. 質疑(questioning):
      有能力對世界提出問題,「我可以(運用電腦運算)提問,並理解(電腦運算)世界!」。



    PS. 資料參考來源:
    1. 蔡淑玲老師 Coding for Fun
    2. 橘子蘋果 程式設計學苑。
    3. 创意计算: Chinese Translation of the Creative Computing Curriculum Guide
    說明:
    ScratchED(http://scratched.gse.harvard.edu/) 是一個專門為 Scratch 教學者建立的線上社群,所有關於 Scratch 的教育工作者皆可以在這裡分享自己的資源,並取的相關的協助。
    補充資源:

    知識管理與運算思維

    知識管理與運算思維

    運算思維(Computational Thinking)
    2006年3月,美國卡內基·梅隆大學計算機科學系主任周以真(Jeannette M. Wing)教授因提出並倡導「計算思維」(Computational Thinking) 而享譽計算機科學界。她在美國計算機權威期刊《Communications of the ACM》雜誌上給出並定義計算思維(Computational Thinking)。周教授認為:計算思維是運用計算機科學的基礎概念進行問題求解、系統設計、以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動。在她看來,「計算思維是一種普適思維方法和基本技能,所有人都應該積極學習並使用,而非僅限於計算機科學家。」
    綜合上述,運算思維就是問題的解決策略,使用電腦、人或兩者都可以理解的方式來呈現問題的解決方案。(BBC:Introduction to computational thinking),蓋可分為下列部分:(參考:兒童程式設計 KidsCoding)
    1. 問題分解(Decomposition):
      breaking down a complex problem or system into smaller, more manageable parts.
      將複雜的問題或系統分解成更小、更易於管理的問題;進而能夠更容易理解與處理、維護。
    2. 模式識別(Pattern Recognition):
      looking for similarities among and within problems.
      為了讓解決問題更有效率,將每個小問題分別檢視,思考之前是否有解過類似的問題;比對問題、模式。
    3. 抽象(Abstraction):
      focusing on the important information only, ignoring irrelevant detail.
      只注意重要的細節,忽略不相關的資訊;
    4. 演算法(Algorithms ):
      developing a step-by-step solution to the problem, or the rules to follow to solve the problem.
      設計簡單的步驟或規則來解決每個小問題。



    利用知識管理進行運算思維的實務開展!
    知識管理(KM,Knowledge Management)是網路時代的新興管理方法,管理學者彼得·杜拉克 (Peter F. Drucker) 早在一九六五年即預言:「知識將取代土地、勞動、資本與機器設備,成為最重要的生產因素。」受到1990年代的信息化(資訊化)蓬勃發展,知識管理的觀念結合網際網絡建構入口網站、資料庫以及應用電腦軟體系統等工具,成為組織累積知識財富,創造更多競爭力的新世紀利器。
    所謂知識管理的定義為:在組織中建構一個人文與科技兼備的知識系統,讓組織中的資訊與知識,透過獲得、記錄、存取(分析)、更新、整合、創造、分享等過程,達到知識不斷創新的最終目的,並回饋到知識系統內,個人與組織的知識得以永不間斷的累積,從系統的角度進行思考這將成為組織的智慧資本。
    知識管理是在於接受外界新的資訊後,利用知識管理的步驟:認知 、規劃、試點、推廣、制度化。將資訊轉變成為有效、科學的方法,透過有系統、有組織的策略,將知識轉化為經驗,經驗培養為能力。如果知識管理是人類社會的智慧生產模式,那麼運算思維則是生產過程的思維酵素。
    Related Posts Plugin for WordPress, Blogger...