2011年3月31日 星期四

2.1 發射紅外線訊號

實驗目的

練習用 IRRemote 函式庫發射紅外線訊號。在這個實驗裏,你將學習用 IRsend 物件發射紅外線訊號。

前提

在做這個實驗前,我假設:

  1. 你已經看過「IRRemote 紅外線遙控教學」一文,而且
  2. 也已經把 IRRemote 函式庫安裝起來了
材料
  • 麵包板 x 1
  • Arduino 主板 x 1
  • 發射波長為 940nm 的紅外線發射器 x 1
  • 按鈕 (pushbutton) x 1
  • 10k 歐姆電阻 x 1
  • 100 歐姆電阻 x 1
  • 單心線 x N

1.5 兩個取得遙控器紅外線資料的方法

image_thumb14
▲ Arduino 與電視遙控器

要怎麼取得遙控器的紅外線資料呢?有兩個方法,第一個是利用「1.2 顯示紅外線協定種類」的範例程式(Example1.2.pde),這支程式會把紅外線解碼結果顯示在 Serial Monitor 上:

1.4 自製 LCD 介面的紅外線解碼器(IR Decoder)

實驗目的

練習製作一個 LCD 介面的紅外線解碼器(Infrared Decoder)。

在這個實驗裏,你將練習用 IRRemote 函式庫接收紅外線訊號,然後搭配一個文字型 LCD(Liquid Crystal Display)當作紅外線解碼器的顯示介面。預計製作的紅外線解碼器,其外觀如下:

DSC00161
▲ LCD 上會顯示解碼得到的紅外線協定(如 NEC)、編碼(如 4FB48B7)以及資料長度(如 32 位元)

2011年3月30日 星期三

1.3 增加紅外線訊號指示燈

實驗目的

練習用 IRRemote 函式庫接收紅外線訊號。在這個實驗裏,你將增加一顆 LED 當作紅外線訊號指示燈,並且讓指示燈在收到紅外線訊號的時候自動閃爍。

前提

在做這個實驗前,我假設:

  1. 你已經看過「IRRemote 紅外線遙控教學」一文,而且
  2. 也已經把 IRRemote 函式庫安裝起來了
材料

1.2 顯示紅外線協定種類

實驗目的

練習用 IRRemote 函式庫接收紅外線訊號。在這個實驗裏,你將利用 decode_results 結構來判斷並顯示遙控器的紅外線協定種類,如 NEC, Sony SIRC, Philips RC5 和 Philips RC6 等紅外線協定(Infrared Protocol)。

前提

在做這個實驗前,我假設:

  1. 你已經看過「IRRemote 紅外線遙控教學」一文,而且
  2. 也已經把 IRRemote 函式庫安裝起來了
材料

1.1 接收紅外線訊號

實驗目的

練習用 IRRemote 函式庫接收紅外線訊號。在這個實驗裏,你將學習用 IRrecv 物件接收紅外線訊號。

前提

在做這個實驗前,我假設:

  1. 你已經看過「IRRemote 紅外線遙控教學」一文,而且
  2. 也已經把 IRRemote 函式庫安裝起來了
材料

IRRemote 紅外線遙控教學

IRRemote 函式庫簡介

你想用 Arduino 做紅外線遙控嗎? 你想用 Arduino 控制你的電視、音響、冷氣機、DVD、MP3 Player、玩具遙控車或其它設備嗎? 用 Ken Shirriff 寫的 IRRemote 這個函式庫,會讓你的 Arduino 既可發射又可以接收紅外線訊號,它支援許多種紅外線協定,包括 NEC, Sony SIRC, Philips RC5, Philips RC6 和原始資料 (raw) 等紅外線協定。

這一系列的教學,將教你使用 IRRemote 函式庫來接收與發射紅外線訊號。 image
▲ 用 Arduino 與 IRRemote 函式庫的紅外線遙控電路。(圖片來源: Ken Shirriff’s blog)

2011年3月28日 星期一

紅外線物體偵測 (2)

上一篇的實驗中,我們完成了反射型紅外線物體偵測,接下來第二個實驗要製作遮光型的紅外線物體偵測。

