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

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

ただいまの
回答率

88.76%

サーボモーターが動かない

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 5,600

msyk23p2

score 14

以下のプログラムを作成したのですがサーボモーターが動きません。逆運動学で角度を求めてその位置まで動いて元の位置に戻るプログラムを作りたいです。どこように改善したらよいでしょうか?回答お願いします。

include<stdio.h>

include<math.h>

include<Servo.h>

Servo servo;
int A=0;
void setup(){

servo.attach(9);
double a,b,c.A;
a=10;
b=20;
c=30;

A=acos((b*b+c*c-a*a)/2*b*c);
degree = A*180.0/PI;
}
void loop()
{
servo.write(A);
delay(1000);
servo.write(0);
delay(1000);
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tnd-.-b

    2016/09/21 08:20

    サーボモータということは何かしらPWM制御をするのだろうと思いますが、Servoが
    その機能を担っているように見えます。
    Servoの持つ関数とその役割(API仕様、とか呼びます)を教えてもらえますか?
    あと、「```」で囲むとソースコードが見やすくなります。

    キャンセル

  • tnd-.-b

    2016/09/21 08:29 編集

    もうひとつdouble a,b,c.A; ここってピリオド(.)ですか?カンマ(,)ではなくて?

    キャンセル

  • 退会済みユーザー

    2016/09/23 19:21

    他のユーザから「意図的に内容が抹消された質問」という指摘を受けました
    解決後に編集機能を用いて質問内容を改変し関係のない内容にしたり、内容を削除する行為は禁止しています。
    投稿していただいた質問は、後に他の誰かが困ったときに助けになる情報資産になると考えるからです。
    「質問を編集する」ボタンから編集を行い、他のユーザにも質問内容が見えるように修正してください。

  • kei344

    2016/09/23 19:22

    回答が付いた質問の編集は慎重に行ってください。タイプミス程度なら修正する事もありますが、本文を削除するのはやめましょう。

    キャンセル

回答 3

+1

すみません。ちょこちょこ訂正してます。

a=10; 
b=20; 
c=30;


なのだから、(b*b+c*c-a*a)/2*b*c)は360000、なのでA=acos((b*b+c*c-a*a)/2*b*c); は普通は正しく計算できないのでは。

動作確認したいのであれば、動いているのがはっきりわかるようにloop()関数を

void loop() 
{ 
  servo.write(90); // サーボの角度を90°に設定
  delay(1000);
  servo.write(0); // サーボの角度を0°に設定
  delay(1000);
}


こんな風に90度動くようにしてみてはどうでしょう。

これで動かないのであれば、

  1. サーボモーターがつながっているピンが9番ではない
  2. サーボモーターの結線まちがい
  3. サーボモーターが壊れている、もしくは断線
    等々、プログラム以外のところもチェックしてみてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/21 13:01

    あと、Arduinoのリファレンス
    https://www.arduino.cc/en/Reference/HomePage
    を見ると逆余弦(arc cosine)関数acos()がなさそう。

    キャンセル

0

そのプログラムの内容がよくわからないけど、
予想で答えます。

Servo servo;

double a,b,c,A,degree;

void setup(){

    servo.attach(9); 

    a=10; 
    b=20; 
    c=30;

    A=acos((b*b+c*c-a*a)/2*b*c); 
    degree = A*180.0/PI; 
    loop() ;

} 
void loop() 
{ 
    servo.write(A); 
    delay(1000); 
    servo.write(0); 
    delay(1000); 
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

すみませんわかりました。ServoはArduinoのライブラリなんですね。

すくなくともwriteの引数は0-180[度]なので、アークコサイン(acos)の戻り値であろう[ラジアン]から変換した値を与える必要があります。つまりservo.writeにはdegreeを与えるのが正しいです。

servo.write(degree);

あとはjm1156さんの回答どおり、ちゃんと変数のスコープを意識してプログラムを書けば動作すると思います。
Aを求める式がただしいのかどうかは判断しかねますが、正しくないように感じます。
このあたりももう一度みなおしてみて下さい。

なお、math.hをincludeしているのでacosは使える、でいいんじゃねえかと思います。おそらく。
http://forum.arduino.cc/index.php?topic=41124.0

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る