11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【電子工作】3Dプリントパーツ・Arduinoで動かすスマートカー(ロボットカー)製作ノート!

3Dプリントパーツを使いArduinoで動かすスマートカーを製作しました。
Arduinoで制御して動くものを作る場合、その動力としてサーボモーターやステッピングモーター、DCモーターなどがまず思い浮かびます。

サーボモーターの制御に関してはこれまでいろいろとご紹介してきました。
比較的簡単に制御出来ることから4足歩行ロボットやロボットアームなどの製作で便利に使え、Arduino学習用としてやサーボモーターの制御を理解する上でも非常に役立ちました。

Arduinoで動かす4足歩行ロボット製作ノート!Arduino学習に便利なロボくんなので使って下さい!【STLデータ公開】
【電子工作/Arduino】3Dプリントパーツで作るロボットアームに挑戦!その①

そして今回はDCモーターを使ったスマートカー(ロボットカー)の製作をしています。
Arduinoで動かすラジコンカーみたいなものですね!

ArduinoでDCモーターを動かす場合、その駆動には比較的高い電力を必要とするためArduinoと直接接続してそこからの電力供給だけでは動かすことが出来ません。
Arduinoの定格を超える電流が流れるとArduino自体の破損の原因にもなってしまいます。

そこでArduinoでDCモーターを制御(動かす)場合には『モータードライバ』というものが必要となってきます。
Arduino学習用記事としてシリーズで書いている以下の記事でL298Nというモータードライバの使い方をご紹介しました。
電子工作でArduinoやRaspberry PiなどのマイコンボードでDCモーターを動かす場合によく使われるモータードライバとなります。

このL298Nモータードライバはデュアルタイプとなり2台までのDCモーターを同時に制御する事が出来ます。
モーターの回転・停止・逆回転といった動作以外にもPWM制御により回転スピードを変えることも出来るため、Arduinoを使ったラジコンやロボットカーなどでよく使われているのを見かけます。

L298Nモータードライバに関してはこちらの記事を参考にして下さい。

【Arduino入門編㉒】ArduinoでDCモーターを制御する。【L298Nデュアルモータードライバ】

そして上記記事の作例として3Dプリントパーツで作ったスマートカーを少しご紹介したのですが、パーツデータを使いたいといったお問い合わせを何件か頂きましたので、データの公開とともにその製作過程などもご紹介していこうと思います。

Arduinoで動かすスマートカー(ロボットカー)の製作!

先述のようにArduinoでDCモーターを制御する場合、モータードライバというものが必要となってきます。
上記記事も一緒に読んで頂けるとその理解も深まると思います。

電子工作用途でよく使われるL298Nモータードライバを使い、その他パーツも比較的入手しやすい構成で考え作っていきました。

簡単にどんなロボカーなのかご紹介しておきます。
Arduino・DCモーター・モータードライバという非常にシンプルな構成となるスマートカーとなります。

Arduinoであらかじめプログラムした動きをさせるのが基本動作となりますが、超音波センサーHC-SR04を使い障害物を検知して自動運転させる事もできます。

また、もう1台Arduinoを使いこれを送信機(コントローラー)として使いラジコンのように動かすことも想定して製作しています。

その他お好みでカスタム出来る幅は広いと思います。
他のセンサーなどを組み込みカスタマイズさせる・・・なんてのもおもしろいと思います。
Arduino学習用としてのベース機として作ってみるのもいいかもしれません。
実際に動くものを作りプログラムを組んで動かしてみるとその理解も深まります!

3Dプリントパーツの製作

まず3Dプリントパーツの製作です。
構成的には非常にシンプルな構造ですが、今回使用したタイヤやモーター・ギヤボックス等で作れる可能な限り最小サイズでモデリングしています。

完成後は手のひらに乗るほどの可愛いコンパクトなサイズ感のスマートカーになります。
また、超音波センサーHC-SR04をオプションとして取り付けることが出来るようにもしています。

3Dプリントパーツは3種類となります。
Thingiverseから無料でパーツデータをダウンロードする事が出来るので興味ある方は作ってみて下さい!

参考 Mini Robot Car using ArduinoThingiverse

3Dプリンタで出力する際に基本的にサポートが入らない形状で作っていますが、ボディー底面にはネジ穴が多数空いているのでスライサーのサポート設定で[ビルドプレートにタッチ(Curaの場合)]を選択し底面のみサポートを入れて出力させた方がネジ穴は綺麗に仕上がります。

こちらが3Dプリンタで出力させたパーツとなります。
ボディー上・ボディー下・HC-SR04マウンタの3種類となります。

使用パーツ

今回使用した全パーツをご紹介しておきます。