先來複習一下遮光型紅外線物體偵測的原理,它的原理是把紅外線接收器與發射器安置在兩端,兩者相對,發射器一樣不斷發出紅外線光束,當光線被遮擋時,就表示中間有物體或障礙物。底下這張是遮光型紅外線物體偵測的示意圖:

image
▲ 遮光型紅外線感測器

2011年3月27日 星期日

Processing 溫度顯示器

image 晚上在 Hacker Highligts: Steven’s Temperature Display 這篇文章看到一個好玩的東西,Steven Dayton 根據 Jeremy Blum 做的 Arduino+I2C+Processing 溫度顯示器用 Processing 寫了一個很好看的溫度顯示器(如左圖)。

這讓我想起之前我曾用 Arduino 與 SHT15 溫溼度計製作了一個溫溼度記錄器(見「Arduino 筆記 - 製作一個溫溼度記錄器)」,於是動了一個念頭,想改良 Steven Dayton 的 Processing 溫度顯示器把它套用到我的溫溼度計。Processing 程式超簡單,我把 Steven Dayton 的程式下載回來後,只花不到 5 分鐘就定了,超快的!^o^

改良後的 Processing 溫度顯示器執行畫面如下:

Arduino 筆記 - Lab21 用繼電器控制 12V 風扇

Arduino 腳位的電流很小 (小於 40 mA),當你想要切換大電流或大電壓設備 (例如燈泡、馬達或大風扇) 的開關時,會需要一個中繼的電路 (intermediate circuit),最簡單的辦法是使用繼電器。

實驗目的

練習用繼電器控制 12V 風扇。

前提

我假設你已經知道繼電器是什麼,而且也會查 datasheet 看懂繼電器的接線圖。 如果你還不認識繼電器,建議你在做這個實驗前先看一看「繼電器簡介」一文,。

材料
  • 麵包板 x 1
  • Arduino 主板 x 1
  • 直流 12V 風扇 x 1
  • 5V 單刀雙擲 (SPDT) 繼電器 x 1
  • 1N4004 整流二極體 x 1
  • 2n2222 NPN 電晶體 x 1
  • 按鈕 (pushbutton) x 1
  • 10k 歐姆電阻 x 1
  • 1k 歐姆電阻 x 1

2011年3月26日 星期六

繼電器簡介

前言

為了使用繼電器,我上網做了一些功課,底下摘要整理我所吸收到的資訊:

什麼是繼電器?

