🏕️
Arduinoで取得したセンサ値をProcessingでリアルタイム表示する
これの続きです。
Arduinoで取得したCO濃度をリアルタイム表示できるようにします。
数値の表示にはProcessingを使っています。Processingは電子アートとビジュアルデザインのためのプログラミング言語です。サウナガジェットにぴったりですねっ!
*趣味の開発記録です。一酸化炭素は命に関わるので自己責任でお願いします。
仕組み
- Arduinoで取得したセンサ値をシリアルポート経由で送信
- Processingでシリアルポートをオープン
- 受信した文字列を表示
ソースコード
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ポートの選択になる(と思う)。
まるっとこちらにあります。
今後のこと
Processingでグラフ化しようか検討しているけれど、たぶん向いていない。Processingは電子アートちっくなことに向いている。
Discussion