Hi, this post is about data logging your sensor values into Excel. Here I’m using LM35 temperature sensor with Arduino Uno, 16×2 LCD screen, resistor and jumper wires. Full list of hardware, software as per below:
- Arduino Uno
- LM35 temp. sensor
- 16×2 LCD
- 330Ω resistor for LCD backlight anode
- 10kΩ pot for LCD matrix contrast
- Jumper wires
- Arduino IDE
- Microsoft Excel with Data Streamer (https://www.microsoft.com/en-us/education/hackingstem/datastreamer). It is a Add-ins feature in MS Excel 360(Goto File -> Options -> Add-ins -> Under Manage dropdown list choose ‘COM Add-ins’ -> click GO -> tick Microsoft Data Streamer for Excel -> click OK. )


↑ Left: Hardware circuit (ignore right side of breadboard). Right: Data Streamer tab will appear after Add-ins
The circuit diagram:

A video for the Excel data recording process: ↓
The Arduino sketch: ↓
#include <LiquidCrystal.h>
int rs = 2;
int e = 3;
int d4=4, d5=5, d6=6, d7=7;
LiquidCrystal lcd(rs,e,d4,d5,d6,d7);
int sensorInput = A0;
float vout ;
float tempDegC;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); //Initialize serial monitor
lcd.begin(16,2); //using both rows and all columns
lcd.setCursor(1,1); //text for below row, start from column 1
lcd.print("Degree Celsius");
pinMode (sensorInput , INPUT); //initialize Pin A0 as a input pin
}
void loop() {
// put your main code here, to run repeatedly:
lcd.setCursor(5,0); //text for top row, start from column 5
vout = analogRead(sensorInput);
vout=(vout*500)/1023;
tempDegC = vout;
lcd.print(tempDegC);
Serial.println(tempDegC);
//Serial.println(" Degree Celsius");
delay(1000);
}
Using Excel VBA macros to provide the Date and Time of the temperature sensor Readings
You will notice that the Excel sheet does not logged the date and time of the sensor reading. You can use a RTC (Real Time Clock) module like the DS3231 to assist the MCU to provide the time and date.
But here I will use Excel VBA macro to record the date and time together with the temperature values. 👍 In this way you do not need a RTC.
The VBA script ↓
Private Sub Worksheet_Change(ByVal Target As Range)
Dim NowDate As String
Dim NowTime As String
NowDate = Date
NowTime = Time
If Not Intersect(Target, Worksheets("Data In").Range("A5")) Is Nothing Then
ActiveRowDate = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row + 1
ActiveRowTime = Worksheets("Sheet1").Range("B" & Rows.Count).End(xlUp).Row + 1
ActiveRowData = Worksheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row + 1
Worksheets("Sheet1").Range("A" & ActiveRowDate).End(xlUp).Offset(1, 0).Value = NowDate
Worksheets("Sheet1").Range("B" & ActiveRowDate).End(xlUp).Offset(1, 0).Value = NowTime
Worksheets("Sheet1").Range("C" & ActiveRowData).End(xlUp).Offset(1, 0).Value = Worksheets("Data In").Range("B5").Value
End If
End Sub
