Dryer timer with analogue input from a dew point sensor.

Dependencies:   mbed TextLCD

Committer:
koosvanderwat
Date:
Sat Jan 23 08:11:57 2021 +0000
Revision:
4:e8ba2070b69e
Parent:
3:559e8c72212a
Dewpoint sensor range 0 to -100

Who changed what in which revision?

UserRevisionLine numberNew contents of line
koosvanderwat 4:e8ba2070b69e 1 //Import Libraries
simon 0:334327d1a416 2 #include "mbed.h"
simon 0:334327d1a416 3 #include "TextLCD.h"
koosvanderwat 3:559e8c72212a 4 #include "Watchdog.h"
koosvanderwat 3:559e8c72212a 5 #include "millis.h"
simon 0:334327d1a416 6
koosvanderwat 3:559e8c72212a 7 //Dryer Cycle
koosvanderwat 3:559e8c72212a 8 int PT = 120; // Purge time in seconds
koosvanderwat 3:559e8c72212a 9 int RT = 60; // Repressurisation time in seconds
koosvanderwat 4:e8ba2070b69e 10 int IdleTimeHrs = 12; // cycle activated every x hours to lubricate valves.
koosvanderwat 4:e8ba2070b69e 11 int LCycles = 2; //Number of lubication cycles
koosvanderwat 3:559e8c72212a 12
koosvanderwat 3:559e8c72212a 13 //Dew Point Setpoint
koosvanderwat 4:e8ba2070b69e 14 float SetPoint = -40; // Dew Point Set Point
koosvanderwat 3:559e8c72212a 15
koosvanderwat 3:559e8c72212a 16 //Watchdog
koosvanderwat 3:559e8c72212a 17 Watchdog wd;
koosvanderwat 3:559e8c72212a 18
koosvanderwat 3:559e8c72212a 19 //Screen Setup
koosvanderwat 3:559e8c72212a 20 TextLCD lcd(D6, D9, D2, D3, D4, D5); // rs, e, d4-d7
koosvanderwat 3:559e8c72212a 21
koosvanderwat 4:e8ba2070b69e 22 //Define clock
koosvanderwat 3:559e8c72212a 23 Ticker timeKeeping;
koosvanderwat 3:559e8c72212a 24
koosvanderwat 3:559e8c72212a 25 //Pin Allocation
koosvanderwat 3:559e8c72212a 26 DigitalOut my_RHPV(A0);
koosvanderwat 3:559e8c72212a 27 DigitalOut my_RHMV(A1);
koosvanderwat 3:559e8c72212a 28 DigitalOut my_RV(A2);
koosvanderwat 3:559e8c72212a 29 DigitalOut my_LHMV(A6);
koosvanderwat 3:559e8c72212a 30 DigitalOut my_LHPV(A7);
koosvanderwat 3:559e8c72212a 31 DigitalOut my_led(D13);
koosvanderwat 3:559e8c72212a 32 DigitalIn my_Dip2(D11); //Dip 2
koosvanderwat 3:559e8c72212a 33 DigitalIn my_Dip1(D12); //Dip 1
koosvanderwat 3:559e8c72212a 34 AnalogIn DP_In(A3);
koosvanderwat 3:559e8c72212a 35
koosvanderwat 4:e8ba2070b69e 36 //Counters
koosvanderwat 3:559e8c72212a 37 unsigned long previousMillis = 0; // will store last time LED was updated
koosvanderwat 3:559e8c72212a 38 long OnTime = 1000; // milliseconds of on-time
koosvanderwat 4:e8ba2070b69e 39 int secondscounter = 0; // counts the seconds of the cycle
koosvanderwat 4:e8ba2070b69e 40 int Counter = 0; // used to reset the screen every 10 seconds
koosvanderwat 4:e8ba2070b69e 41 int Cycledryercounter = 0; // used to cycle the dryer for 5 cycles if the dryer has been idle for 24hrs.
koosvanderwat 4:e8ba2070b69e 42 int Idlecounter = 0; // used to accumulate the cummulative idle time.
koosvanderwat 4:e8ba2070b69e 43 int Valuecounter = 0; // used to calculate the weighted average of the dewpoint.
koosvanderwat 4:e8ba2070b69e 44 //int IdleTimeSeconds = 180; //idle time in seconds
koosvanderwat 4:e8ba2070b69e 45 int IdleTimeSeconds = IdleTimeHrs * 60 * 60; //idle time in seconds
koosvanderwat 4:e8ba2070b69e 46 int LCycleseconds = LCycles * 360 - 20; // Lubrication cycles in seconds
koosvanderwat 3:559e8c72212a 47
koosvanderwat 4:e8ba2070b69e 48 //Variables
koosvanderwat 4:e8ba2070b69e 49 int LHCT = PT + RT; // LH cycle time
koosvanderwat 4:e8ba2070b69e 50 int RHPT = PT + RT + PT; // RH purge time
koosvanderwat 4:e8ba2070b69e 51 int CT = PT + RT + PT + RT; // Cycle Time
koosvanderwat 4:e8ba2070b69e 52 float RHValue = 0; //RH from dew point sensor
koosvanderwat 4:e8ba2070b69e 53 float TempValue = 0; //Temp from dew point sensor
koosvanderwat 4:e8ba2070b69e 54 float DewPoint = 0; //Calculated dew point
koosvanderwat 4:e8ba2070b69e 55 float Value1 = 0; //first sensor reading
koosvanderwat 4:e8ba2070b69e 56 float Value2 = 0; //second sensor reading
koosvanderwat 4:e8ba2070b69e 57 float Value3 = 0; //third sensor reading
koosvanderwat 3:559e8c72212a 58
koosvanderwat 3:559e8c72212a 59 int main()
koosvanderwat 3:559e8c72212a 60 {
koosvanderwat 3:559e8c72212a 61
koosvanderwat 4:e8ba2070b69e 62 //This piece of code runs once at start-up:
koosvanderwat 4:e8ba2070b69e 63 //________________________________________
koosvanderwat 4:e8ba2070b69e 64
koosvanderwat 3:559e8c72212a 65 my_RHMV = 1;//0
koosvanderwat 3:559e8c72212a 66 my_LHMV = 0;//1
koosvanderwat 3:559e8c72212a 67 my_RHPV = 0;//1
koosvanderwat 3:559e8c72212a 68 my_LHPV = 0;//1
koosvanderwat 3:559e8c72212a 69 my_RHPV = 1;//0
koosvanderwat 3:559e8c72212a 70 my_LHPV = 0;//1
koosvanderwat 3:559e8c72212a 71 my_RV = 0;//1
koosvanderwat 3:559e8c72212a 72
koosvanderwat 3:559e8c72212a 73 wd.Configure(4.0);
koosvanderwat 3:559e8c72212a 74
koosvanderwat 3:559e8c72212a 75 wait_ms(100);
koosvanderwat 3:559e8c72212a 76 lcd.printf("TegnonEfficiency\n");
koosvanderwat 3:559e8c72212a 77 lcd.locate(0,1);
koosvanderwat 3:559e8c72212a 78 lcd.printf(" DP Control \n");
koosvanderwat 3:559e8c72212a 79
koosvanderwat 3:559e8c72212a 80 wait_ms(1000);
koosvanderwat 3:559e8c72212a 81 lcd.cls();
koosvanderwat 3:559e8c72212a 82 lcd.printf("Dew Point:");
koosvanderwat 3:559e8c72212a 83 lcd.locate(0,1);
koosvanderwat 3:559e8c72212a 84 lcd.printf("Set Point:");
koosvanderwat 3:559e8c72212a 85
koosvanderwat 3:559e8c72212a 86 millisStart();
koosvanderwat 3:559e8c72212a 87
koosvanderwat 3:559e8c72212a 88 while(1) {
koosvanderwat 3:559e8c72212a 89
koosvanderwat 4:e8ba2070b69e 90 //This piece of code runs every millisecond for ever:
koosvanderwat 4:e8ba2070b69e 91 //___________________________________________________
koosvanderwat 3:559e8c72212a 92
koosvanderwat 3:559e8c72212a 93
koosvanderwat 4:e8ba2070b69e 94 unsigned long currentMillis = millis(); // Get current time
koosvanderwat 3:559e8c72212a 95
koosvanderwat 4:e8ba2070b69e 96 if(Cycledryercounter >= 1) {
koosvanderwat 4:e8ba2070b69e 97 SetPoint = -110;
koosvanderwat 3:559e8c72212a 98
koosvanderwat 4:e8ba2070b69e 99 } else {
koosvanderwat 4:e8ba2070b69e 100 if(my_Dip2 ==0) {
koosvanderwat 4:e8ba2070b69e 101 if(my_Dip1 ==0) {
koosvanderwat 4:e8ba2070b69e 102 SetPoint = -20;
koosvanderwat 4:e8ba2070b69e 103 }
koosvanderwat 4:e8ba2070b69e 104 if(my_Dip1 ==1) {
koosvanderwat 4:e8ba2070b69e 105 SetPoint = -40;
koosvanderwat 4:e8ba2070b69e 106 }
koosvanderwat 3:559e8c72212a 107 }
koosvanderwat 4:e8ba2070b69e 108 if(my_Dip2 ==1) {
koosvanderwat 4:e8ba2070b69e 109 if(my_Dip1 ==0) {
koosvanderwat 4:e8ba2070b69e 110 SetPoint = -60;
koosvanderwat 4:e8ba2070b69e 111 }
koosvanderwat 4:e8ba2070b69e 112 if(my_Dip1 ==1) {
koosvanderwat 4:e8ba2070b69e 113 SetPoint = -80;
koosvanderwat 4:e8ba2070b69e 114 }
koosvanderwat 3:559e8c72212a 115 }
koosvanderwat 3:559e8c72212a 116 }
koosvanderwat 3:559e8c72212a 117
koosvanderwat 3:559e8c72212a 118 if (secondscounter < PT) {
koosvanderwat 3:559e8c72212a 119 my_RHMV = 1;//0
koosvanderwat 3:559e8c72212a 120 my_LHMV = 0;//1
koosvanderwat 3:559e8c72212a 121 my_RHPV = 1;//0
koosvanderwat 3:559e8c72212a 122 my_LHPV = 0;//1
koosvanderwat 3:559e8c72212a 123 my_RV = 0;//1
koosvanderwat 3:559e8c72212a 124 }
koosvanderwat 3:559e8c72212a 125 if (secondscounter >= PT && secondscounter < LHCT) {
koosvanderwat 3:559e8c72212a 126 my_RHMV = 1;//0
koosvanderwat 3:559e8c72212a 127 my_LHMV = 0;//1
koosvanderwat 3:559e8c72212a 128 my_RHPV = 0;//1
koosvanderwat 3:559e8c72212a 129 my_LHPV = 0;//1
koosvanderwat 3:559e8c72212a 130 my_RV = 1;//0
koosvanderwat 3:559e8c72212a 131
koosvanderwat 3:559e8c72212a 132 }
koosvanderwat 3:559e8c72212a 133
koosvanderwat 4:e8ba2070b69e 134 if ((secondscounter > LHCT) && (secondscounter < RHPT)) {
koosvanderwat 3:559e8c72212a 135 my_RHMV = 0;//1
koosvanderwat 3:559e8c72212a 136 my_LHMV = 1;//0
koosvanderwat 3:559e8c72212a 137 my_RHPV = 0;//1
koosvanderwat 3:559e8c72212a 138 my_LHPV = 1;//0
koosvanderwat 3:559e8c72212a 139 my_RV = 0;//1
koosvanderwat 3:559e8c72212a 140 }
koosvanderwat 4:e8ba2070b69e 141 if (secondscounter >= RHPT && (secondscounter < CT)) {
koosvanderwat 3:559e8c72212a 142 my_RHMV = 0;//1
koosvanderwat 3:559e8c72212a 143 my_LHMV = 1;//0
koosvanderwat 3:559e8c72212a 144 my_RHPV = 0;//1
koosvanderwat 3:559e8c72212a 145 my_LHPV = 0;//1
koosvanderwat 3:559e8c72212a 146 my_RV = 1;//0
koosvanderwat 3:559e8c72212a 147 }
koosvanderwat 3:559e8c72212a 148
koosvanderwat 4:e8ba2070b69e 149 //This piece of code runs every second for ever:
koosvanderwat 4:e8ba2070b69e 150 //______________________________________________
koosvanderwat 4:e8ba2070b69e 151
koosvanderwat 4:e8ba2070b69e 152 if ((currentMillis - previousMillis) >= OnTime) {
koosvanderwat 4:e8ba2070b69e 153 previousMillis = currentMillis;
koosvanderwat 4:e8ba2070b69e 154 wd.Service();
koosvanderwat 4:e8ba2070b69e 155 my_led = !my_led;
koosvanderwat 4:e8ba2070b69e 156
koosvanderwat 4:e8ba2070b69e 157 secondscounter = secondscounter + 1;
koosvanderwat 4:e8ba2070b69e 158 Counter = Counter + 1;
koosvanderwat 4:e8ba2070b69e 159
koosvanderwat 4:e8ba2070b69e 160 if(Cycledryercounter >= 1) {
koosvanderwat 4:e8ba2070b69e 161 Cycledryercounter = Cycledryercounter + 1;
koosvanderwat 4:e8ba2070b69e 162 }
koosvanderwat 4:e8ba2070b69e 163
koosvanderwat 4:e8ba2070b69e 164 if(Counter == 10) {
koosvanderwat 4:e8ba2070b69e 165 lcd.cls();
koosvanderwat 4:e8ba2070b69e 166 lcd.printf("Dew Point:");
koosvanderwat 4:e8ba2070b69e 167 lcd.locate(0,1);
koosvanderwat 4:e8ba2070b69e 168 lcd.printf("Set Point:");
koosvanderwat 4:e8ba2070b69e 169 Counter = 0;
koosvanderwat 4:e8ba2070b69e 170 }
koosvanderwat 4:e8ba2070b69e 171
koosvanderwat 4:e8ba2070b69e 172 // if(Valuecounter ==0) {
koosvanderwat 4:e8ba2070b69e 173 // Value1 = DP_In.read()*100 - 80;
koosvanderwat 4:e8ba2070b69e 174 //}
koosvanderwat 4:e8ba2070b69e 175
koosvanderwat 4:e8ba2070b69e 176 //if(Valuecounter ==1) {
koosvanderwat 4:e8ba2070b69e 177 // Value2 = DP_In.read()*100 - 80;
koosvanderwat 4:e8ba2070b69e 178 //}
koosvanderwat 4:e8ba2070b69e 179
koosvanderwat 4:e8ba2070b69e 180 //if(Valuecounter ==2) {
koosvanderwat 4:e8ba2070b69e 181 // Value3 = DP_In.read()*100 - 80;
koosvanderwat 4:e8ba2070b69e 182 //}
koosvanderwat 4:e8ba2070b69e 183
koosvanderwat 4:e8ba2070b69e 184 //Valuecounter = Valuecounter +1;
koosvanderwat 4:e8ba2070b69e 185
koosvanderwat 4:e8ba2070b69e 186 DewPoint = DP_In.read()*100 - 100;
koosvanderwat 4:e8ba2070b69e 187
koosvanderwat 4:e8ba2070b69e 188 lcd.locate(10,0);
koosvanderwat 4:e8ba2070b69e 189 lcd.printf(" ");
koosvanderwat 4:e8ba2070b69e 190 lcd.locate(10,0);
koosvanderwat 4:e8ba2070b69e 191 lcd.printf("%3.1f%", DewPoint);
koosvanderwat 4:e8ba2070b69e 192 lcd.locate(10,1);
koosvanderwat 4:e8ba2070b69e 193 lcd.printf(" ");
koosvanderwat 4:e8ba2070b69e 194 lcd.locate(10,1);
koosvanderwat 4:e8ba2070b69e 195 lcd.printf("%3.1f%", SetPoint);
koosvanderwat 4:e8ba2070b69e 196
koosvanderwat 4:e8ba2070b69e 197
koosvanderwat 4:e8ba2070b69e 198 //Delay cycle if the Dewpoint is lower than the setpoint:
koosvanderwat 4:e8ba2070b69e 199 //_______________________________________________________
koosvanderwat 4:e8ba2070b69e 200
koosvanderwat 4:e8ba2070b69e 201 if ((DewPoint < SetPoint) && (secondscounter == LHCT)) {
koosvanderwat 4:e8ba2070b69e 202 secondscounter = secondscounter - 1;
koosvanderwat 4:e8ba2070b69e 203 Idlecounter = Idlecounter + 1;
koosvanderwat 4:e8ba2070b69e 204 }
koosvanderwat 4:e8ba2070b69e 205
koosvanderwat 4:e8ba2070b69e 206 if ((DewPoint < SetPoint) && (secondscounter == CT)) {
koosvanderwat 4:e8ba2070b69e 207 secondscounter = secondscounter - 1;
koosvanderwat 4:e8ba2070b69e 208 Idlecounter = Idlecounter + 1;
koosvanderwat 4:e8ba2070b69e 209 }
koosvanderwat 4:e8ba2070b69e 210
koosvanderwat 4:e8ba2070b69e 211 if (DewPoint >= SetPoint) {
koosvanderwat 4:e8ba2070b69e 212 Idlecounter = 0;
koosvanderwat 4:e8ba2070b69e 213 };
koosvanderwat 4:e8ba2070b69e 214
koosvanderwat 4:e8ba2070b69e 215 //Set Counters:
koosvanderwat 4:e8ba2070b69e 216 //____________
koosvanderwat 4:e8ba2070b69e 217
koosvanderwat 4:e8ba2070b69e 218 if(Idlecounter == IdleTimeSeconds) {
koosvanderwat 4:e8ba2070b69e 219 Cycledryercounter = 1;
koosvanderwat 4:e8ba2070b69e 220 }
koosvanderwat 4:e8ba2070b69e 221
koosvanderwat 4:e8ba2070b69e 222 if(Cycledryercounter == LCycleseconds) {
koosvanderwat 4:e8ba2070b69e 223 Cycledryercounter = 0;
koosvanderwat 4:e8ba2070b69e 224 }
koosvanderwat 4:e8ba2070b69e 225
koosvanderwat 4:e8ba2070b69e 226 if(Valuecounter == 2) {
koosvanderwat 4:e8ba2070b69e 227 Valuecounter = 0;
koosvanderwat 4:e8ba2070b69e 228 }
koosvanderwat 4:e8ba2070b69e 229
koosvanderwat 4:e8ba2070b69e 230 if (secondscounter == (CT + 1)) {
koosvanderwat 4:e8ba2070b69e 231 secondscounter = 0;
koosvanderwat 4:e8ba2070b69e 232 }
koosvanderwat 4:e8ba2070b69e 233
koosvanderwat 4:e8ba2070b69e 234 } // Loop for every second
koosvanderwat 4:e8ba2070b69e 235 } // While(1) - Every millisecond
koosvanderwat 4:e8ba2070b69e 236 } //Void Main - Once