こんにちは
やましょうです。
CO2濃度が見たい
これからエアコンの季節
例の流行り病でCO2濃度の表示が欲しいところですね。
マイコン化する前に
Delphi を使ってWindows上でCO2濃度を表示してみます。
必要な物
CO2センサーモジュール MH-Z19C
https://akizukidenshi.com/catalog/g/gM-16142/
USB UART変換 AE-UM232R( Arduinoでもよいと思う)
https://akizukidenshi.com/catalog/g/gK-06693/
配線
接続 こんな感じに接続
(AE-UM232RのDIP SWの位置が重要 TXを3.3Vにするため)
★秋月のページにI/F電圧3.3Vって書いてあるので念のため3.3V設定にしています。
黒:GND
青:CO2センサーTX=>変換IC RX
白:CO2センサーRX=>変換IC TX
必要なコンポーネント
COMポート番号を割り出して、DELPHIで以下のソフトを書く
WUni232cのコードはGetitから10.4以降では削除されたので、
https://www.csd.co.jp/product/
より取得 してください。
コード
/////////////////////コード //////////////////////////////////////////////
unit Unit20;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, WUni232c, Vcl.ExtCtrls, Vcl.StdCtrls;
type
TForm20 = class(TForm)
WUni232c1: TWUni232c;
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private 宣言 }
ReadData: array [0..9] of byte;
public
{ Public 宣言 }
end;
var
Form20: TForm20;
{ 0 1 2 3 4 5 6 7 8 }
const CMD_SensorON : array [0..8] of BYTE = ( $ff,$01,$79,$A0,$00,$00,$00,$00,$E6 );
const CMD_SensorOFF : array [0..8] of BYTE = ( $ff,$01,$79,$00,$00,$00,$00,$00,$86 );
const CMD_SensorRead: array [0..8] of BYTE = ( $ff,$01,$86,$00,$00,$00,$00,$00,$79 );
implementation
{$R *.dfm}
procedure TForm20.FormCreate(Sender: TObject);
begin
if WUni232c1.Open < 0 then
begin
Self.Caption := 'Comポートエラー';
exit;
end;
Wuni232c1.Write(sizeof(CMD_SensorON),@CMD_SensorOn);
Timer1.Enabled := True;
end;
procedure TForm20.Timer1Timer(Sender: TObject);
var
ReadCount : Byte;
Sum : Byte;
i: Integer;
begin
ReadCount := Wuni232c1.Read(10,@ReadData);
Label3.Caption := IntToStr(ReadCount)+'/'+IntToStr(ReadData[2])+'/'+IntToStr(ReadData[3]);
if(ReadCount = 9) then
begin
// sum Check
sum := 0;
for i := 0 to 7 do
Sum := Sum+ ReadData[i];
sum := $ff-Sum;
if(Sum = ReadData[8] ) then
begin
Label2.Caption := IntToStr(ReadData[2]*256+ReadData[3])+'ppm';
end;
end
else
begin
// あまりの受信データをすべて捨てる
while(Wuni232c1.Read(10,@ReadData) <> 0) do;
end;
Wuni232c1.Write(sizeof(CMD_SensorRead),@CMD_SensorRead);
end;
////////////////////////////////////////////////////////////////////////////////////////
end.
動作確認
こんな感じで表示される。
そしてコードはここに
https://github.com/qa65000/Co2SensorForDelphi
以上
やましょうでした。
0 件のコメント:
コメントを投稿