You are here

CLCD-BOOSTERのセンサースケッチ

センサーを利用するスケッチ

CLCD-BOOSTERに搭載されている温度センサーと光センサーを読み取って、文字LCDに値を出力すると共に、光センサーの値でRCサーボを動かす例をスケッチしていました。RCサーボは、2つまでつなげられますので、温度センサーの結果でもう一つのRCサーボを動かすようにしてもいいかもしれません。今回、温度センサーではなく、光センサーの出力をRCサーボに出力することを選択したのは、温度の変化は通常ほとんどなかったり緩慢なため、RCサーボが元気に動かないからです。RCサーボを光センサーと組み合わせると、光センサに手をかざしたりライトを当てたりすると、RCサーボが勢いよく動いて結構楽しめます。

センサーを利用するスケッチの動作例

また、温度センサーを手で触ると、計測している温度がすぐに上昇していき、これも面白いですね。

#include <LiquidCrystal.h>
#include <Servo.h>

#define  VCC  5.1  // あなたのボードの実測の電源電圧は?

#define  PHOTO_SENSOR  4  // アナログ4
#define  TEMP_SENSOR  5  // アナログ5

#define  RCSERVO1  9  // デジタル9 PWM
#define  RCSERVO2  10  // デジタル10  PWM

// JP3でR/WはGNDに落としています
// LiquidCrystal clcd(4, 3, 3, 14, 15, 16, 17); // Arduino-0016以前
LiquidCrystal clcd(4, 3, 14, 15, 16, 17); // Arduino-0017以降
Servo rcservo ;

void setup()
{
  clcd.begin(16, 2) ; // Arduino-0017以降は追加
  clcd.clear() ;
  clcd.setCursor(8,0) ;
  clcd.print("MicroFan");
  clcd.setCursor(4,1) ;
  clcd.print("CLCD-BOOSTER");
  
  rcservo.attach(RCSERVO1) ;
  
  delay(5000) ;  // タイトルクレジットを見てね
}

void loop()
{
  int v ;
  float temp ; // 温度の計算は実数で

  clcd.clear() ;

  v = analogRead(PHOTO_SENSOR) ;
  clcd.setCursor(0,0) ;
  clcd.print("\261\266\331\273 ") ;  // アカルサ
  clcd.print(v) ;
  rcservo.write(map(v, 0, 1023, 20, 160)) ;  // RCサーボを動かす

  v = analogRead(TEMP_SENSOR) ;
  clcd.setCursor(0,1) ;
  clcd.print("\265\335\304\336 ") ;  // オンド
  clcd.print(v) ;

  temp = VCC / 1024 * v ;  // 読み取った値を電圧に換算
  temp -= 0.4 ;  // 温度センサーの0度のオフセット:400mV
  temp /= 0.01953 ; // 1度あたり19.53mVの電圧増加
  clcd.setCursor(9,1) ;
  clcd.print(temp) ; // 小数点以下2桁まで出るみたいだけど精度的には意味はない
  clcd.print("\337C") ; // 度C

  delay(100) ;
}

このスケッチでは、文字LCDを操作するためにLiquidCrystalライブラリを、RCサーボを操作するために、Servoライブラリを利用しています。

文字LCDへのprintを利用した出力では、バックスラッシュもしくは円マークで始まるわけのわからない?数字の文字列を出力していますが、これは文字コードを8進数であらわしたもので、メッセージの出力に文字LCDのカタカナフォントを表示するために使っています。

printメソッドは実数値も出力できるようになったので、温度計算などで実数演算を使って計算した値をそのまま出力できます。

温度センサーの出力値の温度への換算法は、スケッチに書いている通りです。 :-)
CLCD-BOOSTERに利用しているマイクロチップ社の温度センサーMCP9701は、温度の絶対精度は少し甘いのですが、1度あたりの電圧の変化量が19.53mVと、よく利用されているLM35DZに比べるとほぼ2倍と大きいので、オペアンプなどで増幅しなくてもそれなりに楽しめます。また、3.3Vでも利用可能なので、最近の3.3V系のMCUで利用するのにはうってつけです。

開発ソフト: 
チップファミリー: