好號熊



好號熊

0 1


makentu-arduino

honhonhaohaoxiong

On Github kevin00036 / makentu-arduino

\( \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

MakeNTU

Arduino

Arduino Uno

Arduino Uno

  • ATmega328P Microcontroller
  • CPU: 16 MHz
  • SRAM: 2 KB
  • Program Memory: 32 KB
  • Concon OS

慘!

So Why Arduino?

  • 自討苦吃
  • 慘東西用上癮
  • 有時候其實不需那麼強的計算力!
  • 低成本
  • 開發方便
  • Real-time control

Arduino I/O ports

  • Digital I/O : x14 (PWM x6)
  • Analog Input : 6
  • Operating Voltage : 5V
  • I/O pin max current : 20mA

[全慘號]

Software

  • 基本上就是 C / C++
  • 單線程 (Single-threaded)

Arduino IDE (點我下載!)

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 電壓

反轉!?

其他電子元件

電電實驗室 :)

  • 電阻、電容、電晶體、導線、...
  • 慘阻、慘容、電慘體、慘線、...
  • 零件用完要歸位

Tips

電池

  • 9V 長方形電池:供 Arduino 電源
  • 正極接 Vin ,負極接 GND
  • 1.5V x2 (或 x3) 乾電池:供馬達電源
  • 動力不足的話,可以考慮增加至 3 顆電池
  • 馬達轉動時,大電流會將電池電壓拉低至 1~2V

電壓/電流

  • Arduino Pin 輸出高電位 : 5V
  • Arduino Pin 最大電流 : 20mA
  • 請善用電電實驗室的儀器們
  • 注意不要燒壞板子!
  • (燒壞了就變高級餅乾)

軟體

  • 請善用 Serial port 印 debug 訊息
  • Arduino 第三方 library

「硬體跟軟體整合在一起,軟體通常都不是問題」

Thank you

大家加油XD

ArduinoMakeNTU