make something with arduino first class
TRANSCRIPT
Make something With Arduino
張嘉幃
講師自介• 大安高工電機科 → 臺師大 EE 108 級• Openlab.Taipei 社群成員• 臺師大資訊研究社 (NTNUCIC) 公關• 沒有特別擅長的項目,但是有熱情• 大家的工具人
• 重點是還是一群男人的工具人
Outline Introduction
什麼是 Arduino Arduino 能拿來做什麼?
基礎電路學 訊號的介紹
動手寫第一個程式! 介紹 Arduino UNO 及工具 簡單的電路分析
什麼是 Arduino? Arduino 到底是什麼? Wiki: 一塊基於 AVR 微處理器的開發板
什麼是 Arduino? 這是 Arduino :
這也是 Arduino
不用說了也是 Arduino
就算外型不像但仍是 Arduino
所以到底什麼是 Arduino? 擷自官方網站的文案:
Arduino is an open-source electronics platform based on easy-to-use hardware and software. It's intended for anyone making interactive projects.
影片欣賞一下: https://youtu.be/UoBUXOOdLXY
Arduino 到底為我們解決了什麼問題? 經由 IDE 的轉介,以及大家幫忙完備學習資源和各種程式碼範例 & 函式庫,使得每個人都能增加完成成品的速度。 跟訊號控制有關係的作品變得不再是 EE 的專利 無論軟硬體層面都大幅促進社會的科技知識普及化
Maker 大量的崛起、眾多前瞻的作品出現 Maker≠ 創客& Maker≠ 電子玩家
電子玩家可以是 Maker 創作任何東西的人都可以是 Maker
好,所以到底 Arduino 能幹嘛? Summary 結論:
傳送訊號 接收訊號
他只做也只能做這兩件事 其他的事情是外接的模組、電路、元件在處理的
探討訊號的定義
訊號是什麼? 傳送資料 (Data) = 數據 數位訊號的基本應用:開關
開關按了就會亮= 1 (有電) 開關按了就會滅= 0 (沒電) 雖然送的電壓是交流電,但控制的概念是數位
類比訊號的基本應用:說話、你家的插座電源
訊號 (Signal) 在二維 XY 圖面上的表示方式
數位訊號:函數值非 0 即 1 其實定義有時也會有些差距 (如中間的圖 ) 但是可以看見每個單位時間 (X 軸的每一格和下一格 ) 內的波型都是一致的
類比訊號:每個時間點的函數值大部分都不一樣 所以也可能會出現不同時間點但卻有相同函數值的函數,比如三角函數。
Arduino 跟訊號的關係 Arduino 可以接收也可以傳送訊號。
只能傳送數位訊號。 有其他的方式可以送出模擬的類比訊號,但超範圍了不特別提及
( 數位類比轉換器 DAC) 也有看起來很像類比訊號的方法,後面課堂會提及。
接收的時候可以是數位訊號也可以是類比訊號。 可以接受類比訊號的原因 : ADC ( 類比數位轉換器 )
原理也超範圍了所以 (ry
訊號跟電學的關係 電學基本上就是在探討訊號的關係。
而電路學 / 電子學則是更聚焦於探討訊號在元件當中值域的大小 還記得國中學過的這個嗎?
V=IR電壓差 = 電流 x 電阻 電壓的單位:伏特 ( V ) 電流的單位:安培 ( A ) 電阻的單位:歐姆 ( ohm = Ω ) 就像水往低處流的感覺。
先來寫第一個程式吧! 第一步: Install Arduino IDE:
https://www.arduino.cc/en/main/software 第二步:先觀察一下最上面的工具列,點擊檔案→範例→ Basic→Blink 第三步:插上 USB線,上傳!
先來寫第一個程式吧! 基本的 Blink 接線方式:
為什麼要這樣接線呢!?
元件介紹:麵包板 (Bread Board)
紅線和藍線的洞是橫向相通的 中間的洞洞是縱向相通的
耗材介紹 杜邦線
有公母之分 可以多次插拔
電阻 上面的色碼代表電阻值 沒有正負極之分
簡單的電路分析 GND = 接地 = 基準電位 = 0伏特
就像是畫數線時候的 “原點” 一樣 一個電路一定會有,也只會有一個 GND
VCC = 電源電位 VCC 可以有不同的數字也可能一個電源擁有很多個 VCC ,沒有硬性定義
假如我們只用 5V 和 GND 去看這張圖: Q1:請問這一題的電流數字是多少?
ANS: 由於 V=IR ,元件兩端的電壓是 5V – 0V 所以兩端電壓為 0V 移項一下, V/R=I 則電流 5/220 = 0.0227A = 22.7mA
簡單的電路分析 其實這兩張圖片對電阻來說,在電路意義上是等價的:
但是基準點 (GND) 的位置不同,節點上的電壓就會不一樣 拿右圖舉例:
220歐姆下方的節點,電位是 0V (GND) 但是上方的節點電位是 5V
回到左圖: 找不到基準點的狀況,一般都假設電池下端的節點電壓為 0 但要知道的是,該電池符號的定義是兩端節點的電壓差
簡單的電路分析 如果我們對上頁的右圖改個數字,兩張圖片電路意義 ( 在電阻上的電壓差 ) 仍然相同。
上面節點是 87V ,下面節點是 82V87V-82V = 5V
簡單的電路分析: Blink 回到我們一開始製作的實體電路
= 一個元件尾和接在另一個元件的頭連接的方式叫做串聯
並聯則是一個元件的頭接另一個元件的頭,尾接尾。 PIN13 的節點電壓可以控制 LED燈的亮或是滅。 附註: LED燈如果要亮起來,上下兩個節點的電壓差要 0.7V
認識 Arduino UNO RESET :重開機 支援 6V~12V 電池外部供電
雖然官方文件不建議,但也可以直接用 5V直接對 Vin 送電 VCC固定送出 5V 電壓 Digital: 數位接腳 (PIN)
EX: digitalWrite(13,HIGH); 要求 13 號腳送出高電位 (5V) 。 Analog: 類比接腳
專門接受類比訊號輸入的地方。EX: analogRead(A0);
認識 Arduino UNO Blink 解析 程式碼的運作是一行一行由上到下動作的 setup()
開機的時候只執行一次大括弧內的程式碼 loop()
setup 完以後重複執行大括弧內的程式碼 LED_BUILTIN 內建的 LED 的 PIN腳
每個板子的 LED_BUILTIN 都不一樣 在 UNO , LED_BUILTIN = 13
pinMode 如果你要應用某個 PIN ,你必須告訴Arduino 那個 PIN 的用途
所以 pinMode (LED_BUILTIN, OUTPUT); 等價於 pinMode (LED_BUILTIN, OUTPUT);
認識 Arduino UNO Blink 解析 digitalWrite(LED_BUILTIN,HIGH);
要求 LED_BUILTIN = 13 號腳送出高電位 delay(1000);
整個程式停止一秒 單位是 ms
所以 1000ms = 1000 * 10^-3 = 1s 不要忘記加分號 不要忘記少括號 Void 不是這一次要講的重點
簡單的電路分析: Blink 回到我們一開始製作的實體電路
= PIN13 的節點電壓可以控制 LED燈的亮或是滅 附註: LED燈如果要亮起來,上下兩個節點的電壓差要 0.7V
TEST & 實作時間 & 問問題時間 請修改一下前一頁的 Blink 電路,並嘗試完成下列目標: Q1:請嘗試並聯看看三個 (LED燈+ 電阻 ) ,觀察燈號是否有變化
不建議並聯太多個,因為 UNO 板會推送太多電流造成當機或板子受損 不要傻傻地把 LED 燈跟電阻一起並聯,它們兩個是串聯的
Q2:請嘗試把串聯的 LED燈增加,或增加電阻的數量,觀察燈號的差異性 Q3: 請嘗試計算 LED 燈上面流過的電壓和電流是多少
有點重要的技能,因為過大的電壓或電流很容易將元件燒壞 過小的電壓或電流則沒有辦法驅動。
目標:1. 了解串聯是會把電壓給分壓,造成燈號的電壓衰減,但串聯的元件電流相同2. 了解並聯則是把電流給分流,造成板子的負載 ( 電流供應量 ) 增加,但並聯的各節點電壓相同
電路學 Summary V=IR 電壓準位 並聯跟串聯的性質
為什麼非本科系的人需要了解這些呢?照著接就好啦! 因為你可能會把東西弄爆
使用 Arduino 時要注意的事情 延伸閱讀 :
http://lunglungdesign.blogspot.tw/2012/11/arduino.html 十種會搞爛阿丟諾的方式
最常見的兩大問題:電源暴衝、電流倒灌
電源暴衝 & 電流倒灌 在 USB Port推送太多電流時,電腦的 OS 會自動幫你切斷
Port 以免傷害電腦 EX:瘋狂並聯一堆 LED燈
電源暴衝 & 電流倒灌 電流倒灌如何發生?如果我們把左圖改成右圖 :
電源暴衝 & 電流倒灌 電是由高電位流向低電位的 但是 Arduino UNO 的大部分接腳最多只推送 / 接收 5V 多餘的電流會回流回電源端造成電源受損
假如你是用電腦的 USB 供電的話…… 輕則硬碟的 OS 掛掉重灌 重則整台電腦掰掰 ( 物理 ) 課外 Key word:USB KILLER
今日課程結束!下一次上課: 5/5
課外補充 克西何夫電壓定律
電壓升 ( 電源供應 ) = 電壓降 ( 每個元件吃掉的電壓總和 ) 其實如果有搞懂前面的電路運作,這個你應該已經會了
克西何夫電流定律 流入某個節點的總電流 = 流出節點的總電流
當然,流出節點的電流的總和最後還是會匯集成一條電流流回電源I (total) = I (1) + I (2)