什麼!今天終於要使用模組(Shield)了? 快來激發創意,製作簡單有趣的互動作品吧!
在上一堂按鈕特輯 Part 2 的課程中,我們透過旗標的技巧,設計了一個超實用的電子開關。今天,我們要讓你用不到 10 分鐘的時間,學會怎麼讓模組與電路,搭配我們撰寫的軟體製作簡單的互動作品!
這是今天會用到的兩個模組:紅外線避障感測器以及風扇模組。當然,也一定少不了麵包板與杜邦線!忘記麵包板怎麼使用的朋友,請回到 Class 5 的課程複習一下囉!
紅外線避障模組
首先,我們來看看紅外線避障模組。模組的上方有一對紅外線發射器與接收器:
它們的運作原理是,如果有東西擋在模組前面,發射出去的紅外線訊號就會被障礙物反彈,然後由接收器接收。這時候,模組就會把它的訊號接腳,也就是印有 OUT 符號的接腳變成低電位,告訴 Arduino 前面出現了障礙物;相反的,如果模組前面沒有東西遮擋,訊號接腳就會維持在高電位的狀態。
我們可以根據模組的這個特性,直接拿它的訊號接腳取代我們之前介紹的按鈕,作為開關使用。而模組上的另外兩隻接腳,則分別是提供模組電源的 VCC 與 GND。
L9110 風扇模組
接著,我們來看看風扇模組。這個模組同樣有一組電源接腳,比較特別的是,它還有兩隻可以控制風扇轉向的控制接腳。當我們接上電源以後,如果把高電位 5V 送入 ina,把低電位 0V 接在 inb,風扇就會「正轉」,也就是從模組的正面吹出強風。
相反的,如果把 5V 送入 inb,把 0V 接上 ina,風扇就會反轉,類似抽風機的概念。
那我們要怎麼讓風扇停轉呢?把兩隻控制接腳都接上低電位 0V 就可以了。
小專案:手勢控制風扇開關
今天的小專案,我們要製作一個透過手勢就能控制的電風扇。想打開它的話,你只要用手在模組前面一揮,風扇就打開了;我再揮一次,就可以把風扇關掉。我們馬上來看看硬體的線路要怎麼接:
首先,我將 Arduino 上的 5V 與 GND 拉到麵包板的匯流排上面,這樣,我就有一整排的電源可以使用。然後,我們拿出剛才介紹的兩個模組。模組上的 VCC 都是代表電源輸入,所以我們要將 5V 從匯流排拉到上面;而 GND 則代表接地,要接到 GND 的匯流排。
接下來,我們將紅外線避障模組的「訊號接腳」接到 Arduino 的第 7 腳。因為訊號是從模組的接腳「送進」Arduino,所以等一下我們必須設定接腳 7 為輸入接腳,Arduino 才可讀取這隻接腳的狀態。另一方面,我們要從 Arduino「送出」高低電位的訊號,給風扇模組的 ina 與 inb 兩隻接腳,來控制風扇的轉向;所以我們把第 8 與第 9 腳接在 ina 與 inb 上面,並在稍後把他們設定為「輸出」接腳。
硬體線路完工以後,我們來動手完成程式碼吧!首先,我們拿出上一集 Class 9 的小專案程式碼,然後清除 setup() 裡面的程式。
根據這次小專案的需求,我們要把第 7 腳設定為輸入接腳,並且把第 8 與第 9 腳都設定為輸出模式,預設為低電位。接下來,在 loop() 當中,我們完全不用改寫 if 跟 else if 的架構,因為我們只是把「按下按鈕」的觸發動作,替換成用手去「遮擋」紅外線感測器。對程式來說,這兩種觸發方式都會讓 Arduino 的第 7 腳讀取到低電位的訊號,讓 digitalRead(7) != HIGH 成立。
那我們究竟要修改什麼地方呢?先讓我們回想一下風扇控制的方法。當 ina 與 inb 兩隻接腳都是低電位的狀態時,風扇不會轉動;而要讓風扇正轉,我們需要把 ina 變成高電位。所以!這裡唯一要更改的地方,只有在 if 判斷式成立時,讓連接 ina 的第 8 腳,切換一次高、低電位的狀態,進而改變風扇的正轉或是停轉模式。就這樣,我們的手勢風扇就完成了!
等等!我們今天還有個加分題想讓各位挑戰看看!如果我想在每一次觸發紅外線模組的時候,就改變風扇的方向一次,從正轉變成反轉,或是從反轉變成正轉,我該怎麼設計這段程式呢?您可以參考下方的範例程式,也歡迎朋友們在下方的留言板,分享您的程式與創意作品喔!
ONE LAST THING
下一堂課程,我們要介紹 Serial Monitor ,也就是序列埠監控視窗,讓你精通 Arduino 的溝通術與讀心術,請千萬不要錯過 LazyTomato Lab 的最新精彩課程喔!Arduino 的按鈕特輯系列,就到這邊告一個段落,我們下一堂課程再與各位見面,掰掰!