目次

夜間点滅器スケッチ

 暗くなるとLEDが点滅する、防犯グッズを
 実現するスケッチを考えます。



 外界の状況を知るためには、センサーが必要です。
 センサーとしてはCdSを利用します。



 CdSは周囲の光量により、抵抗値が変化するので
 A/Dコンバータを利用して抵抗値を電圧値に変換
 して入力します。

 ブロック図で示すと、次の構成にすればよいはず。



 CdSセンサーの代用で、可変抵抗でArduinoに
 電圧を入れる回路を利用して動作確認します。



 回路は非常に簡単で、可変抵抗にOPアンプを
 接続しているだけです。



 可変抵抗のトリマーを回転することで、電圧変化を
 端末表示するスケッチを作成しました。

#define INTERV 500

/* pin assignment */
int cds = 0 ;
int val ;

/* variables */
word xinterval ;

void setup()
{
  /* initialize serial port */
  Serial.begin(9600);
  /* set interval */
  xinterval = INTERV ;
  /* clear variable */
  val = 0 ;
}

void loop()
{
  /* get analog value */
  val = analogRead(cds) ;
  /* show */
  Serial.println(val);
  /* delay */
  delay(xinterval);
}

 アナログ入力ピンを指定後、500msごとに
 電圧変換値を表示するだけ。

 変換値と電圧の相関表を作成する
 ために、このスケッチを利用します。

 CdSを利用して発生する電圧を
 いくつにするかを決定するため
 相関表を使います。

 CdSをセンサーにする回路は、単純で
 以下です。



 夜間点滅器を実現するためのシーケンスは
 次のようにしました。
  1. CdSで発生する電圧を入力
  2. 閾値と比較してフラグを設定
  3. フラグによりLEDの点滅か消灯を実行
  4. ディレイ
  5. 1に戻る
 点滅か消灯かの判断をひとつのフラグに  担当させます。  フラグがたっている LED点滅  フラグがおちている LED消灯  シーケンス処理とフラグを組み合わせ  次のスケッチとしました。 #define INTERV 500 #define OFF 0 #define ON OFF+1 #define MYTH 400 /* pin assignment */ int ledPin = 13; /* LED connected to digital pin 13 */ int cds = 0 ; /* variables */ word xinterval ; byte state ; byte night_flag ; /* function prototype */ void put_led(UBYTE x); void setup() { /* initialize the digital pin as an output */ pinMode(ledPin, OUTPUT); /* set interval */ xinterval = INTERV ; /* clear flag */ night_flag = OFF ; /* set state */ state = 0 ; } void loop() { /* judge */ night_flag = OFF ; if ( analogRead(cds) > MYTH ) { night_flag = ON ; } /* night flashing */ if ( night_flag == ON ) { if ( state & 1 ) { put_led(ON) ; } else { put_led(OFF); } } else /* turn off LED */ { put_led(OFF); } /* increment */ state++ ; /* delay */ delay(xinterval); } void put_led(UBYTE x) { if ( x ) { digitalWrite(ledPin, LOW) ; } else { digitalWrite(ledPin, HIGH) ; } }  センサーが昼夜の状態を論理値で出力する場合  次のようにスケッチを記述できます。 #define INTERV 500 #define OFF 0 #define ON OFF+1 /* pin assignment */ int ledPin = 13; /* LED connected to digital pin 13 */ int sensorPin = 12; /* sensor connected to digital pin 12 */ /* variables */ word xinterval ; byte state ; byte night_flag ; /* function prototype */ void put_led(UBYTE x); void setup() { /* initialize the digital pin */ pinMode(ledPin, OUTPUT); pinMode(sensorPin, INPUT); /* set interval */ xinterval = INTERV ; /* clear flag */ night_flag = OFF ; /* set state */ state = 0 ; } void loop() { /* judge */ night_flag = OFF ; if ( digitalRead(sensorPin) == LOW ) { night_flag = ON ; } /* night flashing */ if ( night_flag == ON ) { if ( state & 1 ) { put_led(ON) ; } else { put_led(OFF); } } else /* turn off LED */ { put_led(OFF); } /* increment */ state++ ; /* delay */ delay(xinterval); } void put_led(UBYTE x) { if ( x ) { digitalWrite(ledPin, LOW) ; } else { digitalWrite(ledPin, HIGH) ; } }  センサー部分の特徴にあわせてスケッチを  変えられるよう、ハードウエア知識を持つ  ことが大切です。  配線は、以下のようになります。

目次

inserted by FC2 system