Measure temperature with AD592 and Arduino

The menu example in a previous post can easily be modified to conver the raw A0 analog reading into voltage. Since the Analog Devices AD592 converts temperature into a current proportional to absolute temperature, we can convert this to a voltage using a single resistor. By taking advantage of the Arduino’s 10-bit analog input, we read this voltage and convert to a temperature.

Here’s the updated code:

// Description:
// Simple menuing system for Arduino
// Demonstrates a menu with controls and
// data readback
//
// Communicates with PC at 115,200 bps 8N1
//
#define LED1 2
#define LED2 3

void setup() 
{
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  Serial.begin(115200);
  menu();
}

void loop()
{
 int m = readMenu();
 switch (m)
 {
  case 1:
   digitalWrite(LED1, HIGH);
   break;
  case 2:
   digitalWrite(LED1, LOW);
   break;
  case 3:
   digitalWrite(LED2, HIGH);
   break;
  case 4:
   digitalWrite(LED2, LOW);
   break;
  case 5:
  {
    // VT100 reset cursor to end of menu (row 15, column 1)
    char resetCursor[] = {27,'[','1','6',';','1','H',0};
    Serial.print(resetCursor);
    double temp = analogRead(A0) * 4.9 / 10.0 - 273.1;
    Serial.print("Temp: ");
    Serial.print(temp);
    Serial.println("C");
    break;
  }
  default:
   break;
  }
}

// Waits in a loop until key is pressed
// then returns digit selected
int readMenu() 
{
 while (!Serial.available())
 {
   delay(100);
 }
 return Serial.read() - 48;
}


// Displays menu
void menu()
{
  // Clear
  char buf[] = {27,'[','2','J',0};
  Serial.print(buf);
  
  // Print menu
  Serial.println("\n\n\n\n\n");
  Serial.println("1....LED1 on");
  Serial.println("2....LED1 off");
  Serial.println("3....LED2 on");
  Serial.println("4....LED2 off");
  Serial.println("5....Read A0");
  Serial.println("\n\n Select 1..5");
}