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

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

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

IDE、統合開発環境((Integrated Development Environment)とは、テキストエディタ以上の機能を提供して、ソフトウェア開発を効率をあげるコンピュータプログラムを指す。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Arduino

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

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

3回答

1606閲覧

arduinoでお掃除ロボットを制作するためのモーター制御を知りたい。

num_Active

総合スコア0

IDE

IDE、統合開発環境((Integrated Development Environment)とは、テキストエディタ以上の機能を提供して、ソフトウェア開発を効率をあげるコンピュータプログラムを指す。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Arduino

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

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

0クリップ

投稿2021/08/22 01:25

前提・実現したいこと

arduinoUNOR3(elegoo)でお掃除ロボットを制作したいです。
タミヤのシングルギアモーター、ダブルギアモーターをマイコン制御したいです。(基本的な文法的なのも知りたい。←調べてもでてこなかった。)
超音波センサーを使って壁に近づくと90度方向転換するものが欲しいと考えている。←ダブルギアモーター

肝心の掃除部分のためにシングルギアモーターを一定時間同じ速度で作動するようにしたい。

発生している問題・エラーメッセージ

実行してもモーターが動作しない。

該当のソースコード

arduino IDE

int echoPin=6; int trigPin=7; double Duration = 0; double Distance = 0; #define ENABLE 5 #define DIRA 3 #define DIRB 4 int i; void setup() { Serial.begin( 9600 ); pinMode( echoPin, INPUT ); pinMode( trigPin, OUTPUT ); pinMode(ENABLE,OUTPUT); pinMode(DIRA,OUTPUT); pinMode(DIRB,OUTPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite( trigPin, HIGH ); delayMicroseconds( 10 ); digitalWrite( trigPin, LOW ); Duration = pulseIn( echoPin, HIGH ); if (Duration > 0){ Duration = Duration/2; Distance = Duration*340*100/1000000; Serial.print("Distance:"); Serial.print(Distance); Serial.println(" cm"); delay(500); } if(Distance>10){ digitalWrite(DIRA,HIGH); digitalWrite(DIRB,LOW); } else{ digitalWrite(DIRA,LOW); digitalWrite(DIRB,HIGH); } }

arduino IDE

#define ENABLE 5 #define DIRA 3 #define DIRB 4 int i; void setup() { pinMode(ENABLE,OUTPUT); pinMode(DIRA,OUTPUT); pinMode(DIRB,OUTPUT); } void loop() { digitalWrite(ENABLE,HIGH); for (i=0;i<5;i++) { digitalWrite(DIRA,HIGH); digitalWrite(DIRB,LOW); delay(10000); digitalWrite(DIRA,LOW); digitalWrite(DIRB,HIGH); delay(10000); } }

試したこと

一応コンパイルはできるので回路などのハード的な問題かなとは考えました。しかしサンプルプログラムでその通り動いたので考えにくいです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

タミヤのギアボックスの事を言っているのでしょうけど、単にモータ1つ用か、2つ用かの違いだけです。
質問を読む限り、まずは使用するモータドライバの使い方を理解する所からですね。
(プログラム以前に、どうすればどう操作すればどう動くのかを理解する事です。)

で、雰囲気的にドライバはL293のようですけど、ドライバ毎に制御の仕方は異なります。
ちゃんとドライバ名も明記しましょう。

で、『L293なら』IN1,IN2ピンをHIGHまたはLOWにすれば出力部のOUT1、OUT2ピンが電源電圧のHIGHまたはLOWになります。
DCモータは電流を流す方向によって、回転方向が変わりますから、IN1をHIGH、IN2をLOWである方向に回り、IN1をLOW、IN2をHIGHで逆方向に回る、
という事です。
そして、ENABLEピンはHIGHにすれば上記のように回転し、LOWにした場合はHI-Z、つまり何も繋がない状態と同じことになります。
(ENABLE1はOUT1、OUT2を同時に制御します)
で、このドライバの場合は速度制御はENABLEピンをPWM制御します。つまりanalogWriteで制御します。

一定時間同じ速度で作動するようにしたい。

一例です。動作するサンプルスケッチの方のloop関数の中身と下記を差し替えてください。

arduino

1 2digitalWrite(DIRA,HIGH);//回転方向を決める 3digitalWrite(DIRB,LOW); 4analogWrite(ENABLE,50);//50/255のPOWERで回転 5delay(3000); 6analogWrite(ENABLE,150);//150/255のPOWERで回転 7delay(3000); 8analogWrite(ENABLE,255);//255/255のPOWERで回転 9delay(3000); 10analogWrite(ENABLE,0);//停止 11delay(3000); 12 13digitalWrite(DIRA,LOW);//逆方向にして 14digitalWrite(DIRB,HIGH); 15analogWrite(ENABLE,50);//50/255のPOWERで回転 16delay(3000); 17analogWrite(ENABLE,150);//150/255のPOWERで回転 18delay(3000); 19analogWrite(ENABLE,255);//255/255のPOWERで回転 20delay(3000); 21analogWrite(ENABLE,0);//停止 22delay(3000); 23

まずは、そのドライバのデータシートを読んだり、使っているサイトの情報を見たりして、
そのドライバの使い方を理解しましょう。でなければスケッチになりません。

基本的な文法的なのも知りたい

今回の場合は、analogWriteとdigitalWriteぐらいしかしません。
あとは、あなたがそれらでどのような関数を組むか、という事になります。
多分、「90度方向転換する」の動きだけでは部屋全体を万遍なく掃除するのは難しいでしょう。
ではどのようにして=どのような考え方で方向転換していけば掃除残りの部分に向かうのか?
センサと組み合わせて色々な動作を試行錯誤しながら組んでいきましょう。

投稿2021/08/23 06:57

nac_tnk

総合スコア463

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

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

0

質問の2つ目のプログラムが「サンプルプログラムでその通り動いた」というサンプルならば、
その違いをポートのレベルで比較すればよいのでは。

ENABLEの状態が違っている気がしますが如何。

投稿2021/08/22 06:02

thkana

総合スコア7639

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

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

0

センサがどういう値を検出して、その結果どう出力しているのか、ってことがわかってるでしょうか。
いくら頭の中だけでこねくり回してこの場合はこうなる(はずだ)と想像したところで、なんの役にも立ちません。
実際に、その動作をその目で確認しましょう

センサの値を表示させましょう。そして、その結果モータをどう動かそうとしているのかを表示させましょう。
そして、その表示してるのを見て、どこがどういうふうにまずいのかを理解することから始めましょう

話はそれから、です。

投稿2021/08/22 04:36

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問