← Back to Projects

tinyTemp

Custom tiny temperature monitor that evolved from an ATmega328P prototype into a compact ATtiny85 OLED PCB.

Overview

tinyTemp shows how much can be done on minimal hardware by turning a small microcontroller into a complete sensing and display system. The project began on an ATmega328P for bring-up, then was redesigned around an ATtiny85 to shrink the final form factor while keeping live temperature readout on-device.

Demo

View live demo →

Description

tinyTemp started as an ATmega328P prototype so the sensor, OLED display, and temperature conversion flow could be validated quickly. After the core behavior worked, the design was iterated onto an ATtiny85 for a smaller final PCB and tighter embedded constraints. The finished firmware reads temperature from an analog sensor on ADC channel 2 (1.1 V ref), averages 25 samples, converts to °C and °F, and displays on a 0.96" 128×64 SSD1306 OLED. Display alternates °F (3 s) and °C (3 s) and shows "TOO HOT!!!" above 70 °F. ECE 304 project; all logic on the MCU, no host PC. I2C to the OLED is bit-banged (ATtiny85 has no hardware I2C). Demonstrates embedded C: ADC, timing, PROGMEM, bit-banged I2C, PCB-level iteration, and display driver integration on a resource-constrained MCU.

main() and ADC main() disables the watchdog, then calls adc_init(), OLED_init(), and OLED_clear(). The ADC uses internal 1.1 V ref and channel 2; 25 samples are summed via get_adc() (start conversion, wait for ADIF, read ADCL then ADCH for 10-bit value). Temperature is computed from the averaged reading with a linear formula to °C and then °F.

display_temp and main loop display_temp(value, unit) formats the value to one decimal and prints either " Deg C " or " Deg F " from PROGMEM. The main loop shows °F, and if above 70 °F prints "TOO HOT!!!" at a fixed position; waits 3 s; clears; shows °C with the same logic; then enables the watchdog (8 s) and spins in while(1).

tinyOLED.c driver SSD1306 driver: PROGMEM init sequence (multiplex, addressing, charge pump, display on), 5×8 font, and OLED_cursor / OLED_printC / OLED_printP for positioning and text. Bit-banged I2C on GPIO. Build: make for tinyTemp.c + tinyOLED.c; make flash uses avrdude and USBtinyISP to program the ATtiny85.

Project photos

PCB design

KiCad PCB layout for the ATtiny85 version, routing the OLED, sensor input, power, and programming header into the smaller board.

Finished product

Final compact tinyTemp board with the OLED, ATtiny85 control circuitry, and programming header assembled.

Tech & tools

  • Embedded
  • C
  • ATtiny85
  • SSD1306
  • I2C

Highlights

  • Embedded firmware (C) for sensor readout and I/O
  • Iterated from ATmega328P prototype to ATtiny85 final board
  • Bit-banged I2C and SSD1306 driver on ATtiny85
  • ECE 304 project

More projects

PUF Tester

Hardware security testing toolkit for measuring unique device fingerprints and reliability under real test conditions.

Award winning

WorldWide Rover

Award-winning internet-controlled rover that lets users drive and monitor a physical robot from anywhere in real time.

BareTag Tool Tracker

Smart tool tracking that helps teams instantly find equipment, prevent loss, and stay coordinated in real time.

Buffet

Automated trading system that tests strategies, learns from market behavior, and executes decisions with built-in risk controls.

HeadHunter

AI-powered job search assistant that helps people find better-fit roles faster, with smarter resume matching and cleaner tracking.

Meal Planner

Personal meal planning app that turns “what should I cook?” into a clear weekly routine with pantry awareness and shopping support.

BrickVision

Turns ideas or 3D models into buildable LEGO-style instructions, making custom creations faster and more accessible.

Pong on Assembly

Classic Pong rebuilt from the ground up in hardware and low-level assembly, showing full-stack systems engineering in action.

Custom Single-Cycle 32-Bit Processor

From-scratch 32-bit processor design that brings core computer architecture concepts to life in working hardware.

ThreadLib Disk Scheduler

C++ user-level threading library paired with a concurrent disk scheduler that coordinates requester threads and SSTF service.

Multilateration 3D Positioning

3D location engine that estimates where an object is in space and validates accuracy through realistic simulation.

RISC-V Encryption

Encryption concepts implemented at the hardware-software boundary, showing security logic at instruction level detail.

PUF Tester

Hardware security testing toolkit for measuring unique device fingerprints and reliability under real test conditions.

Award winning

WorldWide Rover

Award-winning internet-controlled rover that lets users drive and monitor a physical robot from anywhere in real time.