Arduino 入門 Lesson 30 【ステッピングモーター編 その3】

arduino-lesson30-00 Arduino入門編
記事に広告(アフィリエイト広告)が含まれています。
スポンサーリンク
子供と一緒に始める マイコンプログラム
Arduino 入門
Lesson 30
【ステッピングモーター編 その3】

「Arduino」を使ったマイコンプログラミングを子供と一緒に学習するブログ。

少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。

 

本記事はLesson 30 【ステッピングモーター編 その3】です。

Lesson 28Lesson 29では、ステッピングモーターの制御について学習しました。

 

Lesson 30は赤外線受信センサモジュールを追加してリモコンでステッピングモーターを制御します。

イメージ的にはコントローラーのイメージ。

そこまで、高級な制御のスケッチは書きませんが・・・。

 

せっかく、モーターを扱う学習なので遠隔で操作したいですよね。

何より、遠隔で何か操作するって面白いんです!

 

Arduino入門編の解説にて使用しているArduinoは互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。

 

Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)

 

 

スポンサーリンク

はじめに

赤外線受信センサの原理、使用方法はLesson 15、ステッピングモーターの原理、使用する電子部品の説明はLesson 28Lesson 29にて解説しています。

まずは、Lesson 15、28、29を学習してからLesson 30に取り組むことをお勧めします。

 

ではさっそく本題に入ります。

ステッピングモーターをリモコンと赤外線受信センサで制御するとは以下のことをするということです。

  1. リモコンから送信されたパルスを赤外線センサで受信しArduinoでコードとして読み取る。
  2. 読み取ったコードによって、if文やcase文でステッピングモーターに制御信号を送信する。

 

Lesson 30 目標

本Lessonの目標は以下です。

1.リモコンと赤外線受信センサでステッピングモーターを制御する。
2.赤外線受信センサの使い方を思い出す。

今回も遊ぶことを最大の目標に楽しみましょう!

 

準備

ではLessonの準備に取り掛かりましょう。

電子部品の種類はLesson 28で使った電子部品プラス、赤外線受信センサモジュールとなります。

 

電子部品の詳細はLesson 15Lesson 28を確認してください。

では、頑張って組み上げていきましょう。

 

必要なもの

下記に示した電子部品はLesson 15、Lesson 28で使用した部品となります。

※電池にするか、ACアダプタにするかは使用用途に応じて決めてください。

 

赤外線受信センサモジュールはリモコンとのセットがおすすめです。
※赤外線受信センサモジュールのみ購入し自宅のテレビのリモコンで制御することも可能です。

●セット

 

●受信モジュール単品

 

ステッピングモーターとドライバモジュールはセットで売られています。

数多くほしいかたは、5個セットなどもあります。
※こちらAmazon発送です。

 

Jumper wire、抵抗は今後も頻繁に利用します。

Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。

短めが使いやすい場合も。

 

抵抗も単品で揃えるよりはセットをおすすめします。

 

抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!

という方は、「電子工作基本部品セット」が使い勝手が良い。

 

使用部品説明

新たに使う電子部品は特にありません。

以下に示す主要部品の詳細はLesson 15Lesson 28にて解説しています。

  • 赤外線受信センサモジュール
  • 28BYJ-48 ステッピングモーター
  • ULN2003ドライバモジュール

 

以下の部品に関しては、Lesson 26にて詳細を解説していますのでご確認ください。

 

ちなみに、ELEGOO UNO キットには全てが合わせて梱包されています。

 

赤外線受信センサモジュール 使い方

Lesson 15にて詳細を解説しています。

下記をご確認ください。

 

ステッピングモーター 制御方法

下記はLesson 28、Lesson 29にて解説しています。

詳細は下記をご確認ください。

 

実践 回路作成とコード作成

Lesson 28の回路に赤外線受信センサモジュールを追加します。

 

Arduinoのピン配置を確認したい方は番外編02を参照してください。

 

回路図

ドライバモジュールのコネクトピンにステッピングモーターを接続。

Arduinoはデジタル入出力ピンの8,9,10,11番ピンを使用しドライバーモジュールに接続。

12番ピンは赤外線受信センサモジュールのY(受信データの出力ピン)に接続

