Phone Thermometer
A simple and cheap thermometer for your phone or desktop
Components and supplies
1
Arduino Nano R3
1
Stranded wire
1
OTG cable for your phone
1
4.7 kOhm resistor
1
EPC B57164-K471 470Ω
Tools and machines
1
3D Printer (generic)
1
Soldering iron (generic)
Apps and platforms
1
thermo
Project description
Code
Arduino
c_cpp
The arduino code for the Nano
1#define R25 470.0f 2#define RKNOWN 4700.0f 3#define RWIRE 0.2f 4#define 5 ARRAY_SIZE 34 6 7// from datasheet 8float Array_RT[] = {9573.90f, 7245.52f, 9 5534.25f, 4262.81f, 3313.36f, 2593.79f, 2047.23f, 1626.62f, 1302.14f, 1048.71f, 10 850.61f, 693.81f, 569.45f, 470.00f, 390.02f, 325.33f, 272.80f, 229.83f, 194.56f, 11 165.43f, 141.28f, 121.17f, 104.33f, 90.19f, 78.25f, 68.14f, 59.54f, 52.21f, 45.93f, 12 40.53f, 35.87f, 31.85f, 28.35f, 25.31f}; 13float Array_T[] = {-40.0f, -35.0f, -30.0f, 14 -25.0f, -20.0f, -15.0f, -10.0f, -5.0f, 0.0f, 5.0f, 10.0f, 15.0f, 20.0f, 25.0f, 30.0f, 15 35.0f, 40.0f, 45.0f, 50.0f, 55.0f, 60.0f, 65.0f, 70.0f, 75.0f, 80.0f, 85.0f, 90.0f, 16 95.0f, 100.0f, 105.0f, 110.0f, 115.0f, 120.0f, 125.0f}; 17 18int a7; 19 20float 21 RT; 22float T = -273.15; 23 24int idx1, idx2; 25 26void setup() { 27 Serial.begin(19200); 28 29 30 pinMode(LED_BUILTIN, OUTPUT); 31 32 // blink fast to indicate startup 33 / reset 34 for (int i=0; i<5; i++){ 35 digitalWrite(LED_BUILTIN, HIGH); 36 37 delay(50); 38 digitalWrite(LED_BUILTIN, LOW); 39 delay(50); 40 } 41} 42 43void 44 loop() { 45 digitalWrite(LED_BUILTIN, HIGH); 46 delay(1000); 47 48 a7 = analogRead(7); 49 // 10 bit => a7 [0..1023] 50 51 // example 2 bit : a7 [0..3] => 0 == 0 52 * 5/3 V, 1 == 1 * 5/3V , 2 == 2 * 5/3 V, 3 == 3 * 5/3 V 53 // example 10 bit 54 : a7 [0..1023] => 0 == 0 * 5/1023 V, 1 == 1 * 5/1023 V, ..., 1023 == 1023 * 5/1023 55 V 56 57 // https://en.wikipedia.org/wiki/Voltage_divider (Resistive divider) 58 59 // a7 = 1023 * RKNOWN / (RT + RKNOWN) 60 // => (RT + RKNOWN) = 1023 * RKNOWN 61 / a7 62 // => RT = 1023 * RKNOWN / a7 - RKNOWN 63 // => RT = RKNOWN * (1023 64 / a7 - 1) 65 66 RT = RKNOWN * (1023.0f / (float)a7 - 1.0f) + RWIRE; 67 68 69 for (int i=1; i < ARRAY_SIZE; i++) { 70 if (Array_RT[i] < RT){ 71 idx1 72 = i - 1; 73 idx2 = i; 74 break; 75 } 76 } 77 78 79 T = (Array_T[idx2] - Array_T[idx1]) / (Array_RT[idx2] - Array_RT[idx1]) * (RT 80 - Array_RT[idx1]) + Array_T[idx1]; 81 82 /*Serial.print("a7: "); Serial.print(a7); 83 Serial.print(" "); 84 Serial.print("RT: "); Serial.print(RT); Serial.print(" 85 "); 86 Serial.print("idx1: "); Serial.print(idx1); Serial.print(" "); 87 88 Serial.print("idx2: "); Serial.print(idx2); Serial.print(" "); 89 Serial.print("Array_RT[idx1]: 90 "); Serial.print(Array_RT[idx1]); Serial.print(" "); 91 Serial.print("Array_RT[idx2]: 92 "); Serial.print(Array_RT[idx2]); Serial.print(" "); 93 Serial.print("Array_T[idx1]: 94 "); Serial.print(Array_T[idx1]); Serial.print(" "); 95 Serial.print("Array_T[idx2]: 96 "); Serial.print(Array_T[idx2]); Serial.print(" "); 97 Serial.print("T: "); 98 Serial.print(T); Serial.print(" "); 99 Serial.print("round(T): "); Serial.print(round(T)); 100 Serial.print(" ");*/ 101 Serial.println(round(T)); 102 103 104 digitalWrite(LED_BUILTIN, 105 LOW); 106 delay(1000); 107 108 109} 110
Arduino
c_cpp
The arduino code for the Nano
1#define R25 470.0f 2#define RKNOWN 4700.0f 3#define RWIRE 0.2f 4#define ARRAY_SIZE 34 5 6// from datasheet 7float Array_RT[] = {9573.90f, 7245.52f, 5534.25f, 4262.81f, 3313.36f, 2593.79f, 2047.23f, 1626.62f, 1302.14f, 1048.71f, 850.61f, 693.81f, 569.45f, 470.00f, 390.02f, 325.33f, 272.80f, 229.83f, 194.56f, 165.43f, 141.28f, 121.17f, 104.33f, 90.19f, 78.25f, 68.14f, 59.54f, 52.21f, 45.93f, 40.53f, 35.87f, 31.85f, 28.35f, 25.31f}; 8float Array_T[] = {-40.0f, -35.0f, -30.0f, -25.0f, -20.0f, -15.0f, -10.0f, -5.0f, 0.0f, 5.0f, 10.0f, 15.0f, 20.0f, 25.0f, 30.0f, 35.0f, 40.0f, 45.0f, 50.0f, 55.0f, 60.0f, 65.0f, 70.0f, 75.0f, 80.0f, 85.0f, 90.0f, 95.0f, 100.0f, 105.0f, 110.0f, 115.0f, 120.0f, 125.0f}; 9 10int a7; 11 12float RT; 13float T = -273.15; 14 15int idx1, idx2; 16 17void setup() { 18 Serial.begin(19200); 19 20 pinMode(LED_BUILTIN, OUTPUT); 21 22 // blink fast to indicate startup / reset 23 for (int i=0; i<5; i++){ 24 digitalWrite(LED_BUILTIN, HIGH); 25 delay(50); 26 digitalWrite(LED_BUILTIN, LOW); 27 delay(50); 28 } 29} 30 31void loop() { 32 digitalWrite(LED_BUILTIN, HIGH); 33 delay(1000); 34 35 a7 = analogRead(7); // 10 bit => a7 [0..1023] 36 37 // example 2 bit : a7 [0..3] => 0 == 0 * 5/3 V, 1 == 1 * 5/3V , 2 == 2 * 5/3 V, 3 == 3 * 5/3 V 38 // example 10 bit : a7 [0..1023] => 0 == 0 * 5/1023 V, 1 == 1 * 5/1023 V, ..., 1023 == 1023 * 5/1023 V 39 40 // https://en.wikipedia.org/wiki/Voltage_divider (Resistive divider) 41 // a7 = 1023 * RKNOWN / (RT + RKNOWN) 42 // => (RT + RKNOWN) = 1023 * RKNOWN / a7 43 // => RT = 1023 * RKNOWN / a7 - RKNOWN 44 // => RT = RKNOWN * (1023 / a7 - 1) 45 46 RT = RKNOWN * (1023.0f / (float)a7 - 1.0f) + RWIRE; 47 48 for (int i=1; i < ARRAY_SIZE; i++) { 49 if (Array_RT[i] < RT){ 50 idx1 = i - 1; 51 idx2 = i; 52 break; 53 } 54 } 55 56 T = (Array_T[idx2] - Array_T[idx1]) / (Array_RT[idx2] - Array_RT[idx1]) * (RT - Array_RT[idx1]) + Array_T[idx1]; 57 58 /*Serial.print("a7: "); Serial.print(a7); Serial.print(" "); 59 Serial.print("RT: "); Serial.print(RT); Serial.print(" "); 60 Serial.print("idx1: "); Serial.print(idx1); Serial.print(" "); 61 Serial.print("idx2: "); Serial.print(idx2); Serial.print(" "); 62 Serial.print("Array_RT[idx1]: "); Serial.print(Array_RT[idx1]); Serial.print(" "); 63 Serial.print("Array_RT[idx2]: "); Serial.print(Array_RT[idx2]); Serial.print(" "); 64 Serial.print("Array_T[idx1]: "); Serial.print(Array_T[idx1]); Serial.print(" "); 65 Serial.print("Array_T[idx2]: "); Serial.print(Array_T[idx2]); Serial.print(" "); 66 Serial.print("T: "); Serial.print(T); Serial.print(" "); 67 Serial.print("round(T): "); Serial.print(round(T)); Serial.print(" ");*/ 68 Serial.println(round(T)); 69 70 71 digitalWrite(LED_BUILTIN, LOW); 72 delay(1000); 73 74 75} 76
Github
The Project/Repository on Github
Downloadable files
breadboard and schematic
breadboard and schematic

breadboard and schematic
breadboard and schematic

Comments
Only logged in users can leave comments