\(
\newcommand{\ord}[1]{\mathcal{O}\left(#1\right)}
\newcommand{\abs}[1]{\lvert #1 \rvert}
\newcommand{\floor}[1]{\lfloor #1 \rfloor}
\newcommand{\ceil}[1]{\lceil #1 \rceil}
\newcommand{\opord}{\operatorname{\mathcal{O}}}
\newcommand{\fail}{\operatorname{\mathcal{F}}}
\newcommand{\flk}{\operatorname{\mathfrak{F}}}
\newcommand{\suf}{\operatorname{\sigma}}
\newcommand{\rank}{\operatorname{\mathcal{R}}}
\newcommand{\sa}{\operatorname{\mathcal{SA}}}
\newcommand{\hei}{\operatorname{\mathcal{H}}}
\newcommand{\edps}{\operatorname{\mathcal{E}}}
\newcommand{\mx}{\operatorname{\mathcal{M}}}
\newcommand{\argmax}{\operatorname{arg\,max}}
\newcommand{\cons}[1]{\left[ \: #1 \: \right]}
\newcommand{\str}[1]{\texttt{"#1"}}
\)
Arduino Uno
- ATmega328P Microcontroller
- CPU: 16 MHz
- SRAM: 2 KB
- Program Memory: 32 KB
- Concon OS
慘!
So Why Arduino?
- 自討苦吃
- 慘東西用上癮
- 有時候其實不需那麼強的計算力!
- 低成本
- 開發方便
- Real-time control
- Digital I/O : x14 (PWM x6)
- Analog Input : 6
- Operating Voltage : 5V
- I/O pin max current : 20mA
- 基本上就是 C / C++
- 單線程 (Single-threaded)
C / C++
int main()
{
cout << "Hello World!" << endl;
}
Arduino
void setup()
{
// XDD
}
void loop()
{
// XDD
}
setup() => loop() => loop() => loop() => ...
Digital I/O
pinMode(1, OUTPUT); // 設定 Pin 1 為 Input 模式
pinMode(2, INPUT); // 設定 Pin 2 為 Input 模式
digitalWrite(1, HIGH); // 把 Pin 1 設成高電位
digitalWrite(1, LOW); // 把 Pin 1 設成低電位
digitalRead(2); // 讀取 Pin 2 的電位值:會回傳 HIGH 或 LOW
睡覺
delay(200); // 暫停 200 毫秒
取得時間
millis(); // 取得開機到現在的毫秒數
micros(); // 取得開機到現在的微秒數
資料型態
Arduino 上的資料型態的大小與一般 C/C++ 有些差別
- int : 16 bits (-32768 ~ 32767)
- long : 32 bits (-2147483648 ~ 2147483647)
- float : 32 bits (大約 6 位有效數字)
注意溢位!
這裡很容易整個慘掉
(尤其是時間,請用 long 變數接,不要用 int )
Serial port
- Arduino 跟電腦溝通的介面 (透過 USB)
- 可以拿來印 Debug 訊息
- 115200 bit/s
Serial port
void setup()
{
Serial.begin(115200);
}
void loop()
{
Serial.print("MS: "); // 印字串
Serial.print(1234); // 印數字
Serial.println(1234); // 有 +ln 有換行
}
Example : LED 閃爍器
bool light;
void setup()
{
pinMode(13, OUTPUT); // 13 pin 可以順便操控板子上的綠色 LED 燈
light = false;
}
void loop()
{
if(light)
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);
light = !light;
delay(500);
}
好用的官方 Document
沒事多查 Document ,有益身心健康
Project
聲控垃圾車
聲(鈉)控(制)的垃圾車
垃圾車
- NT$ 40
- 裡面有附組裝說明書
- 只能開/停
- 不能轉彎、倒退
慘!
馬達
- NT$ 3
- DC $\pm 3$V
- 逆向電壓->反著轉
- 電流 : 0.3 ~ 1A
小心焊接!
聲鈉
- 請參照昨天 @LeoMao 大大的講義
- RPi 寫得出來,Arduino 沒道理不行xd
- delayMicroseconds()
- pulseIn()
請務必認明好字聲鈉!!
左 : 聲鈉
右 : 長得很像聲鈉的餅乾
蜂鳴器
- 通 3~5V 直流電,會發出聲音
- 有分正負極
- 快撞到牆時發出警報聲響
最吵的那種!!
電晶體
- 馬達電流: 0.3A ~ 1A
- Arduino 輸出電流: <20mA
- :(
電晶體
- MJE3055T (NPN BJT)
- B : 接 Arduino 輸出
- C : 馬達負極
- E : 接地
- 4.5V 電池負極接地
- 馬達正極接 4.5V 電池正極
慘點 : 會吃掉 0.7V 電壓
反轉!?
其他電子元件
電電實驗室 :)
- 電阻、電容、電晶體、導線、...
-
慘阻、慘容、電慘體、慘線、...
- 零件用完要歸位
電池
- 9V 長方形電池:供 Arduino 電源
- 正極接 Vin ,負極接 GND
- 1.5V x2 (或 x3) 乾電池:供馬達電源
- 動力不足的話,可以考慮增加至 3 顆電池
- 馬達轉動時,大電流會將電池電壓拉低至 1~2V
電壓/電流
- Arduino Pin 輸出高電位 : 5V
- Arduino Pin 最大電流 : 20mA
- 請善用電電實驗室的儀器們
- 注意不要燒壞板子!
- (燒壞了就變高級餅乾)
軟體
- 請善用 Serial port 印 debug 訊息
- Arduino 第三方 library
ArduinoMakeNTU