diff options
Diffstat (limited to 'Detector_Building_v2/Detector_Building_v2.ino')
-rw-r--r-- | Detector_Building_v2/Detector_Building_v2.ino | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/Detector_Building_v2/Detector_Building_v2.ino b/Detector_Building_v2/Detector_Building_v2.ino deleted file mode 100644 index 2954bb6..0000000 --- a/Detector_Building_v2/Detector_Building_v2.ino +++ /dev/null @@ -1,137 +0,0 @@ -/* - ______ _______ _______ _______ _______ _______ _____ ______ - | \ |______ | |______ | | | | |_____/ - |_____/ |______ | |______ |_____ | |_____| | \_ - - ______ _ _ _____ ______ _____ __ _ ______ _ _ _______ - |_____] | | | | \ | | \ | | ____ \ / ______| - |_____] |_____| __|__ |_____/ __|__ | \_| |_____| \/ |______ - - Ladue Horton Watkins High School Science Olympiad -*/ - -/* - TODO - - Numerical precision - -*/ - - -#include <curveFitting.h> -#include <detectorBuilding.h> - - -const bool DEBUG = 0; // Debug mode -const int n = 5; // Number of data points -const int m = 1; // Number of segments -const int deg = 3; // Regression degree - -ld data[2 * n] = { -// V T - 2.25, 20.4, - 3.66, 48.0, - 2.95, 32.7, - 3.91, 49.4, - 4.22, 66.9 -}; // Number of data points is (last line number - 30) - -ld coeff[m][deg + 1], V[n], T[n]; - - -void setup() { - Serial.begin(9600); - pinMode(LED_R, OUTPUT); - pinMode(LED_G, OUTPUT); - pinMode(LED_B, OUTPUT); - - for (int i = 0; i < n; i++) { - V[i] = data[2 * i]; - T[i] = data[2 * i + 1]; - } - - sort(V, n); - sort(T, n); - - ld x[n], y[n]; - for (int i = 0; i < n; i++) x[i] = log(v2r(V[i])) - 7; - for (int i = 0; i < n; i++) y[i] = 1000 / c2k(T[i]); - if (DEBUG) { - for (int i = 0; i < n; i++) { - Serial.print("{"); - Serial.print((double)x[i], 12); - Serial.print(", "); - Serial.print((double)y[i], 12); - Serial.print("},"); - Serial.println(); - } - } - for (int i = 0; i < m; i++) { - int ret = fitCurve(deg, n/m, x+i*n/m, y+i*n/m, deg + 1, coeff[i]); - if (DEBUG && ret == 0) { // Returned value is 0 if no error - char c = 'A'; - Serial.println("Coefficients are:"); - for (int j = 0; j <= deg; j++){ - Serial.print(c++); - Serial.print(": "); - Serial.print((double)coeff[i][j], 12); - Serial.println(); - } - } - } -} - - -void loop() { - int V_raw = analogRead(THERM); // Read in raw analog value - ld V_out = a2d(V_raw); - - int s = 0; // Find correct segment - while (s + 1 < m && V_out < (V[s*n/m-1] + V[s*n/m]) / 2) s++; - - ld logR = log(v2r(V_out)) - 7; - ld sum = 0, prod = 1; - for (int i = 0; i <= deg; i++) { - sum += coeff[s][deg - i] * prod; - prod *= logR; - } - ld K = 1000 / sum; - ld C = k2c(K); - ld F = c2f(C); - - - // LED stuff - if (C <= 30) { // Cold - digitalWrite(LED_R, LOW); - digitalWrite(LED_G, LOW); - digitalWrite(LED_B, HIGH); - } - else if (C <= 50) { // Medium - digitalWrite(LED_R, LOW); - digitalWrite(LED_G, HIGH); - digitalWrite(LED_B, LOW); - } - else if (C <= 75) { // Hot - digitalWrite(LED_R, HIGH); - digitalWrite(LED_G, LOW); - digitalWrite(LED_B, LOW); - } - else { // Something seriously wrong - digitalWrite(LED_R, HIGH); - digitalWrite(LED_G, HIGH); - digitalWrite(LED_B, HIGH); - } - - - // Output voltage, temperature - Serial.print("Raw analog reading: "); - Serial.print((double)V_raw); - Serial.print(" Voltage (V): "); - Serial.print((double)V_out); - Serial.print(" Temperature (°C): "); - Serial.print((double)C); - //Serial.print(" logR: "); - //Serial.print(logR); - Serial.println(); - delay(500); - return; -} |