質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

430閲覧

0-180,180-0度回したい

umi2525

総合スコア11

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2017/10/31 07:33

編集2017/11/22 08:15

###サーボモータの目標30度回したいです...

###一瞬動いただけで回らずにモーターがウィーンと音を出しているだけです.
どこか違うのでしょうか.
お願いします...

なし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2017/10/31 08:13

サーボの型番は?
umi2525

2017/10/31 23:50

近藤科学のB3Mです、
ozwk

2017/11/01 00:14

配線どうなってます?
umi2525

2017/11/01 00:18

VCC→5V,GND→GND,D→D1(TX),R→D2(RX),EN→D13です
guest

回答2

0

ベストアンサー

  • ENピンを何故かPWMしているが、シリアルの送受信切り替えのピンなので無意味
  • こいつの制御は全部シリアルでコマンド送って行う
  • Serial.write()の第二引数が1バイト少ない

つまりちゃんとマニュアル読んで下さい
p.45「6.B3Mサーボモータを動かしてみる」の通りやれば動くと思います。

投稿2017/11/01 00:26

編集2017/11/01 09:25
ozwk

総合スコア13528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umi2525

2017/11/01 00:37

ありがとうございます!
ozwk

2017/11/01 00:38

あとボーレートの初期値は1500000です
umi2525

2017/11/01 04:04

// パケット生成 sendbuf[0] = 0x09; // コマンドの総データバイト数 sendbuf[1] = 0x06; // コマンド(SET POSITION) sendbuf[2] = 0x00; // オプション sendbuf[3] = sld; // サーボID sendbuf[4] = 0x50; // 位置(下位1バイト) sendbuf[5] = 0x46; // 位置(上位1バイト) sendbuf[6] = 0xB8; // 時間(下位1バイト) sendbuf[7] = 0x0B; // 時間(上位1バイト) // チェックサムの計算 sum = sendbuf[0]; for (int i = 1; i < 8; i++) { sum += sendbuf[i]; } sendbuf[8] = lowByte(sum); // チェックサム // 送信 digitalWrite(txden, HIGH); Serial.write(sendbuf, 8); Serial.flush(); //送信が終わるまで待つ digitalWrite(txden, LOW); } void torque_on(int sld) { // トルクON byte sum; // パケット生成 sendbuf[0] = 0x07; // コマンドの総データバイト数 sendbuf[1] = 0x86; // コマンド(WRITE) sendbuf[2] = 0x00; // オプション sendbuf[3] = sld; // サーボID sendbuf[4] = 0x00; // データ(ノーマル位置制御モード) sendbuf[5] = 0x28; // アドレス(SERVO_TORQUE_ON) sendbuf[6] = 0x01; // デバイスの数 // チェックサムの計算 sum = sendbuf[0]; for (int i = 1; i < 7; i++) { sum += sendbuf[i]; } sendbuf[7] = lowByte(sum); // チェックサム // 送信 digitalWrite(txden, HIGH); Serial.write(sendbuf, 8); Serial.flush(); //送信が終わるまで待つ digitalWrite(txden, LOW); } 変更したのですがロックがかかってしまったままです…
ozwk

2017/11/01 04:25 編集

コメント欄だと見づらいので質問文を編集して追記してください set positionコマンドの方コマンド9バイトあるのに8バイトしか送ってませんよ。
umi2525

2017/11/01 15:51

追記しました!
guest

0

一般的にサーボは位置制御なので、どの位置にどれくらいの時間で移動するかということになります。

示されているソースコードでは、おそらくsMove()がその設定をする関数だと思うのですが、loop()の中では一切呼び出されていません。

一瞬動いただけで回らずにモーターがウィーンと音を出しているだけ

これは、サーボモータに電源が入ってサーボロックがかかった状態と思います。
その状態から位置指令を出さないとサーボモータは動きません。
それが、sMove()の関数だと思うのですが。

投稿2017/10/31 08:37

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問