工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

DIY集水槽水位モニター - Arduino Nano、MPXV5010DP、OLEDディスプレイ

部品と材料

部品数量
Arduino Nano R31
Freescale MPXV5010DP 差圧センサー(0-10kPa, 0-5V出力)1
0.96インチ OLEDディスプレイ(I2C、2色)1
MCP4725 DAC(I2C、12bit)1
リレーモジュール(ドライ接点出力用)1
チップコンデンサ(1μF, 0.01μF, 470pF)各1
プラスチックプロジェクトボックス(110×85mm)1
タイゴンチューブ(3/32インチ)1

プロジェクト概要

集水槽(サムプ)の水位を非接触で監視するモニターを自作しました。超音波センサーより信頼性が高く設置が容易な差圧センサー(MPXV5010DP)を採用。センサーはチューブで銅管に接続し、銅管を集水槽内まで延ばすことで、本体を水から離れた安全な場所に設置できます。

DIY集水槽水位モニター - Arduino Nano、MPXV5010DP、OLEDディスプレイ
DIY集水槽水位モニター - Arduino Nano、MPXV5010DP、OLEDディスプレイ

設計のポイント

DIY集水槽水位モニター - Arduino Nano、MPXV5010DP、OLEDディスプレイ
専用基板を設計・製作し、配線を簡素化

動作仕様

ソースコード

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Adafruit_MCP4725.h>
#include <math.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

Adafruit_MCP4725 dac;

int relayPin = 5;
int analogPin = 0;      // DAC出力確認用ADC
int analogPin2 = 1;     // MPXV5010DP入力

int v1 = 0;  // MPXV5010DP ADC値
int v2 = 0;  // DAC入力用スケーリング値
int v3 = 0;  // mm換算値
int v4 = 0;  // 深度パーセント
int v5 = 0;  // DAC出力読み戻し値
int v6 = 0;  // mV換算値
float v7 = 0; // インチ換算値
int v8 = 0;  // 表示用整数インチ

int offSet = 40;      // 0kPa時のADC値(実測で調整)
int maxSet = 1015;    // 10kPa時のADC値(実測で調整)
int maxHeight = 1020; // 満水深度 mm
int ranging = (maxHeight * 0.8) + offSet;
int alarmHeight = 12; // アラーム閾値(インチ)
float divisor = 25.4; // mm→インチ変換

void setup() {
  Serial.begin(9600);
  Serial.println("DAC test with DP sensor");

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();

  dac.begin(0x60);
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, HIGH); // リレーOFF(Active LOW想定)
}

void loop() {
  v1 = analogRead(analogPin2);
  delay(1000);
  if (v1 < offSet) v1 = offSet;

  // DAC出力値計算(0-4095)
  v2 = map(v1, offSet, maxSet, 0, 4095);
  dac.setVoltage(v2, false);

  // 水深計算
  v3 = (v1 - offSet) / 0.8;           // mm
  v7 = v3 / divisor;                  // インチ
  v8 = round(v7);                     // 整数インチ

  v4 = map(v1, offSet, ranging, 0, 100); // パーセント
  v5 = analogRead(analogPin);           // DAC出力確認
  v6 = map(v5, 0, 1023, 0, 5000);       // mV

  printoled();
  serial();
}

void printoled() {
  display.clearDisplay();
  // アラーム判定:閾値超過で画面反転 + リレーON(LOW)
  if (v8 > alarmHeight) {
    display.invertDisplay(true);
    digitalWrite(relayPin, LOW);
  } else {
    display.invertDisplay(false);
    digitalWrite(relayPin, HIGH);
  }

  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println("SUMP LEVEL");
  display.setTextSize(4);
  display.print(v8);
  display.setTextSize(2);
  display.println(" inches");
  display.display();
  delay(500);
}

void serial() {
  Serial.print(" PS analog input: "); Serial.print(v1);
  Serial.print(" Height: "); Serial.print(v3); Serial.print(" mm ");
  Serial.print(v4); Serial.print(" %");
  Serial.print(" Converted voltage: "); Serial.print(v6); Serial.println(" mV");
}

回路図・基板データ

EAGLE 6.5.0で設計。sump%20level.sch として提供。

設置上の注意

製造プロセス

  1. 血圧計:設計、製造、将来動向
  2. Raspberry Piで構築する空気質・気象ステーション:InfluxDB & Grafana活用
  3. MATRIX Voice搭載Raspberry PiへのGoogle Assistantインストール:ステップバイステップガイド
  4. Weather Monitor:Raspberry Pi自作気象ステーション+Dropboxアップロード
  5. リモート心拍数監視システム:AWS IoTアラート付き
  6. Windows IoT Core搭載RoverをRaspberry Pi 2で構築 - 初心者から上級者まで
  7. GoPiGo v2をWindows 10 IoT Coreで拡張 - Raspberry Pi 3対応
  8. JW Machine:精密CNC受託製造サービス
  9. 精密な旋盤レベリング:プロフェッショナルガイド
  10. C# 変数のスコープを理解する:クラス、メソッド、ブロックレベル
  11. ゲートレベルモデリング:ハードウェア回路図からVerilogコードへ