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 開始數起。底下是一段示範影片:

參考資料

2012年9月5日 星期三

Blueterm and Arduino

Blueterm 是一個 terminal App,可以用來顯示通過 bluetooth serial port 連線傳送的資料。這篇教學將教你如何使用 Blueterm 讓 Arduino 與 Android 建立藍芽通訊。

所需材料
  • Android 裝置 x 1
  • Arduino x 1
  • bluetooth module x 1

Step 1: 安裝 Blueterm

到 Google Play 下載並安裝 Blueterm 到 Android 裝置上。

下載

Step 2: 安裝 Arduino IDE 並上傳測試程式

如果你電腦上還沒有 Arduino IDE,請先到 http://arduino.cc/en/Main/Software 下載軟體,下載後解壓縮即可。

接著將底下的 Arduino Sketch 上傳到 Arduino 板子上:

這支程式所用的 baud rate 預設是 57600 bps,如果你的藍芽模組不是 57600 bps,記得先做適當的調整:

image

Step 3: 連接藍芽模組

我用的是廣州匯承信息科技的 HC-0x 系列藍芽模組,下圖是 HC-0x 藍芽模組的外觀:

image_thumb3522 image_thumb6422
▲ HC-0x 藍芽模組 (圖左:正面圖,圖右:背面圖)

這個藍芽模組連接方法很簡單,只要照下表把 Arduino 和藍芽模組連接起來就好:

Arduino 藍芽模組 備註
5V VCC 注意電源不可接錯
GND GND 注意電源不可接錯
RXD TXD  
TXD RXD  

image_thumb132

連接的時候有兩點要注意:第一是電源千萬不可接錯,不然藍芽模組可能會壞掉,第二是 Arduino 的 RXD 要接藍芽模組的 TXD,而 Arduino 的 TXD 要接藍芽模組的 RXD。

通電之後,藍芽模組上的 LED 會一直閃爍:

image_thumb13322

Step 4: 測試連線

打開 Android 上的 Blueterm App,然後跟著後面的步驟做:

image

按 Menu 鍵打開選單(如下圖左),為了方便,你可能會想要打開 Local echo,請按 Prefeneces,然後啟用 Local echo(如下圖右),你也可以把 Font size 調大一些,這樣眼睛會比較舒服:

image image

回到選單,選擇 Connect device,如下圖左所示,點擊 Scan for devices 掃瞄藍芽裝置,然後選擇 Arduino 的藍芽裝置(如下圖右):

 image image

如下圖所示,如果是第一次跟藍芽裝置連線,Android 會出現「藍牙配對要求」的畫面,此時必須輸入配對密碼(一般為 0000 或 1234)才能與此藍芽裝置連線:

 image

建立連線後 (此時藍芽裝置上的 LED 會停止閃爍),接著你就可以在 terminal 上輸入資料測試通訊:

image

如果一切順利,當你在 terminal 輸入 1 時,Arduino 板子上的 LED 就會打開,而且 Android 會收到 "Arduino Led On" 的訊息,當你輸入 0 時,Arduino 板子上的 LED 就會關掉,而且 Android 會收到 "Arduino Led Off" 的訊息。

image
▲ Arduino 板子上的 LED

參考資料

2012年9月4日 星期二

LCDproc for Arduino

LCDproc 簡介

image

可以這麼說,LCDproc 相當於是 Linux 版的 LCD Smartie,它也是 open source 的軟體,可以用來在 LCD 上顯示 Linux/BSD 的系統資訊,比如 CPU load, system load, 記憶使用狀況, uptime 等等資訊。這篇將介紹如何在 Ubuntu 上安裝 LCDproc 並使用 Arduino 來製作一個 LCDproc 顯示設備。

Arduino 軟硬體設定
  1. 連接 Arduino 及 LCD,如果你用的跟我一樣是 I2C LCD,請安裝 I2C 的 LiquidCrystalLCD library,線路接法可參考這篇。(標準 HD44780 的接法可參考這篇,至於程式碼呢…,嗯,就留給你當作業了)。
  2. 把底下這個 Arduino Sketch 上傳到 Arduino 板子上:

安裝套件

在 Ubuntu 上,只要下個指令就可以安裝 lcdproc:

sudo apt-get install lcdproc

設定 /etc/LCDd.confg

接著編輯 /etc/LCDd.config,準備設定 LCD 的一些參數以及 Arduino 連接的 Serial Port (本例使用 /dev/USB0):

sudo vi /etc/LCDd.conf

首先把 Driver 設定成 hd44780(可以用 /Driver 尋找):

然後切到 [hd44780] 的區塊設定 LCD 的參數(可以用 /hd44780 尋找):

要設定的主要是 ConnectionType, Device, Speed 和 Size 這幾個參數,其中 ConnectionType 必須設定成 lcdserializer, Device 要設定成你 Arduino 所用的 Serial Port,Speed 要設成 9600,而 Size 則設成根據你 LCD 的種類設定,例如 16x2。

啟動 lcdproc

設定好 /etc/LCDd.conf 後,現在便可以啟動 lcdproc 了:

sudo /etc/init.d/LCDd start            # 或 restart

然後 LCD 上應該會顯示類似下圖的資訊:

2012-09-04_20h24_04

跟著下 lcdproc 指令執行 client 程式以顯示 CPU load, system load, 記憶使用狀況等資訊:

sudo lcdproc

示範影片:

