Electric Liquid Sensing System for Railroad Lubricant Tank ECE 480 – Team 8 George P. Ballios – Lab Coordinator / Presentation Prep Michael W. Dow – Webmaster Nicholas T. Vogtmann – Document Prep Craig M. Zofchak – Manager Overview Sponsor Problem Design Specifications Results Future Improvements Sponsor Sponsored by Norfolk Southern Corporation • Class one railway system operator • 21,000 route miles in 22 eastern states • Serves all major eastern ports • Comprehensive logistic services • Most extensive intermodal network in the east Mission Norfolk Southern desires a way of shutting off the pump for there lubrication system when the liquid level reaches it low point Currently there is no system in place to measure the lubricant level • Norfolk Southern visit’s the tank’s site every one to three months for refilling Design Requirements Keep structural integrity intact • Any modification is impractical while it is operational • Debris in the tank can damage the pumps Low Power Consumption • Runs off a car sized battery • Charged by a solar panel The lubricant has a tendency to bond to other objects Lubricant solidifies when exposed to air for an extended period End-Product Description: The level detection system consists of three unique sensors • Ensures precision and robustness A microcontroller calculates the three sensor’s data • Shuts off the pump Audio Frequency Sensor Solenoid that strikes the tank Microphone to pick-up the audio vibrations Resonance frequency changes as liquid level changes • Frequency of air opposed to frequency of water MATLAB Audio Frequency Code clc; close all; clear all; figure; [x, Fs, N]=wavread('MidLevel1.wav'); fx = fft(x,Fs); fx1 = fx(1:length(fx)/2); hold on title 'Mid Level' plot(abs(fx1),'r') axis([0 2500 0 1000]) mm(1) = find(fx1==max((fx1))); ml(1) = max(abs(fx1)); mml = mm(1); [x, Fs, N]=wavread('MidLevel2.wav'); fx = fft(x,Fs); fx2 = fx(1:length(fx)/2); hold on plot(abs(fx2),'g') mm(2) = find(fx2==max((fx2))); ml(2) = max(abs(fx2)); if (ml(2) >= max(ml)) mml = mm(2); end [x, Fs, N]=wavread('MidLevel3.wav'); fx = fft(x,Fs); fx3 = fx(1:length(fx)/2); hold on plot(abs(fx3),'y') mm(3) = find(fx3==max((fx3))); ml(3) = max(abs(fx3)); if (ml(3) >= max(ml)) mml = mm(3); end [x, Fs, N]=wavread('MidLevel4.wav'); fx = fft(x,Fs); fx4 = fx(1:length(fx)/2); hold on plot(abs(fx4)) mm(4) = find(fx4==max((fx4))); ml(4) = max(abs(fx4)); if (ml(4) >= max(ml)) mml = mm(4); end if(abs(fx1(mml))>400 & abs(fx2(mml))>400 & abs(fx3(mml))>400 & abs(fx4(mml))>400); MidLevel_Max_Peak = mml else MidLevel_mean_Max_Peak = mean(mm) end MATLAB Audio Frequency Code cont. figure; clear all; [x, Fs, N]=wavread('MidLevel-15G1.wav'); fx = fft(x,Fs); fx1 = fx(1:length(fx)/2); hold on title '15 Gallons down from Mid Level' plot(abs(fx1),'r') AXIS([0 2500 0 1000]) mm(1) = find(fx1==max((fx1))); ml(1) = max(abs(fx1)); mml = mm(1); [x, Fs, N]=wavread('MidLevel-15G2.wav'); fx = fft(x,Fs); fx2 = fx(1:length(fx)/2); hold on plot(abs(fx2),'g') mm(2) = find(fx2==max((fx2))); ml(2) = max(abs(fx2)); if (ml(2) >= max(ml)) mml = mm(2); end [x, Fs, N]=wavread('MidLevel-15G3.wav'); fx = fft(x,Fs); fx3 = fx(1:length(fx)/2); hold on plot(abs(fx3),'y') mm(3) = find(fx3==max((fx3))); ml(3) = max(abs(fx3)); if (ml(3) >= max(ml)) mml = mm(3); end [x, Fs, N]=wavread('MidLevel-15G4.wav'); fx = fft(x,Fs); fx4 = fx(1:length(fx)/2); hold on plot(abs(fx4)) mm(4) = find(fx4==max((fx4))); ml(4) = max(abs(fx4)); if (ml(4) >= max(ml)) mml = mm(4); end if(abs(fx1(mml))>400 & abs(fx2(mml))>400 & abs(fx3(mml))>400 & abs(fx4(mml))>400); MidLevel_15GD_Max_Peak = mml else MidLevel_15GD_mean_Max_Peak = mean(mm) end MATLAB Audio Frequency Code cont. figure; clear all; [x, Fs, N]=wavread('MidLevel-30G1.wav'); fx = fft(x,Fs); fx1 = fx(1:length(fx)/2); hold on title '30 Gallons down from Mid Level' plot(abs(fx1),'r') AXIS([0 2500 0 1000]) mm(1) = find(fx1==max((fx1))); ml(1) = max(abs(fx1)); mml = mm(1); [x, Fs, N]=wavread('MidLevel-30G2.wav'); fx = fft(x,Fs); fx2 = fx(1:length(fx)/2); hold on plot(abs(fx2),'g') mm(2) = find(fx2==max((fx2))); ml(2) = max(abs(fx2)); if (ml(2) >= max(ml)) mml = mm(2); end [x, Fs, N]=wavread('MidLevel-30G3.wav'); fx = fft(x,Fs); fx3 = fx(1:length(fx)/2); hold on plot(abs(fx3),'y') mm(3) = find(fx3==max((fx3))); ml(3) = max(abs(fx3)); if (ml(3) >= max(ml)) mml = mm(3); end [x, Fs, N]=wavread('MidLevel-30G4.wav'); fx = fft(x,Fs); fx4 = fx(1:length(fx)/2); hold on plot(abs(fx4)) mm(4) = find(fx4==max((fx4))); ml(4) = max(abs(fx4)); if (ml(4) >= max(ml)) mml = mm(4); end if(abs(fx1(mml))>400 & abs(fx2(mml))>400 & abs(fx3(mml))>400 & abs(fx4(mml))>400); MidLevel_30GD_Max_Peak = mml else MidLevel_30GD_Max_Peak = mean(mm) end MATLAB Audio Frequency Code cont. figure; clear all; [x, Fs, N]=wavread('MidLevel-45G1.wav'); fx = fft(x,Fs); fx1 = fx(1:length(fx)/2); hold on title '45 Gallons down from Mid Level' plot(abs(fx1),'r') AXIS([0 2500 0 1000]) mm(1) = find(fx1==max((fx1))); ml(1) = max(abs(fx1)); mml = mm(1); [x, Fs, N]=wavread('MidLevel-45G2.wav'); fx = fft(x,Fs); fx2 = fx(1:length(fx)/2); hold on plot(abs(fx2),'g') mm(2) = find(fx2==max((fx2))); ml(2) = max(abs(fx2)); if (ml(2) >= max(ml)) mml = mm(2); end [x, Fs, N]=wavread('MidLevel-45G3.wav'); fx = fft(x,Fs); fx3 = fx(1:length(fx)/2); hold on plot(abs(fx3),'y') mm(3) = find(fx3==max((fx3))); ml(3) = max(abs(fx3)); if (ml(3) >= max(ml)) mml = mm(3); end [x, Fs, N]=wavread('MidLevel-45G4.wav'); fx = fft(x,Fs); fx4 = fx(1:length(fx)/2); hold on plot(abs(fx4)) mm(4) = find(fx4==max((fx4))); ml(4) = max(abs(fx4)); if (ml(4) >= max(ml)) mml = mm(4); end if(abs(fx1(mml))>400 & abs(fx2(mml))>400 & abs(fx3(mml))>400 & abs(fx4(mml))>400); MidLevel_45GD_Max_Peak = mml else MidLevel_45GD_Max_Peak = mean(mm) end MATLAB Audio Frequency Code cont. figure; clear all; [x, Fs, N]=wavread('CriticalLevel1.wav'); fx = fft(x,Fs); fx1 = fx(1:length(fx)/2); hold on title 'Critical Level' plot(abs(fx1),'r') AXIS([0 2500 0 1000]) mm(1) = find(fx1==max((fx1))); ml(1) = max(abs(fx1)); mml = mm(1); [x, Fs, N]=wavread('CriticalLevel2.wav'); fx = fft(x,Fs); fx2 = fx(1:length(fx)/2); hold on plot(abs(fx2),'g') mm(2) = find(fx2==max((fx2))); ml(2) = max(abs(fx2)); if (ml(2) >= max(ml)) mml = mm(2); end [x, Fs, N]=wavread('CriticalLevel3.wav'); fx = fft(x,Fs); fx3 = fx(1:length(fx)/2); hold on plot(abs(fx3),'y') mm(3) = find(fx3==max((fx3))); ml(3) = max(abs(fx3)); if (ml(3) >= max(ml)) mml = mm(3); end [x, Fs, N]=wavread('CriticalLevel4.wav'); fx = fft(x,Fs); fx4 = fx(1:length(fx)/2); hold on plot(abs(fx4)) mm(4) = find(fx4==max((fx4))); ml(4) = max(abs(fx4)); if (ml(4) >= max(ml)) mml = mm(4); end if(abs(fx1(mml))>400 & abs(fx2(mml))>400 & abs(fx3(mml))>400 & abs(fx4(mml))>400); Cricital_Level_Max_Peak = mml else Cricital_Level_Max_Peak = mean(mm) end Water is Above Critical Level 15 Gallons down from Mid Level 1000 900 800 700 Mid Level 600 1000 500 900 400 800 300 200 700 100 600 0 0 500 1000 1500 2000 2500 30 Gallons down from Mid Level 500 400 1000 300 900 800 200 700 100 600 0 500 400 300 200 100 0 0 500 1000 1500 2000 2500 0 500 1000 1500 2000 2500 Water is Below Critical Level Critical Level 45 Gallons down from Mid Level 1000 1000 900 900 800 800 700 700 600 600 500 500 400 400 300 300 200 200 100 100 0 0 0 500 1000 1500 2000 2500 0 500 1000 1500 2000 2500 Temperature-Based Sensor Series of temperature sensors • Placed at equally spaced levels along the tank wall The difference in temperature determines the level Can You Guess the Lubricant Level? Float Sensor with Magnetic Reed Switch Floating Magnet in an enclosed track • Enclosed track is 2” from the wall Reed Switch is placed at shut off level When the floating magnet is in the range of the reed switch the pump shuts off Reed Switch Operation Budget Final Estimated Cost per Unit Qty Proposed Estimated Cost Item Cost Sonar Gun $250.00 PCB $100.00 Windshield Wiper Motor $50.00 Precision Microphone $50.00 Mallet/Hammer $15.00 Total Part Unit Price Total 1 Digital Signal Controller $4.26 $4.26 1 Printed Circuit Board $50.00 $50.00 1 Suction Cup Microphone $11.99 $11.99 1 Magnetic Reed Switch $14.32 $14.32 1 Neodymium Iron-Boron Magnet Pack $29.99 $29.99 6 Precision Temperature Sensor $2.89 $17.34 1 Plastic Enclosures $6.82 $6.82 1 Miscellaneous Parts / Hardware $20.00 $20.00 Grand Total $154.72 $465.00 Building it better The system could be fully external • Higher cost • Not as accurate Items could have a more permanent attachment • Liquid bonding agent, not duct tape The audio sensor could have the ability to determine the level • Not just the point where the pump needs to be shut off Use of Ultrasound Long range communication Issues Along the Way Ultrasound RFID Audio Field Demo Physical Properties of the Tank • Steel Filling of Tank for Level Testing Summary When the lubricant reaches the critical point the pump shuts off Three Sensors • Audio Frequency • Temperature • Reed Switch No Modification of Existing System Easily Implemented Questions