Vic’s IO Board V1.0

The Why

It all started with a thermostat. As in I wanted a new one (See here). Because I am super special little snowflake, none of the thousands of thermostats on the market suited my needs. The initial inspiration is well documented; I will not waste time repeating myself.

So I needed a way for the control logic to interface with the physical world. This of course is done via an IO board and there seemed to be two options – the industrial-level stuff intended to be used with PLCs and the amateur “arduino”-level stuff that’s available everywhere on the internet for less than $20.

The cover for the first party is in the 5 digit range even if you manage to get an invitation. The other party is one guy with a funnel looking for someone with a keg. I wanted to be in the fancy party, but did not have the money nor the invitation to get in.

So I decided to put my experience gained through being a bartender at the fancy party into an IO board of my own. That’s enough analogy maceration.

My goal was to have a robust IO board for my personal project(s). I wanted the board to:

  • work on 24VDC
  • minimize the impact of human error by having protected inputs and outputs
  • be a coherent package
  • be as easy as possible to troubleshoot and integrate
  • have some level of support by the manufacturer

Basically, I wanted a robust piece of gear and since I couldn’t afford one I made my own.

The What

The board, in its current V1.0 incarnation satisfies most of my requirements. Only thing lacking is support from the manufacturer. It’s a hassle. They’re real moody pricks.

Board features and specs:

  • Dual micro-controllers
    • Dedicated communications processor
    • Dedicated input/output processor
  • 24VDC power supply
    • Fused
    • Reverse polarity protected
    • Over-voltage protected via crowbar circuit
    • ESD protected
  • Analog sensor power supply
    • Over-current protected with software detect and reset
    • Diode-protected output
  • Eight analog inputs
    • Over/under voltage protected
    • 12-bit resolution
    • Four ICTD inputs that can double as 0-500mV inputs
    • Four 4-20mA inputs that double as 0-5VDC inputs
    • Adjustable low-pass filter on the analog inputs
  • Four digital outputs
    • Over-current protected with software detect and reset
    • Sourcing configuration
    • Diode-protected output
  • Communications
    • RS-232 signaling
    • Hardware (CTS/RTS) flow control
    • Text-based interface intended for human use
    • Binary interface intended for machine use
  • Firmware
    • Mostly C code written with explicit goal of not being unnecessarily clever and hard to understand
    • Minimal assembler. Some assembly is present on the account that it is unavoidable and C inline assembler is ugly.
    • Thoroughly documented
    • No external dependencies
  • Open design
    • Full software stack (firmware, middle layer, HMI) is open source and available here
    • Hardware design is open and available here.

Bellow is a few pictures in the dual board configuration. Why dual board and not two, three, or four? Simple. Because I am the decider and I decided.

Click on the pictures to expand them.

Top view

Another top view

Dual stack – digital output terminals

Dual stack – RS-232, analog input, analog power supply, and power supply terminals

Back of the PCB

Front of the PCB

Text-based interface intended for testing/human use