TinyTemp

Spring 2025 | ECE 304 | C, KiCAD

Note: this page will be updated with images/figures soon!

The TinyTemp is designed to be a small, battery-powered, and programmable embedded system based on ATtiny85 MCU, SSD1306 OLED, and TMP-36 temperature sensor. This project was completed for ECE 304 (Junior Design Project), with the primary goal of gaining experience in PCB design/development and design requirement verification. The following is an abridged version of my project report.

Design Requirements

Design requirements for the TinyTemp were defined by a (fictional) customer company. The most significant objectives were as follows:

Process & Reflection

The TinyTemp design is an iteration of a previous design project from ECE 231, a breadboard design using the ATmega328p (off of the Arduino Uno). The source code for this previous version can be found here. A library for the OLED was provided, so adapting the source code for the ATtiny85 only involved re-writing a few lines and modifying the number of displayed characters/lines to reduce some current draw.

This project was my first experience with designing my own PCB. Alas, I made a small mistake in labelling a node. In my schematic, I used "VCC" to denote the +3.3V output from the voltage regulator. However, when testing my PCB, I realized that I mistakenly used “VCC” at the +5V pin in the 6 pin adapter, which negates the purpose of the voltage regulator and would prevent proper functionality if the Pocket Programmer was used for power. I discovered this by probing TP1 with the Pocket Programmer connected through the adapter.

Luckily, this was not detrimental and more of a learning experience, as the TinyTemp is meant to operate without the programmer, i.e., everything works as intended after flashing the code through the adapter, removing the programmer, and connecting power supply to the Vin1 header pins for +5V.

My assembled PCB met each specified design requirement, except for battery life. My final device current draw resulted in a battery lifetime approximately 0.03 months off from the threshold requirement (or, approximately 0.03 milliamps from the maximum current draw to achieve the specification). While I implemented a watchdog timer and limited my OLED output text to 1-2 lines to reduce current draw, further optimization could be achieved by implementing a function to reduce the OLED brightness (similar to OLED_SetBrightness() found in the SSD1306.c library) and further reducing displayed character count.

I believe this project could be deemed generally successful; the PCB design, embedded C programming, debugging, and design verification processes—along with the mistakes made along the way—provided an overall educational and fulfilling experience.

Posted July 2 2025. Last updated July 2 2025.