Hブリッジを使用してarduinoを双方向に移動させる方法は?

私はラインフォロワロボットを構築しようとしています、私は方向と速度を制御するためにHブリッジとarduinoを持っています。

私はこのコードを私のarduinoボードに焼き付けました、しかしロボットはただ前進するだけで、反対の方向に進むことはありません。

int enA = 10;
int in1 = 9;
int in2 = 8;
// motor two
int enB = 5;
int in3 = 7;
int in4 = 6;


void setup()
{
 pinMode(enA, OUTPUT);
 pinMode(enB, OUTPUT);
 pinMode(in1, OUTPUT);
 pinMode(in2, OUTPUT);
 pinMode(in3, OUTPUT);
 pinMode(in4, OUTPUT);
}

void demoOne()
{
 digitalWrite(in1, HIGH);
 digitalWrite(in2, LOW);
 analogWrite(enA, 200);
//turn on motor B
 digitalWrite(in3, HIGH);
 digitalWrite(in4, LOW);
//set speed to 200 out of possible range 0~255
 analogWrite(enB, 200);
 delay(2000);
//now change motor directions
 digitalWrite(in1, LOW);
 digitalWrite(in2, HIGH);
 digitalWrite(in3, LOW);
 digitalWrite(in4, HIGH);
 delay(2000);
//now turn off motors
 digitalWrite(in1, LOW);
 digitalWrite(in2, LOW);
 digitalWrite(in3, LOW);
 digitalWrite(in4, LOW);
}
void loop()
{
 demoOne();
 delay(1000);
 demoTwo();
 delay(1000);
}

両方向に進むようにコードを調整する方法

UPDATE: I am using h bridge l298n and four dc motors "2 right and 2 left", powering it with two 9v batteries and powering the arduino uno with 5v which i get from the h bridge based on this article: https://hackerstore.nl/PDFs/Tutorial298.pdf

2つの正しいモーターの場合、enA、in1、およびin2

左側の2つのモーターの場合、enB、in3、およびin4

0
ru de
あなたのコードはうまく見えます。どのH-Brigdeドライバを使っていますか?いくつかのHブリッジシールドは2本ではなく1本のピンを使用していることを考慮してください。
追加された 著者 Sembei Norimaki,
@ SembeiNorimakiまだ動作していません。私はこの記事に基づいてHブリッジから取得した2つの9V電池でそれに電力を供給し、5Vでarduinoの宇野に電力を供給し、私はこの記事に基づいてHブリッジl298nと4つのDCモーター "2右と2左"を使用しています: hackerstore.nl/PDFs/Tutorial298.pdf 2つの正しいモーターenB、in3、およびin4用のenA、in1、およびin2 2つの左モーター
追加された 著者 Hat hout,
@ SembeiNorimakiまだ動作していません。私はこの記事に基づいてHブリッジから取得した2つの9V電池でそれに電力を供給し、5Vでarduinoの宇野に電力を供給し、私はこの記事に基づいてHブリッジl298nと4つのDCモーター "2右と2左"を使用しています: hackerstore.nl/PDFs/Tutorial298.pdf 2つの正しいモーターenB、in3、およびin4用のenA、in1、およびin2 2つの左モーター
追加された 著者 Hat hout,

4 答え

あなたのコードは問題ないので、あなたは「分割統治」によって問題を識別する必要があるでしょう。

各チャンネルに1つのモーターを接続し、今のところarduinoの部分を忘れてください。

L298電源を接続してください。あなたが指示を読むならば、あなたはあなたが統合された5Vパワーレギュレータを使うことができるか、またはあなたが外部の5Vを供給することができるのを見るでしょう。 5V用とモーター用に異なる電源を使用している場合は必ず両方のGNDを接続してください、そうしないと機能しません。

ドライバが正しく電源に接続されていることを確認し、2本のケーブルを使ってin1からGND、in2から5V、enAから5Vに接続します(arduinoなしで、手動でケーブルで接続します)。一方のモーターが片側を向くようにします。

今度はin1を5Vに、in2をGNDに接続します(enAを5Vに接続したまま)。モーターは反対側を向くはずです。