Arduino Uno

マイコンボードはArduino Unoを使っています。
今回Elegoo製のArduino Unoを使いました。
Elegoo製のArduinoボードは互換ボードの中では非常にクオリティーが高いのでおすすめです。

【ELEGOO Arduino Uno】Arduino完全互換ボードの中ではダントツのクオリティーですね!

L298N モータードライバ

モータードライバにはL298Nを使いました。
電子工作用途でよく使われる定番的なモータードライバですね。

【Arduino入門編㉒】ArduinoでDCモーターを制御する。【L298Nデュアルモータードライバ】

DCモーター(ギアボックス)&タイヤ

こちらも電子工作用途でよく使われる定番的なタイヤ・ホイールを使用しました。
Arduino用途の工作でよく使われるモーターとギアボックスがセットになったものとなります。

このギアボックスに使われているTTモーターは定格6Vや12Vタイプのものがあります。(今回6Vタイプのモーターを使用しました)
L298Nモータードライバは、5~35Vまでのモーターに対応しているので高電圧タイプのモーターを使うとより高速に回転させることが出来ます。

MEMO
上記動画では6Vタイプのモーターを定格を超えますが10Vくらいまで上げて使っています。
電圧が高いと結構早く動かせますが定格を超える電圧設定は自己責任でお願いします。

超音波センサー HC-SR04

こちらはオプションパーツ扱いとなります。
障害物検知の機能を持たせたい場合に使用します。

【Arduino入門編⑪】超音波センサーを使って距離の測定や障害物の検知をやってみる![HC-SR04]
Arduino用 HC-SR04超音波距離センサー
ELEGOO

DC/DCコンバータ(降圧)

スマートカーの駆動にはボディーを小型化するためリポバッテリーの使用を想定してモデリングしています。
9Vの角型電池でもボディーに綺麗に収めることが出来ます。
電圧をモーター定格値まで落とすために降圧系のDC/DCコンバータを使いました。

電池ボックスを使えば6V(単3×4本)の電圧が取り出せるのでコンバーターを付ける必要はありませんが、取り付けスペースを用意していないので工夫して頂ければと思います。

タミヤ ボールキャスター

本体底面にボールキャスターを2つ使っています。
タミヤのボールキャスター(2個セット)のサイズに合わせてモデリングしています。(高さ16mm)

ジャンパーワイヤー

回路の配線にはジャンパーワイヤーを使って接続しています。
以下紹介する作例では、基本的にオス-メスタイプのもので接続は出来ると思います。

ビス/ナット/スペーサー

各パーツの固定に多くのビスを使用しています。
揃えやすいようにある程度ビス寸法は統一させています。
こちらが固定に必要となるビス/ナット/スペーサーの個数となります。

  • M3×5 (4本)
  • M3×8 (14本)
  • M3×12 (2本)
  • M3×25 (2本)
  • M3ナット (14個)
  • M3 10mmスペーサー(メス-メス) (8本)
  • M3 25mm or 30mmスペーサー(メス-メス)(4本)

個別で揃えると大変なので、このようなセットものがあると便利です。

組み立て

以上、パーツの用意が出来たら組み立てていきます。

ボディー下パーツに、モーター&ギアボックスの取り付けです。

1モーターにつきM3×25(2本)とM3×12(1本)にM3ナットで取り付けます。

次に底面のボールキャスターの取り付けです。
タミヤ ボールキャスターの説明書を参考に高さ16mmの構成で作りこれを取り付けます。

L298Nモータードライバの取り付けです。
10mmのスペーサーを上下M3×8ビスで固定します。

モーターの接続はプログラムを組む際に分かりやすいように左右反転させて取り付けています。

ボディー上パーツを取り付ける部分に25mm(or 30mm)スペーサーM3×8ビスで固定します。
25mmの寸法でモデリングしていますが、配線などもあるので今回30mmのスペーサーを組み合わせて使っています。
また、このスペースに電池ボックスなどを設置する場合はそれに合わせてスペーサーを高くして対応して頂ければと思います。(サイズ的に結構ギリギリですが!)

次にボディー上パーツにHC-SR04を取り付けます。
M3×8ビスとナットで固定します。
そしてArduino Unoを載せるためのスペーサーも取り付けておきます。
10mmスペーサーM3×8ビスで固定します。

ボディー上パーツには配線やバッテリー固定に使える穴を数カ所空けています。
電源に電池ボックスを使う場合はセンター付近にある穴を利用しスペーサーの高さを上げる等の工夫をして取り付けて下さい。

ボディー上パーツに取り付ける前に配線です。

