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

2017年4月3日 星期一

Adobe AIR + Kinect (4) - Gesture with Arduino


這篇是關於自訂手勢 Static Gesture 

在之前有提到骨架資訊
Adobe AIR + Kinect (2) - Skeleton with 2D Character

首先感謝Gray Liao 在 Some extensions for AIRKinect  
一系列相關文章中給了我許多啟發與學習經驗,再次感謝。




目標:
比出 O & X的手勢來讓LED燈隨之亮滅。

來練習如何用自訂手勢來與Arduino互動吧!


AS
Custom Static Gesture 自訂靜態手勢:Bingo & Cross


Bingo

達成Bingo手勢的條件
◎ 雙手要高過頭部 (也不能過高,不然也不像圓圈 )
◎ 雙手要接近一定距離 (不要完全貼合)

在測試中發現手掌翻轉時會導致手部骨架位置資訊的變化,
結論是手心不要朝向螢幕,而是向下的角度完成(類似敬禮,如上圖)。
Cross
達成Cross手勢的條件

◎ 雙手不可高過頭頂 (約肩膀高度上下)
◎ 雙手交叉的位置靠近另一邊肩膀 (右手在左肩)

測試中發現了一些小細節,
當只是先計算單手靠近另一邊肩膀的距離值,
與雙手交叉靠近另一邊肩膀所得到的數據不同。
這應該是當做出交叉動作時,
Shoulder也會因為Hand 的關係(牽引)而有些許移動。








AS3 Connec to Arduino

使用as3Glue程式庫來與Arduino(實際上是SerProxy)連線,
並把Flash的訊息包裝成Firmata。
也
可以同時參考這裡。










Arduino
Arduino +  LED (設定pin 13, 不附圖XD)

Arduino Code 




SerProxy (記得要開啟呀)









====================
                   心得
====================

坦白說自己寫的靜態手勢判斷算法並不嚴謹(只是判斷是否在預設範圍內而已),

雖然預設是站著時判斷是否比出手勢,
但發現坐著coding時, 有時會莫名發生判定成功的情形XD
看來日後在設計時必須考慮更細微的使用情境會更好。

動作設定必須合理 & 清楚界定範圍:

在判定不相對嚴謹的情況下,
(要求嚴謹得要考慮更多種可能&實用性,只是實驗性質的判斷還不需要那麼複雜)
如果有多種以上的動作偵測,更要留意誤判的可能性。
即使不是做出A,但不經意的動作也有可能導致觸發。

接近的Gesture最好不要在同一個情境下作多種事情,導致模稜兩可。
(此例的Bingo/Cross = ON/OFF,但別又同時擁有其他功能。)


使用的數據類型是 position.world (3D position in world coordinate space)
判斷的數值會因為與鏡頭距離的不同而有所差異。
所以假設使用情境下,
應該要求User與Kinect 保持在一定距離,

好讓判斷能夠收斂在固定範圍內。

我想不論是其他偵測動作的算法或感應器,這都應該是必備條件。
(不然距離太遠、不經意做出的動作而導致誤判,也是非常可能的。)

另外,position沒有另外與depth, rgb 比較,
不知在不同情況下是否可以採取對應的數據類型。(留待日後再研究吧XD)


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才可以使用。
藍芽模組的第一階段基本操作就到這裡完成囉~







2016年1月6日 星期三

Adobe AIR for Android + Arduino + NETLab Toolkit

We should know what is the NLTK before starting:


NLTK可以快速短時間內實現軟硬互動整合,在Flash IDE環境中只要拖拉組件+設定參數幾乎就可以完成設定,90%以上不須撰寫程式碼。入門練習請參考上方連結(感謝前輩分享)。

單純在PC上顯示互動結果不太夠,就直接來試試與行動裝置的連動吧!



Arduino


※ DEMO硬體採用七段顯示器,安裝過程在此便不贅述,七段顯示器的介紹 (請點我)。





※ 開啟範例 StandardFirmata and upload,不需撰寫任何Arduino相關程式碼,相當方便。



NETLabHub


※ 先下載所需檔案,並解壓縮 (下載頁面請點我)