これが起こらない場合は、L298を正しく接続していないか、または損傷しています。

それがうまくいくならば、問題はあなたのarduinoから来ます。 3つのLEDを接続します。ピン9に1つ、ピン8に1つ、ピン10に1つです(これらはin1、in2、およびenAに接続するピンです)。

プログラムを実行すると、それに応じてLEDが点いたり消えたりするはずです。 そうでなければ、あなたのarduinoはいくつかのピンで問題を抱えています(多分あなたはそれらをショートさせましたか?)

両方の実験がうまくいくのであれば、それらが一緒にうまくいかない理由は絶対にありません。

がんばろう。

0
追加された

あなたのコードは問題ないので、あなたは「分割統治」によって問題を識別する必要があるでしょう。

各チャンネルに1つのモーターを接続し、今のところarduinoの部分を忘れてください。

L298電源を接続してください。あなたが指示を読むならば、あなたはあなたが統合された5Vパワーレギュレータを使うことができるか、またはあなたが外部の5Vを供給することができるのを見るでしょう。 5V用とモーター用に異なる電源を使用している場合は必ず両方のGNDを接続してください、そうしないと機能しません。

ドライバが正しく電源に接続されていることを確認し、2本のケーブルを使ってin1からGND、in2から5V、enAから5Vに接続します(arduinoなしで、手動でケーブルで接続します)。一方のモーターが片側を向くようにします。

今度はin1を5Vに、in2をGNDに接続します(enAを5Vに接続したまま)。モーターは反対側を向くはずです。

これが起こらない場合は、L298を正しく接続していないか、または損傷しています。

それがうまくいくならば、問題はあなたのarduinoから来ます。 3つのLEDを接続します。ピン9に1つ、ピン8に1つ、ピン10に1つです(これらはin1、in2、およびenAに接続するピンです)。

プログラムを実行すると、それに応じてLEDが点いたり消えたりするはずです。 そうでなければ、あなたのarduinoはいくつかのピンで問題を抱えています(多分あなたはそれらをショートさせましたか?)

両方の実験がうまくいくのであれば、それらが一緒にうまくいかない理由は絶対にありません。

がんばろう。

0
追加された

あなたのコードは完璧に見えます、あなたのハードウェアがきちんと動いていること、そしてすべてがきちんと接続されていることを確かめてください、Arduinoボード上の小さな電圧調整器は500mAなどの大電流を処理する場合(大きなレギュレータに交換して大きなヒートシンクを使用しない限り)、arduinoとモータにUSBから電力を供給している場合は、USBポートが2つのモータに必要な電力を処理できることを確認してください。ピン10と5がPWMピンであることを確認してください。

また、専用のモーターライブラリを使用すると、コードを単純化するのに役立ちます。

#include 
#include 

#define enA 10
#define enB 5
#define i1 8
#define i2 9
#define i3 6
#define i4 7

void initMotors(){
    pinMode(enA, OUTPUT);
    pinMode(enB, OUTPUT);
    pinMode(i1, OUTPUT);
    pinMode(i2, OUTPUT);
    pinMode(i3, OUTPUT);
    pinMode(i4, OUTPUT);
}
void motor1Stop(){
    digitalWrite(i1, LOW);
    digitalWrite(i2, LOW);
}
void motor2Stop(){
    digitalWrite(i3, LOW);
    digitalWrite(i4, LOW);
}
void motorsEnabled(bool en){
    digitalWrite(enA, en);
    digitalWrite(enB, en);
}
void enableMotors(){
    motorsEnabled(HIGH);
}
void motor1Forward(){
    digitalWrite(i1, HIGH);
    digitalWrite(i2, LOW);
}
void motor1Backward(){
    digitalWrite(i1, LOW);
    digitalWrite(i2, HIGH);
}
void motor2Forward(){
    digitalWrite(i3, LOW);
    digitalWrite(i4, HIGH);
}
void motor2Backward(){
    digitalWrite(i3, HIGH);
    digitalWrite(i4, LOW);
}

