第二章 設計電路
在這個章節,你將可以學到:
- 電壓、電流與電阻的基本電學觀念。
- 電子元件與Arduino的搭配應用。
CH2-1 基本電學
2-1. 認識電壓、電流、電阻
電壓
- 簡單來說:
- 驅使電荷流動的能力。電學符號為「v」。
- 說得仔細點:
電流
- 簡單來說:
- 電荷的流動,稱之為「電流」。電學符號為「I」。
- 歷史的錯誤:
- 最早的電學發展,物理學家認為電荷既然有正、負,兩者應該都會流動。直到霍耳(Hall)才證明在金屬中流動的不是帶正電的粒子而是帶負電的粒子(即,電子)。但物理學家已經養成習慣,完整的電學體系也已建立,因此也就錯就錯地使用「電流」,而非「電子流」。因此,負電粒子往左流,我們可以等效看成電流往右流。
電阻
- 簡單來說:
- 電荷在導體中流動的難易度。電學符號為『R』。
- 說得仔細點:
- 電路欲阻止電流通過,同時使電能轉換為熱能之性質,謂之電阻。電阻以R 表示,單位為歐姆或簡稱歐,以希臘字母Ω(omega)表示。
電壓、電流、電阻快速理解聯想法
聯想方法:
- 把「電壓」當成「錢」,電壓會隨著電荷在電路中損耗。
把「電流」當成「人」,電流是原本就存在電路中的,並不會消失
把「 電阻」當成「商店」:消費的地方。
把「電壓」當成「家」:每個人從家庭中獲得錢。
實例說明:
有2人(2A)外出消費,他們從家中帶錢(10V)出發,每個人經過電路上的商店(燈泡)時,每個人便幾乎把錢(10V)在商店花完,離開商店時已所剩無幾(0V),電荷(2A)便會從商店再返回家中( 電源) 補充驅動力—錢(10V),然後再繼續外出消費,週而復始。
電跟水類比
水流是水的流動,電流是電荷的流動;水從水位高的地方流向水位低的地方,電流從電位高的地方流向電位低的地方;水位高低之差叫水位差或水壓,電位高低之差 叫電位差或電壓;當水流流動時,遇到石投擋住,會因為石頭阻力水流變小。相對電流遇到電阻時,電流也會變小。
因此水壓-->水流-->石頭 的關係
就像電壓-->電流-->電阻 的關係
歐姆定律
德國物理學家格奧爾格·歐姆(G. Ohm)於1827年指出同一導體中,通過導體的電流I與導體兩端的電壓V成正比,與導體的電阻R成反比。也就是 V=IR
串聯電路
串聯電路是指電路中的所有元件,以首尾相接的方法串聯在一起,且電路中僅有一電流通過所有元件,這種單一路徑的電路,稱為串聯電路。
- 串聯電路的特性
E=V1+V2+V3+.....
RT=R1+R2+R3+.....+Rn
- 串聯電路像一下
電路中串聯電阻,有如流出都同一條河流中,不同位置放置石頭阻止水流的前進,因此在同一條河流的水流都是一樣的。而總電阻為各別電阻相加相於總石頭各數為不同位置石頭相加。
並聯電路
並聯電路是指在電路中所有元件,輸入端和輸出端分別被連接在一起,電路中每一元件兩端的電壓相同,流過每一元件的電流都是獨立,不會受其他元件影響,這種多路徑的電路,稱為並聯電路。
- 並聯電路的特性
$$I$$ =$$ I1 $$+$$I2$$+$$I3$$+ ......+ $$In$$
V1 = V2 .... =Vn = E
- 並聯電路 想像一下
電路中並聯電阻,有如河流流出分成很多支流,水流不用擠再同一條支流上,因此並聯電阻值會下降。
CH 2-2 數位接腳的運用與按鈕開關
Lab 3-1Digital Read
實習清單
實驗名稱 | 數位輸入讀取按鈕的狀態 |
---|---|
預期實驗結果 | 透過Arduino開發板讀取按下按鈕與放開按鈕的狀態。 |
實驗目的 | Ø 熟悉按鈕元件使用。 Ø 透過數位輸入,讀取按鈕的狀態,顯示在串列監測視窗( Serial Monitor)上。 |
材料清單 | Ø 麵包版 X1 Ø 按鈕開關 X1 Ø 220歐姆電阻*1 Ø Arduino UNO R3 開發板 |
實習步驟與說明
Arduino的應用開發,分成電路實作與Arduino程式實作兩部分,因此接下來我們就針對這兩部分做介紹,請跟著一起練習看看。
電路實作
元件介紹
首先,我們先將按鈕開關翻面看到鈕開關底部,我們可以發現黑色底線的連接線,與黑色連接線相連的部分代表導通。有些按鈕開關只有一條連接現如圖3,所以跟連接線平行的接腳代表彼此是導通的,如圖2和圖 4所示1、2是導通的,3、4是導通。從圖5示意圖來看能了解,可以發現左右兩邊的接線是相連,只有中間是斷的,當我們按下按鈕後中間連接線會互相連接。
圖1按鈕開關正面圖2按鈕開關反面
圖3按鈕開關正面圖4 按鈕開關的反面
圖5鈕開關示意圖
佈線圖
以本實驗為例,我們利用PIN2 讀取5V落於電阻上的電壓降。
Arduino程式實作
完整程式碼
voids |
---|
實驗結果
利用Arduino UNO 內建的串列監測( Serial Monitor)來跟Arduino通訊。
在把上列程式編譯並上傳到Arduino板子後,我們打開監測( Serial Monitor),然後我們會看到 Serial Port 不斷地收到從Arduino傳送過來的按鈕的值,當按下按鈕時讀值為1,如圖7,鬆開時讀值為0。
圖 6 按鈕鬆開時的狀態
圖7 按鈕按下時的狀態
隨堂作業
- 試試看利用不同的Pin完成上述步驟。
Lab 3-2 Button
實習清單
實驗名稱 | 使用按鈕控制LED閃爍 |
---|---|
預期實驗結果 | 透過Arduino開發板讀取按鈕的狀態,藉由改變LED的狀態。 |
實驗目的 | Ø 熟悉按鈕元件使用。 Ø 學習使用控制流程搭配Arduino開發板。 |
材料清單 | Ø 麵包版 X1 Ø LED X1 Ø 按鈕開關 X1 Ø 220歐姆電阻*1 Ø Arduino UNO R3 開發板 |
實習步驟與說明
Arduino的應用開發,分成電路實作與Arduino程式實作兩部分,因此接下來我們就針對這兩部分做介紹,請跟著一起練習看看。
電路實作
佈線圖
利用Arduino UNO 讀取按鈕的狀態,並以之控制LED的明滅狀態。
以本實驗為例,我們利用PIN2 讀取電阻上的壓降。
Arduino程式實作
完整程式碼
01voidsetup(){ 02pinMode(13, OUTPUT);\/\/宣告輸出接腳 03pinMode(2, INPUT);\/\/宣告輸入接腳 04} 05 06voidloop(){ 07 08if(digitalRead(2)== HIGH){\/\/按鈕按下時為高電位 09digitalWrite(13, HIGH);\/\/輸出高電位給LED 10} 11else{ 12digitalWrite(13, LOW);\/\/輸出低電位給LED 13} 14} |
---|
實驗結果
我們可以發現按下按鈕時,LED會發亮。鬆開時LED瞬間又變暗。
隨堂作業
- 試試看利用兩顆按鈕各別控制兩顆LED燈。
CH 2-4 程式語法之流程控制
在這個章節,你將會學到:
Ø 使用if…else語法來控制程式流程。
2-1. 程式流程控制
假設你今天走在路上,看到一支紅綠燈,它的三個燈同時亮起來,你會怎麼想?燈會亮,表示燈沒有燒壞或是有任何異常,可是這個現象卻是不正常的,原因就出在,整個流程錯了!
換成是我們的Arduino實習,也經常會碰到這樣的狀況,例如在按鈕的實習中,如果你按下了按鈕,明明電路都是對的,LED卻沒有亮,那麼,就是控制流程出問題了,所以,我們來學習程式流程的控制語法吧
2-2. if…else
在Arduino中,有個很重要的程式控制流程語法,就是if-else語法,舉個例子來說,一個LED和按鈕分別連接著Arduino的兩個pin,pin13和pin2,那麼只要使用if…else語法,就可以完成用按鈕控制LED的明滅了。
運用上一章學到的註解,在正式完成程式碼之前,我們先將想法以註解的方式寫出來,如圖1。
01 void setup() {
02 \/\/指定pin13為輸出電壓腳位,供LED元件使用
03 \/\/指定pin2為輸出電壓腳位,供Button元件使用
04 }
05 void loop() {
06 \/\/如果Button被按下,pin12為HIGH,那麼pin13控制的LED就會亮
07 \/\/如果Button沒被按下,pin12為LOW,那麼pin13控制的LED就不會亮
08
09 }
圖1、將想法以註解的方式加入程式碼
大致的想法有了,那麼完成整個程式碼,也不會是難事了。
先介紹if…else語法,這跟你待會要實作的程式碼有關,
01if(條件式){
02 敘述式A
03}
04else{
05 敘述式B
06}
圖
針對這個實習,條件式就是當按鈕按下去的狀況,會執行敘述式A的內容,而當按鈕沒有被按下的時候,就會執行敘述式B的內容啦。
回到我們的程式碼可以看到圖的第8行,就是按鈕被按下的情況,也就是pin2會被設成HIGH,
當這種情形發生時,就執行第9行的內容,將pin13設成HIGH,也就是將LED點亮。
另一種情況,也就是當按鈕沒有被按下時,pin13就會被設成LOW,LED是熄滅的。
01voidsetup(){ 02pinMode(13, OUTPUT);\/\/指定pin13為輸出電壓腳位,供LED元件使用 03pinMode(2, INPUT);\/\/指定pin2為輸出電壓腳位,供Button元件使用 04} 05 06voidloop(){ 07\/\/如果Button被按下,pin2為HIGH,那麼pin13控制的LED就會亮 08if(digitalRead(2)== HIGH){ 09digitalWrite(13, HIGH); 10} 11\/\/如果Button沒被按下,pin12為LOW,那麼pin13控制的LED就不會亮 12else{ 13digitalWrite(13, LOW); 14} 15} |
---|
圖2、根據註解實際加入程式碼
以上就是if…else的使用,請多多練習,熟練程式流程的控制吧。
隨堂練習
用三顆按鈕,分別控制三顆LED的明滅。
用兩個按鈕控制四顆LED,四顆LED由左到右,分別編號1~4號。
當兩顆按鈕都沒有被按下時,LED1亮,其他LED不亮。
當第一顆按鈕被按下,LED2亮,其他LED不亮。
當第二顆按鈕被按下,LED3亮,其他LED不亮。
當兩顆按鈕同時被按下,LED4亮,其他LED不亮。