發表文章

目前顯示的是 2016的文章

使用藍牙BLE 讓iphone android 連接樹莓派3 raspberry pi 3

圖片
Raspberry PI 3 終於內建藍牙與網路晶片
這個晶片有點強大,可以同時讓Wifi 與 BLE 和 SPP (RF Com) 同時繁忙通訊都沒有問題。
Raspberry PI 如果是當成藍牙Client 連結身邊的BLE裝置,例如ibeancon、智慧手環、智慧手錶,那只要使用簡單hcitool搭配hciconfig 指令就可以達到將資料要回來,在網路關鍵字一下就可以找到如何使用hcitool 連線並要得資料。
     手機要與Raspberry PI連線的方法可以透過,wifi 或是藍牙,但是操作上使用藍牙比較直覺與簡易。但是要讓手機連線Raspberry PI,Raspberry PI上就需要將藍牙裝置當成Server,這件事情就需要一些程式碼上的撰寫。
    現在的文件說到關於如何將Raspberry PI藍牙裝置當成Server的文章並不太多,開發上總感覺困難重重,我也是在這裡停滯了好多天,不斷的搜尋解決方法,因為通起來了,資料來自網路所以也回饋給網路,讓下一個使用者減少這類問題的負擔。 不過目前這個方法未來開發資源越來越齊備可能不敷使用,但至少現在是可用的備案。
    網路上搜尋之後,整體套件如下
藍牙硬體<== BlueZ <== Nodejs(Bleno) <== Node Ble <== Node Socket  <==你的程式

我們發現藍牙要動起來通常會倚賴BlueZ的套件,好在的是最新的版作業系統已經將BlueZ提升到5.23,支援BLE了。 所以安裝BlueZ套件這件事情就可以省略。
       接著安裝Node環境 ,
http://blog.itist.tw/2016/04/using-raspberry-pi-3-to-build-eddystone-beacons-with-raspbian-jessie.html
於這篇網址提到安裝Node的快速方法,如果隨著時間推移太舊或是失效,在搜尋一下如何安裝Node即可解決。
題外話:Linux上開發要有所體悟,所有的架構都是在變動的,隨著版本的變動舊的API可能就會改變或是失效,期待不變與或是統一開發方式都是不太切合實際的想法,畢竟這不是linux的核心價值也不是在這一塊領域玩樂的人的想法,但多數的答案都可以在GOOGLE一下就可以順利解決(苦笑)。

樹梅派的BLE

樹梅派3 終於內建藍牙了,要通起來真是痛苦

經過了網路搜尋
如下是有用的文章
這裡說到 先打開這一行 就可以將藍牙 進入4.0 ibeancon 模式

https://www.raspberrypi.org/forums/viewtopic.php?f=41&t=139689
sudo hcitool cmd 0x08 0x000A 01



Creating a Gatt Server?
一些些有用
http://stackoverflow.com/questions/19549555/creating-a-gatt-server

這個範例最有用
https://www.hackster.io/inmyorbit/build-a-mobile-app-that-connects-to-your-rpi-3-using-ble-7a7c2c


http://gaiger-programming.blogspot.tw/2015/01/bluetooth-low-energy-customizing-gatt.html


透過node.js 弄一個Beacon
http://blog.itist.tw/2016/04/using-raspberry-pi-3-to-build-eddystone-beacons-with-raspbian-jessie.html


但假如要自己建立自己的 GATT Server, 讓 Edison 當作 BLE Peripheral 的話, 就建議自己寫 code, 網路上看到一個滿方便的方式是利用 node.js module 叫做 bleno 的方式
http://thinkingiot.blogspot.tw/2015/05/intel-iot-solution-edison-ble-usb-demo.html


原來BLE 需要的是NODE裡的 bleno
http://thinkingiot.blogspot.tw/2015/05/intel-iot-solution-edison-ble-usb-demo_8.html


這裡有所有服務的範例

https://github.com/sandeepmistry/bleno/blob/master/test.js#L63

雷射切割 雕刻機 二 架構

