検索

Google
Web www.icefree.org

RSS of recent changes

 

ソフトウェア

2017-06-20 (火) 23:23:54 (2491d)

ポート

PA2 ~リモコン出力

PB8 屋外SHT71 sck
PB9 屋外SHT71 data
PB10 室内SHT71 sck
PB11 室内SHT71 data

PD0 ~外気FAN電源
PD1 ~弱運転

PA2 USART TX

アルゴリズム

室温を25度〜35度に収める。

実測結果から
外気を使う場合は15度くらいの温度差が必要。
エアコンの設定温度+2度くらいになる。

アルゴリズム
室温35度以上
 エアコン27度設定
室温32度以上
 エアコン30度設定。27度設定だった場合は変更しない。
室温26度以上
 外気が25度以下、湿度80%以下なら外気を使う。
 エアコン27度設定なら、エアコン30度設定にする。
室温26度以下
 全OFF

状態を変更したら、5分間は他の状態に遷移しない。
25度以上の外気を使わないのは、冷えないから。
80%の湿度は室内の湿度が上がってしまうため。(雨天の判断)
初期状態はOFF

基本は、26〜32度の間で落ち着き、エアコンと外気の切替を行う。

状態遷移図で書くと以下のような感じ。

state.gif

ラベルは、室内温度の条件、*が付いているのは外気の状態が悪い場合。

使いながら検証中。

改良メモ




消費電力の計算

vvp? (2011-11-08 (火) 01:55:37)



計算します。

339mA, 32.9W, 力率 97.8% @99.1V

ファンが、309mA, 30.2W, 力率98.4% @99.3V


外気がすごく低いときの対処

vvp? (2011-11-08 (火) 01:54:57)



多分必要。

2つあるファンの途中で室内の空気を取り込むと
外気の取り込みが減って、送風される空気の温度も上がって良い。
室内の空気を循環させようとしたら、そういう結果になった。


25-32での外気の条件で切り替わり過ぎる

vvp? (2011-11-05 (土) 19:52:59)



ヒステリシス特性をつけました。

30からOUTには、24度、78%

OUTから30には、26度、82%

  • vvp 2011-11-07 (月) 22:51:12
    全OFFを26度に変更。
    外気導入の湿度条件を室温の相対湿度40%での絶対湿度以下にする

ARMで真面目に計算すると大変なので、計算済みのデータをテーブルとして持ちます。

26度の絶対湿度は0.216497 kg/kgで、湿度40%なら 0.00865988 kg/kg。
これが湿度100%となるのは 11.68度。これ以下の温度は無条件でいい。

26〜32度での湿度40%での絶対湿度
{{26, 0.00865988}, {27, 0.00920506}, {28, 0.00978135}, {29,

 0.0103904}, {30, 0.011034}, {31, 0.011714}, {32, 0.0124323}}

11〜26度での飽和水蒸気量
{{11, 0.00827493}, {12, 0.00884942}, {13, 0.00945936}, {14,

 0.0101067}, {15, 0.0107935}, {16, 0.0115219}, {17, 0.0122941}, {18, 
 0.0131125}, {19, 0.0139796}, {20, 0.0148979}, {21, 0.0158704}, {22, 
 0.0168997}, {23, 0.017989}, {24, 0.0191415}, {25, 0.0203606}, {26, 
 0.0216497}}

32bit演算で、湿度は0.01%単位で、[0,10000]にしているので、
Log[2,10000] = 13.2877だから、使えるのは18.7123bit = 429497
26度の0.0216497が一番大きいので、1.98385*10^7まで掛けられる。
わかりやすく10^7にしておきます。32bit符号ありだと少し足りない。

これを前の値に掛けると、

X10[] = // 11度〜32度の飽和水蒸気量*10^7
{82749, 88494, 94594, 101067, 107935, 115219, 122941, 131125, 139796, \
148979, 158704, 168997, 179890, 191415, 203606, 216497, 230126, \
244534, 259760, 275850, 292850, 310808}

これに湿度をかけて、以下の値を超えなければOK

X04LIMIT[] =
{865987655, 920505639, 978134516, 1039040742, 1103400047, 1171398068, \
1243231047}

使えそうだけど、いまいちスマートな感じがしない。

グラフだと以下のようになる。

limit.gif

線形補間でいい?

(2168.91 + 67.7851 T1 - 2.66035 T1^2 - 135.508 T0 + 2.90415 T1 T0) /
(38.1406 - 0.91605 T1)

くらい。意外と面倒。
79.69374317525043 - 4.4308324298173245 T0 + 2.90415 Ti
でいいか。これだと、完全に平面への近似。

マイコン内部では、0.01単位で整数化してるので、それにあわせて
(1020080 - 567 Tout + 372 Tin) / 128
ビットはフルに使っていません。20bitです。
 -4%〜+10%くらいの誤差なので、これくらいで良さそう。

  • vvp 2011-11-09 (水) 00:45:18
    そろそろ固定小数点も面倒なので、ソフト浮動小数点でも使おうか・・・。なんか負けた感じがしてイヤだけど。

プログラム

基本システムにFreeRTOSを使っています。

FreeRTOSメモ。
タスクは便利だけど、スタックをたくさん使う。
スタックが足りないと、動かなくなる。
スタックオーバーフローは検出できるけど、それなりに面倒。
(CPUの性能により)あまり細かい時間は使えない。

今はタスクを使っているけど、コルーチンの方が効率かも。
ただし、コルーチン切り替えでスタックが保証されない。
並列動作にはブロック状態を考慮しないといけない。

タスク
2つのタスクを使っています。

  • USART送信するタスク
  • SHT71のデータを取得するタスク(結局、ほぼすべての処理)

コメント