研究Tips:研究を効率化するためのTipsを紹介しています。

測定 + SDカード記録装置の作成

はじめに

(この後のIoT関連の記事にまるで逆行していますが…) 測定が終わった後、測定データを自分のPCへコピーできれば事足りる場合、わざわざwebにアップロードする必要は無いと思います。また、webアップロードは便利ですが、webの通信環境が安定しない場合、測定データが欠落することが懸念されます。

ここではArduinoに圧力センサーを接続し、測定値をSDカードへ保存する方法を紹介します。ここではネット接続が必要ないのでESPr® Developerは使用せず、Arduino UNOを使用します。Arduinoのアナログピンは0〜5V入力、ここで使用している圧力計の出力も0〜5V出力のため、直接接続して測定することができます。Arduino UNOそのものにはSDカードを差し込めないので、SDカードシールドを使います。

材料

  1. Arduino UNO: keyestudio UNO R3 開発ボード (amazon, ASIN B01JRFS1QI)
  2. ブレッドボード:例えば、ブレッドボードBB-601 (秋月電子通商 P-05155)
  3. 収納ケース(100均の食品保存ケース、空きチップケースなど。Arduino類が入ればなんでも構いません。)
  4. 電線(単芯のワイヤ): 例えば、耐熱通信機器用ビニル電線 2m×10色 (秋月電子通商 P-08996)
  5. ワイヤーストリッパー (例えば、ベッセルワイヤーストリッパー 3500E-1)
  6. スイッチングACアダプター 9V 1.3A (秋月電子通商 M-01803) (Arduinoの外部電源)
  7. スイッチングACアダプター 12V 1A (秋月電子通商 M-01804) (圧力計の外部電源)
  8. 2.1mm標準DCジャック・スクリュー端子台 (秋月電子通商: C-08849)
  9. 圧力センサ(アナログ電圧出力できるタイプのもの): デジタル圧力センサPPXR01NH6M (アズワン 61-5686-15)および内ネジホースニップル 1/8 × 7 GHNF-0107 (アズワン61-9574-11)
  10. SDカードシールド (スイッチサイエンス、SEEED-103030005)
  11. SDカード (4GB程度で十分かと思います。例えば、amazon ASIN B002WE6CTU)

作製方法

圧力計_SDカード.jpg図のような回路を組み立てます。Arduinoの上に重ねる形でSDカードシールドを装着してください。SDカードシールドのピンソケットに番号が書いてありますが、Arduinoとピン配置は同じです。SDカードシールドのスロットへSDカードを挿入します。

10.jpgまず、電圧と圧力の関係について換算するための検量線が必要なので、以下のスケッチを使います。Arduinoへ転送し、シリアルモニタに測定値を表示させます。圧力計の測定ポートに適当なチューブとテルモシリンジを取り付けて、手動で負圧、陽圧に調整できるようにします。シリンジで圧力を調整しながら、圧力計の表示値とシリアルモニタの表示値をメモします。例えば、私が実験しているときは10.3 kPaの表示値を示しているとき、シリアルモニタの表示値は657でした。この測定をいくつかの点で行い、エクセルなどで検量線を作製します。今回は傾き0.2443、切片-150.13の直線になりました。

int value; // valueを数値データ格納用に定義
void setup(void) {
Serial.begin(9600);
pinMode(A0, INPUT); //A0ピンを入力測定で使用する。
}
void loop(void) { //以下、loopなので無限回実行する。
value =analogRead(A0); //A0ピンの電圧を測定
Serial.println(value);
delay(1000);
}

続いて、測定、圧力換算、SDカードへの記録を行うために以下のスケッチを転送します。

//圧力センサPPXR01NH6M_Arduino_SDカード書き込み
//使用ライブラリ
#include <SPI.h>
#include <SD.h>

// You need to change the values of slope and intercept.
float slope = 0.2443; //create global variable for slope
float intercept = -150.13; //create global variable for intercept

// ***************************************************
//初期設定、SDカード、時間格納
const int chipSelect = 4; //SDカード関連
unsigned long time; //timeを時間格納用に定義
// ***************************************************
int linenum = 0;
int value; // valueを数値データ格納用に定義
int pressure; // 圧力の換算値(kPa)
const int N = 2;

void setup(void) {
Serial.begin(9600);
//液晶の初期化
//使用するArduinoピン定義
pinMode(A0, INPUT); //A0ピンを入力測定で使用する。

//SDカードの初期化
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized.");
}

// ***************************************************
// 測定開始
void loop(void) { //以下、loopなので無限回実行する。
time = millis(); //millis関数 プログラム実行後からの経過時間をmsecで返す
value =analogRead(A0); //A0ピンの電圧を測定
pressure = value*slope+intercept; // 検量線(slopeとintercept)から圧力を計算する。単位kPa

// シリアルモニタ表示
Serial.print("Time: ");
Serial.print(time / 1000); //単位 sec
Serial.print(" sec, "); //単位 sec
Serial.print("pressure: ");
Serial.print(pressure);
Serial.println(" kPa");

//測定結果のSDカード保存
File dataFilePRESS = SD.open("pressure.txt", FILE_WRITE);
dataFilePRESS.print(time / 1000);
dataFilePRESS.print("sec, ");
dataFilePRESS.print("pressure: ");
dataFilePRESS.print(pressure);
dataFilePRESS.println("kPa");
dataFilePRESS.close();
delay (5000);//次回測定までの待ち時間(msec)の設定
}

スケッチの中で、傾き、切片、測定間隔(赤字箇所)を編集したものを使ってください。Arduinoへ転送すると、まずSDカードが認識されるので”card initialized”のメッセージが出ます。その後、5秒間隔で測定値が表示されます。測定終了後、SDカードのデータを取り出すときは、Arduinoの電源を落とし、SDカードを抜き取り、PCへ接続します。”pressure.txt”のファイルが出来ており、この中に測定値が保存されています。

11.jpg12.jpg

PCでの動作確認が終わったら、SDカードを戻し、Arduinoの9V ACアダプターを接続して、データの保管を開始します。ACアダプターからArduinoへ電源が供給され始めた時点から記録が開始されます。