2019年7月20日 1:17 PM. Servo ライブラリを使うと servo.write で角度の情報をそのまま渡せます teratailを一緒に作りたいエンジニア, 回答ありがとうございます!!仰る通りプログラムを書き換えたら、無事思っていたように動きました!こちらはシリアル通信で受け取る値自体をnoLoop()したりloop()しているという認識で大丈夫でしょうか?, drawの中にif (sensors == 1) noLoop();とif (sensors == 2) loop();がありましたが、noLoop状態だとdraw自体が呼ばれなくなるんだと思います。, なるほど、確かにmousePressedはnoLoopした後も動いてましたし、serialEventも動くかもと予想できますね。その発想は無かったので助かりました…!ありがとうございました。. ・編集 2019/11/23 12:51, Arduinoとprocessing間のシリアル通信を利用した作品を作っています。 Arduinoでロボットを作ってみました!【10】動作試験Part1:首関節が痙攣してる!! PWM に詳しく実際に PWM でモータやセンサー等を制御したことある場合は独自の PWM 実装でもいいかもしれませんが、PWM について良くわからないということであれば素直に Servo ライブラリを使うことをオススメします, サーボモータは RaspberryPi でも制御できるので機会があれば RPi でも制御してみたいと思います 制御用スクリプト. 光センサの値を読み取って1回だけ乱数を発生させてその結果に応じた文字を表示させるプログラムがうまく動... 回答 前進と後進を行って、真直ぐに走行できるかを確認してみます。動作に使用したスケッチは、以下の通りで、首関節をホームポジションに移動→前進4秒→停止5秒→後進5秒→停止5秒を繰り返します。DCモータの駆動はdigitalWriteで行います。, //ARD-R01動作確認:digitalWriteによる直線走行#include // ライブラリの読み込みServo servo0,servo1,servo2; // Servo型の変数は「servo0」~「servo2」とするvoid setup() //初期設定{ pinMode(11, OUTPUT); //ピン11を出力に設定(LモータIN1) pinMode(10, OUTPUT); //ピン10を出力に設定(LモータIN2) pinMode(9, OUTPUT); //ピン9を出力に設定(RモータIN1) pinMode(8, OUTPUT); //ピン8を出力に設定(RモータIN2) servo0.attach(4); // Servo型の変数は「servo0(θ)」をピン4に割り当てる servo1.attach(5); // Servo型の変数は「servo1(α)」をピン5に割り当てる servo2.attach(6); // Servo型の変数は「servo2(β)」をピン6に割り当てる}void loop() //メインの処理{, // スコープを中立位置に移動 servo0.write(90); // サーボ出力。θ角度は90° servo1.write(80); // サーボ出力。α角度は80° servo2.write(100); // サーボ出力。β角度は100° delay(1000); // タイマ(1秒), //DCモータ駆動 //前進 //Lモータ前進回転 digitalWrite(11, HIGH); //ピン11にHIGH(1)を出力 digitalWrite(10, LOW); //ピン10にLOW(0)を出力 //Rモータ前進回転 digitalWrite(9, HIGH); //ピン9にHIGH(1)を出力 digitalWrite(8, LOW); //ピン8にLOW(0)を出力 delay(4000); //停止 digitalWrite(11, LOW); digitalWrite(10, LOW); digitalWrite(9, LOW); digitalWrite(8, LOW); delay(5000); //後進 //Lモータ後進回転 digitalWrite(11, LOW); digitalWrite(10, HIGH); //Rモータ後進回転 digitalWrite(9, LOW); digitalWrite(8, HIGH); delay(4000); //停止 digitalWrite(11, LOW); digitalWrite(10, LOW); digitalWrite(9, LOW); digitalWrite(8, LOW); delay(5000); }, analogWriteでDCモータを動かしてみて、直進性が改善するかを試してみます。DCモータ駆動のdigitalWriteをanalogWriteに変更してみます。. 返信. なので、パルス幅を計算するロジックがなくなります, のロジックでほぼ言わなくなりました mousePressed()の中のloop()によって、マウスをクリックすれば再開は可能ですが、今回はArduinoからの値を使って再開させたいです。, teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。, 評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。, 上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。, 全く異なる方法ですが、一応自己解決にも至りました。 かつては技術系のTipsややったみたを中心にポストしていました。今は趣味を中心にポストしています, Arduino でサーボモータを制御してみました 茶色 -> Arduino GND; 赤色 -> Arduino 5v電源; オレンジ色 -> Arduino GPIO 8 番; に接続します GPIO は他の好きなところで OK ですが、今回は 8 番を使って進めていきます. 前進の速度を上げて後進速度を下げる場合はどうすれば良いのでしょうか. とりあえず今回は PWM の仕組みも知りたかったの、独自の制御方式も試してみた感じです, では、次に Arduino がデフォルトで提供している Servo ライブラリを使って制御してみたいと思います, ソースもかなり簡潔になりました digitalWrite(pin, LOW); で実現しており、HIGH の状態を指定ミリ秒続けることで幅の違うパルスを送信しています, あとは Serial.read で受け取った度数情報を delayMicroseconds に渡せるように変換してあげます. Mac OS X 10.10.5; Arduino UNO; Arduino IDE 1.6.7; サーボモータ SG90; 配線 . Arduinoでロボットを作ってみました!【13】動作試験Part3:測距モジュールの特性確認. delayMicroseconds(deg); 0. Arduinoに接続した2つのタクトスイッチから得たスイッチのON/OFFのデータをProcessingに送っています。2つのタクトスイッチをそれぞれ停止用、再開用として使いたいです。 digitalWrite(pin, HIGH); おそらくですが、これは正確に PWM を送信されていないのが原因で、毎回 20ms 待つようにしていますが、Serial の読み込み等の他の処理があり周期が毎回正確になっておらず、サーボモータが不安定な状態になっているのだと思います, 次に Servo ライブラリを使った制御を紹介しますが、結論から先に言うとライブラリを使った制御のほうが圧倒的に安定します 0, 回答 GPIO は他の好きなところで OK ですが、今回は 8 番を使って進めていきます, 2 つ紹介します 動画等はなくて恐縮ですが、実行して比較してみると Servo ライブラリを使ったほうが断然いい感じにサーボモータが動きます, Arduino でサーボモータを制御してみました