Dieses Blog durchsuchen

NTC am Arduino

Nach dem kleinen Projektchen "Arduino mit Matlab" möchte ich der Vollständigkeit halber den selben Aufbau auch noch ohne Matlab laufen lassen. Dabei soll der Code mit der mitgelieferten Arduino Entwicklungsumgebung "Arduino Software 1.6.7" erstellt und in den Atmega 328 geladen werden. Damit man in dieser Stand-Alone-Variante auch was sehen kann, soll ein altes vierzeiliges LC-Display angeschlossen werden. Idealerweise gibt es hier eine schöne library namens LiquidCrystal.h, mit der das LCD im 4Bit Betrieb ganz einfach angesteuert werden kann.

Also schnell die benötigten Pins des LCD (übrigens ein JM204A) aus dem Datenblatt herausgesucht und mit Flachbandkabel und Pinheadern versorgt und an den Arduino angeschlossen. (die Belegung des Arduino habe ich im Script angegeben)

Der NTC-Spannungsteiler bleibt, wie er ist. Und schon kanns losgehen. Da wir die vier schönen Zeilen mit 20 Zeichen pro Zeile am LCD zur Verfügung haben, kann auch viel Information angezeigt werden. Ich habe mich entschieden, den Integer Wert des 10Bit ADC anzuzeigen (0-1023), den errechneten Widerstandswert des NTC´s und natürlich die daraus errechnete Temperatur.


Und das hier ist der simple Code ;) ...



 /* ingmarsretro 2016  
  * Pinzuordnungen fürs LCDisplay  
  * RS to digital 12  
  * EN to digital 11  
  * D4 to digital 5  
  * D5 to digital 4  
  * D6 to digital 3  
  * D7 to digital 2  
  * R/W to ground  
  * VSS to ground  
 */  
 // include libraries  
 #include <LiquidCrystal.h>  
 #include <math.h>  
 int analogpin = 0;  
 int analogvalue = 0;  
 double a1=3.354016E-03;  
 double b1=3.2569850E-04;  
 double c1=2.61013E-06;  
 double d1=6.38309e-08;  
 double urt=0;  
 double rt=0;  
 double rvsrref=0;  
 double temp=0;  
 double tempc=0;  
 double r=2200;  
 double rref=2200;  
 double analog=0;  
 // interfacepins initialisieren  
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  
 void setup() {  
  // setup LCD spalten und reihen  
  lcd.begin(20, 4);  
  lcd.print("Testprogramm NTC");  
  Serial.begin(9600);  
 }  
 void loop() {  
  analogvalue=analogRead(analogpin);  
  analog=(0.004882812*analogvalue);  
  urt=5-analog;  
  rt=((r/analog)*urt);  
  rvsrref=rt/rref;  
  temp=(1/(a1+(b1*log(rvsrref))+(c1*(log(rvsrref*rvsrref)))+(d1*(log(rvsrref*rvsrref*rvsrref)))));  
  tempc=temp-273.15;  
  // column 0, line 1  
  // (note: line 1 is the second row, since counting begins with 0):  
  lcd.setCursor(0, 1);  
  // print the number of seconds since reset:  
  lcd.print("ADC-Wert =");  
  lcd.setCursor(11,1);  
  lcd.print(analogvalue);  
  lcd.setCursor(0, 2);   
  lcd.print("Widerstd =");  
  lcd.setCursor(11, 2);  
  lcd.print(rt);  
  lcd.setCursor(0, 3);   
  lcd.print("Temp Cels=");  
  lcd.setCursor(11, 3);  
  lcd.print(tempc);  
 }