8番ピン ⇒ IN4(ドライバモジュール)
9番ピン ⇒ IN3(ドライバモジュール)
10番ピン ⇒ IN2(ドライバモジュール)
11番ピン ⇒ IN1(ドライバモジュール)
12番ピン ⇒ Y(受信データの出力ピン)
上記に加えて電源を確保。

Arduinoを損傷させないために
ドライバモジュールの電源は電源モジュールから供給。

 

回路図がこちら。

Lesson 28に赤外線受信センサモジュールを追加したのみとなります。

arduino-lesson30-02

 

こちらがブレッドボード図。

電源モジュールにはDCプラグから9Vの電池(ACアダプタでも可)でつなぎます。
ブレッドボードへの電源供給は、電源モジュールの左上、左下にある+、-端子をブレッドボードの上下のVCCとGNDに挿入することで供給されます。
電源モジュールの出力は5Vとする。

 

arduino-lesson30-01

 

回路図は「fritzing」を利用しています。

「fritzing」の使い方は下記を参照してください。

 

接続

下図に示すように、用意した部品を使用して接続しましょう。

部品は赤外線受信センサモジュールステッピングモータードライバモジュール(ULN2003A)電源モジュールとなります。

部品点数が少ないため、接続は簡単です。

 

使用するポートは、デジタルピンの「8,9,10,11,12」です。

穴に挿入しづらいときは、ラジオペンチなどを使用してください。

arduino-lesson30-03

 

接続部分の一部を拡大したものも載せておきます。

arduino-lesson30-04

 

コードの書き込み

接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。

スケッチ(コード)を書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。

 

本LessonではLesson 15Lesson 28で使用したライブラリを使用します。

また、リモコンはLesson 15でPanasonic製TVリモコンのコードを取得しています。

そのためELEGOOセットに梱包されているリモコンではなくPanasonicのTVリモコンを使用します。

TVのリモコンで動かせた方が、面白いと思うんですよね。

 

リモコンのボタンは音量ボタンの+とーを利用します。

リモコンから取得できるコードは以下となります。
※詳細はLesson 15を参照ください。

Panasonic社製のTVリモコン 取得できるコード
16進表示
音量ボタン + 1000405
音量ボタン - 1008485

 

コマンド説明

これまでの復習も兼ねて、IRremote.hStepper.hのコマンドの一覧を記載しておきます。

注意
本Lessonのサンプルコードを動かす場合、「IRremote.h」のライブラリバージョンは「2.80以下」でご使用ください。

 

IRremote.hコマンド一覧

コマンド 内容
IRrecv xxx(pin) 受信で使用するオブジェクトの作成。
xxx:オブジェクト名
pin:使用するピン番号例
オブジェクト名:irrecv
使用するピン番号:12
IRrecv irrecv(12);
xxx.enableIRIn() 作成したオブジェクト名で赤外線受信スタート。


オブジェクト名irrecvで赤外線受信スタート
irrecv.enableIRIn();

decode_results yyy 受信情報の格納先を指定。
yyy:格納先変数格納されるデータ一覧
decode_type:メーカ名
value:受信データ
bits:受信データのビット数
rawbuf[]:制外線ON/OFFにかかる時間
rawlen:赤外線ON/OFFの回数例
1.resultsという格納先を作成
decode_results results;
2.受信データの取得
data = results.value;
xxx.decode(&yyy) 受信の確認。
xxx:オブジェクト名
yyy:格納先変数
返り値:未受信0/受信1例
真であればif文内実行例
if (irrecv.decode(&results))
{
・・・
}
xxx.resume() .decode()の返り値をリセット。
.decodeと.resume()はセットで使用。
xxx:オブジェクト名例
オブジェクト名irrecvの返り値をリセット
irrecv.resume();

 

Stepper.hコマンド一覧

