HOME | Raspberry Pi | ビジネス書籍紹介 | 2026-02-21 (Sat) Today's Access : 388 Total : 1297194. Since 10 Sep. 2019

ドローン制御 まずはロボットカーでお勉強
2022.05.27

YouTube でも紹介しています。画像をクリックすると再生できます。

新たにドローン制御のカテゴリーを作りました。
今回はロボット制御の基本、モータードライバを制御して四輪駆動車を動かします。

OSOYOO オープンソース ロボットカー スターターキット V1

Ref.OSOYOO オープンソース ロボットカー V1


追跡センサーモジュールにより路面の黒い線を識別して、線走行を実現できます。


ロボットカーは、超音波距離センサーモジュールを搭載し、音波の反射時間から距離を計算することによって、前方の障害物を自動的に避けることができます。


赤外線リモコン、Bluetooth、WiFiによりロボットカーを制御することができます。


↑クリックで拡大、再クリックで元に戻ります。

障害物回避や線走行は普通にわかりやすいので省略して、ロボットカーの四輪を制御する部分のみについて解説します。

OSOYOO Model-X Motor Driver Module

●瞬間ピーク電流は最大3A、定格電流25W
●2個の内蔵Hブリッジ
●2相ステッピングモーターまたは4相ステッピングモーター、2相DCモーターを駆動可能
●ドライブ電圧:5-35V、ロジック電圧:5V。※ドライブ電圧が12Vを超える場合は、外部5Vロジックを使用
Ref.OSOYOO Model-X Motor Driver Module

DC 3-6V ギヤードモーター + スマートカー & ロボットタイヤ 65*27mm

●動作電圧:3V~6VDC
●減速比:1:48
●無負荷回転速度(6V):100 RPM
●トルク:0.8KG.CM
●負荷電流:70mA(最大250mA)(3V)。
●タイヤ寸法:約 外径65mm、幅27mm、内径51mm ●モーターサイズ:65mm x 22mm x 20mm(シャフトなし)
●モダブルシャフトモーター


車体の中心にあるのがモータードライバ、左下の赤いボードがUNO R3互換機、その上のボックスが18650バッテリーボックスです。
この赤いUNOは同梱されていたものではありません。 通常のUNOにはメスピンソケットが付いていますが、このボードにはピンヘッダーをはんだ付けしています。 また、動作電圧3.3V←→5V切り替え可能な便利なボードです。


モーターとモータードライバモジュールの配線です。 右側の前輪をK2、後輪をK1ソケットに、左側前輪をK4、後輪をK3ソケットにつなげています。
12V と刻印されている2つのソケットのいずれでもよいのですが、ここに電池ボックスから7.4Vを供給しています。


モータードライバモジュールとUNOを接続します。
右側のタイヤ2本は(ENA,IN1,IN2)の設定により制御され、2本とも同じ動きになります。 左側のタイヤ2本は(ENB,IN3,IN4)の設定により制御され、2本とも同じ動きになります。 このモータードライバでは、4本のタイヤを個別に動かすことはできません。

では右側のタイヤで動きを説明します。下の表では、LOWを0、HIGHを1としてあらわしています。
ENAIN1IN2The State of DC Motor
0XXStop
100Brake
101Rotate Clockwise
110Rotate Counterclockwise
111Brake
・ENA(Enable-A)が0の場合、IN1(Input-1)、IN2(Input-2)の値に関わらず停止状態です。
・ENAが1で、IN1、IN2がともに0、あるいはともに1の場合にタイヤの回転が止まります。
・ENAが1、IN1が0、IN2が1の場合、タイヤは時計回りに回転します。
・ENAが1、IN1が1、IN2が0の場合、タイヤは反時計回りに回転します。
※ENB,IN3,IN4も同様です

左側の制御も加え、6つのパラメータの組み合わせで、ロボットカーの動きを制御できます。
ENAIN1IN2ENBIN3IN4Motion
100100停止
101101前進
110110後退
101110右スピン
110101左スピン

テストコード
#define ENA_PIN  5   // Needs to be a PWM pin to be able to control motor speed
#define IN1_PIN  6   // Motor direction
#define IN2_PIN  7   // Motor direction
#define IN3_PIN  8   // Motor direction
#define IN4_PIN  9   // Motor direction
#define ENB_PIN 10   // Needs to be a PWM pin to be able to control motor speed

