• 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教育​ 応用編:割り込みタイマーで時間を計測する

2020年1月25日 by STEMSHIP 1 コメント

時間を操作するときにdelay関数をよく使いますが、これを使うとdelayで指定した時間が経過するまで、プログラムが止まってしまいます。メインのプログラムは動かし続けた状態で、 時間を計測したい場合は、割り込みタイマーを使うと良いです。

目次

  • Timerの種類
  • MsTimer2
  • FlexiTimer2
  • プログラム

Timerの種類

Arduino Unoは、AVR ATmega328Pというマイコンを搭載しており、このマイコンにはTimer0, Timer1, Timer2の3つのタイマーがあります。このタイマーを利用して、時間を計測することが出来ます。ただし、使用する際には注意が必要です。各タイマーは、PWM波形を出力するために使用したり、delay関数などに使用します。各タイマーの割当を以下に記載します。

bit数対応ピン対応関数
Timer08bit5pin, 6pin (PWM)delay, millisなど
Timer116bit9pin, 10pin (PWM)(Servoライブラリ)
Timer28bit3pin, 11pin (PWM)tone

Timer0はdelay関数で使うので、これを使用できる機会はなかなか無いと思います。よく使われるのはTimer2です。今回はTimer2を使用したプログラムを書きます。

MsTimer2

Timerのライブラリはいくつかありますが、ここでは「MsTimer2」を紹介します。MsTimer2は、Arduino-IDEの[ツール]->[ライブラリを管理]からインストールできます。下記のウィンドウが開いたら、検索ボックスにmstimer2と入力すれば、下記のように表示されると思いますので、クリックしてインストールして下さい。

MsTimer2のインストール

使い方は非常に簡単です。

①MsTimer2::set(unsigned long ms, void (*f)())
 第一引数にタイマーの時間をミリ秒単位で入力します。第二引数は、タイマーの時間が経過したとき(割り込み)に呼び出す関数です。

②MsTimer2::start()
 タイマーによる割り込みを有効にします。

③MsTimer2::stop()
 タイマーによる割り込みを無効にします。

FlexiTimer2

FlexiTimer2は、マイクロ秒単位のタイマーを使いたい場合に使用します。

FlexiTimer2::set(unsigned long units, double resolution, void (*f)());

第一引数は時間を入力し、第ニ引数は分解能を入力します。例えば、 FlexiTimer2::set(1, 1/100000, INT)の場合、100us毎にINT関数を呼び出します。使用する場合には精度に注意が必要です。精度が出るのは40us~1000usの間だけで、それよりも短い領域や長い領域では誤差が大きという報告があります。短い領域については、マイコンのクロック周期に近づくので厳しいのはわかりますが、1000us以上で誤差が大きいのは意外でした。1000us以上の場合は、MsTimer2を使用したほうが良さそうです。

プログラム

サンプルプログラムは、1ms毎にtimerFire関数を呼び出して、timeCountをカウントアップします。timeCountは1000でクリアされます。これは、メインのloop関数とは別で動作を続けます。loop関数内では、シリアルプロッタ用にSerial.printを常時実行します。timeCountが500~600のときだけ、flagIntを100にセットします。

//www.stemship.com
//2020.1.19
#include <MsTimer2.h>
unsigned int timeCount = 0;

void setup() {
  Serial.begin(9600);

  //1ms毎にtimerFire関数を呼び出す
  MsTimer2::set(1, timerFire);

  //タイマー開始
  MsTimer2::start();
}

void loop() {
  unsigned int flagInt = 0;

  if(timeCount>=500 && timeCount<600) {
    //タイマカウントが500~600の間だけフラグを立てる
    flagInt = 100;
  }
  
  Serial.print(timeCount);
  Serial.print(",");
  Serial.print(flagInt);
  Serial.println();
}

void timerFire() {
  if(timeCount >= 1000){
    //タイマーをゼロカウントに戻す
    timeCount = 0;
  }
  else {
    //1ms毎にタイマーをカウントアップ
    timeCount++;
  }
}

上記のプログラムを実行して、シリアルプロッタ画面を開くと以下のようなグラフが表示されます。今回は画面で出力確認を行いましたが、flagIntを出力ポートに割り当てて、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