コマンド 内容
Stepper(steps, pin1, pin2, pin3, pin4) Arduinoボードに接続されているステッパモータを表すStepperクラスのインスタンスを新たに生成。
setup()とloop()より前で定義。
steps:1回転あたりのステップ数 (int)
pin1, pin2, pin3, pin4:モータに接続されているピンの番号
戻り値:作成したインスタンス例
myStepperというインスタンスを生成。
100ステップ、Arduinoのピンは8,9,10,11を定義。
Stepper myStepper(100, 8, 10, 9, 11);
Stepper:setSpeed(rpms) モータの速さを毎分の回転数(RPM)で設定。
rpms:1分間あたりの回転数 正の数 (long)
戻り値:なし例
スピードを20RPMにセット
※インスタンス名 myStepperで定義済みの場合
myStepper.setSpeed(20);
Stepper:step(steps) setSpeed()で設定した速さで、指定したステップ数だけモータを回す。steps:モーターが回転するステップ数。
逆回転は負を設定(int)
戻り値:なし例
1000ステップモーターを回す。
※インスタンス名 myStepperで定義済みの場合
myStepper.step(1000);

 

サンプルコード

Lesson 28 でも紹介しましたが、ステッピングモーターについてはGitHubにサンプルコードがあります。

興味のあるかたは、参考にしてみてください。

GitHub - arduino-libraries/Stepper: Stepper Library for Arduino
Stepper Library for Arduino. Contribute to arduino-libraries/Stepper development by creating an account on GitHub.…

 

本Lessonでは、Lesson 28で作成したサンプルコードをもとにしています。

Lesson 28のコードをリモコンと赤外線受信センサで制御できるように改良しました。

//Lesson 30 ステッピングモーター編 その3
//リモコンと赤外線受信センサによるモーター制御
//https://omoroya.com/

// 電子部品
// 赤外線受信センサモジュール リモコン
// 電源モジュール,ドライバモジュール(ULN2003A),ステッピングモーター

//ライブラリインクルード
#include <IRremote.h>
#include <Stepper.h>

// 赤外線受信センサの出力ピンを接続するピンの設定
const int REV_PIN = 12;

// ステッピングモータが1回転するのに必要なステップ数を定義
//2相励磁方式で制御するため2048 step で1回転
const int MOTOR_STEPS = 2048;

// 1回転あたりのステップ数と接続するピンの設定
Stepper myStepper(MOTOR_STEPS, 8, 10, 9, 11);

// 受信で使用するオブジェクトを作成
IRrecv irrecv(REV_PIN); // 受信で使用するオブジェクトを作成 'irrecv'
decode_results results; // 受信情報の格納先を作成 'results'
 
void setup() { 
  irrecv.enableIRIn();    // 作成したオブジェクトで赤外線受信をスタート
  myStepper.setSpeed(10); // 10回転/1分に設定 rpm(1分あたりの回転数)
  }
  
void loop() {  
  if (irrecv.decode(&results)) // 受信したかどうかの確認 未受信=0/受信=1
  {
    
    switch(results.value)
    {
      case 0x1000405:            // Panasonic 音量 +ボタンを押した場合
            myStepper.step(512); // 512ステップで90度回転
            delay(1000);         // 1000ms待つ
            break;

      case 0x1008485:             // Panasonic 音量 -ボタンを押した場合
            myStepper.step(-512); // -512ステップで-90度回転
            delay(1000);          // 1000ms待つ
            break;
    }
    
    irrecv.resume(); // .decode()の返り値をリセット
    
    // 静止時には電流を遮断する。 
    digitalWrite(8,  LOW); 
    digitalWrite(9,  LOW); 
    digitalWrite(10, LOW); 
    digitalWrite(11, LOW); 
    
  }
}

 

動作確認

では、さっそく動作を確認していきます。

※gifで作成しているため、画像サイズは小さくしてあります。

 

下記に示す、1、2の順番でリモコンの音量ボタンを押しています。

1.TVリモコン音量+ 左90度
2.TVリモコン音量-
 右90度

arduino-lesson30-05

音量ボタンの+を2回押せば、左に180度回転します。

3回続ければ270度です。

 

Lesson 15を参考に音量だけではなく、他のボタンなども割り当てて色々遊んでみてください!

 

まとめ

今回は以下の内容について理解してもらいました。

1.リモコンと赤外線受信センサでステッピングモーターを制御する。
2.赤外線受信センサの使い方を思い出す。

3.楽しんで遊ぶ。

 