これを含めるには、新しいタブを作成し、(スペースがなく、.hで終わる限り)好きな名前を付けてから、 #include "name.h" をの先頭に追加します。あなたのコード、これはあなたが将来のバグを減らすのに役立ちます

速度制御のためにあなたはこれを追加することができます:

void setMotorSpeeds(int motor1, int motor2){
    analogWrite(enA, motor1);
    analogWrite(enB, motor2);
}
0
追加された
あなたがそれを大丈夫やっている、あなたが悪いHブリッジを持っている可能性があるのであなたが別のHブリッジとそれを試してみることができ、そして柔軟なジャンパー線が簡単に悪くなるので
追加された 著者 Jeremiah,
まだうまくいきません。私はこの記事に基づいてHブリッジから取得した2つの9V電池でそれに電力を供給し、5Vでarduinoの宇野に電力を供給し、私はこの記事に基づいてHブリッジl298nと4つのDCモーター "2右と2左"を使用しています: hackerstore.nl/PDFs/Tutorial298.pdf 2つの正しいモーターenB、in3、およびin4用のenA、in1、およびin2 2つの左モーター
追加された 著者 Hat hout,

あなたのコードは完璧に見えます、あなたのハードウェアがきちんと動いていること、そしてすべてがきちんと接続されていることを確かめてください、Arduinoボード上の小さな電圧調整器は500mAなどの大電流を処理する場合(大きなレギュレータに交換して大きなヒートシンクを使用しない限り)、arduinoとモータにUSBから電力を供給している場合は、USBポートが2つのモータに必要な電力を処理できることを確認してください。ピン10と5がPWMピンであることを確認してください。

また、専用のモーターライブラリを使用すると、コードを単純化するのに役立ちます。

#include 
#include 

#define enA 10
#define enB 5
#define i1 8
#define i2 9
#define i3 6
#define i4 7

void initMotors(){
    pinMode(enA, OUTPUT);
    pinMode(enB, OUTPUT);
    pinMode(i1, OUTPUT);
    pinMode(i2, OUTPUT);
    pinMode(i3, OUTPUT);
    pinMode(i4, OUTPUT);
}
void motor1Stop(){
    digitalWrite(i1, LOW);
    digitalWrite(i2, LOW);
}
void motor2Stop(){
    digitalWrite(i3, LOW);
    digitalWrite(i4, LOW);
}
void motorsEnabled(bool en){
    digitalWrite(enA, en);
    digitalWrite(enB, en);
}
void enableMotors(){
    motorsEnabled(HIGH);
}
void motor1Forward(){
    digitalWrite(i1, HIGH);
    digitalWrite(i2, LOW);
}
void motor1Backward(){
    digitalWrite(i1, LOW);
    digitalWrite(i2, HIGH);
}
void motor2Forward(){
    digitalWrite(i3, LOW);
    digitalWrite(i4, HIGH);
}
void motor2Backward(){
    digitalWrite(i3, HIGH);
    digitalWrite(i4, LOW);
}

これを含めるには、新しいタブを作成し、(スペースがなく、.hで終わる限り)好きな名前を付けてから、 #include "name.h" をの先頭に追加します。あなたのコード、これはあなたが将来のバグを減らすのに役立ちます

速度制御のためにあなたはこれを追加することができます:

void setMotorSpeeds(int motor1, int motor2){
    analogWrite(enA, motor1);
    analogWrite(enB, motor2);
}
0
追加された
あなたがそれを大丈夫やっている、あなたが悪いHブリッジを持っている可能性があるのであなたが別のHブリッジとそれを試してみることができ、そして柔軟なジャンパー線が簡単に悪くなるので
追加された 著者 Jeremiah,
まだうまくいきません。私はこの記事に基づいてHブリッジから取得した2つの9V電池でそれに電力を供給し、5Vでarduinoの宇野に電力を供給し、私はこの記事に基づいてHブリッジl298nと4つのDCモーター "2右と2左"を使用しています: hackerstore.nl/PDFs/Tutorial298.pdf 2つの正しいモーターenB、in3、およびin4用のenA、in1、およびin2 2つの左モーター
追加された 著者 Hat hout,