第二章 設計電路

在這個章節,你將可以學到:

  • 電壓、電流與電阻的基本電學觀念。
  • 電子元件與Arduino的搭配應用。

CH2-1 基本電學

2-1. 認識電壓、電流、電阻

電壓

  • 簡單來說:
    • 驅使電荷流動的能力。電學符號為「v」。
  • 說得仔細點:
    • 電壓,也稱作電勢差或電位差,是衡量單位電荷在靜電場中由於電勢不同所產生的能量差的物理量。此概念與位高低所造成的「水壓」相似。每1庫侖的電荷做了1焦耳的功,等於一「伏特」(Volta)。

電流

  • 簡單來說:
    • 電荷的流動,稱之為「電流」。電學符號為「I」。
  • 說得仔細點:
    • 電流是指一群電荷的流動。電流的大小稱為電流強度,是指單位時間內通過導線某一截面的電荷量,每秒通過一庫侖的電量稱為一「安培」(Ampere)。
  • 歷史的錯誤:
    • 最早的電學發展,物理學家認為電荷既然有正、負,兩者應該都會流動。直到霍耳(Hall)才證明在金屬中流動的不是帶正電的粒子而是帶負電的粒子(即,電子)。但物理學家已經養成習慣,完整的電學體系也已建立,因此也就錯就錯地使用「電流」,而非「電子流」。因此,負電粒子往左流,我們可以等效看成電流往右流。

電阻

  • 簡單來說:
    • 電荷在導體中流動的難易度。電學符號為『R』。
  • 說得仔細點:
    • 電路欲阻止電流通過,同時使電能轉換為熱能之性質,謂之電阻。電阻以R 表示,單位為歐姆或簡稱歐,以希臘字母Ω(omega)表示。

電壓、電流、電阻快速理解聯想法

聯想方法:

  1. 把「電壓」當成「錢」,電壓會隨著電荷在電路中損耗。
  2. 把「電流」當成「人」,電流是原本就存在電路中的,並不會消失

  3. 把「 電阻」當成「商店」:消費的地方。

  4. 把「電壓」當成「家」:每個人從家庭中獲得錢。

實例說明:

有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 按鈕按下時的狀態

隨堂作業

  1. 試試看利用不同的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瞬間又變暗。

隨堂作業

  1. 試試看利用兩顆按鈕各別控制兩顆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的使用,請多多練習,熟練程式流程的控制吧。

隨堂練習

  1. 用三顆按鈕,分別控制三顆LED的明滅。

  2. 用兩個按鈕控制四顆LED,四顆LED由左到右,分別編號1~4號。

    1. 當兩顆按鈕都沒有被按下時,LED1亮,其他LED不亮。

    2. 當第一顆按鈕被按下,LED2亮,其他LED不亮。

    3. 當第二顆按鈕被按下,LED3亮,其他LED不亮。

    4. 當兩顆按鈕同時被按下,LED4亮,其他LED不亮。

results matching ""

    No results matching ""