你可能會有個疑問:「我可以決定 LCD 上要顯示的資訊嗎?」,答案是可以的。設定檔是  /etc/lcdproc.conf 這個檔案,底下截錄一段 /etc/lcdproc.conf 的內容,這段內容主要是設定 CPU 和 Ethernet 的資訊,假如你希望打開某個資訊,就把 Active 設成 True,不然就設成 false,這樣就行了:

參考資料

VMWare: 使用 Host 的 Serial Port

要怎麼設定 VMware 讓 virtual machine 可以使用 host computer 的 serial port 呢?底下是設定的步驟,我用的是 Windows 系統,所以底下將以 Windows 的設定為例說明:

首先,先關閉 Virtual Machine,然後在 VMWare Player 選擇指定的 Virtual Machine 後 (例如 Ubuntu),按右鍵點擊 "Virtual Machine Settings…":

image

按下 Add 鈕:

image

選擇 "Serial Port",然後按下 Next 鈕:

image

選擇 "Use physical serial port on the host":

image

接著選擇 Physical Serial port (也就是實際存在的 Serial Port):

image

按下 "Finish" 關閉設定畫面,然後重新啟動 Virtual Machine 就可以了。

Serial Port 的對應關係

設定好後,那麼 Serial Port 會對應到 Linux  /dev/ 底下的哪個 device 呢?簡單說明一下:VMware 對 Serial Port Mapping 的處理方式是這樣,假如你有 COM1 和 COM2 兩個 Serial Port,那麼 COM1 會對應成 /dev/ttyS0,而 COM2 則是 /dev/ttyS1。假如你有 COM1 和 COM7 兩個 Serial Port (假設 COM7 是 USB to Serial port),那麼 COM1 一樣是 /dev/ttyS0,而 COM7 則會對應成 /dev/ttyS1。

Serial Port 測試

話說回來,我們用 Serial Port 要幹嘛?嗯...,你也許可以用 Serial Port 接 Modem,也許也可以用 Serial Port 接 Arduino 做一些監控的應用。假設你對 Arduino 有基本的了解,那麼可以照底下的方法測試 Serial Port 通不通:

1. 點選 VMware Player 選單的 "Removable Devices > Serial Port x > Disconnect" 先暫時停用 Virtual Machine 的 Serial Port:

2012-09-04_00h17_23

2. 上傳 File > Examples > 01.Basics > AnalogReadSerial 到 Arduino 板子上

3. 點選 VMware Player 選單的 "Removable Devices > Serial Port x > Connect" 啟用 Virtual Machine 的 Serial Port

4. 執行 sudo cat /dev/ttySx (x 是你的 Serial Port number)

如下圖所示,假如一切順利,就會看到 Arduino 傳過來的 Analog 讀值囉!

image 

參考資料

2012年9月3日 星期一

I2C 16x2 LCD 介紹

(本文同步發表於 OSSLab)

這是 I2C 16x2 LCD:

2012-09-02_23h47_48 dfrobot-i2c-twi-lcd1602-module-3-B

標準 LCD 需要比較多的腳位,I2C LCD 可以減少腳位的使用,而且接線也比較簡單。這個 I2C LCD 的特性如下:

  • 16x2 LCD,藍底白字,有背光
  • 走 I2C 介面,設備地址為 0x27
  • 可調整螢幕顯示對比
  • 5V 供電,相容於 Arduino
接線辦法

2012-09-02_23h45_01

參考上圖,接線方式為:

  • SDA – 接 Arduino 的 Analog Pin 4 (Arduino Mega 為 Pin 20)
  • SCL – 接 Arduino 的 Analog Pin 5 (Arduino Mega 為 Pin 21)
  • GND – 接 GND
  • VCC – 接 +5V
I2C LCD Library
範例程式

執行結果:

2012-09-02_23h44_23

參考資料

2012年9月2日 星期日

LCD Smartie for Arduino

這篇將說明如何用 Arduino 來製作一個 LCD Smartie 顯示設備。

什麼是 LCD Smartie?

LCD Smartie 是一個 Windows 的 open-source 軟體,可以用來在 LCD/VFD 上顯示 PC 的各種資訊。它可以顯示的資訊包括: CPU frequency, load 等, Winamp 狀態, 網路狀態 (傳輸速度, total bytes 等),磁碟可用及剩餘空間,記憶體使用情形,Email 狀態以及 BBC World news (或任何 RSS feed) 等等。

軟硬體設定步驟
  1. 連接 Arduino 及 LCD,標準 HD44780 的接法可參考這篇
  2. 上傳這個 Arduino Sketch 到 Arduino 板子上 (PS: 記得調整 LCD 腳位定義)
  3. 下載 LCD Smartie 應用程式

PS: 如果你用的是 I2C Serial LCD,請安裝 I2C 的 LiquidCrystalLCD library 並使用這個 Arduino Sketch

LCD Smartie 設定

打開 LCD Smartie 後,有幾個地方要先設定:

首先是 Display settings 的 Plugin:

  • Display Plugin: 選擇 matrix.dll
  • Startup Parameters: 設定所用的 COM Port 及 baud rate,例如 COM5,9600

image

接著切到 Screen 頁面,LCD size 請選擇 2x16:

image

完成之後,就可以開始設定要在 LCD 上顯示的資訊,如下圖所示,先在左手邊 Tab 中選擇資訊分類 (Winamp, Sysinfo, Internet 等),比如 Network Status,然後再從清單中挑選出要顯示的項目,並按下 Insert 鈕插入即可:

image

Screenshots

2012-09-02_17h35_24

image

2012-09-02_17h34_30

image

2012-09-02_17h35_03

image

2012-09-02_17h48_11

2012-09-02_17h48_40

參考資料