🏕️

Arduinoで取得したセンサ値をProcessingでリアルタイム表示する

2021/04/16に公開

これの続きです。

Arduinoで取得したCO濃度をリアルタイム表示できるようにします。
数値の表示にはProcessingを使っています。Processingは電子アートとビジュアルデザインのためのプログラミング言語です。サウナガジェットにぴったりですねっ!

https://twitter.com/FinlandSauna/status/1383049758894268416?s=20

*趣味の開発記録です。一酸化炭素は命に関わるので自己責任でお願いします。

仕組み

  1. Arduinoで取得したセンサ値をシリアルポート経由で送信
  2. Processingでシリアルポートをオープン
  3. 受信した文字列を表示

ソースコード

Arduinoのソースコードは前回とほぼ一緒。

Arduino

#include "MQ7.h"

int counter = 0;  // counterという名前の変数を用意して、0をセットする

const int AOUTpin=0;//the AOUT pin of the CO sensor goes into analog pin A0 of the arduino
const int DOUTpin=8;//the DOUT pin of the CO sensor goes into digital pin D8 of the arduino

int limit;
int value;

MQ7 mq7(A0, 5.0);

void setup() {
  
  Serial.begin(9600);             // シリアル通信の準備をする
  while (!Serial);                  // 準備が終わるのを待つ

  pinMode(DOUTpin, INPUT);//sets the pin as an input to the arduino

}

void loop() {
  
  float analog_0 = analogRead(AOUTpin);
  float voltage_0 = (analog_0*5)/1024;
  
  limit = digitalRead(DOUTpin);
  
  Serial.print("CO = ");
  Serial.print(mq7.getPPM());
  Serial.print(" ppm");
  Serial.println("");
  delay(500);
}

Processingのコードが新しく増える。

import processing.serial.*;
 
Serial Port;
String Text = "";
int lf = 10;    // ASCII return 

void setup() {
  
  // list available serial port  
  printArray(Serial.list());
  
  Port = new Serial(this, "/dev/cu.usbmodem14101", 9600);
  Port.clear();
  Text = Port.readStringUntil(lf);
  Text = null;
  
  size(1024, 720);
  Port.bufferUntil(10);
}

void serialEvent(Serial Port) {
  Text = Port.readStringUntil(10);
}

void draw() {
  background(0, 0, 0);
  textAlign(CENTER);
  text(Text, width/2, height/2);
  textSize(100);
}

printArray(Serial.list()); で使用しているシリアルポート一覧が取得できます。
(Macだと)USBケーブルを抜き差しするよシリアルポートの値が変わるので注意。WindowsだとCOMポートの選択になる(と思う)。

まるっとこちらにあります。
https://github.com/johiroshi/arduino_mq7_processing

今後のこと

Processingでグラフ化しようか検討しているけれど、たぶん向いていない。Processingは電子アートちっくなことに向いている。

Discussion