Username: Password:

Current Status of the Project:


May 5th, 2019

As of right now, we have a proof-of-concept functional prototype for Controlling a single vent.

Our next step is to connect at least two zones, and to connect more than one vent to a single zone for those pesky multi-vent rooms.


Our First Vent Mockup

This vent obviously seals completely and is a final prototype.

Just kidding! This was set up just to prove we could actuate a door inside a real vent, and to give an idea of where we are heading. Our protoype controller is pictured alongside.

This Prototype is obviously very crude, with the hot glue, popsicle sticks, and the servo just jutting out the side. In the final product, we'll make sure everything is contained in a nice little box inside the vent (protected from airflow of course) and the vent door will be flush with all sides when it is shut. We're likely to switch the servo out for a DC/Stepper Motor and a motor driver board as the servo turns out to be pretty darn loud.

Zooming in on that Controller

Here is a better closeup of that controller, complete with some number labeling for convenience. Things are a little messy here, but will clean up nicely once this is moved to a custom PCB.

Pictured here are the following components:

  1. Atmel Atmega328p-pu AVR Microcontroller. This is actually the same guy used in most of the Arduinos out there. It has all sorts of features, but currently we are just using the built-in UART module for serial communication.

    While this chip was programmed with an Arduino (a nano specifically) Its program is actually written in Embedded C, which is a bit more characteristic of microcontrollers. We also have the UART set in interrupt mode so that the chip can sleep whenever it's not receiving data.

  2. HC-05 Bluetooth Module. This is how the AVR gets all of its serial command data to control the vent motor/servo. This handy little chip is easily set up to automatically pair with another chip when powered on.

The resistors are used for various things, such as LEDs, Level Converters, and pull-up resistors, while capacitors are just for decoupling and filtering. The Micro-USB connector is simply for power, and the LED is used to indicate serial communication.

Here is a schematic of the circuit:

The Temperature Sensing Module

This guy is the middle man of the project, and is what defines a "zone". It is responsible for measuring room temperature and sending it to the control unit as well as relaying and confirming commands sent from the control unit to the vents in the zone.

Pictured here are the following components:

  1. NodeMCU 1.0 ESP 8266 WiFi module. This is arguably one of the cooler microcontrollers out there. It has an 80MHz 32-bit processor (compared to the Atmega's 16Mhz 16-bit processor), and actually runs a full RTOS. In addition to that, it's got a built-in wifi module. This chip was programmed with the Arduino environment in C++, which makes things super easy.

    It is set up to automatically connect to WiFi at a hardcoded SSID, and a TCP server at a hardcoded address using port 8368 (V-E-N-T on a keypad). Once connected, it will relay the temperature data to the server, pass vent commands through to the Bluetooth module (and therefore the vent), and ensure the vents send back an acknowledge. It also has an LED that will indicate the status of the connections.

  2. MCP9808 I2C Temperature Sensor. This chip is on a nice breakout board from Adafruit, and is very accurate and precise. Originally this was a DT-11 Temperature and Humidity sensor, but that proved unreliable and difficult to work with. Using Adafruit's library and the NodeMCU's I2C module, communicating with this guy is a piece of cake.

  3. HC-05 Bluetooth Module. This is the buddy to the module on the vent. Automatically pairs to it on power-up.

Here is a schematic of the circuit:

The Master Control Unit

This is really the big core. The majority of the system logic can be found here, since the other modules are fairly naive. This is actually nice, as generally any features that need added are just software, so they can be updated here. On top of that, internet connectivity could theoretically allow over-the-air updates.

Running all of the software is currently a Raspberry Pi 3B+. A nice, compact, and relatively powerful (at least for the needs of this system) computer with a full Linux based operating system and multiple GPIO pins, the Pi is the perfect controller. On top of that, it has built-in Wifi, which elimates the need for a chip to connect to the internet.

Currently, it is running a relatively simple GUI written in Python (the best GUI language... right?) with a TCP Server backend. When a module connects to the server it sends updates to the GUI. The current GUI supports a single zone, heating and cooling modes, history logging, and daily temperature schedules (not hourly, that will be added later).

Behold, the beautiful GUI (Sort-of, not really)

Many more features and optimizations are planning to be added to this (including visuals), and it will probably be written in a different language, likely Java.


Future Plans

The following are various sketches of what the project might look like in future iterations and the final stages.