顯示具有 Bluetooth 標籤的文章。 顯示所有文章
顯示具有 Bluetooth 標籤的文章。 顯示所有文章

2016年6月5日 星期日

Arduino + PS3 Controller


相較於網路很多關於遙控Arduino範例,都是用手機藍牙與Arduino連線,
手機作為控制器不是不好(畢竟取得方便,幾乎人手一機嘛),
但作為遙控器就是感覺少了那麼一點點甚麼啊~




Game Console Controller


只要是男生,從小到大沒有玩過家用主機的請舉手!

是的,手把當作遙控器不是比手機更貼切嗎? 
作為控制器,遊樂器手把的手感是比手機更為契合自己的手啊!

有多個按鈕、方向鍵、類比搖桿、震動回饋......
單就控制與特定輸入指令而言,自然是理想方案。






Equipment we need

在開始之前我們需要準備的有


◎ Arduino UNO + USB Cable


◎ PS3_Controller + USB Cable




◎ USB_Bluetooth_Dongle




◎ USB_Host_Shield




◎ USB_Host_Shield_2_library
範例程式庫可至GitHub下載

下載後解壓縮將檔案至於如下位置,例:
D:\[Arduino]\arduino-1.6.5\libraries\USB_Host_Shield_20 

之後開啟IDE便可找到與PS3 Controller相關範例檔






HOW TO USE (Step by step)

◎ Install USB Host Shield to Arduino UNO, plug Bluetooth Dongle like blow:


◎ Openning PS3BT sketch and upload.

◎ Wait for few seconds, unplug the Bluetooth Dongle.

◎ Connect the PS3 Controller with USB cable to the USB Host Shield.

◎ Press the PS Button and wait for few seconds, then unplug the cable.

◎ Plug the Bluetooth Dongle again, and wait for the communication will done.

◎ Now, you can see the PS3 Controller red light has been shined, open the Arduino Serial Monitor......


COOL~~!
看起來很簡單對吧!? 但事前準備不可少。
操作過程如同下方參考影片:
(感謝網友分享操作過程,省下不少摸索時間)



下一步就是與其他硬體裝置搭配做出有趣的應用了,例如:

PS3USB sketch更簡單,PS3手把+USB Cable插上USB Host Shield後,直接上傳打開序列埠監控視窗就可以了。
與PS3BT sketch稍微有點不同的地方是,BT在按下PS按鈕時就等同於關閉了手把與Bluetooth dongle之間的連結,而USB則不會。







ENJOY & HAVE FUN!





2016年5月2日 星期一

Adobe AIR for Mobile + Arduino + Bluetooth (3) - RELAY + Bulb/Fan


終於要正式進入繼電器的階段了。

如書上所說,家電大都是110V交流電,而微電腦零件大多是5V直流電,電子零件若直接通過110V電壓,肯定燒毀。

聽起來超恐怖的啊~~
所以這時候就要靠RELAY這玩意了!



關於RELAY的介紹:
「用小電壓控制大電壓」「用電磁鐵控制的開關」
輸入訊號,利用電磁鐵決定電流是否流通,在電路中有自動調節、安全保護、轉換電路等作用。


光有Relay是不夠的,在Arduino需要使用電晶體來提供Relay所需的大電流,且繼電器內部線圈在斷電時,會產生反電動勢,因此還需要在線圈處並接二極體。
好在,其實有現成的Relay Module,上述的問題就迎刃而解啦~




上圖中的接線方式
DC+:Arduino 3.3V
DC-:Arduino GND
IN:訊號輸入的Pin






上圖中的接線方式
NO 常開 :家電的電源 (接收到訊號才開啟)
NC 常閉 :與NO相反 (接收到訊號才關閉)

COM 共接點 :110V電源






Arduino + Bluetooth Module + Relay









How to connect relay to Bulb?

預想中模擬圖如下,只要接上後再透過藍牙傳送訊號,看來似乎就可以達成了!?


等等,好像沒這麼簡單,有沒有發現了一個奇怪的地方?
圖中將原本燈泡的電線剪斷之後,再與繼電器延伸出來的電線連結包覆,
可是雖然想控制燈泡,但難道非得要破壞燈泡的線路嗎!?


