Elsys CO2 sensor power consumption analysis¶

No description has been provided for this image
In [4]:
import pandas as pd
import plotly.express as px

csv_file = "elsysco2-timebase-10s.csv"

SKIP_ROWS = 8
df = pd.read_csv(csv_file, skiprows=SKIP_ROWS, usecols=["Relative Time", "Reading"])
df = df[df["Reading"] >= 0]  # Filter negative values in the beginning
print(df.head())

labels = {"Relative Time": "Relative Time (s)", "Reading": "Reading (A)"}
fig = px.line(
    df, x="Relative Time", y="Reading", title="Current Readings", labels=labels
)
fig.show()
          Reading  Relative Time
464  2.821717e-10      11.390767
468  2.414176e-11      11.493313
480  4.509976e-11      11.779001
481  3.326465e-11      11.821093
483  1.216581e-10      11.861416
No description has been provided for this image
In [5]:
df = df[df["Relative Time"] >= 600]
fig2 = px.line(
    df,
    x="Relative Time",
    y="Reading",
    title="Current Readings after initialization",
    labels=labels,
)
fig2.show()
No description has been provided for this image
In [6]:
df["baseline"] = df["Reading"].rolling(window=102, center=True).min()
fig2 = px.line(
    df,
    x="Relative Time",
    y="baseline",
    title="Current Readings after initialization — baseline",
    labels=labels
)
fig2.show()
No description has been provided for this image
In [7]:
df["current_peaks"] = df["Reading"] - df["baseline"]
fig3 = px.line(
    df,
    x="Relative Time",
    y="current_peaks",
    title="Current Readings after initialization — without baseline",
    labels=labels
)
fig3.show()
No description has been provided for this image
In [8]:
import numpy as np

charge = np.trapezoid(df["current_peaks"], df["Relative Time"])
df = df.dropna(subset=["current_peaks", "Relative Time"])

## CONTINUE HERE

print(charge)
VOLTAGE = 3.6
voltage = VOLTAGE
energy = charge * voltage

time_elapsed = df["Relative Time"].iloc[-1] - df["Relative Time"].iloc[0]
power = energy / time_elapsed

print(f"Charge (Coulombs): {charge:.6f}")
print(f"Energy (Joules): {energy:.6f}")
print(f"Elapsed time (s): {time_elapsed:.3f}")
print(f"Average Power (Watts): {power:.6f}")
print(f"Energy per 10 seconds (Joules): {power*10:.6f}")
nan
Charge (Coulombs): nan
Energy (Joules): nan
Elapsed time (s): 802.322
Average Power (Watts): nan
Energy per 10 seconds (Joules): nan

https://www.evemall.eu/consumer-battery/li-socl2-batteries/er14505

In [9]:
CAPACITY = 2.7  # Ah
capacity_coulombs = CAPACITY * 3600  # Convert Ah to Coulombs
import os

#TODO
# also analyze 60s csv file