整個雷射切割機是一個完整個的系統,功能是[將電腦上的圖形,刻在目標物上]
 分成如下三個動作流程

1.圖形轉換成G Code
2.將G Code 傳送到Arduino上
3.Arduino 將G Code轉換成步進馬達訊號與雷射開關的訊號。

我們先著墨在2與3 Gcode到馬達過程         你一定很好奇 1.什麼是G Code   2.為什麼是G Code。
     什麼是G Code,這裡簡單說明,詳細可以在GOOGLE上關鍵字G Code,G Code是玩機器人的入門必備知識可以不用完全懂內容,但最少要知道他的意涵。

G-code是一行一行的文字簡單指令碼,虛擬指令碼用中文說類似如下
移動到座標X01 , Y03 ,Z05
啟動雷射
移動到座標X05 , Y03 ,Z05
關閉雷射

在GCode的文件中我們會看到類似如下碼,(單存範例非正確碼)
G00 X01,Y03,Z05
G99
G01 X05 , Y03 ,Z05
G98

以上我們看到四行,代表四個指令,過程中電腦需要傳送四次指令,Arduino也需要解譯四次指令:
例如動作流程如下
1.由電腦(手機平板)透過串列傳輸 傳送一行指令 傳送至Arduino,並等待Arduino 完成動作。
2.Arduino 接收到命令時,開始計算需要讓步進馬達如何轉動,開始打出訊號讓馬達轉動,或啟動\關閉雷射。
3.電腦判斷指令完成再度回到 第一步驟 直到所有指令都執行完成

電腦端這裡的動作還蠻單存,只要將G Code一行一行傳送即可,Arduino端解譯Gcdoe則需要比較多的學問

       步進馬達的轉動需要考慮到慣性的問題,例如急轉,急回,若超過步進馬達的扭力就會產生掉步的狀況。
       在圓弧動作上若兩個馬達配合的好真圓度會非常好,改善鋸齒,這些物理狀況都需要考慮實在不是一門簡單的學問。
       OPNE SOURCE的力量已由世界上的一些天才透過演算法解決這些問題,並且非常佛心的將他們的原始碼無償的提供於網路給予下載,GRBL就是其中之一,就是我們即將使用的主角, GRBL是一套專門解GCode的OPEN SOURCE專案,其內容已經幫我們優化了以上說的那些問題還有更多細膩的優化,更多資料可以看
人體自動化實驗室(HAL) 這裡解釋得很好,感恩


為什麼是G Code,想要自訂X Cod…

雷射切割 雕刻機 先前預備知識

圖片
步進馬達的認識 通常步進馬達分成四線或是五線 四條線或是五條出線,在規格上需知,馬達的輸出扭力還有轉一圈的步數,通常一般四線的為200步較常見價格也較便宜,五線的約為500步,但並不是所有步進馬達都如此,例如等一下我們會使用的DVD光碟機就不是此規格,我們用的DVD光碟機是47步,四線,先介紹四線和五線,基本上原理差不多。

步進馬達我們只需要給予一個CLOCK(脈衝)訊號,他就會往前或往後一步,而且非常的精準,但是如果選用的馬達力量太小或是負載太大的時候就會出現掉步的現象,而失去精準度這一點在選擇規格的時候就要注意,

步進馬達更多詳細概念可以查訊關鍵字[步進馬達]
可以找到更多相關知識
黃兄知識庫(這篇不錯) 圖片轉自http://ming-shian.blogspot.tw/



Shield的概念
        Arduino,通常需要插在麵包版上面或只是弄出電路板焊接其他的外接電路才能夠形成一個系統,然而很多玩家他們針對特方面的連接做出對應一塊板子,只要將arduino 插上這塊板子就可以不需要使用麵包版或是在外接電路就可以直接形成一套系統,可以減少自己在電路上的錯誤或是接線上的錯誤,,而且該電路通常經過許多玩家們的調適與修改可以優化或是去除錯誤的能力,因為他們通常都是Open source,shield的概念已經橫跨很多個領域,所以當你的arduino需要某些特定功能的時候不妨先搜尋看看是否有相關的,shield可以減少很多電路上的開發時間,例如我們即將使用的CNC shield,就是使用在cnc方面的硬體,他幫助我們把結痂會引出三個步進馬達驅動,還有一個電子開關,可以讓我們選擇是否啟動雷射或鑽頭。






