• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / Arduino / Arduino基礎編 / ArduinoでSTEM教育​ 基礎編:赤外線コントロール

ArduinoでSTEM教育​ 基礎編:赤外線コントロール

2019年10月22日 by STEMSHIP コメントを書く

今回は、Arduinoで赤外線受信モジュールとコントローラを使用して、3つのLEDのON/OFF制御をする方法を紹介します。LCDの使用方法については、以前の記事(ArduinoでSTEM教育​-基礎編:LCD)を参照してください。

目次

  • 使用する部品一覧
  • 赤外線受信モジュールの特徴や取り扱い方法
  • 回路図
  • 配線図
  • 組立完成写真
  • プログラム
  • 動かしてみよう
  • 今回学んだポイント
  • 改造してみよう

使用する部品一覧

使用する部品は図のとおりです。これらの部品は、すべて「ELEGOO Arduino用のMega2560スタータキット」に含まれています。

  • Arduino MEGA2560 R3 …1個​
  • 830穴 ブレッドボード …1個​
  • LCD1602モジュール …1個​
  • ポテンショメータ(10kΩ) …1個​
  • 赤外線受信モジュール …1個​
  • 赤外線コントローラ …1個​
  • LED …3個​
  • 抵抗(220Ω) …3個​
  • ジャンパワイヤ(オス-メス) …3個​
  • ジャンパワイヤ(オス-オス) …19個

赤外線受信モジュールの特徴や取り扱い方法

赤外線による制御は、テレビやエアコンのリモコンなどで使用されています。​赤外線は、可視光領域よりも波長が長い光のことを指し、裸眼で見ることができません。​今回使用するモジュールは、AX-1838HSという素子を使用しており、940nm/38kHzの赤外線を受信できます。​赤外線の波長と周波数は、コントローラ側と受信機側で揃えておく必要があります。

回路図

赤外線受信モジュールの電源(R)端子は5Vに接続、グランド(G)はGNDに接続、通信(Y)端子はD5端子に接続します。​各LEDと電流制限抵抗(220Ω)は直列に接続します。LEDのアノード(LED端子の長い方)は、赤LEDはD2、緑LEDはD3,青LEDはD4に接続します。​電流制限抵抗の片方は、GNDに接続します。

配線図

ブレッドボードを使用した配線は図のとおりになります。

組立完成写真

実際に組み立てた写真です。同じようにできましたか?​

プログラム​​

最初に、赤外線受信モジュール用のライブラリ(IRremote.h)を#includeで読み込みます。​そして、IRrecvクラスを使用するために、irrecv(RECEIVER_PIN)でインスタンスを生成します。​また、受信信号をデコードした結果を格納するために、decode_resultsのインスタンスも生成します。​setup()内では、赤外線受信を開始するために、irrecv.enableIRIn()を記述します。

赤外線コントローラの何のボタンが押されたか分かりやすいように、decodeIR()関数を作成します。​この関数では、0~3が押された場合、その番号が返り値となるようにします。​赤外線を受信した場合、if文内のコードが実行されます。​if文内では、押されたボタンの値をvalueに代入し、それをLCDに表示させます。

次に、value(赤外線リモコンで押したボタン)に応じて、LEDのON/OFFの場合分けをするため、​switch文とcase文を使用します。break記述を省略した場合、以降のコードも実行されてしまうので、注意してください。​メインループの最後は、赤外線受信機をリセットして、次の受信に備えるために、irrecv.resume()を記述します。

//www.stemship.com
//2019.10.22
#include <LiquidCrystal.h>
#include <IRremote.h>
#define RECEIVER_PIN 5 //Digital Pin
#define RED_PIN 2 //Digital Pin
#define GREEN_PIN 3 //Digital Pin
#define BLUE_PIN 4 //Digital Pin

//                BS  E  D4 D5  D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
IRrecv irrecv(RECEIVER_PIN);     // 'IRrecv'のインスタンス生成
decode_results results;      // 'decode_results'のインスタンス生成

void setup() {
  //LEDピン設定
  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);

  //IR設定
  irrecv.enableIRIn(); // IRの受信を開始する

  //LCD設定
  lcd.begin(16, 2); // LCDを2行16列で使用する
  lcd.print("IR Receiver"); //LCDの1行目に表示する内容
}

int decodeIR(){
  switch(results.value){
    case 0xFF6897: return 0;
    case 0xFF30CF: return 1;
    case 0xFF18E7: return 2;
    case 0xFF7A85: return 3;
  }
}

void loop() {
  int value;
  if (irrecv.decode(&results)) //赤外線を受信した場合
  {
    lcd.setCursor(0, 1);
    value = decodeIR();

    //LCD表示
    lcd.print("Pressed Button=");
    lcd.setCursor(15, 1);
    lcd.print(value);
    
    //LEDのON/OFF設定
    switch(value){
      case 0: digitalWrite(RED_PIN, HIGH);
              digitalWrite(GREEN_PIN, LOW);
              digitalWrite(BLUE_PIN, LOW);
              break;
      case 1: digitalWrite(RED_PIN, LOW);
              digitalWrite(GREEN_PIN, HIGH);
              digitalWrite(BLUE_PIN, LOW);
              break;
      case 2: digitalWrite(RED_PIN, LOW);
              digitalWrite(GREEN_PIN, LOW);
              digitalWrite(BLUE_PIN, HIGH);
              break;
      case 3: digitalWrite(RED_PIN, LOW);
              digitalWrite(GREEN_PIN, LOW);
              digitalWrite(BLUE_PIN, LOW);
              break;
    }
    
    irrecv.resume(); //IR受信機をリセット

    delay(500);
  } 
}

動かしてみよう

プログラムを書き込んで、実際に動かしてみてください。

今回学んだポイント

  1. 赤外線センサは、ある特定の波長・周波数の赤外線(今回使用した製品は、940nm/38kHz)を利用して、送信機と受信機間で信号の受け渡しをする。​
  2. ​switchとcaseを使用することで、可読性の良いコードを書くことができる。​
  3. ​case文内は複数行書くことができるが、最後はbreakで抜ける必要がある。

改造してみよう

もう少し理解を深めるために、自分で改造してみてください。​

  1. 0,1,2,3以外のボタンを押した場合のLED制御を書いてみよう。 ​
  2. ​LEDの輝度をコントローラで制御できるようにしてみよう。

Filed Under: Arduino基礎編 関連タグ:無線通信

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2023年3月
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    

Copyright © 2023 · STEMSHIP.COM