※ 打開NETLabHub,但在執行之前最好先確定Java版本是否正確 (它是standalone Java app)。我第一次嘗試時怎樣都無法順利開啟,後來把Java全部移除後再重新安裝最新版本才正常。(搞死人了.....Orz)※ NETLabHub 在使用NLTK套件來說是非常重要的媒介,不管是在PC or Mobile。它擔當了軟硬溝通的中介者,不需要知道太多細節,總之執行它就對了~

※ 要特別注意的是紅框標記的訊息,COM4代表現在Arduino連接的序列埠名稱,192.168.8.18 如同字面意思表示連線ip,
先記起來之後會用到。

※  關於Hub的描述
The Hub is a server that works in the background as a separate application, 

and communicates with a variety of devices (e.g. Arduino or XBee) and software (e.g. OSC applications like OSCemote).
Widgets communicate with the Hub to get or send output.




Flash(Animate)


※ 從下載壓縮檔中安裝Flash Widgets,內含許多NLTK自製組件。





※ 由於是要與Mobile連動,因此要先拖曳MobileControl組件到場景上。

※ 組件MobileControl的實體名稱必須一定要是「mobileControl」

※ defaultIP 就是填入剛才開啟Hub所得到的IP,並勾選autoConnect,如此一來在Android上開啟app時便會自動與Hub連線(Wifi當然要開)。






※ 七段顯示器顧名思義有8個輸出......(是不是很奇怪XD  為啥沒把小數點算進去就直接叫8段不就好了嗎..........)  拖曳8個DigitalOut元件到場景上。

※ 也為每個元件命名實體名稱。之後需要用程式碼控制各個DigitalOut組件。

※ 
屬性欄位要手動填寫的是controllerOutputNum - 對應實際在Arduino上的每個Pin腳,這裡設定Pin2~9。


※ SerialPort 則是之前Hub顯示的COM4。 





※ 這裡再加上自製的MovieClip來對照實體的七段顯示器,再寫一些AS3 code去處理元件&實際LED的亮滅。(手邊使用的LED是共陽極,會與一般認知的輸出相反,但為什麼要搞這麼麻煩,統一規格不就好了嗎??? 真的很任性耶)



之後就可以準備發布APK檔案到Android裝置上測試囉~連結請按我



P.S.
(1) Allen大叔真的非常熱心&好心的開發這些方便的套件給大家無償使用,除了Arduino、iOS/Android之外,還有Kinect、XBee、MakeController......等等硬體裝置可以有更多互動連結的可能,
詳情請按我。

(2) 個人感覺NLTK真的方便快速(是吃泡麵嗎),但一定得打開Hub這件事情意味著非得有一台主機運行NETLabHub,站在軟硬溝通的立場來看似乎是非這麼做不可。但若希望可以脫離束縛進行軟硬互動溝通的話,要採取哪一個無線裝置會是比較好的方案呢...............?




2015年10月29日 星期四

Adobe AIR + Leap Motion - 3 : Arduino

<開發過程記錄>

PART I: 

Arduino communicate with Flash

Code to run on the Arduino
Firmata - just get your software to send commands that will get Arduino to do what you need. 讓Arduino與其他軟體溝通的通訊協定,支援眾多語言(也包含AS3)。
   
Serial to Socket Server
SerProxy - Serial-to-Network Proxy Server.

Flash Socket Library
Glue - Flex/ActionScript 3 class and sample code for Arduinos with Firmata.(※註1)
   
Your Flash Code
做個從燈泡熄滅→全亮的補間動畫。其餘BJ4
※註1
Flash本身不具備序列埠連線功能,要藉由 SerProxy(中介軟體) 建立+監聽 TCP Port 5331的Socket Server,Flash再透過Socket類別(這裡使用的是as3Glue: for Arduino with Firmata) 連線到Socket Server,而Arduino再連線到序列埠,軟硬體就可以進行雙向溝通了。



PART II:

Step 1.
Flash - 先與Leap Motion Ctroller建立連線(with ANE),確認可辨認手勢 Gesture.TYPE_CIRCLE,自行設定順時針為漸亮,逆時針為漸暗。




Step 2.

Arduino - Arduino IDE 編寫接收&處理Firmata類比訊息,編譯&上傳到Arduino。(採用書中範例)







Step 3.

Flash - 撰寫與Arduino連線的程式碼,使用Flash Socket Libraby,類別是as3Glue。

  





話不多說,看影片見分曉。
連結請按我