/* * Program til LOGNING af temperatur med Arduino 2560 PRO MINI * * Ved hjælp af klippe og klistre fra programmer på internettet * er dette program strikket sammen for at kunne måle på et * Varmeanlægs frem- og returløb, og alle aspekter er endnu ikke * defineret. * * INSPIRATION: * https://www.digikey.dk/en/maker/projects/how-to-measure-temperature-with-an-ntc-thermistor/4a4b326095f144029df7f2eca589ca54?utm_adgroup=General&mkwid=sSckgs2rK&pcrid=263906521091&pkw=&pmt=b&pdv=c&productid=&slid=&gclid=EAIaIQobChMIxrft2Ozm5QIViqQYCh15IwqmEAAYASAAEgJPe_D_BwE * * https://www.jameco.com/Jameco/workshop/TechTip/temperature-measurement-ntc-thermistors.html * * * Opgave efter OZ1DIS, Allan Jensen * * Udført af OZ6YM, Palle A. Andersen * November 2019 * ------------------------------------------------------------------- */ // Variable for et I2C-Display, 20 karakterer på hver 4 linjer // https://www.planker.dk/Projects/Arduino/I2C/eksperiment_med_i2c.htm //******************************************************************** #include #include #include #define I2C_ADDR 0x27 // Define I2C Address where the PCF8574A is #define BACKLIGHT_PIN 3 // Hvis displayer er forsynet med BACKLIGHT #define BACKLIGHT_POL POSITIVE #define En_pin 2 #define Rw_pin 1 #define Rs_pin 0 #define D4_pin 4 #define D5_pin 5 #define D6_pin 6 #define D7_pin 7 LiquidCrystal_I2C lcd (I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin, BACKLIGHT_PIN, BACKLIGHT_POL); // Øvrige program-variable //************************ int NTC_Pin; // Midlertidig, indeholder Pin-nummeret // Der kan måles på 8 forskellige punkter samtidig //************************************************* int NTC_Pin0 = 0; // Pin-nr A0... og så videre int NTC_Pin1 = 1; int NTC_Pin2 = 2; int NTC_Pin3 = 3; int NTC_Pin4 = 4; int NTC_Pin5 = 5; int NTC_Pin6 = 6; int NTC_Pin7 = 7; // ..til Pin A7 int SAMPLE_NUMBER = 20; // Hver analoglæsning sker (20) gange for at undgå flimmer på display int Vo; // mellemregning int Vx; // mellemregning float R1 = 10100; // Modstandsværdi tilpasset til stuetemperatur // disse variable benyttes ved Steinhart–Hart equation // https://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation //***************************************************** float logR2, R2, T, Tc; // Tf; float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07; //Steinhart–Hart coefficients float curTempC0,curTempC1,curTempC2,curTempC3,curTempC4,curTempC5,curTempC6,curTempC7; // Initialice display og udskriv displayformat //********************************************* void setup() { lcd.begin(20,4); lcd.home(); lcd.setCursor ( 0,0 ); lcd.print("F: "); //næste poss = 3, 0 lcd.setCursor ( 11,0 ); lcd.print("R: "); //næste poss = 3, 0 lcd.setCursor ( 0,1 ); lcd.print("2: "); lcd.setCursor ( 11,1 ); lcd.print("6: "); //næste poss = 3, 0 lcd.setCursor ( 0,2 ); lcd.print("3: "); lcd.setCursor ( 11,2 ); lcd.print("7: "); //næste poss = 3, 0 lcd.setCursor ( 0,3 ); lcd.print("4: "); lcd.setCursor ( 11,3 ); lcd.print("8: "); //næste poss = 3, 0 } // HOVEDLOOP - Herfra UDFØRES AL ARBEJDET //**************************************** void loop() // 8 Analoge porte læses //********************** { // Definer ANALOG-PIN - Læs den - Gem temperatur - NULL variabel //*************************************************************** NTC_Pin = NTC_Pin0; anaread(); curTempC0 = Tc; NTC_Pin = 0; NTC_Pin = NTC_Pin1; anaread(); curTempC1 = Tc; NTC_Pin = 0; NTC_Pin = NTC_Pin2; anaread(); curTempC2 = Tc; NTC_Pin = 0; NTC_Pin = NTC_Pin3; anaread(); curTempC3 = Tc; NTC_Pin = 0; NTC_Pin = NTC_Pin4; anaread(); curTempC4 = Tc; NTC_Pin = 0; NTC_Pin = NTC_Pin5; anaread(); curTempC5 = Tc; NTC_Pin = 0; NTC_Pin = NTC_Pin6; anaread(); curTempC6 = Tc; NTC_Pin = 0; NTC_Pin = NTC_Pin7; anaread(); curTempC7 = Tc; NTC_Pin = 0; // 8 porte udskrives på display //***************************** lcd.setCursor (3, 0); lcd.print(" "); // Slet sidst skrevne temperatur lcd.setCursor (3, 0); lcd.print(curTempC0,1);lcd.print(" C"); // Skriv ny temperatur0 lcd.setCursor (14,0); lcd.print(" "); // Slet sidst skrevne temperatur lcd.setCursor (14,0); lcd.print(curTempC4-200,1);lcd.print(" C"); // Skriv ny temperatur4 lcd.setCursor (3, 1); lcd.print(" "); // Slet sidst skrevne temperatur lcd.setCursor (3, 1); lcd.print(curTempC1,1);lcd.print(" C"); // Skriv ny temperatur1 lcd.setCursor (14,1); lcd.print(" "); // Slet sidst skrevne temperatur lcd.setCursor (14,1); lcd.print(curTempC5-200,1);lcd.print(" C"); // Skriv ny temperatur5 lcd.setCursor (3, 2); lcd.print(" "); // Slet sidst skrevne temperatur lcd.setCursor (3, 2); lcd.print(curTempC2,1);lcd.print(" C"); // Skriv ny temperatur2 lcd.setCursor (14,2); lcd.print(" "); // Slet sidst skrevne temperatur lcd.setCursor (14,2); lcd.print(curTempC6,1);lcd.print(" C"); // Skriv ny temperatur6 lcd.setCursor (3, 3); lcd.print(" "); // Slet sidst skrevne temperatur lcd.setCursor (3, 3); lcd.print(curTempC3,1);lcd.print(" C"); // Skriv ny temperatur3 lcd.setCursor (14,3); lcd.print(" "); // Slet sidst skrevne temperatur lcd.setCursor (14,3); lcd.print(curTempC7,1);lcd.print(" C"); // Skriv ny temperatur7 } // Læse og beregningsroutine //************************** void anaread() { // Ved at tage måling på port flere gange efter hinanden med et lille DELAY // og efterfølgende dele med antal målinger, får man en roligere udskrivning //*************************************************************************** Vx = 0; for (int i = 0; i