float pumpRate = 0.317;
float stepDegrees = 1.8;
#define ena1 22
#define pul1 24
#define dir1 26
#define manual_1 34
#define led1 38
int microstep_1 = 1;
float doseAdditive_1; // in mL
float doseRate_1 = 0.0625; // in mL/L
float additiveConcentrate_1 = 100; // mL
float additiveWater_1 = 1900; // mL
float dilutionRate_1; // in ml/mL
float revsPerDose_1;
long pulPerDose_1;
int frequency_dose_1 = 1000;
int uSec_dose_1;
#define ena2 22
#define pul2 25
#define dir2 27
#define manual_2 35
#define led2 39
int microstep_2 = 1;
float doseAdditive_2; // in mL
float doseRate_2 = 0.0625; // in mL/L
float additiveConcentrate_2 = 100; // mL
float additiveWater_2 = 1900; // mL
float dilutionRate_2; // in ml/mL
float revsPerDose_2;
long pulPerDose_2;
int frequency_dose_2 = 1000;
int uSec_dose_2;
#define ena3 28
#define pul3 30
#define dir3 32
#define manual_3 36
#define led3 40
int microstep_3 = 1;
float doseAdditive_3; // in mL
float doseRate_3 = 0.0625; // in mL/L
float additiveConcentrate_3 = 100; // mL
float additiveWater_3 = 1900; // mL
float dilutionRate_3; // in ml/mL
float revsPerDose_3;
long pulPerDose_3;
int frequency_dose_3 = 1000;
int uSec_dose_3;
#define ena4 29
#define pul4 31
#define dir4 33
#define manual_4 37
#define led4 41
#define ledRed 42
#define ledAmber 43
#define ledGreen 44
#define ledWhite 45
// MPX5010DP variables
#define mpx A0
unsigned long mpxBuff;
long int mpxAverage;
const int sample = 200;
const float ADC_mV = 4.8828125;
const float sensorOffset = 200;
const float sensitivity = 4.413;
const float mmH2O_inH2O = 25.34;
float waterLevel;
const float levelMin = 5.0;
const float levelMax = 28.0;
const float height = 30.0;
const float length = 20.0;
const float width = 8.855;
float refill_inches;
float refill_gallons;
float refill_mL;
int seq;
int last;
void setup() {
Serial.begin(9600);
refill_inches = ((height - levelMin) * length * width);
refill_gallons = (refill_inches / 231);
refill_mL = (refill_gallons * 3785.412);
Serial.println(refill_inches, 8);
Serial.println(refill_gallons, 8);
Serial.println(refill_mL, 8);
uSec_dose_1 = 500000 / frequency_dose_1;
dilutionRate_1 = additiveConcentrate_1 / (additiveConcentrate_1 + additiveWater_1);
doseAdditive_1 = ((doseRate_1 / 1000) * refill_mL) / dilutionRate_1;
revsPerDose_1 = doseAdditive_1 / pumpRate;
pulPerDose_1 = ((360 / stepDegrees) * microstep_1) * revsPerDose_1;
pinMode(ena1, OUTPUT);
pinMode(pul1, OUTPUT);
pinMode(dir1, OUTPUT);
pinMode(ena2, OUTPUT);
pinMode(pul2, OUTPUT);
pinMode(dir2, OUTPUT);
pinMode(ena3, OUTPUT);
pinMode(pul3, OUTPUT);
pinMode(dir3, OUTPUT);
pinMode(ena4, OUTPUT);
pinMode(pul4, OUTPUT);
pinMode(dir4, OUTPUT);
pinMode(manual_1, INPUT_PULLUP);
pinMode(manual_2, INPUT_PULLUP);
pinMode(manual_3, INPUT_PULLUP);
pinMode(manual_4, INPUT_PULLUP);
digitalWrite(ena1, LOW);
digitalWrite(pul1, LOW);
digitalWrite(dir1, LOW);
digitalWrite(ena2, LOW);
digitalWrite(pul2, LOW);
digitalWrite(dir2, LOW);
digitalWrite(ena3, LOW);
digitalWrite(pul3, LOW);
digitalWrite(dir3, LOW);
digitalWrite(ena4, LOW);
digitalWrite(pul4, LOW);
digitalWrite(dir4, LOW);
seq = 0;
}
void loop() {
while(seq == 0) {
delay(400);
mpxBuff = 0;
seq = 20;
if(waterLevel < levelMin) {
digitalWrite(ledRed, LOW);
digitalWrite(ledAmber, HIGH);
digitalWrite(ledGreen, LOW);
digitalWrite(ledWhite, LOW);
}
else if(waterLevel > levelMax) {
digitalWrite(ledRed, HIGH);
digitalWrite(ledAmber, LOW);
digitalWrite(ledGreen, LOW);
digitalWrite(ledWhite, LOW);
}
else {
digitalWrite(ledRed, LOW);
digitalWrite(ledAmber, LOW);
digitalWrite(ledGreen, HIGH);
digitalWrite(ledWhite, LOW);
}
if(digitalRead(manual_1) == LOW || digitalRead(manual_2) == LOW || digitalRead(manual_3) == LOW || digitalRead(manual_4) == LOW) {
seq = 7;
}
}
while(seq == 20) {
for(int i = 0; i < sample; i++) {
int analog;
analog = analogRead(mpx);
mpxBuff = mpxBuff + analog;
}
mpxAverage = (mpxBuff / sample);
waterLevel = ((((mpxAverage * ADC_mV) - sensorOffset) / sensitivity) /mmH2O_inH2O);
delay(10);
Serial.println(mpxBuff);
Serial.println(mpxAverage);
Serial.println(waterLevel, 3);
if(waterLevel < levelMin) {
Serial.println("Water level low");
}
else if(waterLevel > levelMax) {
Serial.println("Water level high");
}
else {
}
Serial.println("");
seq = 0;
}
// Dosing Pump Jog
while(seq == 7) {
last = 0;
if(digitalRead(manual_1) == LOW ||
digitalRead(manual_2) == LOW ||
digitalRead(manual_3) == LOW ||
digitalRead(manual_4) == LOW) {
seq = 7;
}
else {
seq = last;
}
while(digitalRead(manual_1) == LOW) {
digitalWrite(ena1, LOW);
digitalWrite(ledRed, LOW);
digitalWrite(ledAmber, LOW);
digitalWrite(ledGreen, LOW);
digitalWrite(ledWhite, HIGH);
delay(10);
for(long x = 0; x < 25; x++) {
digitalWrite(pul1,HIGH);
delayMicroseconds(uSec_dose_1);
digitalWrite(pul1,LOW);
delayMicroseconds(uSec_dose_1);
}
if(digitalRead(manual_1) == HIGH) {
digitalWrite(ena1, HIGH);
}
}
}
}