Skip to content

Week 2: 割り込み処理とセンサー制御

1. 割り込みの概念と重要性

1.1 割り込みとは

割り込み(Interrupt)は、マイクロコントローラのプログラム実行を一時的に中断し、優先度の高い処理を行うための仕組みです。これにより、リアルタイムでのイベント処理や効率的なリソース管理が可能になります。

1.2 割り込みの重要性

  • リアルタイム性の向上
  • 省電力化
  • マルチタスク処理の実現

2. ハードウェア割り込みとソフトウェア割り込み

2.1 ハードウェア割り込み

外部のハードウェアイベントによって発生する割り込みです。

例:

  • ボタン押下
  • センサーからの信号
  • タイマーのオーバーフロー

2.2 ソフトウェア割り込み

プログラム内部から発生させる割り込みです。

例:

  • システムコール
  • 例外処理

2.3 割り込みの優先順位

複数の割り込みが同時に発生した場合、優先順位に基づいて処理されます。

graph TD
    A[プログラム実行] -->|割り込み発生| B{優先順位判定}
    B -->|高| C[高優先度割り込み処理]
    B -->|中| D[中優先度割り込み処理]
    B -->|低| E[低優先度割り込み処理]
    C --> F[プログラム再開]
    D --> F
    E --> F

3. タイマー割り込みの活用

3.1 タイマー割り込みの基本

一定時間間隔で発生する割り込みを利用して、定期的な処理を行います。

3.2 Arduino UNO R4 WiFiでのタイマー割り込み設定

#include <TimerInterrupt.h>

#define TIMER_INTERVAL_MS 1000

void timerHandler() {
  // 1秒ごとに実行される処理
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);

  // タイマー割り込みの設定
  ITimer1.init();
  ITimer1.attachInterruptInterval(TIMER_INTERVAL_MS, timerHandler);
}

void loop() {
  // メインループの処理
}

4. 各種センサーの接続と制御

4.1 デジタルセンサーの接続

デジタル出力を持つセンサー(例:PIRモーションセンサー)の接続方法と読み取り方法を学びます。

4.2 アナログセンサーの接続

アナログ出力を持つセンサー(例:光センサー)の接続方法と読み取り方法を学びます。

4.3 I2C/SPIセンサーの接続

I2CやSPI通信を使用するセンサー(例:BME280温湿度気圧センサー)の接続方法と制御方法を学びます。

graph LR
    A[Arduino UNO R4 WiFi] -->|デジタルピン| B[PIRセンサー]
    A -->|アナログピン| C[光センサー]
    A -->|I2C| D[BME280]
    A -->|SPI| E[その他のセンサー]

実践演習

  1. 外部割り込みを用いたイベント処理
  2. プッシュボタンによるLED制御
  3. 割り込みを使用したデバウンス処理

  4. タイマー割り込みによる定期的なタスク実行

  5. 1秒ごとにLEDの点滅状態を切り替える
  6. 複数のタスクをスケジューリングする

  7. 温度センサーからのデータ読み取りと処理

  8. DHT11センサーを使用した温湿度測定
  9. 測定値に基づくアラート機能の実装

まとめ

この週では、割り込み処理の基本概念とその重要性を学び、Arduino UNO R4 WiFiを使用して実際に割り込みを扱う方法を習得しました。また、各種センサーの接続と制御方法についても理解を深めました。これらの知識は、リアルタイムシステムやIoTデバイスの開発に不可欠です。

参考資料

  1. Arduino公式ドキュメント: Interrupts
  2. 「Arduino UNO R4 WiFi ではじめる電子工作」第5章, 第6章
  3. 「C++による Arduino プログラミング入門」第8章

UNO R4 WiFiチートシート(NEW TAB)