image
▲ 各式各樣的繼電器 (圖片來源: http://kjsconsulting.biz/ )

繼電器 (Relay) 是一種可以讓小電力控制大電力的開關。例如,小電壓的電池或者是微控制器,只要用繼電器就可以切換馬達 (motors)、變壓器 (transformers)、電暖爐 (heaters)、燈泡 (bulbs) 等大電流設備的開關。

2011年3月23日 星期三

紅外線物體偵測 (1)

實驗目的

練習用紅外線接收器與發射器來實作紅外線物體偵測(Infrared Object Detection)。

紅外線物體偵測

我們在「用紅外線動作感測器(PIR Motion Sensor)控制 LED 的開關」一文中提到,紅外線感測器有分主動式和被動式兩種。紅外線動作感測器(PIR Motion Sensor)是屬於被動式的紅外線裝置,感應器本身不會發射紅外線光束,而另一種則是會發射紅外線光束的主動式紅外線感測器。主動式紅外線感測器常用於物體的偵測,例如自動沖水小便斗或感應式水龍頭,還有避障自走車等。

主動式紅外線感測器大概可分為「反射型」和「遮光型」兩種。如下圖所示,所謂反射型紅外線感測器,是把接收器與發射器並排,讓發射器不斷發出紅外線光束,當接收器收到反射過來的光線時,表示前方有物體或障礙物:

image 
▲ 反射型紅外線感測器

而所謂遮光型紅外線感測器,則是把接收器與發射器安置在兩端,兩者相對,發射器一樣不斷發出紅外線光束,當光線被遮擋時,就表示中間有物體或障礙物,如下圖所示:

image
▲ 遮光型紅外線感測器

準備材料
  • 麵包板 x 1
  • Arduino 主板 x 1
  • 38 kHz 紅外線接收器(如 TSOP2438,TSOP4438, PNA4602, FM-8038TM2-5DN) x 1
  • 發射波長為 940nm (nanometer, 奈米) 的紅外線發射器 x 1
  • 100 歐姆電阻 x 1
  • LED x 1
  • 單心線 x N
接線
  • 把紅外線發射器(IR LED)接到 pin 3,長腳(陽極)串接一顆 100 ohm 電阻接到 pin 3,短腳(陰極)接到 GND
  • 照下表把紅外線接收器跟 Arduino 連接起來:
紅外線接收器接腳 Arduino 接腳
Vcc(+ 或 V+) 接到 +5V 電源
GND(-) 接到 GND
Vout(或 OUT) 接到 pin 2。你可以接到其它 Digital pin,但程式要配合修改

image
▲ 有些紅外線接收器 GND 和 Vcc 是相反的,接線時請查閱你的 datasheet

實驗一:  利用紅外線反射偵測物體

接下來我們先來做第一個實驗,利用紅外線反射偵測物體。

利用紅外線反射偵測物體,在架設紅外線接收器與發射器的時候,接收器與發射器要並排,除此之外,另一個要注意的重點是,因為接收器很靈敏,所以要用個套管套住發射器(IR LED),讓光束往前直射,不然的話光束很容易受到其它物體反射而影響接收器的反應。如果手邊沒有套管,用黑膠布或捲紙把發射器包裹起來也是可以的:

image 

程式

底下就是利用紅外線反射偵測物體的程式(irObjectDetection.pde),在偵測到物體的時候,指示燈會閃爍:

比較微妙的地方是 tone(irLed, frequency); 這行指令,這行指令會一直產生 38 kHz 頻率的脈波 (Pulses)。我們在「控制蜂鳴器發聲」用過 tone() 指令,當時是 tone() 指令讓蜂鳴器發出不同音階的聲音。

如果你用的紅外線接收器很靈敏,即使把發射器用套管套住了,還是很容易收到從小角度透出來的光束的話,可以調整一下發射器的頻率,把頻率加或減 2~3 kHz 試看看。

示範影片

下一篇將進行第二個實驗「利用遮光偵測物體」。

2011年3月22日 星期二

紅外線接收器簡易測試

實驗目的

紅外線接收器簡易測試,在按下電視或其它遙控器按扭時讓 Arduino 做個反應,讓紅外線指示燈閃爍幾下。

image_thumb144
▲ Arduino 與電視遙控器

2011年3月18日 星期五

可讀寫任何資料的 EEPROM 函式

底下是一個 Arduino EEPROM Library 的使用範例,程式的邏輯是在 EEPROM 位址 5 的地方寫入數值 99,接著再從 EEPROM 讀出剛剛寫進去的內容:

EEPROM Library 只支援一個位元組(Byte)的讀寫,一次只能讀寫一個位元組。如果要儲存的資料只有一個位元組,這是足夠的。不過,假如是一個 int (2 bytes), long (4 bytes) 甚至是更複雜的資料結構,你就得呼叫 EEPROM Library 的函式很多次才能把資料儲存起來,這樣很不方便。

用底下提供的函式,你就可以讀寫 EEPROM 中的任何資料,而且函式只要呼叫一次就搞定。

2011年3月15日 星期二

Arduino 筆記 – Lab20 用紅外線動作感測器 (PIR Motion Sensor) 控制 LED 的開關

實驗目的

練習使用紅外線動作感測器 (PIR Motion Sensor),利用紅外線動作感測器來控制 LED 的開關。

紅外線動作感測器

image
▲ 紅外線動作感測器 (PIR Motion Sensor)

紅外線動作感測器 (PIR Motion Sensor) 或稱人體紅外線感測器,是一種可以偵測物體移動的電子裝置。生活中很多東西都會發射紅外線,例如燈泡、蠟燭、中央空調等,其實人體也會發射紅外線,紅外線動作感測器的原理,便是利用人體發射出來的紅外線的變化,來感應物體的移動。

2011年3月14日 星期一

Android-Firmata 與 Amarino 簡介

想像一下,把 Android 手機跟 Arduino 板子結合起來可以做什麼呢?用 Android 手機遙控機器人、自走車、飛行器? 或者是控制家電,例如電燈、電風扇、電視、冷氣機、窗簾、音響? 只要你有決心,這些都是可能的。

image
AR.Drone – iPhone 無線(Wi-Fi)遙控直升機

目前透過藍芽傳輸連接 Android 與 Arduino 的方案有兩個,一個是 Android-Firmata,另一個是 Amarino,這兩個方案作者是同一個人,叫做 Bonifaz Kaufmann。底下將簡介這兩個方案。

Android-Firmata

Android-Firmata 可以讓 Android 手機透過藍芽傳輸來控制 Arduino,它講的是 Firmata 協定。Firmata 是一個通用的通訊協定,它可以讓你的 Arduino 跟 Android 用同一套語言對話。底下是 Android-Firmata 應用架構示意圖:

 image
▲ Android-Firmata 應用架構示意圖,Arduino 這端的 Firmata 程式在 Arduino IDE 裏就有內附。

Android-Firmata 目前只支援 Firmata 1.0,可以讓你設定數位腳位 (Digital Pins) 的輸入輸出模式 (input/output mode),讀取數位和類比 (Analog) 輸入腳位,以及開關數位腳位,另外也可以控制 PWM 腳位。可以控制 Arduino 的函式有:

  • int digitalRead(int pin);
  • int analogRead(int pin);
  • void pinMode(int pin, int mode);
  • void digitalWrite(int pin, int value);
  • void analogWrite(int pin, int value);

使用 Android-Firmata 連接 Android 與 Arduino 的步驟大概如下:

  1. 上傳 StandardFirmata.pde 到 Arduino 板子上(Arduino IDE 內附,Android-Firmata 套件裏也找得到)
  2. 設定 Bluetooth 的通訊速率為 57600 bps
  3. 上傳使用 Android-Firmata 開發的 Android app 到手機上
  4. 掃瞄 Arduino Bluetooth 設備
  5. 跟 Arduino Bluetooth 配對並建立連線
Amarino

image
▲ Amarino Logo

Amarino (Android meets Arduino) 是 Bonifaz Kaufmann 寫的另一個連接 Android 與 Arduino 的軟體套件(Toolkit),跟 Android-Firmata 比起來,Amarino 一樣是走藍芽傳輸,不一樣的地方在於 Amarino 用的不是 Firmata 通訊協定,而是作者自創的一個很簡單的協定。 Amarino 的應用架構示意圖如下:

image
▲ Amarino 應用架構示意圖

Amarino 協定封包格式非常單純,只是把要傳輸的資料夾在一個 0x12 起始符號和 0x13 確認符號中間而已。也許是比較簡單的關係,作者後來似乎把重心移到 Amarino,Android-Firmata 從 2010 年 1 月之後便沒再更新了。

要開發 Amarino 的互動應用,Arduino 這端的程式要用 MeetAndroid 函式庫,而 Android 這端的程式則要使用 AmarinoLibrary.jar 函式庫,這兩個函式庫都可以在 Amarino 官網取得。

總結

不管是用 Android-Firmata 或 Amarino,你都將需要幾樣東西:

  1. 一台 Android 手機或平板
  2. 一塊可以走藍芽傳輸的 Arduino 板子
  3. Android-Firmata 或 Amarino 軟體套件
  4. Android SDKEclipse SDK,App 的程式開發工具

在 Arduino 藍芽傳輸這部份,你有兩種選擇,一種是用內建藍芽通訊的 Arduino BT,另一種則是用像 Bluetooth Mate 這類藍芽模組來擴充你 Arduino 的能力。

image
▲ Arduino BT (圖片來源: Sparkfun)

image
▲ Bluetooth Mate (圖片來源: Sparkfun)

延伸閱讀

2011年3月12日 星期六

用 NETLab Toolkit 把 Processing 與 Arduino 連接起來

實驗目的

練習使用 NETLab Toolkit 把 Processing 與 Arduino 連接起來,使用可變電阻 (potentiometer) 來控制 Processing 畫面上的矩形的水平移動。

image

註: 這篇跟「使用 Firmata 協定連接 Processing 與 Arduino」一文所用的例子是一樣的,文中部份內容會重覆,對沒有看到該文的朋友來說,這樣比較方便閱讀。

2011年3月11日 星期五

使用 Firmata 協定連接 Processing 與 Arduino

實驗目的

練習使用 Firmata 協定把 Processing 與 Arduino 連接起來,使用可變電阻 (potentiometer) 來控制 Processing 畫面上的矩形的水平移動。

image

註: 這篇跟「透過序列通訊把 Processing 與 Arduino 連接起來」一文所用的例子是一樣的,文中部份內容會重覆,對沒有看到該文的朋友來說,這樣比較方便閱讀。

材料與接線
  • 麵包板 x 1
  • Arduino 板子 x 1
  • 可變電阻 x 1
  • 單心線 x N

透過序列通訊把 Processing 與 Arduino 連接起來

實驗目的

練習透過序列通訊把 Processing 與 Arduino 連接起來。使用可變電阻 (potentiometer) 來控制 Processing 畫面上的矩形的水平移動。

image

材料與接線
  • 麵包板 x 1
  • Arduino 板子 x 1
  • 可變電阻 x 1
  • 單心線 x N

2011年3月10日 星期四

讓 SWF Flash 檔可以使用本機的通訊端(local socket)

由於安全性的因素,Flash Player 預設不允許 SWF 檔開啟本機的通訊端(local sockets),假如 SWF 檔會開啟 socket 通訊,當你在 Flash 開發環境外(例如 Flash Professtional CS5)開啟這個 SWF 檔時,Flash Player 會跳出底下這個「SecurityError: Error #2010: 不允許含檔案系統的本機(Local-with-filesystem) SWF 檔案使用通訊端」的警告訊息:

image

如果你需要在 Flash 開發環境外跑 Flash SWF 檔,不希望 Flash 太緊張跳出上面的警告訊息,那麼你必須修改 Flash 的安全性設定。底下提供兩個修改方法:

NETLab Toolkit and Flash 入門 (3)

這是這系列的第三篇。

前一篇中,你已經建立了一份 Flash 文件,並且使用 Flash Widgets 建立跟 Arduino 板子上可變電阻的連線了。下一步是加入一張圖片和一個 ClipControl 元件,利用可變電阻來控制圖片的移動,包括圖片的三維旋轉、縮放、陰影、模糊等效果。

利用可變電阻控制圖片的移動

1) 點選「檔案 > 匯入 > 匯入舞台...」或按 Ctrl+R 匯入任意一張圖片:

