Skip to the content
2 layers156.9 × 102.2 mmHardwareInterfaceBoard, the printed circuit board in 3D

HardwareInterfaceBoard

plb500/AutoBloomer-SensorModules

Code and PCB designs for AutoBloomer MQTT sensor modules

Size
156.9 × 102.2 mm
Copper layers
2
Thickness
1.6 mm
Parts
85
Nets
147
Pads
465
Tracks, vias
859, 15
Pours
6
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
13 Mar 2023
Updated
15 Dec 2024

Overview

HardwareInterfaceBoard is an open-source printed circuit board by plb500, from the plb500/AutoBloomer-SensorModules repository on GitHub. It is a 2-layer board of 156.9 × 102.2 mm with 85 parts on 147 nets, routed with 859 tracks and 15 vias.

It is built around the TCA9548APW, 74HC165D and 74HC595, with the DS3231MZ/V+, LM1117-3.3 and PN2222A among its other parts. Its parts include 25 connectors, 23 resistors, 9 transistors, 7 capacitors and 7 ICs. It belongs with the home automation and IoT and sensors and measurement boards and the RP2040 boards of this library.

Main components

8

README

README.md

AutoBloomer Sensor Modules

Full plans and code for a sensor controller capable of publishing multiple sensor data via MQTT

Raspberry Pico source code is here

PCB schematics (KiCad format), plans plus any 3D prints/CNC files for the different hardware platforms are here

A brief overview is on YouTube

Under the hood the sensor modules use Raspberry Pico Ws to communicate with an MQTT broker and transmit data it collates from the following sensors:

  • SCD30 environmental sensor (link)
  • Stemma soil sensor (link)
  • Battery voltage (for Raspberry Pi RTC) (uses an ADC pin on the Pico and custom circuitry on the HIB)
  • Sonar (feed level) sensors (Currently using A02YYUW sonars - link)

I also intend to add EC and/or pH sensors to this to essentially make this a one-stop hydroponics sensor interface.

The module arranges these sensors into sensor "groups", referred to by their index. Each group effectively publishes a set of data from multiple sensors to a single MQTT topic. This allows the Sensor Pod, for example, to accumulate sensor data from both the SCD30 sensor and the Stemma Soil Sensor into a single topic, and also allows the HIB to publish sensor data to multiple topics (i.e. the RTC battery voltage and each individual connected feed sensor all publish to their own individual topics)

Hardware platforms

Currently there are two different hardware platforms defined:

  • Sensor Pod
  • Hardware Interface Board (HIB)

Sensor Pod

The Sensor Pod consists of a single sensor group providing data from the following sensors:

  • Group 0
    • SCD30
      • CO2
      • Humidity
      • Temperature
    • Stemma Soil Sensor
      • Soil moisture

Hardware Interface Board

The HIB consists of two distinct pieces of hardware. One section provides power and hardware control to the Raspberry Pi powering the AutoBloomer controller, along with a RTC module and interfacing to relays. The other section is the sensor module which provides data from feed level sensors along with the current RTC battery module voltage. These are grouped as follows:

  • Group 0
    • RTC battery level
  • Group 1
    • Feed sensor
  • Group 2
    • Feed sensor

Module configuration

Configuration of each module is done in two ways:

Basic module configuration

Basic pod configuration of essential runtime variables (wireless SSID/key, broker address, module location/name etc) is done via serial port connected to the bord's EXT header (3.3v, 57600/8/n/1) and transmitting commands in the format: <COMMAND><SENSOR_GROUP><PARAMETER> (note no space)

  • SSID<< wireless ssid >> - Sets the WiFi SSID
  • PASS<< password >> - Sets WiFi passkey
  • NAME<< module >> - Sets sensor module name
  • BRKR<< address >> - Sets the broker address
  • GRPN<< sensor group index>><< sensor group name >> - Sets the name of the sensor group at the supplied index (this is used for the MQTT topic path)
  • GRPL<><< sensor group location >> - Sets the location of the sensor group at the supplied index (this is used for the MQTT topic path)
Example commands
  • SSIDMyNetwork -> Sets the sensor module to connect to the wireless network with the SSID "MyNetwork"
  • PASSthe_key -> Sets the sensor module to connect to the wireless network using the PSK "the_key"
  • NAMESensorModule -> Sets the Pico's host/MQTT client name to be "SensorModule"
  • BRKRthebroker.local -> Tells the sensor module to connect and publish to the MQTT broker with host name "thebroker.local"
  • BRKR192.168.1.50 -> Tells the sensor module to connect and publish to the MQTT broker at address "192.168.1.50"
  • GRPN0Group1Sensor -> Sets the name of the sensor group at index 0 to "Group1Sensor"
  • GRPL0LeftChamber -> Sets the location of the sensor group at index 0 to "LeftChamber"

Once these have been set the pod will attempt to connect to the configured broker via the supplied wireless network and begin publishing sensor data to the topic:

text
AutoBloomer/<< sensor group location >>/<< sensor group name >>

Runtime sensor calibration

Once connected, the pod will also subscribe to a specific MQTT topic to listen for sensor calibration commands. The topic in question is:

text
AutoBloomer/<< sensor group location >>/<< sensor group name >>/control

The payload consists of a single line detailing the type of calibration to be performed. Currently the only sensor capable of (and requiring) calibration is the SCD30 on the Sensor Pod. Calibration commands are one of the following:

  • TEMP (temperature offset)
  • FRC (CO2 field calibration value)

For example, setting a FRC value of 400 (i.e. recalibrating outside) and using mosquitto_pub the command line would look something like this:

text
mosquitto_pub -h broker.address -m "FRC 400" -t "AutoBloomer/SensorLocation/SensorName/control"