TVのリモコンを使って、ステッピングモーターを制御する。

本Lessonは家にある身近なリモコンで制御するというところがミソです。

色んなリモコンを使って、遊んでみましょう!

楽しいです。

 

Lesson 30 【ステッピングモーター編 その3】 はここまで。

ステッピングモーターについてはその3で終了です。

 

疑問点、質問などありましたら気軽にコメントください。

 

次回、Lesson 31は【6軸モーションセンサ編 その1】 です。

3軸加速度+3軸ジャイロ(角速度)の6軸モーションセンサで遊びます。

使いこなせれば、必ず面白いと感じることができる電子部品です。

Arduino 入門 Lesson 31 【6軸モーションセンサ編 その1】
本記事はLesson 31 【6軸モーションセンサ編 その1】です。本Lessonで使用するセンサはMPU-6050 使用の「3軸ジャイロスコープ・3軸加速度センサ」モジュール。前後、左右、上下の3方向を検出できる加速度センサ。回転の速さを…

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れ、間違いなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編Arduino入門編2で使用しているUNOはAmazonにて購入可能です。

Arduino入門編では互換品を使用。

Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

 

Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)

 

Amazonでお得に買う方法

Amazonでお得に購入するならAmazon MastercardAmazonギフト券がおすすめです。

時期により異なりますが、様々なキャンペーンを実施しています。

\Amazonギフト券/
Amazonギフトカード キャンペーン

Amazon Mastercard お申込み
Amazon Mastercard 申し込み 

 

いずれの場合もプライム会員である方がお得!!

\Amazon Prime 30日間の無料会員を試す/
無料会員登録 

 

 

コメント

  1. た〜ま三郎 より:

    返信、本当に有難うございました。
    おかげさまで解決出来ました。

    そこで追加で質問なんですが、三つ目のリモコンボタンを利用して動作途中でも止まる方法のスケッチ例を教えて頂ければと思います。
    割込みという事でattachinterraptを使用しようとしたのですが、Switch関数とは干渉するとの事でもがいても上手くいきません。

    それとステッピングモーター独自の発電ブレーキも相まって、上手くいきません。スケッチ例をよろしく御願い申し上げます。

    ステッピングモーターの発電ブレーキの解説もあれば助かります。

    • omoroya omoroya より:

      コメントありがとうございます。
      ちょっと、検討する余力がいまはなく・・・。
      ご了承ください。

  2. た〜ま三郎 より:

    10進数→2進数でした。すみません。

    • omoroya omoroya より:

      コメントありがとうございます。
      ライブラリのバージョンに関しては
      「ツール」→「ライブラリを管理…」にて「ライブラリマネージャ」を開く。
      「IRremote.h」を検索。
      インストールしたいバージョンを選択して「更新」で変更できます。
      16進か2進かというお話は、好みなので自分のわかりやすいほうでよいと思います。
      ただ、16進のほうが短くなるので見やすいと思います。
      最新バージョンに関しては、まだ内容を確認していません。

  3. た〜ま三郎 より:

    プログラム初心者です。
    いつも参考にさせて頂いています。

    リモコン信号を受信して全く動作しません。
    受信信号のコードが違うと思うのですが、includeするライブラリをバージョンが古いものにしないといけないと思います。

    バージョン変更の詳細なやり方を御指導願えれば、助かります。
    また、最新バージョンとの違いや信号は16進数か10進数のどちらで統一して書けば良いか等、御指導願えればと思います。
    ライブラリ管理も上手くいきません。

    リモコン受信信号ばかりの深みにはまって、挫折しそうです。
    どうかよろしく御願い申し上げます。

  4. キムさがれ より:

    面白かった

  5. はますけ より:

    いつも参考させて頂いております。
    質問ですが myStepper.step(-512); // -512ステップで-90度回転
    ーステップ数で逆回転しないのですが、なぜでしょうか?
    教えて頂けたら助かります。

    • omoroya omoroya より:

      コメントありがとうございます。
      ボタンを押したときに何かしら動作はしますか?
      ボタンを押しても反応がない場合は、case文が実行されていないことが考えられます。
      リモコンから取得できるコードを確認してみてください。

タイトルとURLをコピーしました