image

點選「修改 > 轉換成元件…」或按 F8 把圖片轉換成「影片片段」類型的元件:

NETLab Toolkit and Flash 入門 (2)

這是這系列的第二篇。

前一篇中,你已經把 Firmata 程式上傳到 Arduino 板子上,而且也安裝好 NETLab Toolkit 的 Flash Widgets 了。下一步是建立一個 Flash 文件,然後用 Flash Widgets 來連接 Arduino 板子上的可變電阻。

建立 Flash 文件與連接可變電阻

1) 首先,點兩下 NETLabHub.exe 打開 NETLab Hub 應用程式:

image
▲ NETLab Hub 已啟動

用 Flash Widgets 寫 Flash 程式不需要知道太多有關 Hub 的細節,因此,你只要把 Hub 打開放著就行了。

NETLab Toolkit and Flash 入門 (1)

照著底下的步驟做,練習使用 NETLab Toolkit 的基本 Flash 元件,這系列教學將帶你入門教你學會使用 NETLab Tookit。

情境說明

底下是範例情境的示意圖:

image

我們將在 Arduino 上跑 Firmata 程式,讓 Arduino 可以用 Firmata 協定跟外部的軟體溝通(在此為 Flash 程式),接著在電腦上跑 NETLab Hub 應用程式,你可以將 NETLab Hub 看做是一個序列通訊轉接成網路通訊的程式,最後再利用 NETLab Toolkit Flash widgets 寫一支 Flash 應用程式來與 Arduino 產生互動。