L298Nモータードライバの[+12V Power]端子とGNDに電源(バッテリーや乾電池など)を接続します。
今回、3Sのリポバッテリーを使いました。
DC/DCコンバータで降圧し6Vに電圧を落としています。(任意に上げることも可能です)
テスト動作確認後はもう少し電圧を上げればスピードが上がります!
Arduino側の電源供給は[+5V Power]端子と[GND]を使います。

左右のモーターを制御するための[制御端子]はIN1~IN4を使用するため、ぞれぞれジャンパーワイヤーを接続しておきます。
今回PWM制御でのスピードコントロールはしないため、ENAピンとENBピンは付属のジャンパーピンで短絡させておきます
(接続は次の項目の回路図を参照して下さい!)

MEMO
後述するテストスケッチは、ある程度の基本動作が出来るものとなります。
モーターのスピードをPWMによりコントロールするためのENAピン・ENBピンは今回使っていません。

ボディー上パーツをM3×8ビスで固定し、Arduino UnoをM3×5ビスで取り付けます。

以上でボディーの組み立ては完了です!

Arduinoの接続

Arduinoとの接続はこのようになります。
オプションパーツで取り付けた超音波センサーHC-SR04の電源(Vcc/GND)はArduinoから直接取り、Trigピンはデジタルピン6、Echoピンはデジタルピン7に接続しています。

Arduino UnoL298NHC-SR04
デジタルピン2IN1
デジタルピン3IN2
デジタルピン4IN3
デジタルピン5IN4
Vin+5V power
GNDGNDGND
5VVcc
デジタルピン6Trigピン
デジタルピン7Echoピン

今回、モーターのスピードコントロールをするためのENAピン・ENBピンはスケッチを分かりやすくするために使っていません。
これだけでもおもしろい動作をさせることが出来ますが、スピードもコントロールしてよりラジコンっぽくしたい場合はこちらの記事を参考にスケッチを修正し楽しんで下さい。

基本動作テスト

基本動作のみが入ったテストスケッチを用意しました。
前進・後退・左回転・右回転の動作が入った簡単なものとなります。

スケッチのvoid loop{}内に動作の関数と時間を書き指定通り動かすというものです。

  • forward(n): 前進(時間)
  • back(n): 後退(時間)
  • left(n): 左回転(時間)
  • right(n): 右回転(時間)
【例】
上記スケッチでは、0.4秒前進→1.5秒停止→0.1秒右回転→1.5秒停止→0.4秒後退・・・このように動作します。
この部分を書き換え指定通り動かすというものです。

障害物を回避しながら自動で動かす

次に超音波センサーHC-SR04を使い障害物を検知し回避しながら自動で動かしてみます。
先程の基本動作スケッチにセンサーでの検知部分を追加させています。

障害物を検知するセンサーが正面の1ヶ所しかないので障害物に対して斜め方向の検知はどうしても精度が悪くなりますが、それでもかなり正確に動いてくれています。
クルクル回転させながらまわりの障害物を検知し・・・そんな感じでプログラムを組んでみるのも面白そうです。

動画で撮るためDC/DCコンバータで電圧を落とし動作スピードを少し遅くしていますが、ルンバみたいに部屋中を動き回ってくれるので結構おもしろいですよ!

無線モジュールを使いラジコンとして動かしてみる

最後に無線モジュールを使って操作出来るようにしてラジコンのように動かしてみます。
無線モジュールはnRF24L01を使いました。
Arduinoなどマイコンボードで無線通信をする際に便利なモジュールとなります。
詳しくはこちらの記事を参考にして下さい!

【電子工作】無線モジュールnRF24L01を使いArduino間で無線通信をやってみる!

ラジコンのように操作するのでもう1台Arduinoを用意しこれを送信機(コントローラー)として使います。
nRF24L01無線モジュールは、送信側に1つと受信側(ロボカー側)に1つの計2個必要となります。

こんな感じに自在に動かすことが出来ます。(超音波センサーHC-SR04は動作させていません)

接続とスケッチ(ロボカー側)

接続はこのようになります。
まずロボカー側の接続ですが、これまでの接続に無線モジュールnRF24L01を追加で取り付けるだけです。(配線図が大変なので追加で接続する無線モジュール部分のみ表示しています)

MEMO
無線モジュールはノイズの影響を受けやすくなっています!
私の環境では特に問題ありませんでしたが、動作が不安定になるようなら無線モジュールのVcc/GND間に10μFほどのパスコン(バイパスコンデンサ)を入れておくのがいいと思います。

そしてスケッチはこちらを使います。
これまでの基本動作スケッチに無線モジュール部分を追加したものです。(HC-SR04は動作させていません)
無線モジュール用のライブラリを使用しているのでこれらのインストールも必要となってきます!
詳しくはこちらの記事を参考にして下さい。

