マイコンボードで動くタンクを作ってみました(マイコンボード編)

マイコンボードタンク

前回はこちら です。

Scratch(スクラッチ)に関する記事はこちらです。

それでは、今回はモーターをマイコンで制御する部分を作っていきたいと思います。まずはこちらの記事を参考にしました。

使用するモーターは「FA-130」という、ミニ四駆等でよく見かけるモーターです。乾電池1本でも動作しますが、ココロキットとの互換性を考慮して、単三乾電池2本で使用します。

モーター

参考記事にもある通り、Arduino(アルドゥイーノ)ではモーターを直接制御することは出来ませんので、モーターと電池の間にスイッチを用意し、そのスイッチのON/OFFをArduinoで制御します。

モーター制御相関図

このスイッチの役目を果たしてくれるのが「トランジスタ」ですが、トランジスタではON/OFFしか制御できず、モーターの反転、つまりタンクの前進・後退をさせる事が出来ません。そこで2つ目の参考記事にある「モータードライバ」を使用します。

では参考記事の通りに部品の型番を調べて…と思ったのですが、製造終了でもう売られていないようです。ですので、データシートを参考に似たような部品がないか探してみます。

データシートに「可逆転モータードライバ」とありますので、そのキーワードで検索してみます。すると、いつも部品を購入しているお店にそれらしいものがある事が分かりました。

「モータードライバ」とありますので一見問題なさそうですが、データシートを見ると動作範囲の電源電圧が10~45Vになっています。単3乾電池2本では動作しませんし、10Vの電圧をモーターにかけてしまうと壊れてしまいます。ですので、もう少し調べてみます。

「DCモータードライバ」というカテゴリーがありましたので、そちらを見てみます。すると、こういった商品がありました。

こちらのデータシートを見ると、電源電圧が1.8~5.5Vとなっています。これならば単3乾電池2本で動作しますので、こちらを使用することにします。

簡単に使用方法を説明しますと、NJU7386の1番、2番ピンにArduinoからの制御信号を入力します。4番、6番ピンにモーターをつなげます。単三乾電池の+を8番ピンにつなぎ、5番ピンを乾電池の-と ArduinoのGNDにつなぎます。これを、各モーターごとに行います。

以上をふまえて、部品配置図を書きました。

部品配置図

部品が揃ったら、実際に動くかどうか「ブレッドボード」という物に配線してテストしてみます。ブレッドボードははんだ付けせずに部品を配置して、部品・回路に異常が無いか確認出来てとても便利です。

ブレッドボードとモータードライバ

それでは、テストプログラムを書き込んで動かしてみたいと思います。
プログラムは、部品が届くまでの間にArduinoでScratchを動かせる環境を整えておきましたので、Scratchで作成しました。
Scratchの環境構成はこちらの記事を参考にしました。

問題なく動くようですので、ユニバーサル基板に部品をはんだ付けしていきます。

部品を実装したユニバーサル基板(表)
部品を実装したユニバーサル基板(裏)
Arduinoに載せたユニバーサル基板

こちらも動作チェックが完了したら、プログラムを詰めていきます。前進 → 90°右旋回 → 前進の繰り返しで、四角く回る動作をさせたいと思います。

旋回動作スクリプト

1秒前進 → 0.8秒右旋回の繰り返しでおおむね四角くまわりました。
とりあえず完成、と行きたいところですが、USBケーブルが気になりますのでArduinoにプログラムを書き込んでケーブルなしで動作させたいと思います。
では、Scratchの通りにプログラムを記述していきます。

void setup()   {    //ピンの設定などを行う void setup()
  pinMode(5, OUTPUT);   //5番ピンをOUTPUT(出力)に指定
  pinMode(6, OUTPUT);   //6番ピンをOUTPUT(出力)に指定
  pinMode(9, OUTPUT);   //9番ピンをOUTPUT(出力)に指定
  pinMode(10, OUTPUT);    //10番ピンをOUTPUT(出力)に指定
}

void loop()     //プログラム本体(ずっと繰り返す)
{
  for (int i=0; i<4; i++){  //整数iを用意して0を代入 i <4となるまで繰り返す iは1ずつ増やす(i++)
    digitalWrite(5, HIGH);  // LEDpin5に5Vを出力
    digitalWrite(6, LOW); // LEDpin6に0Vを出力
    digitalWrite(9, LOW); // LEDpin9に0Vを出力
    digitalWrite(10, HIGH); // LEDpin10に5Vを出力
    delay(1000);    // 1000msec待つ(直進)
    digitalWrite(5, HIGH);  // LEDpin5に5Vを出力
    digitalWrite(6, HIGH);  // LEDpin6に5Vを出力
    digitalWrite(9, HIGH);  // LEDpin9に5Vを出力
    digitalWrite(10, HIGH); // LEDpin10に5Vを出力
    delay(500);     // 500msec待つ(停止)
    digitalWrite(5, HIGH);  // LEDpin5に5Vを出力
    digitalWrite(6, LOW); // LEDpin6に0Vを出力
    digitalWrite(9, HIGH);  // LEDpin9に5Vを出力
    digitalWrite(10, LOW);  // LEDpin10に0Vを出力
    delay(800);     // 800msec待つ(90°右旋回)
    digitalWrite(5, HIGH);  // LEDpin5に5Vを出力
    digitalWrite(6, HIGH);  // LEDpin6に5Vを出力
    digitalWrite(9, HIGH);  // LEDpin9に5Vを出力
    digitalWrite(10, HIGH); // LEDpin10に5Vを出力
    delay(500);     // 500msec待つ(停止)
  }       //For 文の終わりの位置
  digitalWrite(5, HIGH);  // LEDpin5に5Vを出力
  digitalWrite(6, LOW);   // LEDpin6に0Vを出力
  digitalWrite(9, LOW);   // LEDpin9に0Vを出力
  digitalWrite(10, HIGH); // LEDpin10に5Vを出力
  delay(1000);      // 1000msec待つ(直進)
  digitalWrite(5, HIGH);  // LEDpin5に5Vを出力
  digitalWrite(6, HIGH);  // LEDpin6に5Vを出力
  digitalWrite(9, HIGH);  // LEDpin9に5Vを出力
  digitalWrite(10, HIGH); // LEDpin10に5Vを出力
  delay(500);     // 500msec待つ(停止)
}

Arduinoに書き込む際は、Scratchのブートローダーではなく、Arduinoのブートローダーを新たに書き込むか、書き込み済みのATMega328に交換してください。

誤作動して直進してしまいました。では気を取り直してもう一度。

ご覧の様に、USBケーブルなしでも単独で動作出来ました。今回はここまでにしたいと思います。
まだArduinoの端子があまっていますので、LEDやセンサーを追加していきたいと思います。 ではまた。

  • 9
  • 1
  • 1

Laffey(ラフェィ)

色々な物・もの・モノを作って記事にしています

作者のページを見る

関連記事

寄付について

「novalue」は、‟一人ひとりが自分らしく働ける社会”の実現を目指す、
就労継続支援B型事業所manabyCREATORSが運営するWebメディアです。

当メディアの運営は、活動に賛同してくださる寄付者様の協賛によって成り立っており、
広告記事の掲載先をお探しの企業様や寄付者様を随時、募集しております。

寄付についてのご案内