月別アーカイブ: 2021年1月

CO2モニター用基板EPEA-CO2-NDIR-04で他とシリアル接続するときのイメージ

ハードシリアルの0,1番ピンをセンサーモジュールとの接続に使っているのでソフトシリアルで2,3番ピンあたりを開く。

あとはTX,RXとGNDを対向のものにつなぐ。PCだと(普通は)シリアル接続の口がないのでUSBシリアル変換モジュールを間にはさむ。なお、USBシリアル変換モジュールでも多少の給電はできるけどNDIRセンサーを動かすには電力不足なので主電源は通常のUSB差込口になる。

なお、MHZ19のエラーが出たときにライブラリはハードシリアルにメッセージを出すようになっています。ハードシリアル上書きしているのでライブラリ書き換えないとメッセージは拾えません。

#include <Wire.h>
#include <SoftwareSerial.h>
#include <MHZ19.h>

#define SRX 2
#define STX 3

MHZ19 myMHZ19;

SoftwareSerial softSerial(SRX, STX);


void setup()
{
  Wire.begin();
  delay(1000);
  
  softSerial.begin(9600);
  delay(100);
  Serial.begin(9600);
  delay(100);

  myMHZ19.begin(softSerial);
  myMHZ19.autoCalibration(false);
  delay(1000);
}

int co2 = 0;
void loop()
{
  co2 = myMHZ19.getCO2();
  Serial.println(co2);
  delay(1000);
}

赤外線バリアモジュールの使い方

安くて簡単に使える衝突防止センサー

電圧は3.3v-5V。

VCCを3.3Vから5VにつなぎGNDをグランドにつなぐ。OUTから出てくるものはセンサーの近くにものがあると0,無いと1。つなぎ方もシンプルだし袋空けて10分もすれば大隊使えると思う。

Arduinoのサンプルソース

int PIN_IN = 2;
int PIN_OUT = 3;

void setup() {
  pinMode(PIN_IN, INPUT);
  pinMode(PIN_OUT, OUTPUT);
  Serial.begin(9600);
  Serial.println("start");
}

void loop() {
  Serial.println("loop");
  // ものが近く
  if( digitalRead(PIN_IN) == 0 ){
    Serial.println("PIN_IN == 0");
    digitalWrite(PIN_OUT, LOW); 
  } else {
    // ものが遠く
    Serial.println("PIN_IN == 1");
    digitalWrite(PIN_OUT, HIGH); 
  }

  delay(1000);                      
}

ON/OFF判定は楽なので、近づいたら光る消すぐらいならマイコンなくても簡単。

EPEA-CO2-NDIR-04 Rev3.0.9のソース

基本、自分用メモ

~1/22 出荷分

#include <FaBoLCDmini_AQM0802A.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MHZ19.h>

#define SRX 0
#define STX 1
#define INTERVAL 6

MHZ19 myMHZ19;

SoftwareSerial softSerial(SRX, STX);
FaBoLCDmini_AQM0802A lcd;

void setup()
{

  Wire.begin();
  lcd.begin();
  displayLCD("Start");
  delay(1000);
  
  softSerial.begin(9600);
  delay(100);
  myMHZ19.begin(softSerial);
  myMHZ19.autoCalibration(false);
  delay(1000);
}

int count = 0;
int co2 = 0;
void loop()
{
  if ((count % INTERVAL) == 0 ) {
    co2 = myMHZ19.getCO2();
  }
  displayCo2(co2, (count % 2));
  count++;
  delay(1000);
}

void displayLCD(String message) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(message);
}

void displayCo2(int co2, bool isPresiod) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("CO2 ppm");
  lcd.setCursor(0, 1);
  lcd.print(co2);
  if (isPresiod) {
    lcd.print(" .");
  }
}

1/22〜

#include <FaBoLCDmini_AQM0802A.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MHZ19.h>

#define SRX 0
#define STX 1
#define INTERVAL 6

MHZ19 myMHZ19;

SoftwareSerial softSerial(SRX, STX);
FaBoLCDmini_AQM0802A lcd;

void setup()
{
  checkLED(1000);
  
  Wire.begin();
  lcd.begin();
  displayLCD("Start");
  delay(1000);
  
  checkLED(500);
  
  softSerial.begin(9600);
  delay(100);
  myMHZ19.begin(softSerial);
  myMHZ19.autoCalibration(false);
  delay(1000);
}

void checkLED(int mills) {
  int PIN = 13;
  pinMode(PIN, OUTPUT);
  digitalWrite(PIN, HIGH);
  delay(1000);
  digitalWrite(PIN, LOW);
  delay(mills);
}

int count = 0;
int co2 = 0;
void loop()
{
  if ((count % INTERVAL) == 0 ) {
    co2 = myMHZ19.getCO2();
  }
  displayCo2(co2, (count % 2));
  count++;
  delay(1000);
}

void displayLCD(String message) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(message);
}

void displayCo2(int co2, bool isPresiod) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("CO2 ppm");
  lcd.setCursor(0, 1);
  lcd.print(co2);
  if (isPresiod) {
    lcd.print(" .");
  }
}

2/22~

#include <FaBoLCDmini_AQM0802A.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MHZ19.h>

#define SRX 0
#define STX 1
#define INTERVAL 6

MHZ19 myMHZ19;

SoftwareSerial softSerial(SRX, STX);
FaBoLCDmini_AQM0802A lcd;

void setup()
{
  checkLED(1000);
  
  Wire.begin();
  delay(100);
  lcd.begin();
  delay(100);
  displayLCD("Start");
  delay(1000);
  
  checkLED(500);
  
  softSerial.begin(9600);
  delay(100);
  myMHZ19.begin(softSerial);
  myMHZ19.autoCalibration(false);
  delay(1000);
}

void checkLED(int mills) {
  int PIN = 13;
  pinMode(PIN, OUTPUT);
  digitalWrite(PIN, HIGH);
  delay(1000);
  digitalWrite(PIN, LOW);
  delay(mills);
}

int count = 0;
int co2 = 0;
void loop()
{
  if ((count % INTERVAL) == 0 ) {
    co2 = myMHZ19.getCO2();
  }
  displayCo2(co2, (count % 2));
  count++;
  delay(1000);
}

void displayLCD(String message) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(message);
}

void displayCo2(int co2, bool isPresiod) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("CO2 ppm");
  lcd.setCursor(0, 1);
  lcd.print(co2);
  if (isPresiod) {
    lcd.print(" .");
  }
}