【電子工作】無線モジュールnRF24L01を使いArduino間で無線通信をやってみる!

接続とスケッチ(送信側)

次に送信機(コントローラー)として使うもう1台のArduinoの接続です。
操作しやすいようにジョイスティックを使っています。

送信側のスケッチはこのようになります。

最後に!

自分で作ったロボカーがチョコチョコ動き回ってくれるのは非常に楽しいものです!
Arduinoを使った電子工作用途での教材としてもいいかと思います。
実際に作って動かしてみると学ぶことは非常に多いですね!

今回ブログが長文になることからある程度の基本的な動作ができるスケッチを用意しましたが、修正や新たに作ったりともっとおもしろい動作が出来るものを作ってみるのもいいかと思います。

Arduino側のGPIOピンはまだ余裕があるので、スピードをコントロールさせたり、他のセンサーを取り付けるなどいろいろとカスタマイズが出来るかと思います。

無線モジュールを使ったラジコンモードの例では超音波センサーHC-SR04はスケッチ内に記述せず動作させていませんが、障害物を検知して動作を止めるなど、ぶつからないラジコンも面白そうですね!

また今回はジョイスティックを1つ使い動作させましたが、2つ使い左右のモーターを独立して制御させればもっと面白い動きも出来ると思います。

以前作ったこのようなジョイスティックコントローラーも使って頂けたらと思います。

3Dプリントパーツでジョイスティックコントローラーを作る!電子工作用途で便利に使えます。【STLデータ公開】

このコントローラー自体も無線化させたら面白そう・・・なんて考えながら、今回はこのへんで・・・

7 COMMENTS

sho

モータの制御をPWMにして、ゆっくり加速、ゆっくり減速、走行しながらの方向転換などの動きをアナログジョイスティックで操作することは可能でしょうか

返信する
東京バード

本記事で使っているL298NモータードライバはPWMでの回転を制御することも出来るので、モーターの回転をゆっくり加速したりとアレンジは出来ますが、使用するモーターや電圧等で動きが変わってくるため本記事ではPWMでの制御部分はカットしました。

PWM制御はL298NのENピンを使ってできるのでこちらの記事を参考に組み込んで頂ければと思います。
https://burariweb.info/electronic-work/arduino-learning/arduino-motor-driver-l298n.html

また、前/後/左/右/停止といった動きから走行しながら方向転換(左右のモーターの回転をそれぞれアナログ的に動かす)といった動きを付けることももちろん可能ですが・・・ジョイスティックの操作と実際のラジコンの動きのイメージが一致するようにするには結構難しいというか調整が必要となってくるかと思います。

このようなことから本記事ではPWM制御部分は載せなかったのですが・・・
もちろん可能なので、ジョイスティックの中央付近は反応を鈍くしてなど左右のモーターのPWMの値を上手く調整していただければと思います。

最近製作していた6脚ロボットでは、shoさんがおっしゃるような全方向アナログ的な動きをするジョイスティック操作にしています。
参考になればと思いますm(_ _)m

https://www.instagram.com/p/Cum3fVuP_KO/?img_index=2

返信する
うんばち

すみません前後の動きとサーボモーターを一緒に行いたいのですが
スケッチがよくわからなくて指令するピンが同じのようで
サーボモーターを左に倒すと回転が止まったり右に倒すと
DCモーターのスピ度が速くなったりとゆうよくわからないことになっていて
指令するピンを変えたらいいのかなとも思うんですけど
一般的なラジコンの作り方とスケッチを教えていただけたら
と思っております。
初心者ですみません

返信する
東京バード

ご連絡遅くなりスイマセンm(__)m
一般的なラジコンっていうのが自分もよく分からなく、少し漠然としすぎているので・・・

DCモーターを1台L298Nを使って動かし、サーボモーターでステアリング( 左右に動かす)といったことをお考えなのでしょうかね?
それをもう1台のArduinoを使ってnRF24L01で無線操作する。
こういった構成なのでしょうか?

返信する
うんばち

使用できる器具は、nrf24l01とarduinoとL298Nです。サーボモーターとDCモーターは
もちろんあります今回は、タミヤの楽しい工作キットを使ってラジコン
を作りたいと思っています

返信する
東京バード

Arduino/nRF24L01/L298N/DCモーターという構成なら当記事の内容とほぼ同じなので、リンク先のページ等も含めて見て頂ければと思います(^o^)

返信する
うんばち

ジョイスティックを使ってサーボモーターとDCモーターを制御
したいのですが方法を教えてください

返信する

コメントを残す