• 3D列印服務
  • #maker+t=market
  • COSPLAY 3D 建模
  • 1
  • 2
  • 3

MakerPRO社群論壇-交流、分享、協作 造訪社團 » 用戶發文

原文網址 張凌瑞
2017-09-16 00:08:48

請教前輩們,Arduino有沒有辦法一邊"不間斷"的擷取sensor資料,一邊把資料寫進SD卡,然後又把之前寫在SD卡的資料讀出來用藍芽傳給手機?
謝謝囉~

Yi-Jia Ye
2017-09-16 00:10:17

當然可以。

張凌瑞
2017-09-16 00:13:53

因為我是擔心當SD卡內的資料很多,在讀取並上傳手機的時候會讓資料擷取的動作中斷...所以才有這樣的疑問

曹建國
2017-09-16 00:18:56

可以 ,但要同部這摸多東西 ,頻率不可能太高

張凌瑞
2017-09-16 00:20:53

當然,目前只是要記錄壓力感測值。不過希望能在不遺失資料的前提下越快越好。

曹建國
2017-09-16 00:24:08

張凌瑞 把每種sensor讀取所需時間,與update to db/ cloud 所需時間,如果都不一樣,就分割所需時間之最大公因數為間隔,在沒一間隔到那個感測器時間,去更新

張凌瑞
2017-09-16 00:32:49

好的,不過因為可能紀錄1000筆資料之後才上傳,所以可能就要在兩次擷取資料之間上傳多筆資料,例如10筆,來減少上傳時間。或是利用壓力為0的時候不寫SD卡,全力上傳。

曹建國
2017-09-16 00:35:33

張凌瑞 請您放棄arduino

張凌瑞
2017-09-16 00:38:53

小弟覺得您提的方式有機會呀 ?

賴聲寬
2017-09-16 00:39:17

這問題需要速度,資料大小的參數

彭帟絃
2017-09-16 00:39:49

資料一邊寫入SD卡一邊送出到藍牙,不必讀啊

曹建國
2017-09-16 00:39:54

張凌瑞 多工在arduinoi sketch很難寫,用CPP class 要考慮核心

張凌瑞
2017-09-16 00:43:07

因為藍芽傳輸可能在稍後才進行,所以是讀取稍早記錄在SD卡裡面的資料來上傳。是不需要及時的一直更新到手機的。

彭帟絃
2017-09-16 00:45:16

Buffer快滿了再傳,傳完再清掉

張凌瑞
2017-09-16 00:48:10

嗯...假設是一秒一筆int的壓力值

賴聲寬
2017-09-16 00:49:54

超慢,一定可以

張凌瑞
2017-09-16 00:53:26

ㄜ...我沒看到藍芽傳輸的Buffer...應該是底層的東西齁...我只會表面的Orz...

張凌瑞
2017-09-16 01:02:04

謝謝各位的建議,我會先試試曹老師說的方式,像是分時多工來處理不同作業。後續如果有其他Idea敬請不吝指導,謝謝^^

彭帟絃
2017-09-16 01:02:42

我指的是晶片本身的記憶體

彭帟絃
2017-09-16 01:03:44

藍牙你就是一直丟就行了

張凌瑞
2017-09-16 01:04:46

了解!

賴建宏
2017-09-16 03:12:59

能啊!

帕拉提斯
2017-09-16 03:52:16

我覺得比較有希望的作法是
1. timer interrupt 更新 sensor data,寫 sd 卡
2. main loop 嘗試丟藍芽,例如確認目前是否有連接、那些資料已經傳出去、那些資料還沒

注意 fat32 檔案最大 4gb。

粘智恒
2017-09-16 07:44:47

用 timer 讀sensor,主 loop 讀寫 sd

James Hwang
2017-09-16 10:17:04

Arduino (atmega328p) 是否能做多工處理,基本上是可以的,看資料量與速度。

有經驗的,會有自己的一套多工mini kernel 使用。沒經驗的或是想快速下課的當然都是 delay loop 自然就做不好。

以1s才update 1次的多工,那太簡單了。

賴建宏
2017-09-16 10:39:24

