Arduino 經 bluetooth 控制 4 個 servo

本帖最後由 dtom 於 2015-7-17 16:10 編輯

請教幾個問題

1) 點樣可以控制 4 個 servo
用 ai2 寫 android app 已經可以成經 bluetooth "分別"控制 4 個不同 pin 既 servo
寫死 code 係可以獨住控到 4 個 servo 去指定位置 (去片)
(每次改 sketch....另外亦試過同一個command轉4個servo)        

依家只係識用 1byte 做野, 經 bluttooth 係 send 0 至 180 去 arduino               

試過將 4 個 servo 最大值相加(最大180) 由 android send 出去, 再係 arduino 減返相對數值, 但 1 byte 只有 255 ,駁2個 servo 都唔夠分... 如果想同時控制幾個, 應該點做呢?               


搵到呢個 post ,但只知要 2 byte 以上
例如 servo A 90 度, ai2 應該 send "a90" 定點好? 係 arduino 又點拆呢?
               
               
2) pro mini 係咪可以用晒 11 個 pin 黎駁 servo 呢? (扣除2個做 TX,RX)
之前駁4個,就咁用 USB 唔可以同時推 4 個 servo, 要另外用電駁 servo 先正常, 但駁晒咁多個又得唔得呢?

本帖最後由 KSC 於 2015-7-18 10:16 編輯

首先,你要知道你要send一個多於一個字符的指令,係需要arduino儲起它,再decode。
例如,[1號],[2號],[3號],[4號][Enter('\n')]
首先讀Serial.available() 看有無野send入,有的話
1)數字:儲起先
2)"," : 即係前邊個數入完,可以decode( inString.toInt())一個值出來
3)"/n": 即係所有字入晒,可以decode最後一個值出來,並話比program知可以有新的值更新(update_flag)。

咁如果update_flag有,就將個值寫落你要的servo度就得。

附上stepper的program比你參考,例如你改返做servo1.write(input_value[0]); 就得。
StringTo_value.ino (3.65 KB)
2015-7-18 10-15-17.jpg
2015-7-18 10:15
要用Newline令你按enter時只有'\n'傳出去

TOP

1個servo最大電流可以去到2A,正常唔會在arduino偷電比servo用,外接5V電。

https://www.arduino.cc/en/Reference/Servo
上邊寫最大12個,但也有其他library用硬件timer做係可以支援所有pin出。

TOP

唔該晒
努力鑽研中

TOP

多謝 KSC 既指點
再睇下 sample code 終於做到基本想要既野

雖然仲有好多改進空間

1)  slider 每次移動都會 send 資料, 但如果一直拉, 發覺會有數據錯誤
所以加左頭尾符號,以便清除不必要既數據,亦檢查到少左咩資料

2

ScreenShot004.jpg
2015-7-19 18:47


2) 唔知係咪 AI2 既限制, 只能夠拉一支 slider, 睇過有片可以同時拉幾支, 不過暫時夠用就算喇

TOP

本帖最後由 Super169 於 2015-7-19 22:56 編輯

ching 你個 android UI 係咪自己做既, 如果係既, 你可以自己定義一套 protocol, 用最簡單既方法溝通就可以了.
以你既 case, 如果只係 4 個 servo (多 D 可能用唔同方法), 每次 send 4 個 byte, 安全既頭尾加個 start/end code, 每次 send 6 個 byte, 都好足夠, 自己加少少 error checking, 又唔會太浪費, 唔需要攪到太複雜.
如果每次既值只係 0-180 就超正, 有 75  (256 - 181) 個 code 自行 define 黎用. 一個 start code 都好安全了, 再加一個 dummy code.

先定一個 code, 例如 0xFF 作為 start code, 你用 Serial.read() 有乜都唔要直到 read 到 0xFF.  跟住 4 個 byte 就分別係 4個 舵機既角度, 如果唔想變就比個 dummy code (例如 0xFE) 佢.  自己 loop 住一個個去 set 就得.

例如:  0xFF 0x10 0x20 0xFE 0x00

就係將4個servo 分別 set 16 度, 32 度, 唔變, 0 度.

如果想做靚仔 D, 可以控制更多 servo, 可以每次 3 個 byte, 第一個係 start code (0xFF), 之後係 servo id, 最後係 角度.  每次發出針對一個 servo 既指令.  

例如:  0xFF 0x02 0x30

就係 set 第 3 個 servo 去 30度.
不過, 當你只係需要控制 4 個 servo, 而 4個都要變時, 就要 send 12 個 bytes, 比之前多左 7 個 bytes.
睇實際需要決定最合適既 protocol, 可能情況下, 機同機之間既溝通, 盡量避免用 String, 特別係單片機.

TOP

本帖最後由 Super169 於 2015-7-19 23:17 編輯

有個傻瓜問題....dtom 大大你整 3D printer, 應該都做左好多 arduino 既 program 喎.
你無玩過 servo?  之前隻 plotclock 都係用 arduino 控制 3 隻 servo 做的.  印象中你好似都有改良過佢喎.

TOP

回復 7 #Super169

原來尼到高手如雲

@_@

TOP

2) 唔知係咪 AI2 既限制, 只能夠拉一支 slider, 睇過有片可以同時拉幾支, 不過暫時夠用就算喇
dtom 發表於 2015-7-19 18:51


dtom ching, 依個問題我都遇到, 即使 button 都係,唔可以同一時間兩個 button 一齊按.

TOP

TOP