For more details on these parameters, see the SCD30 documentation here

Parts

85
QtyValueFootprintReferences
82.2kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1, R2, R3, R4, R5, R6, R7, R8
8300Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR11, R12, R13, R14, R15, R16, R17, R18
8PN2222APackage_TO_SOT_THT:TO-92_InlineQ1, Q2, Q3, Q4, Q5, Q6, Q7, Q8
50.1ufCapacitor_THT:C_Disc_D6.0mm_W2.5mm_P5.00mmC1, C2, C3, C6, C7
410kResistor_THT:R_Array_SIP9RN1, RN2, RN3, RN4
4MountingHole_2.5mmMountingHole:MountingHole_2.5mmH1, H2, H3, H4
3100kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR21, R22, R23
210kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR9, R10
210ufCapacitor_THT:C_Disc_D6.0mm_W2.5mm_P5.00mmC4, C5
24.3kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR19, R20
274HC165Package_DIP:DIP-16_W7.62mmU6, U7
2SB520Diode_THT:D_DO-201AD_P15.24mm_HorizontalD1, D2
174HC595Package_DIP:DIP-16_W7.62mmU2
1CR2032Battery:BatteryHolder_Keystone_1058_1x2032BT1
1DC 5VConnector_BarrelJack:BarrelJack_Horizontal_MPJ4
1DS3231MZPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU5
1Display 5VConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ3
1EXTConnector_JST:JST_XH_B10B-XH-A_1x10_P2.50mm_VerticalJ20
1Feed Sensor L1Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ6
1Feed Sensor L2Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ9
1Feed Sensor PowerConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJP2
1Feed Sensor R1Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ8
1Feed Sensor R2Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ11
1GPIOConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ5
1I2C0Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ26
1I2C1Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ27
1I2C2Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ28
1I2C3Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ29
1I2C4Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ30
1I2C5Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ31
1I2C6Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ32
1I2C7Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ33
1LM1117Package_TO_SOT_THT:TO-220-3_Horizontal_TabDownU4
1Left LEDsConnector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ14
1Pi 5VConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ2
1Pico ResetButton_Switch_THT:SW_PUSH_6mmSW1
1Power busConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ7
1RTC HeaderConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ25
1Raspberry Pi GPIO headerConnector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_VerticalJ24
1Raspberry PicoRPi_Pico:RPi_PicoW_SMD_THU1
1Relay Board ConnectorConnector_JST:JST_XH_B10B-XH-A_1x10_P2.50mm_VerticalJ1
1Relay PullConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJP1
1ResetConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ16
1Right LEDsConnector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ15
1ShutdownConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ17
1TCA9548APackage_DIP:DIP-24_W15.24mmU3
1TP0610LPackage_TO_SOT_THT:TO-92_InlineQ9

More from plb500/AutoBloomer-SensorModules

1
  • 2 layers67.9 × 92.1 mmSensorPod Board, the printed circuit board in 3D

    SensorPod Board

    plb500/AutoBloomer-SensorModules

    Code and PCB designs for AutoBloomer MQTT sensor modules

    21 parts

Similar boards

  • 2 layers105 × 50 mmMagneto chico, the printed circuit board in 3D

    Magneto chico

    MarianoDel/kicad_magneto_chico

    Placa para el magneto chico

    53 parts
  • 2 layers150 × 50 mmRis-26 console v5, the printed circuit board in 3D

    Ris-26 console v5

    linkkwisteria-droid/ris-26

    Remote Igniting System 26, Avionics, ISP, NCKU

    25 parts1
  • 2 layers171.5 × 106.7 mmSequencer, the printed circuit board in 3D

    Sequencer

    westlicht/performer-hardware

    PER|FORMER Eurorack Sequencer - Hardware Design Files

    435 parts110
  • 2 layers160 × 100 mmEcb prototype, the printed circuit board in 3D

    Ecb prototype

    Noah1989/loopmicro

    An 8-bit microcomputer for the 21st century

    46 parts2MIT
  • 4 layers92 × 99.5 mmGranit, the printed circuit board in 3D

    Granit

    laenzlinger/granit

    Custom carrier board for Raspberry Pi CM4/CM5 — minimal offsite backup appliance with JMS578 USB-to-SATA bridge

    120 parts2CERN-OHL-P-2.0
  • 4 layers200 × 50 mmVFD Clock, the printed circuit board in 3D

    VFD Clock

    drewsum/VFD_Clock

    A VFD clock centered around a PIC32MZ EF microcontroller

    486 parts1
  • 4 layers60 × 79 mmSpeaking clock smd, the printed circuit board in 3D

    Speaking clock smd

    lhm0/talking_clock

    A talking clock for visually impaired users. ESP32 controlled, fully offline, long battery life.

    89 parts1
  • 2 layersESP, the printed circuit board in 3D

    ESP

    MurilloHorvath/KiCad

    Projetos utilizando o software KiCad

    72 parts1MIT

Questions

How big is the HardwareInterfaceBoard PCB?

It measures 156.9 × 102.2 mm and has 2 copper layers, 1.6 mm thick.

What parts does the HardwareInterfaceBoard use?

85 parts, built around the TCA9548APW, 74HC165D, 74HC595 and DS3231MZ/V+. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the HardwareInterfaceBoard KiCad files?

From the plb500/AutoBloomer-SensorModules repository on GitHub, at the commit this page was made from: the board is hardware/HIB/PCB/HardwareInterfaceBoard.kicad_pcb and its schematic hardware/HIB/PCB/HardwareInterfaceBoard.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the HardwareInterfaceBoard design in my own project?

Its repository states no licence, so its author keeps all rights: ask plb500 before reusing the design.