Stap 4: De magie van Feedback
De bijgevoegde film leert u de feedback in actie. Kijk als het LED-lampje op de SSR knippert in- en uitschakelen. U kunt ook de snelheid van de ventilator reageren op de elektrische belasting volgens de kachel draait op verwarmen.
Met de AD-595, dit proces is gewoon een kwestie van doen wat wiskunde op een
analoge ingang
//
Met dank aan Karl Gruenewald voor de conversieformule
Alle code vrijgegeven onder
Creative Commons Attribution-Noncommercial-Share Alike 3.0
Deze huidige versie is gebaseerd op temperatuur met sensing
een AD595 en thermokoppel via een A/D-pin. Alle andere
sensor kan worden gebruikt door het vervangen van deze één functie.
voel je vrij om het gebruik van graden C ook, zal het Geef een ander
PID tuning dan die van F.
//
#define TEMP_SENSOR_PIN 0
#define SSD_PIN 2
Als je van de Arduino vRef voor de levering van 3.3 volt binden, wijzigt u dit aan 3.3
#define ANALOG_VOTLAGE_REFERENCE 5
float currentTemperature;
zweven highTargetTemperature = 100;
zweven lowTargetTemperature = 95;
VOID Setup {}
Serial.begin(115200);
pinMode (SSD_PIN, uitvoer);
}
void loop {}
afdrukken van de lopende temperatuur met 1 plaats achter de komma
currentTemperature = getTemperature();
printFloat (currentTemperature, 1);
afdrukken van een regelterugloop
Serial.println();
Als (currentTemperature < lowTargetTemperature) {}
digitalWrite (SSD_PIN, hoge);
}
Als (currentTemperature > highTargetTemperature) {}
digitalWrite (SSD_PIN, laag);
}
rest 100 milliseconden
delay(100);
}
float CtoF(float c) {}
optioneel converteren van Celsius naar Fahrenheit, bent u in dat sorta ding
c terugkeer * 9.0 / 5.0 + 32,0;
}
zweven analogInToDegreesC(int inputValue) {}
deling door 1023, de grootst mogelijke input waarde, die weegschaal van de input van 0 - 1
vervolgens vermenigvuldigen door de referentie spanning, schalen die 0-1 naar 0 - vREF (standaard is 5V)
tot slot, vermenigvuldigt met 100 aan schaal het aan 10s millivolts of graden
terug van inputValue / 1023.0 * ANALOG_VOTLAGE_REFERENCE * 100.0;
}
float getTemperature() {}
Lees de analoge ingang, converteren naar graden C en converteren naar F
Return CtoF(analogInToDegreesC(analogRead(TEMP_SENSOR_PIN)));
}
EINDE temperatuursensor
printFloat print de vlotter 'waarde' afgerond op 'plaatsen' plaatsen achter de komma
VOID printFloat (drijvende-kommawaarde, int plaatsen) {}
Dit wordt gebruikt om de stemmen van de cijfers
int cijfers;
zweven tientallen = 0,1;
int tenscount = 0;
int i;
zweven tempfloat = waarde;
Zorg ervoor dat ronden we goed. Dit pow van < math.h > konden gebruiken, maar lijkt niet waard de invoer
Als deze afronding stap niet hier, de waarde 54.321 wordt afgedrukt als 54.3209
afronding term d: 0.5/pow(10,places) berekenen
zweven d = 0,5;
Als (waarde < 0)
d * = -1,0;
verdelen door tien voor elke decimaal
voor (ik = 0; ik < plaatsen; i ++)
d / = 10,0;
deze kleine toevoeging, in combinatie met de PST-bestanden zullen correct onze waarden afrondt
tempfloat += d;
eerst krijgen waarde tientallen te zijn van de grote macht van tien min waarde
tenscount is niet nodig, maar het zou nuttig zijn als je wilde weten na dit hoe veel tekens het nummer vindt
Als (waarde < 0)
tempfloat * = -1,0;
terwijl ((tens * 10.0) < = tempfloat) {}
tientallen * = 10,0;
tenscount += 1;
}
de negatieve uitschrijven indien nodig
Als (waarde < 0)
Serial.Print('-');
Als (tenscount == 0)
Serial.Print (0, DEC);
voor (ik = 0; ik < tenscount; i ++) {}
cijfer = (int) (tempfloat / trans-Europese netwerken);
Serial.Print (cijfers, DEC);
tempfloat = tempfloat - ((float) cijfer * trans-Europese netwerken);
tientallen / = 10,0;
}
Als geen plaatsen achter komma, nu stoppen en terug te keren
Als (plaatsen < = 0)
terugkeer;
schrijven van het punt en voort
Serial.Print('.');
nu elke decimaal uitschrijven door een verschuiving van cijfers een voor een in de plaats en de afgekapte waarde schrijven
voor (ik = 0; ik < plaatsen; i ++) {}
tempfloat * = 10,0;
cijfer = tempfloat (int);
Serial.Print(Digit,DEC);
Zodra geschreven, uit dat cijfer aftrekken
tempfloat = tempfloat - (float) cijfers;
}
}