void go_Advance(int speed_L,int speed_R) { //Forward
	digitalWrite(IN1_PIN, HIGH);
	digitalWrite(IN2_PIN, LOW );
	digitalWrite(IN3_PIN, HIGH);
	digitalWrite(IN4_PIN, LOW );
	set_MotorSpeed(speed_L, speed_R);
}
void go_Left(int speed_L,int speed_R) { //Turn left
	digitalWrite(IN1_PIN, HIGH);
	digitalWrite(IN2_PIN, LOW );
	digitalWrite(IN3_PIN, LOW );
	digitalWrite(IN4_PIN, HIGH);
	set_MotorSpeed(speed_L, speed_R);
}
void go_Right(int speed_L,int speed_R) { //Turn right
	digitalWrite(IN1_PIN, LOW );
	digitalWrite(IN2_PIN, HIGH);
	digitalWrite(IN3_PIN, HIGH);
	digitalWrite(IN4_PIN, LOW );
	set_MotorSpeed(speed_L, speed_R);
}
void go_Back(int speed_L,int speed_R) { //Reverse
	digitalWrite(IN1_PIN, LOW );
	digitalWrite(IN2_PIN, HIGH);
	digitalWrite(IN3_PIN, LOW );
	digitalWrite(IN4_PIN, HIGH);
	set_MotorSpeed(speed_L, speed_R);
}
void stop_Stop() {  //Stop
	digitalWrite(IN1_PIN, LOW );
	digitalWrite(IN2_PIN, LOW );
	digitalWrite(IN3_PIN, LOW );
	digitalWrite(IN4_PIN, LOW );
}

void set_MotorSpeed(int speed_L,int speed_R) {
	analogWrite(ENB_PIN,speed_L);
	analogWrite(ENA_PIN,speed_R); 
}

//Pins initialize
void init_GPIO() {
	pinMode(IN1_PIN, OUTPUT);
	pinMode(IN3_PIN, OUTPUT);
	pinMode(IN2_PIN, OUTPUT);
	pinMode(IN4_PIN, OUTPUT);
	stop_Stop();
}

void setup() {
	init_GPIO();
	go_Advance(255,255);//Forward
	delay(2000);

	go_Back(255,255);//Reverse
	delay(2000);

	go_Left(255,255);//Turn left
	delay(2000);

	go_Right(255,255);//Turn right
	delay(2000);

	stop_Stop();//Stop
}

void loop(){}

実際の動きは、このページのトップ画像をクリックして、YouTube動画をご覧ください。

実際にはENA,ENBはPWM制御が可能で、0~255までの値を指定することでスピードを制御できます。

右側と左側のタイヤを逆方向に回転させてしまうと、右折、左折ではなく、車体がくるくると右回転、左回転してしまいます。
そこで、右折したい場合には、左右両方のタイヤを時計回転させて、右側のタイヤのみ回転数を落とします。
go_Advance(255,255);
  ↓
go_Advance(255,100);
のように変更すると、右側タイヤ2本の回線数が下がります。

■参考文献
第2回:はじめてのモータドライバ
【Arduino入門編⑧】サーボモーターを動かしてみる
【Arduino入門編㉒】ArduinoでDCモーターを制御する。【L298Nデュアルモータードライバ】
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
2022.05.27 まずはロボットカーでお勉強
2022.06.10 第1回テスト環境構築
2022.07.02 第2回テレメトリ通信
2024.06.23 第3回 機体制御 雑談
2024.07.23 第4回 慣性センサ
2025.02.22 第5回 自作シリアル・プロポ
2025.03.10 簡易二足歩行ロボット
2025.04.24 第6回 自作TELNET・プロポ
2025.10.23 M5STACK BugC

たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」 「一念発起して何かを始めても、いつも三日坊主で終わってしまう」 「色んなことを先延ばしにしたまま、時間だけが過ぎていく」 そこで本書では、そんな著者が独自に開発した、 まったく新しい目標達成メソッド「100日デザイン」について、 その知識と技術を、余すところなくご紹介します。

まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。 ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。

今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。

ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。 29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!

【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。 基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説! 500以上のサンプルを掲載。実行結果も確認。 全24章の包括的なチュートリアル。

ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS… 全WEB媒体で効果バツグン! カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術

小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。

Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード

電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)

Copyright © 2011-2027 Sarako Tsukiyono All rights reserved®.