NETLab Toolkit 介紹

什麼是 NETLab Toolkit?

NETLab Toolkit 是一個實體互動速寫與製作藝術作品(tangible interaction sketching and production)的系統。它使新手和專家得以快速的整合硬體、媒體以及互動行為做出產品、設施裝備與研究。它整合了包括 Arduino 等微控制器(microcontrollers),而且透過其 Flash 元件(Flash Widgets)它提供了硬體和數位媒體速寫(media sketching)一個拖放的開發環境(drag-and drop environment),使用者不需撰寫程式碼。

image image image

Arduino

Makecontroller

XBee

2011年3月7日 星期一

Flash 程式 ArduinoMonitor 一步一步教學(2)

這是這系列的第二篇。

這篇教學將一步一步 (step by step) 教你在電腦上把 ArduinoMonitor 這支 Flash 程式跑起來。

所需軟體
必備知識

讓我們先同步一下。我假設你對 Arduino 有一些基本的了解,而且也已經把 Arduino IDE 裝起來並玩過一些簡單的範例程式。假如你還沒接觸過 Arduino,建議你先閱讀底下的資料,這會比較容易讓你了解這篇教學在說什麼:

Flash 程式 ArduinoMonitor 一步一步教學(1)

ArduinoMonitor 簡介

ArduinoMonitor 是一支 Flash 程式,它可以用來監測 Arduino 所有 I/O 的狀態。底下這張圖便是 ArduinoMonitor 的軟體介面:

