Data Storing Thermometer

by crafttech in Circuits > Raspberry Pi

270 Views, 2 Favorites, 0 Comments

Data Storing Thermometer

IMG_20221016_161254_0.jpg

This thermometer was designed for the cold winter office days which are comming. It collects temperature data, and storing it in a CSV file for further analyses. The rustic cardboard design is a conscious symbol of the low-cost, low-energy recycling.

Supplies

Item used:

  • Rasperry Pi Pico
  • ssd 1306 oled display
  • some wires, bolts, nuts
  • recycled cardborad

Wiring

wiring.jpg

As far as the Rapberry Pi Pico has a built-in thermometer, only a display had to be added. It can be powered by a 5V solar panel too.

MicroPython Code

# Temperature_logger_oled  2.0    2022 V.I.

import machine
import utime
from machine import Pin, I2C
from array import*
import ssd1306

# setup
i2c = I2C(0, sda=Pin(16), scl=Pin(17))
display = ssd1306.SSD1306_I2C(128, 64, i2c)
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)
x = 0


def Storing():
   global x,A
   if (x==0):
       A = [0.0]
   else:
       A = A + [0.0]
   A [x] = round(temperature,2)
   x=x+1
   print(A)

def Datasave():
   file=open("tempdata.csv","w")  # creation and opening of a txt file in Write mode
   file.write(str(A)+",")         # writing data in the opened file
   file.flush()                   # internal buffer is flushed
   file.close()                   # the file is closed
   print("Data saved.")

while x < 144000: #100days in case of 1 measurment / 1 min
   display.fill(0)

   reading = sensor_temp.read_u16() * conversion_factor
   temperature = 27 - (reading - 0.706)/0.001721
   t=str(round(temperature,2))
   print("Temperature: " + t + "\u00B0"+"C")
   utime.sleep(1)

   #decoration
   display.rect(90, 12, 10, 30, 1)
   display.fill_rect(91, 32, 8, 8, 1)
   display.rect(89, 40, 14, 2, 1)
   display.rect(88, 42, 16, 2, 1)
   display.fill_rect(87, 44, 18, 6, 1)
   display.rect(88, 50, 16, 2, 1)
   display.rect(89, 52, 14, 2, 1)
   display.rect(92, 54, 8, 2, 1)
   display.text("*", 115, 10)
   display.text("*", 105, 15)
   display.text("*", 110, 25)

   #measurement
   display.text('MEASURED:', 10, 16)
   display.text(t, 10, 36)
   display.rect(54, 36, 3, 3,1)
   display.text("C", 60, 36)

   display.show()

   utime.sleep(60) # one mesure per 60sec - can be anything
   Storing()      # Storing to array
   Datasave()     # Saving to file


To run this code the ssd1306.py is needed to be installed on the pico first!

Preparing Cardboard Box

IMG_20221016_161126_3.jpg

For the box, a part of a recycled cardbox inlay was used. Even most of the foldings are original, only the front support and the hole for the display had to be prepared. The display and the microcontroller were fixed with bolts and nuts.

Ready State

IMG_20221016_100104_6.jpg
IMG_20221016_161201_0.jpg