---
tags: 單晶片助教
---
# [6] Arduino講義:跟隨自走車
[ToC]
## 脈衝寬度調變(Pulse Width Modulation, PWM)
* 用途 : 利用數位訊號高頻率的切換,調整開關的比例,以模擬類比訊號。
* 原理 : 透過調製器提供電機一個具有一定頻率的脈衝寬度可調的脈衝電。脈衝寬度越大,佔空比(Ducy cycle)越大,提供給電機的平均電壓越大,電機轉速越高,以模擬出需要的類比訊號。
* Duty Cycle = Ton / (Ton + Toff) (%),為 ON 的時間與週期相除的百分比。

* 微控制器對PWM的控制 : 透過timer來實現,在使用時須對timer的暫存器進行功能的設定。
* 如何使用 Arduino PWM :

* Timer0 與 Timer2 皆為 8-bit 的 Timer,其用來計時的暫存器分別為 TCNT0, 2,範圍為 0 ~ 255;Timer1 的TCNT1則為 16-bit,可以計數 0 ~ 65535。
| Pin | timer | base frequency | prescaler value |
|:----:|:------:|:--------------:| ------------------------------ |
| 5,6 | timer0 | 62500Hz | 1,8,64,256,1024 |
| 9,10 | timer1 | 31250Hz | 1,8,64,256,1024 |
| 3,11 | timer2 | 31250Hz | 1,8,**32**,64,**128**,256,1024 |
| Pin | timer | defalut prescaler | defalut frequency |
| :---: | :------: | :---------------: |:-----------------:|
| 5,6 | timer0 | 64 | 980Hz |
| 9,10 | timer1 | 64 | 490Hz |
| 3,11 | timer2 | 64 | 490Hz |
* **Arduino PWM輸出函數** :
<font color="red" size="5">analogWrite(pin, value)</font>
* Pin : 輸出PWM腳位。
* Value : Ton,數值範圍(0~255)。
### Lab1 - 測距警示燈
#### 實作說明:
* 實作目的 : 搭配超聲波模組、LCD及示波器,學習控制Arduino PWM並觀察其Duty Cycle的變化。
* 實作題目 : 控制PWM與超音波模組,Duty Cycle隨超音波測得距離越近而越高,反之則相反。
* 超音波使用須知 :
* 不可少於2公分
* 每次訊號間隔不可太短
* 待測物注意反射角度(有效的角度:<15度)
* 實作電路圖及參考腳位 :

| HC-SR04 超聲波模組 | Arduino | LCM 1602 | Arduino |
| -------- | -------- |-------- | -------- |
| Vcc | 5V | GND | GND |
| Trig | Pin12 | Vcc | 5V |
| Echo | Pin11 | SDA | A4 |
| Gnd | GND | SCL | A5 |
* 實作影片 :
<iframe width="640" height="360" src="https://www.youtube.com/embed/V-qgInICvhA" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
### Lab2 - 雙超音波定位應用
#### 實作說明:
* 實作目的 : 學習使用超聲波模組,進行簡單定位。
* 實作題目 : 使用兩顆超聲波模組搭配 LCD 顯示器,當物體在 50 公分內時,將測得之方位 ( 前、左、右、太近 ) 顯示於 LCD 上 。

* 實作影片 :
<iframe width="740" height="553" src="https://www.youtube.com/embed/nj2-6-2xF9Q" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
### Lab3 - L298N及馬達應用
#### 實作說明:
* 實作目的 : 學習控制 L298N 馬達模組。
* 實作題目 : 透過 L298N 各別控制兩顆馬達,來分別使左右兩顆馬達完成正轉、反轉、停止功能。
* L298N 模組 : 本模組為兩路H橋驅動,故可以驅動兩個電機。

* L298N 參考腳位:
| L298N馬達模組 | Arduino |
| -------- | -------- |
| INT1 | Pin2 |
| INT2 | Pin4 |
| INT3 | Pin5 |
| INT4 | Pin6 |
| ENA | Pin3(PWM) |
| ENB | Pin9(PWM) |
* 模組控制訊號說明
* **ENA**和**ENB**腳位,可用<font color="red">PWM</font>來改變馬達轉速。
|DC馬達|轉向|IN1|IN2|IN3|IN4|ENA|ENB|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|M1|正轉|高|低| | |高| |
|M1|反轉|低|高| | |高| |
|M1|停止|低|低| | |高| |
|/|/|/|/|/|/|/|/|
|M2|正轉| | |高|低| |高|
|M2|反轉| | |低|高| |高|
|M2|停止| | |低|低| |高|
* 實作影片 :
<iframe width="740" height="553" src="https://www.youtube.com/embed/M3mPvl6QTdM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
### Lab4 - 跟隨自走車
#### 實作說明:
* 實作目的:完成跟隨自走車。
* 實作題目:利用<font color="red">兩組超音波測距模組</font>,並搭配<font color="red">L298N驅動馬達</font>,實作簡易跟自走車。其功能需包括 : <font color="red">跟隨物太靠近時自走車後退、跟隨物在右自走車即右轉、跟隨物在左自走車即左轉、跟隨物在一定範圍之前方自走車向前跟隨、未有跟隨物時自走車停止。</font>
* 實作步驟:
* 組裝自走車
* 試著建立好副程式,讓自走車轉動
* 加入超音波感測,並從序列埠監控室窗觀察。
* 藉由兩組超音波測距比較去決策機器人轉動方向。

* 參考腳位:
| L298N馬達模組 | Arduino |
| -------- | -------- |
| INT1 | Pin2 |
| INT2 | Pin4 |
| INT3 | Pin5 |
| INT4 | Pin6 |
| ENA | Pin3(PWM) |
| ENB | Pin9(PWM) |
| 超音波模組 | Arduino |
| -------- | -------- |
| trigPin_left | Pin13 |
| trigPin_right | Pin12 |
| echoPin_left | Pin11 |
| echoPin_right | Pin10 |
* 實作影片 :
<iframe width="740" height="553" src="https://www.youtube.com/embed/EC6DGrfotqs" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
### BONUS - 牙控車
#### 實作說明:
* 實作目的:由第二塊arduino進行操控,完成可接受藍牙操控之牙控車。
* 實作方法:利用<font color="red">HC-05藍牙模組</font>,並搭配<font color="red">LAB4跟隨自走車</font>,設計由傳輸指定字元控制牙控車型走之方向,以f、r、l、b控制前進、右轉、左轉、後退之功能。
* 實作影片 :<iframe width="730" height="553" src="https://www.youtube.com/embed/UqjwAsoPHDs" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
## 課後問題 (三題)
:::info
* Q1.詳述雙超聲波模組感測方位原理。
* Q2.詳述Arduino是如何產生PWM訊號(與內部Timer有關)。
* Q3.舉例PWM在電機領域之三個應用。
* 心得
:::