Trinket Pro Humidity and Temperature Sensor for Your Desk
So, I wanted to measure the temperature and humidity in my office. Typically, a simple hygrometer and thermometer could work. But, how do you log the information? Paper and pencil? What happens when I am away? So, in this project we wire up a small micro-controller, temperature and humidity sensor, screen, and a micro-SD card adapter to log the data. Then we use the 3D printer to make a nice little frame.
Parts:
Adafruit Pro Trinket – 5V
10k Ohm Resistors (3)
DHT11 basic temperature-humidity sensor
Small Prototype Boards
SainSmart IIC/I2C/TWI Serial 2004 20×4 LCD Module Shield For Arduino UNO MEGA R3
MicroSD card breakout board+
A small SD card
Jumper Wires
Old USB phone charger
Step 1: Solder on the header pins to the trinket micro controller and SD card breakout board
![]() | ![]() | ![]() | ![]() |
Step 2: Press the trinket, card board, and DHT into the prototyping board
![]() | ![]() |
Step 3: Connections:
— Trinket Pin 10 to SD Card “CS”
— Trinket Pin 11 to SD Card “DI”
— Trinket Pin 12 to SD Card “DO”
— Trinket Pin 13 to SD Card “CLK”
— Trinket Pin “5V” to SD Card “5V”
— Trinket Pin “G” to SD Card “GND”
— Trinket Pin “5V to DHT Pin 1 (looking at it from the front Left pin is 1)
— Trinket Pin “GND” to DHT Pin 4
— Trinket Pin 8 to DHT Pin 2
— 10kΩ Resistor from Trinket “5V” to Trinket Pin 8 (this is a 5V digital pull-up)
— 10kΩ Resistor from Trinket Pin A4 (this is a I2C 5V pull-up, hidden under chip in photo)
— 10kΩ Resistor from Trinket Pin A5 (this is a I2C 5V pull-up, hidden under chip in photo)
— Cable from Trinket Pin A4 to Screen Pin “SDA”
— Cable from Trinket Pin A5 to Screen Pin “SCL”
— Cable from Trinket Pin “BUS” to Screen Pin “VCC”
— Calbe from Trinket Pin “G” to Screen Pin “GND”

Step 4: Write the software
The software needs to do 3 things:
a) collect temperature and humidity from DHT
b) Format and display the info on the screen
c) Save a copy to the SD card
Software Structure:
// Libs for the Screen (Need wire for I2C and Liquid Crystal to setup Display
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Libs for Sensor (Provides sensor functions)
#include "DHT.h"
// Libs for SD card
#include <SPI.h>
#include <SD.h>
// Constants for Sensor
#define DHTPIN 8 // What digital pin we're connected to?
#define DHTTYPE DHT11 // Sensor Type
// Constants for SD Card
const int chipSelect = 10;
// Setup DHT sensor's connection pin and type
DHT dht(DHTPIN, DHTTYPE);
// Setup Screen Settings
// Set the LCD I2C address to 0x27
// It has 20 chars and 4 lines
LiquidCrystal_I2C lcd(0x27,20,4);
void setup() {
lcd.init(); // Initialize the lcd
lcd.backlight(); // turns off the backlight for effect
lcd.setCursor(0,0);
lcd.print("Initializing SD card...");
// See if the SD card is inserted and can be initialized:
if (!SD.begin(chipSelect)) {
lcd.print("Card failed, or not present");
// can't do do anything with it
return;
}
lcd.print("card initialized."); //Found the card!
dht.begin(); //Start the DHT functions
}
//Main program Goes HERE!
void loop() {
// Wait a few seconds between measurements.
delay(30000);
// Clear the Screen
lcd.clear();
// Get humidity from Sensor and store as variable "h"
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
// Store temperature in variable "t"
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
// Print info to the screen
lcd.setCursor(0,0); // Top Line
lcd.print("Humidity: ") & lcd.print(h) & lcd.print(" %");
lcd.setCursor(0,1); // 2nd line
lcd.print("Temp: ") & lcd.print(t) & lcd.print(" *C ");
lcd.setCursor(0,2); // 3rd line
lcd.print("Temp: ") & lcd.print(f) & lcd.print(" *F ");
lcd.setCursor(0,3); // 4th line
lcd.print("Heat Index: ") & lcd.print(hif) & lcd.print(" *F");
// Make a string for assembling the data to save in log file
// This a comma separated file that will look like this:
// H = 10 %, T = 32 *F, T = 0 *C, HI = 12 *F
String dataString = "";
dataString += "H = " ;
dataString += String(h);
dataString += " %, T = ";
dataString += String(f);
dataString += "*F , T = ";
dataString += String(t);
dataString += "*C , HI = ";
dataString += String(hif);
dataString += "*F";
// Open the file. Only one file can be open at a time
// The file is or will be called datalog.txt
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// If the file is open, you can write to it
// You print the assembled string (called dataString) into the file
// println command prints the string and moved down one line in the file
// the next reading will be printed on the next line
// then close the file and start all over again, go back to the top of loop code
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}
}

Step 7: Insert LCD into the Frame, stick on the control board


Step 8: DONE!






