P14671: Expansion Joint Active Monitoring
/public/

Build, Test, Document

Table of Contents

Build, Test, and Integrate

top|instal top|instal top|instal

Above from Left to Right:

  1. The final insert design made from naval brass
  2. An initial prototype insert being installed
  3. Complete EJ with inserts installed ready for testing

Below The Data acquisition device being built and programmed top|instal

Test Plans & Test Results

1st Test:

An EJ was custom constructed with two of inserts built into the EJ. A pipe cap with PTFE tape was used to simulate a sensor being screwed into the insert. The EJ was tested in accordance with Garlock's testing standards. Two test were run on this EJ.

1) The first test consisted of 400 mechanical cycles at ambient temperature

2) The second test consisted of 2500 mechanical cycles at 250 degrees Fahrenheit

Assembly Instructions

1) Thread pressure transducer and thermocouple into the through wall inserts protruding through the EJ. Be sure to use Teflon tape or compliant thread sealer such as black RTV. Be sure to tighten properly and to not over tight. The pressure transducer should be installed pointing down (towards the ground) or as close to completely vertical as possible to prevent sediment from collecting inside the sensors orifice.

2)Mount string potentiometer and ultrasonic sensor plates 180 degrees apart and 90 degrees from the pressure transducer/thermocpouple.

3)Mount string potentiometer and ultrasonic sensors to their respective mounting plates.

4)Mount electronics box in most accessible and convenient location possible keeping in mind the length of the sensor wires.

5)connect All sensors to their respective ports on the electronics box.

6)Connect box to outlet or proper battery

Code for Arduino

//Libraries
  1. include <DueTimer.h>
  2. include <SPI.h>
  3. include <SD.h>
  4. include <Event.h>

//Pin Declarations const int stringPotPin = A0; const int tempSensorPin = A1; const int pressureSensorPin = A2; const int sdCS = 10; const int pingPin = 53;

//global variables boolean waitForInterrupt = 1; int SecondsSinceStart = 0; String toSDCard = ""; double stringPot = 0; long pingSensor = 0; long tempSensor = 0; long pressureSensor = 0; float interruptLength = 0;

void setup() { // Setting up the DAQ Serial.begin(9600); // <- for debugging //Setup SD card pinMode(sdCS,OUTPUT); //turn on sd card if (!SD.begin(10)) { Serial.print("Fail"); } else { //Serial.println("Success"); //Debugging } //really small wait delay(10); // read in setup file from SD card // -> file must be named SETUP.txt int counter = 0; File cals = SD.open("SETUP.txt"); delay(100); String input = ""; if (cals) { while(cals.available()){ switch (counter) { //first word case 0: input = ""; input += String(cals.read()-48); //Serial.println(input); while(cals.peek() != 32 && cals.peek() != -1){ input += String(cals.read()-48); //Serial.println(input); } interruptLength = input.toInt(); //Serial.println(input); //Serial.print("InterruptLength: "); //Serial.println(interruptLength); cals.read(); break; default: //Serial.print(counter); //Serial.print(": "); //Serial.println(cals.read()); } counter++; } } //Setup Interrupt Timer.getAvailable().attachInterrupt(readSensors).start(1000*interruptLength); SecondsSinceStart = interruptLength/1000; }

void loop() { // main loop. Converts Data, Writes to SD card, ect if (waitForInterrupt) { //Do nothing } else { // increment timer SecondsSinceStart = SecondsSinceStart + interruptLength/1000; // conversions double inches = microsecondsToInches(pingSensor); double cm = microsecondsToCentimeters(pingSensor); stringPot = stringPotConversion(stringPot); pressureSensor = pressureSensorConversion(pressureSensor); tempSensor = tempSensorConversion(tempSensor); //seriaPrint displays the output to the serial output for debugging. Includes units String serialPrint = ""; serialPrint = toSDCard + SecondsSinceStart + " second: " + inches + "in, " + cm + "cm : " + stringPot +"in : " + tempSensor + "C : " + pressureSensor + "PSI"; //toSDCard is the string that prints to the SD Card. This is what you would change to edit the format toSDCard = toSDCard + SecondsSinceStart + "," + inches + "," + stringPot + "," + tempSensor + "," + pressureSensor; Serial.println(serialPrint);//debugging //interrupt has occured, reset indicator waitForInterrupt = 1; //write to SD Card File dataLog = SD.open("Data.log",FILE_WRITE); if (dataLog) { //Serial.println(toSDCard); dataLog.println(toSDCard); dataLog.close(); } } }

void readSensors(){ //Variables double inches, cm; toSDCard = ""; //Displacement Sensor Input stringPot = analogRead(stringPotPin); //temp sensor input tempSensor = analogRead(tempSensorPin); //pressure sensor input pressureSensor = analogRead(pressureSensorPin); //Send pulse pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(5); digitalWrite(pingPin, LOW); //Get back time pinMode(pingPin, INPUT); pingSensor = pulseIn(pingPin, HIGH); waitForInterrupt = 0; //Serial.println("/interupt"); }

double microsecondsToInches(double microseconds) {

// According to Parallax's datasheet for the PING))), there are // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per // second). This gives the distance travelled by the ping, outbound // and return, so we divide by 2 to get the distance of the obstacle. // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf return microseconds / 74 / 2; }

double microsecondsToCentimeters(double microseconds) {

// The speed of sound is 340 m/s or 29 microseconds per centimeter. // The ping travels out and back, so to find the distance of the // object we take half of the distance travelled. return microseconds / 29 / 2; }

double stringPotConversion(double DAC){ // after the DAC converts the analog output of the string potemtiometer, // this functio converts the binary number to inches //Based off the calibration return 0.0151*DAC + 0.0343; }

double tempSensorConversion(double DAC){ // after the DAC converts the analog output of the cold junction compensator, // this functio converts the binary number to degrees farenheight. //Base off the datasheet return 0.322265625*DAC; }

double pressureSensorConversion(double DAC){ // after the DAC converts the analog output of the pressure transducer, // this function is supposed to convert the binary to PSI // NEEDS CALIBRATION: was not functioning properly return 1.9336*DAC; }

Download

Service Instructions/Manual


Home | Planning & Execution | Problem Definition | Systems Design | Detailed Design | Build, Test, Document | Project Review | Photo Gallery