Site Tools



The EnviroNode is an environmental sensor designed to be used with my security system. It uses an HTU21D digital temperature and humidity sensor as well as an ISL76671 ambient light sensor. The EnviroNode also has a PIC24FV16KA301 microcontroller that gathers data from the sensors and communicates with a wireless sensor or other device over a 3.3V TTL serial interface.

Hardware Design

3D model of EnviroNode

The board was designed to be used with a Tiny Node wireless sensor. The EnviroNode PCB is the same size as the Tiny Node. The I/O pins were supposed to line up, but I measured it wrong. Oops.

I selected the HTU21D (pdf) digital temperature and humidity sensor because I had used it previously on a SparkFun breakout board. It has an I2C interface and can make temperature and humidity readings in about 50ms.

The ISL76671 light sensor was pretty much selected for convenience on DigiKey. It uses an analog output. Unfortunately, it only has a range of .01 to 100 lux. This isn't quite enough dynamic range to get a really detailed sense of the brightness in a room, but it works well enough indoors to determine if lights are on or off, or when to dim lights and such. I wouldn't use it as an outdoor sensor.

The PIC24FV16KA301 microcontroller was selected because I had several of them available. Originally, this micro was used on all of my Nalig wireless sensors, but I eventually upgraded to the 32k version since the program was growing so large. More micros to use!

Although I intended on using the serial interface for most of the device's interaction, I opted to extend the wireless sensor's three GPIO pins to the EnviroNode. The GPIO pins are also connected to the EnviroNode's microcontroller, and extended to headers on the other side of the board. My idea was to connect these pins to relays and control my thermostat, so that three general purpose boards (wireless sensor, environode, relay module) could be connected together and controlled by the master node. I eventually decided not to implement this, as I wanted to use either a different thermostat or design something that also had manual controls and temperature display.

The microUSB connector is used for power only. All of the sensors and require 3.3V, as well as the microcontroller. The USB connector was added since I intended to use the EnviroNode with a Tiny Node, which requires 3.3V and has no regulator on-board.


The firmware is very simple. It implements an extremely basic serial interface. Sending the character 'T' (followed by \n) will request the temperature, the character 'H' requests the humidity, the character 'L' requests the light sensor value, and the character 'a' requests data from all 3 sensors.

Temperature is reported in degrees Celsius. Humidity is reported as a percentage, 0 to 99.9. Light is reported as a roughly linear scale from 0 to 127.

That's it! The sensor has no intelligence. The idea was that the security system would read the required values when needed.

Also, the LED blinks when it makes a reading, so that's pretty cool. (the LED is very dim so this isn't annoying at all)

Security System Integration

I have several EnviroNodes paired with wireless sensors around my apartment. Every minute, my security system requests all environmental data from each EnviroNode and records it into a database. These values can be viewed from the web interface.

Light sensor values over a 24 hour period

Eventually, I'd like to connect it up to a thermostat and actually regulate the temperature. With multiple nodes, I could set the threshold based on a specific room or an average of multiple rooms.


projects/securitysystem/environode.txt · Last modified: 2015-07-31 10:48 by daniel