温度を測る その5 警報ビー

温度が高くなったら

 最近のCPUは高温になると、クロックを下げて遅くなってもいいから、止まらないようになっています。いろいろな場所で、想定しているより高温になるというのは、問題が起こっている証拠です。LM35DZなどは、CPUの熱暴走を防ぐ目的て開発された温度センサのようです。

鳴らすのはブザーかスピーカ

 高温になったら音を出すもの、一番簡単なのは自励式ブザーです。既定の電圧がかかれば音が出ます。
 ここではスピーカを使います。ArduinoのPWM出力を使えば、約490Hzの音が出ます。

接続

 とても小さなスピーカを入手しました。短いリード線がついているので、ピンヘッダを付けました。

スケッチ

 3番(Speaker)につないでいます。温度はthresholdに定義しています。

 if (voltageA0 > threshold) {
analogWrite(Speaker, 250);
} else {
analogWrite(Speaker, 0);
}

 実行し、温度を上げるとスピーカからビーと音が聞こえました。わりと気持ち悪い音なので、警告音には適していると思います。analogWrite()は、0~255が指定できます。

PWMの波形を見る

 波形をオシロスコープで見ます。最初は10を指定したときです。

 真ん中あたり128を指定したときです。周波数は変わらず約490Hzです。ディーティ比は50%です。

 最大値に近い250を指定したときです。ほとんどON(High)状態です。

 周波数は変わりませんが、実際に音は変化します。スペクトル・アナライザで周波数成分を見ます。

 10のときです。

 128のときです。

 250のときです。

 いずれも約490Hzがメインで、第2高調波の約1kHz、第3高調波の約1500Hzと、高い周波数まで強いレベルでピークがあります。でも、その出方がディーティ比で変わってくるので、違った音に聞こえます。

スケッチ

#include <i2clcd.h>
i2clcd lcd(0x3e, 5);
const int Speaker = 3;
const int threshold = 40; //Temp
 
void setup() {
Serial.begin(9600);
lcd.init_lcd();
analogReference(EXTERNAL);
}

void loop() {
lcd.lcdclear();
int sensorValueA0 = analogRead(A0);
int sensorValueA1 = analogRead(A1);
float voltageA0 = sensorValueA0 * (3.3 / 1023.0);
float voltageA1 = sensorValueA1 * (3.3 / 1023.0);
Serial.println( "Volt"+String(voltageA0)+" "+String(voltageA1));
float tempA0 = voltageA0 * 100 -273.15;
float tempA1 = voltageA1 * 100 -273.15;
Serial.println( String(tempA0)+" "+String(tempA1));
lcd.lcdcu_set(0, 0);lcd.i2cprint( "A0="+String(round(tempA0)) +"'C" );
lcd.lcdcu_set(0, 1);lcd.i2cprint( "A1="+String(round(tempA1)) +"'C" );

if (tempA0 > threshold) {
analogWrite(Speaker, 10);
} else {
analogWrite(Speaker, 0);
}

delay(1000);
}

前へ

温度を測る その4 アナログ温度センサMCP9700、LM335Zを利用

次へ

温度を測る その6 0.1℃まで測りたい