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

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

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

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

824閲覧

Raspberry pi モーターの反転ができない

conscious141

総合スコア5

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/26 12:26

###実現したいこと
Raspberry piでモーターの正転・反転のどちらも行うこと

発生している問題

Raspberry pi3Bにおいて、スイッチによるモーター制御を行うとき、

  • MOTOR1_PINにLOWを、MOTOR2_PINにHIGHを指定すると、なぜか動きません。
  • MOTOR1_PINにHIGHで、MOTOR2_PINにLOWだと動きます。

###使ったもの

  • モータードライバー (TA7291P)
  • モーター(マブチモーターのRE-140RA)

該当のソースコード

python

1# -*- coding: utf-8 -*- 2import RPi.GPIO as GPIO, time, sys 3GPIO.setwarnings(False) 4 5SW1_PIN = 9 #z軸手前 6SW2_PIN = 6 #z軸奥 7SW3_PIN = 8 #x軸左 8SW4_PIN = 7 #x軸右 9MOTOR1_PIN = 25 #x軸 10MOTOR2_PIN = 26 11count1 = 0 12 13GPIO.setmode(GPIO.BCM) 14 15GPIO.setup( SW1_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 16GPIO.setup( SW2_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 17GPIO.setup( SW3_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 18GPIO.setup( SW4_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 19GPIO.setup( MOTOR1_PIN, GPIO.OUT ) 20GPIO.setup( MOTOR2_PIN, GPIO.OUT ) 21 22try: 23 while True: 24 if(GPIO.input(SW1_PIN) == GPIO.LOW): 25 print("1") 26 GPIO.output( MOTOR1_PIN, GPIO.LOW ) 27 GPIO.output( MOTOR2_PIN, GPIO.LOW ) 28 else: 29 GPIO.output( MOTOR1_PIN, GPIO.LOW ) 30 GPIO.output( MOTOR2_PIN, GPIO.HIGH ) 31 if(GPIO.input(SW3_PIN) == GPIO.LOW and count1 >= 1): 32 print("2") 33 else: 34 pass 35 else: 36 pass 37 38except (KeyboardInterrupt): 39 GPIO.cleanup()

試したこと

配線の確認

  • モーターとモータードライバーの組み合わせが他にあったので試すと、同様のことが発生した。

回答のほどよろしくお願いいたします

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

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

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

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

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

y_waiwai

2020/07/26 12:29

回路図を提示しましょう
guest

回答2

0

モーターとモータードライバーの組み合わせが他にあったので試すと、同様のことが発生した。

つまり、その部分にすでに問題がある、ということではないでしょうか。
RaspberryPiは切り離してしまって、TA7291のIN1/IN2に直接VDD/0Vを加えたらどうなるでしょう。

配線の確認

確認とは? 「具体的な事実」を示さないと無意味です。

とりあえず、モーターがOUT1とGND間(あるいはOUT2とモーター電源の+側)につながっているとそういう動作になりそうですが。

投稿2020/07/26 22:36

thkana

総合スコア7639

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

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

conscious141

2020/07/27 12:43

調査(内容は省略)をすると、モータードライバーではIN1にあたり、ラズパイではBCM25にあたるのがOUTだとHIGHで、IN2でBCM26だとLOWでしか動かないということがわかりました。ちなみにモータードライバーを変えても同じです。この現象の原因は何か教えてもらえるとありがたいです。長々とすみません。
thkana

2020/07/27 23:32

RaspberryPiは切り離してしまって、TA7291のIN1/IN2に直接VDD/0Vを加えたらどうなるでしょう。 > 調査(内容は省略) 「具体的な事実」を示さないと無意味です。 > この現象の原因は何か とりあえず、モーターがOUT1とGND間(あるいはOUT2とモーター電源の+側)につながっているとそういう動作になりそうですが。(そうなっていない、という事実は示されていません) 回答は読まずに自分の言いたいことをいうだけですか? まぁ、自分のやっていることを言葉にするだけでも思考が整理されたりすることはありますが...
conscious141

2020/07/28 10:01

実を言うと直接つなぐ方法が分からないです。前回の調査と違う新しい調査が次の通りです。 ・コマンドライン上でgpioの操作をします。 ・gpio25をOUTで1の出力に、gpio26をOUTで0の出力に、gpio25からIN1につなぎ、gpio26からIN2につなぐ → 回らない ・gpio25をOUTで1の出力に、gpio26をOUTで0の出力に、gpio25からIN2につなぎ、gpio26からIN1につなぐ → 回る ・gpio25をOUTで0の出力に、gpio26をOUTで1の出力に、gpio25からIN1につなぎ、gpio26からIN2につなぐ → 回らない ・gpio25をOUTで0の出力に、gpio26をOUTで1の出力に、gpio25からIN2につなぎ、gpio26からIN1につなぐ → 回らない >モーターがOUT1とGND間 あるわけない。GNDは電池のー極とラズパイのGNDと共有しています >モーターがOUT2とモーター電源の+側 モーターはOUT1とOUT2に導線をつなげています よく考えをまとめずに思ったことを言う性格なので、他人の意見が結果的に無視されてしまうことがあります。暖かいご指摘ありがとうございます。
thkana

2020/07/28 10:45

そのgpio25/26の実験からすると、 なんらかの理由でgpio26にHighが出ていない、という想定が出来ますね。 正攻法としては、テスターを入手して(Raspberry piよりも随分安いもので十分です) gpio26pinの電圧を測定してみることをおすすめします。 とりあえずのできる実験としては、gpio26以外に置き換えてみることでしょうか。
conscious141

2020/07/28 12:19

言われてみれば、置き換えの案はいいですね。近日中に試して、結果をお伝えできればと思います。
conscious141

2020/08/19 12:43

試しにgpioのピンを変えてみて、 ・gpio3ではhigh gpio12ではlowのとき ・gpio3ではlow gpio12ではhighのとき いずれもhighとIN1をつなぐと回ります IN2ではだめです
thkana

2020/08/19 13:20

8/19の結果を、2020/07/28 19:01のと同様にちゃんと書いて、比べて見て下さい。 なにか変化している気がするのですが。 それと、やっぱりテスター買いましょう。安いのでいいので。
guest

0

python

1 if(GPIO.input(SW1_PIN) == GPIO.LOW): 2 print("1") 3 GPIO.output( MOTOR1_PIN, GPIO.LOW ) 4 GPIO.output( MOTOR2_PIN, GPIO.LOW ) 5 else: 6 GPIO.output( MOTOR1_PIN, GPIO.LOW ) 7 GPIO.output( MOTOR2_PIN, GPIO.HIGH ) 8 if(GPIO.input(SW3_PIN) == GPIO.LOW and count1 >= 1): 9 print("2") 10 else: 11 pass

いまんとこ、回転するか停止するか、の2通りの動作になってるようですが

投稿2020/07/26 12:41

編集2020/07/26 12:43
y_waiwai

総合スコア87774

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

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

conscious141

2020/07/26 13:05

実現したいことにある正転は無視をしてください。 回路図を上げるには時間がかかるので、考えられる原因を上げて下さるとありがたいです。
y_waiwai

2020/07/26 13:09

回路が間違っていたなら何でも起こりえます。 ところが、その提示コードのほうが反転しないようになってますが、これはどうしましょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問