--- tags: 單晶片助教 --- # [6] Arduino講義:跟隨自走車 [ToC] ## 脈衝寬度調變(Pulse Width Modulation, PWM) * 用途 : 利用數位訊號高頻率的切換,調整開關的比例,以模擬類比訊號。 * 原理 : 透過調製器提供電機一個具有一定頻率的脈衝寬度可調的脈衝電。脈衝寬度越大,佔空比(Ducy cycle)越大,提供給電機的平均電壓越大,電機轉速越高,以模擬出需要的類比訊號。 * Duty Cycle = Ton / (Ton + Toff) (%),為 ON 的時間與週期相除的百分比。 ![](https://i.imgur.com/JzH4Ugy.png) * 微控制器對PWM的控制 : 透過timer來實現,在使用時須對timer的暫存器進行功能的設定。 * 如何使用 Arduino PWM : ![](https://i.imgur.com/aBkBbUf.png) * 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度) * 實作電路圖及參考腳位 : ![](https://i.imgur.com/0JuCStZ.png) | 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 上 。 ![](https://i.imgur.com/L6PE42K.jpg) * 實作影片 : <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橋驅動,故可以驅動兩個電機。 ![](https://i.imgur.com/Y0VGPHh.jpg) * 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> * 實作步驟: * 組裝自走車 * 試著建立好副程式,讓自走車轉動 * 加入超音波感測,並從序列埠監控室窗觀察。 * 藉由兩組超音波測距比較去決策機器人轉動方向。 ![](https://i.imgur.com/HiKbNMm.png) * 參考腳位: | 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在電機領域之三個應用。 * 心得 :::