緑の中に

緑の中に
国立天文台

2/21/2023

表示プログラムを訂正

 表示プログラムを訂正


*Cは ℃の代用です。  


0℃の表示も正しく表示しています
 
        氷点下の表示においても問題なく表示できました


 このマイコン(Arduino Uno)へ通電してからの最小温・度最大温度を常に更新します。
 マイコン(Arduino Uno)のResetスイッチにより、保持した最小温度・最大温度はクリヤされこの時点からの最小最大温度となります。

半導体温度センサー LM61 は扱いが簡単で優れものです。
  

      lcd.clear();//これが loop内の先頭に記述されていないと、
 前回の表示を引きずる場合があります(文字数の長さにより)


#include <I2CLiquidCrystal.h>
#include <mglcd.h>

/** インスタンス生成 **/
I2CLiquidCrystal  lcd;

/** メッセージ準備(Stringクラス)  **/

int Atai_1;//この位置である必要がある
int Atai_2;//この位置である必要がある

void setup() {
//  pinMode(SWITCH_13, INPUT);
  //int Atai_1; 位置 error となる
  Atai_1 = 99; //最低温度記憶用。プログラム起動時の1回だけに使用する事により、最初に取得した温度(temp)を記憶させる。
  Atai_2 = -99; //最高温度記憶用。プログラム起動時の1回だけに使用する事により、最初に取得した温度(temp)を記憶させる。
  Serial.begin(9600); // 参考 Serial.begin(115200) も可能

  /** LCD初期化(16文字2行) **/
  lcd.begin(16, 2);
  /** カーソルをhome位置へ移動 **/
  lcd.home();
  /** メッセージ表示 **/
  
  /** カーソルを2行目左端(0基数とすると1行目)へ移動 **/
   lcd.setCursor(2, 1); /** (2列,1行) **/
  /** メッセージ表示 **/
 
  lcd.print("Temperature");//敢えて下段に

  delay(3000);

}


void loop() {
  
//lcd.begin(16, 2);// この命令をこの位置に入れたことで上記表示トラブルを回避できた
lcd.clear();//これ
lcd.home();

  int val = analogRead(0); //A0 端子
  //Serial.println(val);  //1データを表示すると改行する。
  //int v = map (val, 0, 1023, 0,5100); //デジタル値と電圧の割付   int v = map (val, 0, 1023, 0,5000)  で観測してきたが
  // 4980 で 2℃ Upできると思う。 10mv/℃特性であるので.  4900 大胆に!
  // 逆であった。電圧があるように見せる必要があるので、5020だ!  5100 <<-- ok

  int v = map (val, 0, 1023, 0, 4970);// センサー部の電源端子では4.98vの電圧であった.  今回は3.3V
  int temp = map(v, 350, 1450, -25, 85);
  Serial.print(temp);  // 改行はしない。 
  Serial.print("-A0"); //Data-A の形式とする.  Data-A0 A0端子
  Serial.print(" ");  // Space 1桁入れる
  Serial.print(Atai_1);
  Serial.print(" ");  // Space 1桁入れる
  Serial.print(Atai_2);
  Serial.print(" ");  // Space 1桁入れる

  lcd.setCursor(0,0); /** (0列,0行) **/
  lcd.print(temp);
  lcd.setCursor(3,0); /** (3列,0行) **/
  lcd.print("*C");


  if ( temp <= Atai_1 )//Atai=99 最低温度記憶用。プログラム起動時の1回だけに使用する事により、最初に取得した温度(temp)を記憶させる。
  {
    Atai_1 = temp; //初回取得の温度を記憶

  }

  else {//else start

  }//else end


  if ( temp >= Atai_2 )//Atai=-99 最高温度記憶用。プログラム起動時の1回だけに使用する事により、最初に取得した温度(temp)を記憶させる。
  {
    Atai_2 = temp; //初回取得の温度を記憶

  }

  else {//else start

  }//else end


  lcd.setCursor(0, 1); /** (0列,1行) **/
  lcd.print ("Min");
  lcd.setCursor(4, 1); /** (4列,1行) **/
  lcd.print (Atai_1);

  lcd.setCursor(8, 1); /** (8列,1行) **/
  lcd.print ("Max");
  lcd.setCursor(12, 1); /** (12列,1行) **/  
  lcd.print (Atai_2);

delay(500);

}//loop


=====================================
 不確実な部分がありました

 int v = map (val, 0, 1023, 0, 4970);// センサー部の電源端子では4.98vの電圧であった.  今回は3.3V
 
ここがいまいち私は理解できていません。
ここを正しく理解しておかないと、ランニングテスト等で不正確な温度表示を示すことになると考えます。




2/16/2023

最小温度が80℃

            最小温度が80℃

このLCD表示では「℃」の表示ができません。
 そこで、degreesと表示しました。

最小温度の表示に プログラムミスがあります。

最小温度が80℃の訳がありません。この時は8℃だったんでしょう。

なぜ? 

調べます。


Restスイッチを設ける。これは必要です。

スイッチによりmin maxを表示・非表示を可能とする。

ややこしいことはしません。


MIN MAX Min Max min max どの文字にしようか?

Min  Max がいい。



2/13/2023

温度計の完成(最低・最高機能付き)

温度計の完成(最低・最高機能付き)




 Arduino Uno 

半導体温度センサー  LM61 

LCD表示器(ACM 1602N1-FLW-FBW-M01-I2C接続キャラクタLCDモジュール 16x2行 白色バックライト付)



スイッチングACアダプター DC9v(写真はパソコ接続中でUSBケーブル) 

  

*最低最高温度記憶機能はマイコンを起動したときから機能を開始します。

保持した最低最高温度のリセットは、マイコンの再起動または電源を一旦切ると行われます。


LCD表示器 白色バックライトが夜美しく見えます。

私が今まで買ったデジタル温度計より安定して実用的です。

シンワの寒暖計(3本)と並べて温度を比較しています。

どんぴしゃり。一致しました。

温度計は用途によりますが、応答時間というのでしょうかこれにあまりにも敏感だと寒暖計としては使いずらいです。この半導体温度センサー(ナショナルセミコンダクタ)LM61はちょうど適当な応答に感じます。

以前、サーミスターで温度計を自作したときがありました。この時は、応答が早いというか敏感過ぎて寒暖計としては実用性に乏しく感じました。

*最低温度 は現実より低く表示します。最高温度は現実よりも高く表示します