該怎麼辦才好呢 !?





Solution:

STEP 1.以不破壞燈泡結構為前提,找一組延長線/插座,還有插頭,替代上圖的線路方案。

圖片來源 - [教學]用Arduino控制110V的電器



STEP 2.
燈泡電源只要接在這組延長線/插座上,而真正的市電來源就是插頭接在一般常見的插座上。








Arduino Coding
操作流程是先將手機上的藍牙訊號傳送給Arduino上的藍牙模組,
根據內容來決定是否對開啟/關閉Relay訊號的Pin腳位。

SoftSerial Port 的內容多加了「_%」是因為,不知甚麼原因從Arduino返回到手機上的訊息無法固定在同一時間段內完整顯示。
測試時在行動裝置上無法一次取得完整的字串,都是分好幾次才會將內容分別顯示完畢,例如第一次顯示為L,第二次才顯示OW,合起來才是LOW。
但如果是採用blueToothSerial.read();讀取第一個位元組,就不會有此問題。
(好像廢話,因為就那一個字元啊XD)

因此才自行加上了這組字串,用來判定訊息已經傳送完畢了。

ANE的問題?
Arduino傳送字串時出了問題?

原因
不明 Q_Q




Bluetooth module →
ArduinoRelay module → Fan 110V uploading code to Arduino

Using Mobile Device to control Fan or Bulb with Arduino



經過這些步驟,
最後這樣就完成了透過用Arduino + Bluetooth 控制電器的目標了!
影片連結中風扇的風速開關當然還是得先按下去才會有作用,
如果電器換成是燈泡的話也是得先打開開關才行。
當按下ON訊號送出之後,風扇成功開始轉動的那一瞬間,
興奮心情真是筆墨難以形容啊!!!

影片請點我




2016年3月11日 星期五

Adobe AIR for Mobile + Arduino + Bluetooth (2) - LED


基本設定完成後,下一階段目的是透過藍牙來操控LED。
AIR for Mobile 要使用 Bluetooth 的功能得借助ANE。



Bluetooth ANE 

此處有幾個Bluetooth ANE的連結可供參考

1. 
as3breeze (Free) 測試是採用這個ANE,感謝作者無償提供。
不過,作者的網站似乎是被駭客給搞掛了,已經過了好一陣子都不見修復。 囧
在取得資源沒多久之後就......=_=
不過這邊還是可以取得範例檔 & ANE,範例檔請點我。

AS3 Game Gear 還有其ANE內部的基本程式碼介紹。
Author Linkedin:Danel Kirch


2. distriqt ($20)

3. myflashlabs ($14.99)






Arduino Coding

根據作者網站的程式碼略為調整一下......
將輸出訊號的Pin設為13
當輸入1時代表高電位,LED亮起。
當輸入0時代表低電位,LED熄滅。









AIR for Android connect with Bluetooth module


作者提供的範例已經有APK可以使用,簡述與藍芽模組的連線流程:

1. Scan - 搜尋附近可用的藍牙裝置。這裡選定之前命名過的myBT_HC-06。


2. Bond - 配對類似記憶的概念,只要輸入一次Pin code便可,預設為1234。

3. Connect - 連接,與對應的藍牙裝置連結。當連線成功時,原本藍芽模組閃爍的燈號將會轉為恆亮。(Bond 並不算是真正的連結喔)
請看影片





到這裡已經初步完成用行動裝置控制LED,離目標越來越近啦~~~
かんばって!








2016年2月2日 星期二

Adobe AIR for Mobile + Arduino + Bluetooth (1) - 基本設定

因為懶惰,不想睡覺前還得要離開可愛的被窩去關檯燈,
一直想著到底能不能用手機控制當作家電開關,於是乎有了這一連串實驗。

「Remote control of Home Appliances Using Mobile」

