2010年3月9日火曜日
空気清浄機のホコリセンサーをイジッテみました。
花粉症に悩まされる季節になりました。部屋には壊れた空気清浄機があり、モータ等の部品取り用に捨てずに置いてあります。
購入時、絶大の期待を持っていたのですが、実際には、それほどの効果はありませんでした。3年で、円筒形のファンの軸受けが破損、あっけなく、使い物にならなくなりました。
そんな、空気清浄機から、ホコリセンサーを取り出し。花粉モニターが出来ないかと思い。色々試してみました。
1.ホコリセンサを調べる。
空気清浄機に電源を入れ、センサの端子(3ピン)をの電圧を調べる。テスターを適当に当てる。Pin1とPin2で最大電圧。Pin2とPin3で最小電圧。
==> Pin1 電源12V (Vdd)
Pin2 グランド (Vss)
Pin3 電圧出力 (Vout)
2.ホコリセンサ出力電圧調整回路
出力電圧が最大で5V程度であった(現時点での実測値)。しかし電源電圧の出力も考慮し、電圧の調整回路を組みました。素人の考えですが、抵抗値が高い可変抵抗を使うことで、センサの出力電圧降下を最小にする。抵抗の分圧を有効にするために、オペアンプで、ボルテージフォロア回路を構成
(ADCの内部抵抗が40KΩ(LPC2388 Product data sheet)なので 10KΩ程度の可変抵抗のみでも)
可変抵抗 100KΩ
オペアンプ Vdd(Vs) 2.7~(3.3)~5.5V (不意の高電圧に備え?)
*色々やっているうちに、LPC2388のADCに12Vを流してしまい、「チッ」と言う音とともにLPC2388はクラッシュ。以前使用していたLPC2388(DAC不調)を現役復帰。
3.LPC2388 1CHオシロスコープの改修
長時間の測定に備えるため、測定値をPCに送信する機能を追加しました。
液晶の表示のタイミング(1024サンプリング)で、サンプルデータの平均をとり、UART0でPCにデータを送信。
4.PCアプリケーションの作成。
1)Microsoft Visual C++ 2008 Express Edition
2)シリアルポートのイベント(DataReceived)処理で、LPC2388から送信されたデータと受信時刻を蓄積する。
3)グラフ表示は、パネル(System::Windows::Forms::Panel)に行う。
※グラフ表示が跳ね上がったところ、食事の支度(野菜炒め)をした結果。
----------------------------------------------
VC++テクニカルメモ
(一部 ソースコードのカットアンドペーストで表示出来ない部分があります。)
1.実行時エラー
1)メッセージ
有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール '***' がアクセスされました。
2)内容
どうもシリアルポートのイベント処理はボタン、タイマ等のイベント処理とは異なり、イベント発生時に立ち上げられたスレッドで実行されるようです。つまり、Form上の各コントロール(オブジェクト)を管理しているスレッドと異なるため、シリアルポートのイベント処理で、Form上の各コントロールを操作することは安全でないと判断されているようです。
3)対処
・Invoke等の関数でスレッド セーフな呼び出しを行うそうですが、今一つ不調
で、応急的対処を行った。
・Formのコンストラクタに以下のコードを追加。
this->CheckForIllegalCrossThreadCalls = false;
(前述のスレッドチェック機能をOFFにするようです。)
2.グラフ描画
1)グラフィックの宣言
System::Drawing::Graphics^ GrpChart; ポインタで宣言
2)グラフィックの初期化
Formにパネル( pnlChart )を置き、このパネルにグラフィックを生成する。
this->GrpChart = this->pnlChart->CreateGraphics();
3)Drawツールの宣言
・ペン
System::Drawing::Pen^ PenChart;
・ブラシ
System::Drawing::SolidBrush^ BrsChart;
・フォント
System::Drawing::Font^ FntChartItem;
4)Drawツールの初期化
・ペン
this->PenChart = gcnew System::Drawing::Pen( System::Drawing::Color::Black,1.0f );
・ブラシ
this->BrsChart = gcnew System::Drawing::SolidBrush( System::Drawing::Color::Black);
・フォント
this->FntChartItem = gcnew System::Drawing::Font("MSゴシック",10.0);
5)グラフィック描画
・ライン
Point point1 = Point(50,50);
Point point2 = Point(200,100);
this->GrpChart->DrawLine( this->PenChart, point1, point2 );
・文字(String)
this->GrpChart->DrawString("Draw String",this->FntChartItem,this->BrsChart,10.0,10.0);
※久々にグラフィック表示のWinアプリを作成しようとして、少々戸惑ったのでここにメモります。
※CQ出版2010年6月号が付録基板SH-2Aで、期待しています。このマイコン(型番)限定でコードサイズ制限なし、期間限定無しのHewが添付されることを密かに期待しています。
また、RAM1Mバイト等の予告情報より、SH7262/SH7264あたりが搭載されるのでしょうか?
NECエレクトロニクス、ルネサステクノロジ統合記念の大盤振る舞いを期待します。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