発端
加湿器が壊れていて修理のために分解したらかなり単純な構造であったので改造することにした.
また,大学の授業でマイコンを使って何かを作る課題も出たためちょうどよくこれを提出することにした.
目標
改造前の加湿器には次の三つの機能がある.
1.常に加湿
2.3秒ごとに加湿
3.OFF
この機能のOFFの部分に新しく機能を付け加える.
付け加える機能としては,周囲の湿度を測定しそれに合わせて加湿をするという機能である.
使用部品
・Arudino Pro Mini のパチモン
改造前の加湿器が非常にコンパクトなものであったので中に組み込むマイコンボードも小さくしたかった.
また,ATmega328p搭載の省電力モードを試してみたいというのもある.
・USBシリアル変換器 (FT232RL)
Arudino Pro Miniに書き込むために必要.
マイコンへの接続方法は
Arduino Pro mini 5V 16MHzクローンとAE-UM232R
に書いてある.
マニュアルはこっち
24ピンDIP-ICサイズ FT232RLUSB-シリアル変換モジュール
ショートピンをどのように設定すればいいかは次のサイトを参考にした.
【Arduino Pro Mini】書き込み方法~Lチカ
さらに,usbーシリアル変換モジュールを使うためにはドライバのインストールが必要.
書き込みに際してarudinoをブートローダで書き込む方法ではなく直接arudino IDEから書き込む方法を模索した.
結果として具体的な書き込みはArudino pro miniと同様の書き込み方法であった.しかし,prosessorを使っているマイコンの使用に変更しないといけない.
今回だと,3V38MHzを指定することになる.
温湿度センサ
周囲の温度と湿度の取得には温湿度センサを用いる.
DHT-11を使うことをはじめは考えたが次のサイトから
電子工作 その18(温湿度センサー:DHT11/DHT22の使い方)
センサに大きめの個体差があり,10%-15%もの誤差があることがわかった,
さらに,湿度を100%まで計測できないことから,DHT-22という上位モデル?を使用することにした.
センサから出ている線はGND/DATA/VDDの三本からなる.データはシングル・バス・データフォーマットという形式で送られてくる.
これはライブラリで解決できる.
DATAピンはプルアップして使用する.
抵抗はデータシートで推奨されている5kΩを使用した.
DHT11 を用いた温度と湿度の計測
ここら辺も参照した.
Arudinoで発生した書き込み時のエラー
Arudinoでマイコンに書き込むとき,次のようなエラーが時折発生した.
Sketch uses 5058 bytes (16%) of program storage space.
Maximum is 30720 bytes.
Global variables use 257 bytes (12%) of dynamic memory, leaving 1791 bytes for local variables.
Maximum is 2048 bytes.
avrdude: ser_open(): can't open device "\\.\COM20": Access is denied.
このエラーで大事な部分はここ
avrdude: ser_open(): can't open device "\\.\COM20": Access is denied.
このエラー時々発生するものであまり原因がわかっていないのだが,おそらく原因はシリアルモニタによるものだと考えられる.
どういうことかというと...
Arudinoを使って書き込もうとした際に以前書き込んでいたプログラムがシリアルモニタなどと通信するものであるとする.
すると,書き込みの際にシリアルポートを表示したままだとマイコンとの通信が行われている状態になる.
したがって,事前に書き込んでいたプログラムでのマイコンとの通信のためにUSBポートが使われてしまい,プログラムが書き込めなくなってしまう.
解決策としては,単純に書き込む際にはArudino IDE上のシリアルポート関連を閉じ,ポートを開放してやればよい.
実際にこの方法でエラーは出なくなった.
以上はあくまで推察されるものです.
ミスト発生モジュール
今回改造する加湿器の水蒸気を発生はミスト発生モジュールを使っていた.
これは圧電セラミックスを用いた超音波ミスト生成で,圧電振動子が振動し超音波を発生させる.
すると,小さな穴から水蒸気が噴出されるという仕組みである.
圧電振動子が振動するためには,圧電振動子に入力する電圧が周波数的に変化している必要がある.らしい..
なので,圧電振動子への入力は専用の制御基盤を介する.
超音波で霧をつくり出す加湿器のしくみ
ここで,この加湿器についている圧電セラミックス(素子)について調べる.
おそらく同じものを発見した.
Ren He 超音波式 加湿器・噴霧器 モジュール PCBA 回路基板 噴霧プレート USB電源 霧発生装置 ミストメーカー 5V 加湿器アクセサリー・部品 DIYキット
加湿器の既存のミスト発生モジュールが劣化しているため,これと交換しておこう.
回路
もともとの加湿器についているミスト発生モジュール(以降モジュール)を制御するための基盤は流用する.
この加湿器はもともとリポバッテリーを搭載しており外部電力供給ができなくても動作できる.
この基盤がリポバッテリーの充電を制御する役割のあること,元の加湿器の機能を残したまま新しく機能を付加するという目標からこのまま基盤を用いる.
そこで,最終的な回路概要は以下になった.
本来はオリジナル基盤にあれこれして機能を追加する予定であったが,追加するマイコンとの共存を考えると難しく,このような形になった.
プログラム
DHT22を用いて温度と湿度を計測する.
加湿する基準として以下を設けた.
室温が25-28度の時湿度は50%-60%
室温が18-25度の時湿度は40%-50%
これは次のサイトに沿って決定した.
適正な湿度は何パーセント?簡単にできる湿度を上げる・下げる方法を解説
これに従ってプログラムを組んでいく.シンプルに温度と湿度から出力を決定するようにしている.
最終的なプログラムコードは次.
#include
#define DHT_MODEL DHT22 // model num for sensor (DHT11 or DHT22)
#define DHT_PIN 10 // getting data pin from DHT11
#define vol_out 6 //mist output voltage
#define sw_check 4
DHT dht(DHT_PIN, DHT_MODEL); //init sensor
void setup() {
pinMode(vol_out,OUTPUT);
pinMode(sw_check,INPUT);
Serial.begin(9600);
dht.begin(); //start runing sensor
}
void loop(){
int sw_state=digitalRead(sw_check);
if (sw_state){
float humidity= dht.readHumidity(); // reading humidity
float temperature = dht.readTemperature(); // reading temperature [℃]
if (temperature>=25 && humidity<=55 || temperature<25 && humidity<=45){
analogWrite(vol_out,255); //emit mist
}else{analogWrite(vol_out,0);}
//console output
Serial.print("Temperature: ");
Serial.print(temperature, 1);
Serial.print("[℃]");
Serial.print(" Humidity: ");
Serial.print(humidity, 1);
Serial.println("[%]");
int t=0;
int waiting_time=600;//[s]
while (t<=waiting_time){
int check_pin=digitalRead(sw_check);
if (check_pin==0){break;}
delay(1000);
t++;
}
}
else{
analogWrite(vol_out,0);
Serial.println("state is 0");}
delay(500);
}
組み立て
組み立てる際にもともとついている上部パーツでは小さかったので,再度CADでモデリングして作成した.
左がCAD画像,右が印刷したものです.
完成
組み立てた.
まとめ
<成果>
・既存の機能に加えて新しい機能を搭載できた.
・温湿度センサが使えるようになった.
・USBシリアル変換器が使えた.
<課題>
・湿度の計測が加湿器周りのみしか行えていない.
・スライドスイッチを3つ用いているためスイッチ部分が巨大化している
・ATmega328pの省電力モードを使えていない
総じて加湿器の改造は成功した.
気になる点は少しあるが問題がない限り今後このまま使っていきたい.
大学の授業にこれを持って行って発表したが,まぁ大丈夫だと信じたい.
head
head