2012年9月17日 星期一

HC-SR04 超音波感測器介紹

2012-09-16_23h53_28 

超音波感測器(老外好像把它叫作 PING))) sensor)是由超音波發射器、接收器和控制電路所組成。當它被觸發的時候,會發射一連串 40 kHz 的聲波並且從離它最近的物體接收回音。超音波是人類耳朵無法聽見的聲音,因為它的頻率很高。

如下圖所示,超音波測量距離的方法,是測量聲音在感測器與物體之間往返經過的時間:

image

記得國中理化有教過,聲音在空氣中的傳播速度大約是每秒 340 公尺,傳播速度會受溫度影響,溫度愈高,傳播速度愈快。假設以 340 公尺計算,1000000 / 340 * 100 = 29.4 microseconds,四捨五入後,可知聲音傳播 1 公分所需的時間為 29 microseconds (百萬分之一秒)。

由於超音波從發射到返迴是兩段距離,因此在計算時必須將結果除以 2 才是正確的物體距離。所以我們可以利用底下的公式算出物體距離(距離單位為公分,其中 timing 是測量得到的音波傳播時間):

timing / 29 / 2

超音波感測器主要應用在機器人或自走車避障、物體測距等。

HC-SR04

HC-SR04 是一個超音波感測器,價格大約 100 元左右,它可以探測的距離為 2cm-400cm,精度為 0.3 cm,感應角度為 15 度。

51tbSvuOcAL._SL500_SS500_

HC-SR04 的接線方式很簡單,總共只有 4 支接腳。

HC-SR04 Arduino
Vcc +5V
Trig GPIO
Echo GPIO
GND GND
程式

Arduino 軟體內建了一個超音波測距的範例,Sketch 位置為 File > Examples > 06.Sensors > Ping,它所用的方法,是送出一個 HIGH 訊號到 Trig 腳位,接著測量音波從發射到返回的時間,再套用公式算出距離。

這邊我們不用 Arduino 內建的 Ping 範例,而是使用 HC-SR04 Ultrasonic Sensor Library,因為這個 library 已經把測距的公式都包成了函式庫,使用上比較方便。HCSR04Ultrasonic library 目前最新的版本是 1.1.2 版,可以在這裏下載。底下是一個範例:

這支程式每秒鐘會測量一次物體距離,並且將音波傳播時間(單位為 microseconds, MS)、物體距離(分成公分與英吋兩種單位,分別以 CM 和 IN 表示)印到 Serial Port。下圖是一個輸出結果:

2012-09-17_00h10_30 

LCD 顯示

知道超音波感測器的運作原理與使用方式後,只要結合 LCD 顯示器,便可以把測量到的距離顯示在 LCD 上。

2012-09-17_01h45_52
▲ 利用超音波測量名片的長度,得 9.14 公分,還挺準的!

我用的是 I2C 16x2 LCD,關於 I2C 16x2 LCD 的使用方法,請參考「I2C 16x2 LCD 介紹」 。

完整程式碼如下:

參考資料

2012年9月16日 星期日

使用 L298N 模組控制直流馬達

$(KGrHqRHJEwE88eJ1r0jBPRgJdZvhQ~~60_3

這是一個很方便的 L298N 模組,在網路賣場上搜尋一下就可找到,價格大概在 150 至 250 元之間,它可以驅動兩個直流馬達或是一個步進馬達,控制訊號可以用 Arduino 或是其它微控制器輸入。

這塊板子上帶有一個 5V 穩壓器,使用者可以選擇要不要打開 5V 輸出介面,以提供 5V 電源給 Arduino 或其它微控制器。

使用方法

2012-09-16_12h55_59

使用的時候,可以參考上圖或是底下兩張表連接電源、馬達以及 Arduino。

端子台 (Terminal Block)

No 名稱 說明
1 A+ Motor A+
2 A- Motor A-
3 VMS 供電 (+5V ~ 35V)
4 GND Ground
5 5V 5V output
6 B+ Motor B+

排針 (Male Header)

No 名稱 說明
1 ENA Enable Bridge A
2 IN1 Input 1
3 IN2 Input 2
4 IN3 Input 3
5 IN4 Input 4
6 ENB Enable Bridge B

底下這張表說明使用 IN1 與 IN2 控制 Motor A 的方法,Motor B 的控制邏輯也是一樣的,只是要改用 IN3 和 IN4 來控制。

ENA IN1 IN2 功能
HIGH HIGH LOW 馬達正轉
HIGH LOW HIGH 馬達反轉
HIGH IN1=IN2 IN1=IN2 馬達快速停止
LOW ingored ignored 馬達慢速停止

來看個簡單的範例:

程式碼

這支程式只是讓兩顆馬達不斷前進、後退、右轉和左轉,每個方向各跑一秒鐘。

示範影片:

參考資料

2012年9月8日 星期六

Arduino 七段顯示器擴充板

玩 Arduino 玩了快兩年,終於開始學習電路焊接了。今天到台北數位藝術中心參加 Peter 潘老師的「手焊 Arduino 互動裝置工作坊」上一整天的焊接實做課程,這是今天的成果,我的第一張 Arduino 擴充板:

2012-09-08_19h39_28
▲ Arduino 七段顯示器擴充板(正面)

2012-09-08_19h39_42
▲ Arduino 七段顯示器擴充板(背面)

2012-09-08_19h39_04 
▲ 與 Arduino 合體照

從這幾張照片,看得出我的焊功還要好好加強,不過不管怎麼樣,初體驗感覺總是特別的。

這張擴充板用到的主要材料:

  • 共陽極七段顯示器 x 1
  • 330 歐姆電阻 x 8
  • 按鍵開關 x 1
  • 10k 歐姆電阻 x 1
接線圖

課堂上潘老師也大略介紹了如何用 Fritzing 繒製電路圖。假如用麵包板來製作今天的電路,底下是線路參考接法:

2012-09-08_19h29_17

Arduino 與七段顯示器的腳位對應表:

Arduino 腳位 七段示顯器腳位 (筆劃)
D8 a
D11 b
A0 c
D12 d
D13 e
D9 f
D10 g
A1 dp
電路圖

Fritzing 產生的電路圖(當然,Fritzing 自動佈線還不夠聰明,還得手工佈線一下才會整齊):

2012-09-08_19h29_38

程式碼

這支程式的邏輯很簡單,當按下按鍵時,就從 0 開始計數,每按一下計數一次,數到 9 時就回頭從 0 開始數起。底下是一段示範影片:

參考資料