video_03
▲ ArduinoMonitor (註: 上圖是以 Screenpresso 錄影再以 123 AVI to GIF Converter 轉成 GIF 動畫)

2011年3月4日 星期五

序列伺服器 TinkerProxy 簡介

什麼是 Tinkerproxy?

TinkerProxy 是一支基於 serproxy 可以把序列通訊轉接成網路通訊(Redirecting network socket connects to/from serial ports)的程式。相較於 serproxy,TinkerProxy 解決了 serproxy 無法在 Mac OSX 10.6 執行的問題。TinkerProxy 的組態設定檔(Configuration File)跟 serproxy.cfg 是完全相容的。

我假設你已經認識 serproxy,如果你不知道,在繼續往下讀之前,請先看「序列伺服器 serproxy 介紹」這篇。

哪裏可以取得 TinkerProxy?

TinkerProxy 可以在它的官網下載:

http://code.google.com/p/tinkerit/wiki/TinkerProxy

2011年3月3日 星期四

序列伺服器 serproxy 介紹

什麼是 serproxy?

serproxy 是一支可以把序列通訊轉接成網路通訊(Redirecting network socket connects to/from serial ports)的程式。參考底下這張示意圖,serproxy 允許你透過網路跟 Arduino 建立通訊。

image
▲ serproxy 運作示意圖

2011年3月1日 星期二

把 Arduino 當成一個 AVR ISP(In-System Programmer) 使用(2)

這是這系列的第二篇。

前一篇中提到,用 Arduino 做 AVR ISP Programming,我們用了兩張 Arduino 板子,一個是燒錄用的板子,叫作 ArduinoISP,另一個是要被燒錄 bootloader 的板子,稱為 Target board。其實 Target board 不一定非得使用 Arduino 板子不可,你也可以用麵包板當作 Target Board。

用麵包板當作 Target Board 標準版

用麵包板做 Target Board,要準備的材料除了麵包板和 ATmega 晶片外,你還需要 4 個元件:

  • 一個 16 MHz 的石英震盪器(Crystal)
  • 一個 10k 歐姆電阻,以及
  • 兩個 18 到 22 pF(picofarad) 的陶瓷電容

把 Arduino 當成一個 AVR ISP(In-System Programmer) 使用(1)

ArduinoISP 簡介

這篇教學教你怎麼把 Arduino 板子變成一個 AVR ISP 燒錄器(In-System Programmer),讓我們把它稱作 ArduinoISP。ArduinoISP 允許你用 Arduino 板子把 bootloader 燒錄到 AVR 晶片上,比如 Arduino 板子上所用的 ATmega168 或 ATmega328 晶片。

image 
▲ Arduino Duemilanove w/ ATmega328