Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int mech = 2;
- const int SSR = 4;
- unsigned long timer1;
- unsigned long timer2;
- unsigned long timer3;
- unsigned long timer4;
- float Period = 10000; //ms
- float DC = 0.99; //duty cycle
- float Tset = 207; //deg F
- float Vs = 4970; //supply voltage (mV)
- float R1 = 1700; //ohms
- float a = 1.47337E-3;
- float b = 2.37225E-4;
- float c = 1.07080E-7;
- float cal = 1.0; //deg F
- float Tinf = 71.0; //deg F
- int error = 0;
- int Vout = 0;
- int R2 = 0;
- int T = 0;
- int x = 0;
- int y = 0;
- int r = 0;
- int z = 0;
- int s = 0;
- int Q = 0;
- int P = 0;
- int n = 0;
- int w = 0;
- int d = 0;
- void setup(){
- Serial.begin(9600);
- pinMode(SSR,OUTPUT);
- pinMode(mech,OUTPUT);
- digitalWrite(mech,HIGH);
- }
- void loop(){
- x = analogRead(A1); //Thermometer
- y = analogRead(A2); //Also Thermometer
- z = analogRead(A3); //SSR
- r = analogRead(A4); //Boil Switch
- s = analogRead(A5); //Also Boil Switch
- float Vout = ((x+y)/2)*(4970/1023.0);
- float R2 = (Vout*R1)/(Vs-Vout);
- float T = 1/(a + b*log(R2) + c*pow(log(R2),3)); //T in deg K
- T = 1.8*(T - 273.15) + 32 + cal; //T in deg F
- float error = (Tset-T)/(Tset-Tinf) + 0.002*(T-Tinf);
- if (d==0){
- Serial.print(millis()/1000);
- Serial.print(" ");
- Serial.println(Vout);
- timer4 = millis();
- d = 1;
- }
- if (millis()-timer4 > 1000){
- d = 0;
- }
- //delay(5000);
- if (T < Tinf){
- error = 1;
- }
- else if (error > 1){
- error = 1;
- }
- if (r > 50 && s > 50){
- Q = 2;
- }
- if (r < 50 && s < 50){
- if (Q == 2){
- Q = 0;
- }
- }
- //...................(Heater Duty Cycle)............................................
- if (Q==2){ //--------------Boil Switch Only
- digitalWrite(SSR,HIGH);
- }
- if (Q==1 && millis()-timer1 <= error*Period*DC){ //Period*DC = Max duty cycle
- digitalWrite(SSR,HIGH);
- }
- else if (Q==1 && millis()-timer1 >= Period){
- Q = 0;
- }
- else if (Q==1){
- digitalWrite(SSR,LOW);
- }
- if (Q==0 && T >= Tset){
- digitalWrite(SSR,LOW);
- }
- else if (Q==0 && T < Tset){
- timer1 = millis();
- Q = 1;
- }
- //......................(Safety: Stuck SSR)................................
- if (P==0 && z > 50){
- timer2 = millis();
- P = 1;
- }
- if (z < 50){
- timer2 = millis();
- P = 0;
- }
- if (Q==2){
- timer2 = millis();
- }
- if (millis()-timer2 > Period){
- digitalWrite(mech,LOW);
- digitalWrite(SSR,LOW);
- while(true){ //Relays Off and Do Nothing
- }
- }
- //......................(Safety: Failed analogRead of Temp)................
- if (n = 1 && abs(x-y) > 56){// Difference of about 10 deg F
- digitalWrite(mech,LOW);
- digitalWrite(SSR,LOW);
- while(true){ //Relays Off and Do Nothing
- }
- }
- n = 1; //first reading eradicate
- //....................(Safety: Boil Switch Accidentally Left On)................
- if (w==0 && Q==2){
- timer3 = millis();
- w = 1;
- }
- if (Q != 2){
- timer3 = millis();
- w = 0;
- }
- if (millis()-timer3 > 12600000){ //Boil Switch Left On for about 3.5 hours
- digitalWrite(mech,LOW);
- digitalWrite(SSR,LOW);
- while(true){ //Relays Off and Do Nothing
- }
- }
- //.......................Safety: Thermometer Disconnect.............................
- if (Vout > 4960){
- digitalWrite(mech,LOW);
- digitalWrite(SSR,LOW);
- while(true){ //Relays Off and Do Nothing
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement