SSブログ

Maruduino(Arduino)で簡易的なストップウオッチの製作1 [アプリケーション]

Img_2043.jpg組み立て編でスイッチ、LED、LCDを実装しましたので、この辺で何か作ってみましょう。
わりと判り易いと思われるストップウオッチです、、、既にArduinoの作例として何処かに登録されている様な気がしないでもないけれどネ。

機能としては一応100分の1秒表示。スイッチは一つ、その一つのスイッチで
1.計測待ち
2.計測
3.計測停止
の3状態を1~3に、また1に戻ると言った簡単な状態遷移で行います。

肝心の時間の計測には起動時からの時間をms単位で返すmillisライブラリを使用します。簡単ですから。
スイッチの押下の検出は自分でやらねばなりません。

ところでスイッチの入力となるといつも問題なるのがチャタリングでしょう。切り替えた時に接点がバウンス(はね返り)してONとOFFの状態が連続して表れるとか。
ですが、このストップウオッチのスイッチ入力に巨大なレバー式スイッチなど使いませんので、現実的にはバウンスが問題になる訳ではありません。

使用しているタクトスイッチは、上から押し込む事で離れていた導電ゴムの接点が押しつぶされる様に接触しますので、どっちかと言えば接触するかしないかの際での人間の指の状態とか、人によって長く押したり、短く押したりと言った時間的不確実性の方が問題です。

やっぱり何等かの不確実性を解消しないといけないのは事実ですので、もう少しこのストップウオッチにおけるスイッチの役目を考えてみると、
1.まず押された事を検出できれば良い、、、つまり離された事まで考慮する必要が無い。
2.ONとOFFが繰り返される事は時間のフィルターを用いる事で解消できる。

と言う訳で今回のストップウオッチにおけるスイッチ押下による状態遷移の条件として、前回の変化から一定以上の時間が経過している事。押下のみ検出とします。

LiquidCrystalのHell Worldを改造して以下の様なスケッチを書いて見ました。
しかし100分の1秒の精度は実に怪しいですね。
※一桁間違えたので修正(笑)
/*
  LiquidCrystal Library - Hello World
 
 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the 
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.
 
 This sketch prints "Hello World!" to the LCD
 and shows the time.
 
  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 
 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 25 July 2009
 by David A. Mellis
 
 
 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>
const int sw1 = 13;  /*スイッチ1の入力*/
int mode;  /*初期状態は0(計測スタート待ち)*/
  /*初期状態→計測中→停止中→初期状態に戻る  の状態遷移を行う*/
int ignore_time;
unsigned long passed_time,latest_time;


// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  pinMode( sw1, INPUT );
  // set up the LCD's number of rows and columns: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Play Stopwatch.");
}

void loop() {
  if( ignore_time == 0 && digitalRead( sw1 ) == HIGH )  /*スイッチが押されるとHIGHとなる*/
  {
    ignore_time = 20;  /*1秒の不感帯とする*/
    switch ( mode )
    {
      case 0 :  /*初期状態から計測中に遷移*/
        passed_time = millis();  /*計測開始時刻*/
        mode = 1;
        break;
      case 1 :
        latest_time =  millis();  /*計測停止時刻*/
        mode = 2;
        break;
      default :
        lcd.setCursor(0, 1);
        lcd.print("                ");  /*表示クリア*/
        mode = 0;
        break;
    }
  }

  lcd.setCursor(0, 1);
  if( mode == 1 )
    lcd.print((double)(millis() - passed_time) / 1000.0);  /*0.1秒単位で出力*/
  else if( mode == 2 )
    lcd.print((double)(latest_time - passed_time) / 1000.0);  /*計測完了*/
  else
    lcd.print(0.0);  /*表示を0に戻す*/

  if( --ignore_time <= 0 ) ignore_time = 0;  /*スイッチを無視する時間の更新と上限*/

  delay( 50 );  /*表示更新時間*/
}


ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

  • 作者: 濱原 和明
  • 出版社/メーカー: オーム社
  • 発売日: 2005/04/25
  • メディア: 単行本



大人の科学マガジン Vol.27(8ビットマイコン) (Gakken Mook)

大人の科学マガジン Vol.27(8ビットマイコン) (Gakken Mook)

  • 作者: 大人の科学マガジン編集部
  • 出版社/メーカー: 学習研究社
  • 発売日: 2010/05/12
  • メディア: ムック



Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ

Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ

  • 作者: 小林 茂
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2010/05/27
  • メディア: 大型本



nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。