其實感測器通常不會每筆取樣都存,一般來說會間隔時間取樣幾筆,然後求平均或什麼

帕拉提斯
2017-09-16 13:14:03

1s 才 update 一次算什麼多工... 我以為 hard limit 是 10ms... XD

帕拉提斯
2017-09-16 13:16:06

.............. 1sps (samples per second) = =
這個做不出來就抓起來打屁股 XD

張凌瑞
2017-09-16 16:53:07

先求有再求好嘛...可以的話就要加速了!

張凌瑞
2017-09-16 23:31:39

嗯...我是想把資料上傳給手機做後續處理,不過如果開發板能預先做一些簡單的處理應該也不錯!

張凌瑞
2017-09-16 23:47:21

其實一開始設定比較慢速是因為...我不知道他可以跑多快,所以先用走的XD

張凌瑞
2017-09-17 00:00:19

哦哦哦…使用中斷,這個讚,後面會試試看! 感謝 ?

賴建宏
2017-09-17 06:09:03

可以啦!但是資料的運算量不能太大,而且不要用很多複雜或高次的計算

手機可以用藍芽收回後,透過App算,比較好!因為手機的記憶體跟處理器還是比較高檔

你可以看看LASS的空氣盒子那種做法

賴建宏
2017-09-17 08:23:28

其實慢速倒是無所謂,看你所要偵測的目標本身的環境以及感測器的反應時間

通常環境的變化不會太快,而且感測器不會瞬時變化!

一般你像是LASS或是我那時魚菜共生系統的感測當時,我們會先穩定個上百ms才叫ADC對感測器取樣

賴建宏
2017-09-17 08:24:36

一起用loop其實沒差!如果間隔好幾秒的話

Milo Chen
2017-09-17 14:28:05

因為你的情境考慮到app 讀裝置資料,你將這問題分成兩個情境看就會簡單多了。

一個 case 就是一直存資料到 SD 卡就好了。另一個狀況是手機手機透過藍芽跟 arduino 請求要資料。

你將 arduino 讀sensor 資料的優先順序設最高就好,心有餘力的時間再來處理手機 app 對 arduino 裝置的請求即可。

app 端的話,如果是 android 的話,配 background service 跟arduino 請求資料, 藉此慢慢把 DATA sync 就好。

這樣作的話,你arduino sensor 的資料都會存到,而手機端在使用時,使用者也會感覺手機上的資料與裝置是一直同步的,不會有要特別手動作處理。

Hsu Regis
2017-09-17 15:40:11

你可以試試這個tickerscheduler, Arduino&ESP都可用,我有寫示範code在這, http://regishsu.blogspot.tw/....../esp8266......

Hsu Regis
2017-09-17 15:41:01

黃文辭
2017-09-17 16:18:08

在寫入sd卡的時候可能要有技巧些,如過讀到一個值就寫入的話,效能會很差.

邱歐吉
2017-09-17 21:49:20

要真正不間斷就要看你MCU有沒有DMA, 沒有DMA的話,充其量只是分時多工。

賴建宏
2017-09-17 22:11:50

其實可以到16G,要看shield上的晶片對SPI、SDIO的定義位址部分

http://wiki.seeed.cc/SD_Card_shield_V4.0/

帕拉提斯
2017-09-17 22:54:16

fat32 單一檔案最大 4gb,是檔案系統的限制。

分區可以更大沒錯。

蔡茂青
2017-09-18 22:59:06

還是ARM的MCU功能強大

帕拉提斯
2017-09-18 23:17:48

沒有最強的系統,只有最強的工程師。

吳水豚
2017-09-18 23:58:49

不間斷是指?

張凌瑞
2017-09-19 00:24:23

反例是,紀錄幾個小時之後才連結手機藍芽做上傳的動作。這時就會一直讀取SD卡資料經由藍芽上傳手機。如果沒有規劃好,擔心會delay到sensor data的擷取時間間隔(變成有快有慢)。慢速應該沒差,但是快速擷取時可能就會有影響了。

蔡茂青
2017-09-19 07:58:49

也是,科技以人為本


 

討論主題

全不選 常用關鍵字