思考一下想達成這樣的目標,究竟需要具備那些條件?
1. 行動裝置 (有藍芽/Wi-Fi 可以進行數據傳輸。)
2. Arduino + 藍芽/Wi-Fi模組 (將手機傳過來的訊息解讀判斷決定是否啟動連接的家電。)
3. 繼電器 Relay (控制家電時需要有一個開關控制電壓,否則Arduino會被燒毀。)



最重要也是首先必須要選擇的通訊方式, Wi-Fi or Bluetooth,都幾?
讓我們先瞭解

通訊模式的比較:


ZigBee、WiFi、藍牙 哪種模式更適合智慧家居?

WiFi VS. Zigbee VS. 藍牙:輕家居的3大主流通信技術

【物聯網時代】無線通訊,一百公尺的連線戰爭

智慧家庭時代來臨 無線聯網技術大比拼

這裡選擇藍牙主因是
● 耗電量低,對於智慧家電來說這可是很重要的一環。 (O)
● 只是要連結單一裝置,不一定需要用到傳輸速度高的Wi-Fi,殺雞焉用牛刀? (O)
● 行動裝置有Wi-Fi、 Bluetooth, 後者有ANE可以使用,學習不同傳輸方式的使用過程。(O)
● 承上,手邊剛好有藍芽模組,而且也沒有ZigBee。 (X)
● 這時候我覺得用Wi-Fi 很麻煩比起藍芽還難學會。(X)



直接來看接線圖吧!


藍芽模組 → Arduino 對應
◎Vcc → 5V
◎GND → GND

◎RxD → Pin7 

◎TxD → Pin6



Arduino code







Arduino 與外部設備的連接


藍芽模組是透過序列埠和Arduino連線,但是Arduino的程式碼和序列埠監控視窗也都是透過序列埠傳送。Arduino微電腦版預設只有一個序列埠,應保留給序列埠監控視窗使用。

這裡將採用SoftwareSerial(軟體序列埠)程式庫,將其他接腳變成序列埠讓藍芽模組使用。

SoftwareSerial(rxPin, txPin, inverse_logic)

關於SoftwareSerial的說明請參考官網,請點我。

這裡要值得注意的地方是建構式填入的第一個參數是接收RxD Pin 6, 第二個參數是傳送TxD Pin 7。起初以為藍芽模組如果是如上述RxD=Pin 7, TxD=Pin 6, 依樣畫葫蘆的話應該是SoftwareSerial(7,6), 後來才發現完全反了!! (在這裡真是卡了好久Q_Q)


應該是 SoftwareSerial(6,7)才對!!


後來才發現關於藍芽模組與SoftwareSerial參數設定的說明,試著解釋(自圓其說)一下XD

TxD: Transmitter 發送
RxD: Receiver 接收

藍牙模組的RxD對應到SoftwareSerial的TxD (Pin 7)。
藍牙模組的TxD對應到SoftwareSerial的RxD (Pin 6)。

處理器「傳出」訊息,外部設備「接收」,所以處理器TxD接設備RxD,反之亦然。







序列埠監控視窗 & ATCommand


程式碼&接線沒問題之後,就可以上傳了。操控藍牙模組的指令統稱AT命令(AT-command)。可以進行變更名稱、變更密碼、設定 baud rate.......等。

這裡使用的模組是HC-06,HC-06的AT命令,採用9600bps的速率傳送。
關於HC-06的設定可以參考這篇,Arduino : HC-06 藍芽模組的設定 。



另外,也有趙英傑老師的網站上關於藍芽模組的補充說明:

HC-05與HC-06藍牙模組補充說明(一)

HC-05與HC-06藍牙模組補充說明(二):連接電路

HC-05與HC-06藍牙模組補充說明(三):使用Arduino設定AT命令

藍牙模組補充說明(四):無線連結兩個Arduino控制板

HC-05藍牙模組補充說明(五):透過藍牙上傳Arduino程式碼

執行AT命令(AT-command)修改藍芽模組的資料傳輸速率





開啟序列埠視窗後,如圖操作可見其回應。(指令輸入完之後就會消失,圖片只是示意。)
這裡要注意的是右下角的baud rate也必須要留意是設置成9600才可以使用。
藍芽模組的第一階段基本操作就到這裡完成囉~