開發 fly shield 過程記錄

暫時命名為fly shield,我才慢慢理解sdield,因為一開始我的目的是希望
能夠創照出一塊面包版的概念,上面只要插上模組就可以讓ARDUINO可以飛行
這塊面包板已經將各模組之間的拉線拉好,省去重量與一堆飛線,這樣使用者就可以一目了然的知道每個區塊分工是什麼,如果有錯誤也可以很快地查到問題與解決問題,並且可以改進。這與寫軟體的感覺很像,所以這大概就是人家說的軟體IC的概念吧。
       在設計的時候腳位的定義宗是讓我頭痛,因為沒有一份正式的文件來說明,哪隻腳是什麼,最後必須去看程式碼才能知道,後來看到一些有趣的關鍵字,原來一開始我的設定是錯的我設定我的機器為MicroWii可以在四軸正常動作,但是我的電池怎麼樣就是無法偵測,後來看到一些程式碼有恍然大悟



看到如下
#if defined(PROMICRO)
  #if defined(MICROWII)
    #define A32U4ALLPINS      

如果我是MICROWII的選項,那我就會把A32U4ALLPINS給打開,
A32U4ALLPINS代表使用32U4上所有的接腳,但是PRO MICRO 並沒有把所有腳位都拉出來
所以就會變成一些功能無法執行。
所以不可以選MICROWII,要選擇PROMICRO,但是並沒有PROMICRO的選項可以選擇
在def.h中看到
#if defined(__AVR_ATmega32U4__) || defined(TEENSY20)
  #define PROMICRO
#endif

__AVR_ATmega32U4__這關鍵字我怎麼也找不到,我猜會不會當我在IDE界面選定燒錄是arduino micro時候這個就被定義了。
所以又找到這個,猜測不用定義,它會自動由我的CPU來決定他自己是PROMICR





  #define THROTTLEPIN                  3
  #if defined(A32U4ALLPINS)
    #define ROLLPIN                    6
    #define PITCHPIN                   2
    #define YAWPIN                     4
    #define AUX1PIN      …
圖片
介紹你一款好用的IC
WII 攝像頭
她是一個攝影機 但是他的輸出接腳 確是i2c
他會分析 畫面中紅外線的位置,最高追蹤四個訊號,解析度1024 * 768
且電路也很簡單 只需要給與 20M的震盪訊號  和3.3V的電壓 就可以運作
陶寶上這樣的鏡頭只賣15 rmb
畫面更頻率 可以高達400Hz
很適合做校正與 電子畫比 視覺觸控
搭配 水平線紅外線射出 可以偵測 多點觸控

http://tw.taobao.com/item/42638464390.htm?fromSite=main&ali_trackid=2:mm_33231734_8628548_43180153,twsearchai:1453424445_2k3_1563235302&spm=a231o.7712113.1004.29.OiCMqt&pvid=200_10.103.34.55_509_1453424433430


http://tw.taobao.com/item/39065737580.htm?spm=a1z3o.7406521.101.405.VLKayN&abtest=_AB-LR492-LR501-LR517-LR895-PR492-PR501-PV517_2374-PV895_2351

詳細介紹電路如下

http://wukcsoft.blogspot.tw/2014/07/avr-wiimote-camera.html

這裡有電路PCB LAYOUT
http://williametter.com/portfolio/projects/wii-ir-camera-system/

抓第三個圖去洗就可以弄了


哈 我好想弄阿 可是它讓我日思夜想 睡不著 吃不下
弄出了6dof( 六軸定位 ) 發現更多問題,要越挖越深
越挖越深 就越~~~~~
所以我決定 挖到這裡就好
應用在MCU上 實現觸控與 3d空間定位