目的
コロナ等を含め室内の空気のよごれをにおいを通して値数表示する。
構成
AE-TGS8100 K-15562
AQM0802A-RN-GBW P-06669
説明
まず後で3.3V系で使いたいのでマニュアルの式から
プログラムを作った。秋月の式と値が正しい事を確認した
0で割るとエラーになることを確認したので何でも良かったので
0を-1に変換した。現実的には、マイナスの大きい数になるので
区別が付くからマーいいか
そのままだとつまらないので液晶を付けた。
CO2センサーの為の前段階
main - 初期化
loop - 繰り返し処理
i2c_led_w - 2バイトI2Cに送る
# include <Wire.h> //I2C library
//STM32G031J6M6
# define sdaPin PA12 // ArduinoA4
# define sclPin PA11 // ArduinoA5
// I2C address.
# define I2Cadr 0x3e // 固定
char data_read[2]={'@','t'}; //i2cバッファー
int ii; //ループカウンター
char INIT_com[]={0x0,0x38,
0x0,0x39,
0x0,0x4,
0x0,0x14,
0x0,0x70,
0x0,0x56,
0x0,0x6C,
0x0,0x38,
0x0,0xC,
0x0,0x1,
0x40,0x41};
char INIT_cls[]={0x0,0x1};
void i2c_led_w(char *buff1){
Wire.beginTransmission(I2Cadr);
Wire.write(buff1[0]);
Wire.write(buff1[1]);
Wire.endTransmission();
delay(2);
}//i2c_led_w
int adval = 0;
float sensor_r;
void setup() {
delay(3000); //not delete
//i2cの初期化
Wire.begin(); // initialise the connection //767 UNO
//Wire.begin(sdaPin,sclPin); //STM32G031J6M6
//液晶の初期化
for(ii=0;ii<11;ii++){
i2c_led_w(&INIT_com[ii*2]);
} //for
Serial.begin(9600);
pinMode(A0, OUTPUT);
}//setup
float v1;
float rs;
void loop() {
digitalWrite(A0, HIGH);
delay(1);
adval = analogRead(A1);
delay(1);
digitalWrite(A0, LOW);
//Serial.println(adval);
//adval = 1024;
//adval = 0;
if(adval == 0) {adval = -1;}
v1 = ( ((float)adval) * 5.0) / 1024.0;
//Serial.println(v1,3);
rs =( (3.0-v1)/v1 ) * 10.0;
Serial.println(rs,3);
/*
if(adval != 0) {
sensor_r = 6144.0 / adval - 10;
Serial.println(sensor_r,3);
} else {
Serial.println("0");
}//end if
*/
delay(998);
int s = rs;
int n0,n10,n100;
n10 = s / 10; // 123 -> 12
n0 = s - (n10 *10); // 123 - 120 -> 3
n100 = n10 / 10; // 12 -> 1
n10 = n10 - (n100 *10); // 12 - 10 -> 2
//画面のクリア
i2c_led_w(INIT_cls);
//液晶に表示
data_read[1] = '0' + n100;
i2c_led_w(data_read);
data_read[1] = '0' + n10;
i2c_led_w(data_read);
data_read[1] = '0' + n0;
i2c_led_w(data_read);
}//loop