Skip to the content
PCBKitNew board
2 layersMic Array, the printed circuit board in 3D

Hardware Part of sound source localization. Array circuit and 3 wheel omni drive code

Copper layers
2
Thickness
1.6 mm
Parts
16
Nets
16
Pads
32
Tracks, vias
64, 0
Routed
Yes
KiCad
KiCad 4
Created
21 Jul 2019
Updated
19 May 2026

Overview

Mic Array is an open-source printed circuit board by subashtimilsina, from the subashtimilsina/Sound-Source-Localization-Hardware repository on GitHub, published under the MIT licence. It is a 2-layer board with 16 parts on 16 nets, routed with 64 tracks and 0 vias.

It belongs with the audio and music boards of this library.

README

README.md

Sound Source Localization Robot — Hardware

Hardware design files and firmware for a mobile robot used in cubical microphone-array sound-source localization. The platform combines a three omni-wheel holonomic base with an eight-channel mic harness routed through custom KiCad PCBs. Signal processing (GCC-PHAT, grid search, real-time demos, etc.) lives in the companion software repository.

Robot with cubical microphone array

Software & algorithms (SSL)  ·  ISCRAM 2020 paper (PDF)


Table of contents


System overview

The robot was built to support 3D sound-source localization using a cubical array: one microphone channel is associated with each vertex of a rigid cube, so delays between channels carry direction-of-arrival information. The acquisition side (USB audio interfaces, streaming, and localization code) is described in the Sound-Source-Localization repo; this repository holds:

  1. Per-channel breakout boards for cabling from each mic location.
  2. Controller / array interconnect PCBs that bundle eight mic lines toward the digitizer stack.
  3. AVR firmware for the three omni-wheel mobile base (holonomic drive).

Experimental context and notation are given in the ISCRAM 2020 publication linked above.


Mechanical construction

  1. Holonomic base
    The robot stands on three omni wheels arranged for omnidirectional motion. Each wheel is driven by a DC motor with encoder/driver electronics (exact brackets and chassis cad are not stored in this repo; use the photograph and the ISCRAM paper as a reference for proportions and wiring clearance).

  2. Cubical microphone frame
    A rigid cube (or cubic frame) mounts above the base. Eight microphone capsules are placed at the corners of the cube so that pairwise time differences match the geometry used in the software (GCC-PHAT / grid search over candidate directions).

  3. Cable routing
    From each vertex, a short harness runs to a local breakout (see Individual array/), then longer runs converge on the Mic_Array controller board mounted near the compute stack. Keep pair lengths symmetric where possible and avoid running mic wires parallel to motor leads without shielding to reduce EMI.

  4. Stack
    The upper tray typically carries USB audio devices (multi-channel), power distribution, and the small-form PC or embedded computer used in the software repo’s notebooks and real-time scripts.


Electronics (PCBs)

All boards were designed in KiCad (legacy .sch / .kicad_pcb + cache libs). For fabrication, open the .kicad_pcb in a current KiCad release, run DRC, and export Gerbers; SVGs in each folder are convenient for documentation and quick visual checks.

Individual array/ — single-channel adapter

ArtifactPurpose
Individual_mic.sch / Individual_mic.kicad_pcbOne microphone MIC footprint wired to a 2-pin header and a JST EH-style 2-pin cable footprint (JST_CONN) for removable harness segments.

Use one small circuit board per microphone site (or per edge entry point, depending on your mechanical layout) so cube wiring can be unplugged for service.

Array_Ckt/ and Controller_Mic/ — eight-channel routing

ArtifactPurpose
Mic_Array.sch / Mic_Array.kicad_pcbConsolidates eight microphone channels: connectors are labeled Mic1–Mic4 in two symmetric groups (covering all eight physical channels—see schematic nets MicN vs MicN_chip). Each channel uses two CONN_01X02 headers: one faces the harness/array side, one faces the digitizer / preamp side.
Mic_Array-brd.svg, Mic_Array-B.Cu.svg, drawing.svgBoard artwork and copper preview for assembly notes.

Array_Ckt/ and Controller_Mic/ are two KiCad project folders; compare Gerber outlines if you only need one physical board revision for your build.


Embedded software (robot base)

Folder: 3_Omni_Base/

ItemDescription
3_Omni_Base.atsln, 3_Omni_Base/*.cppprojMicrochip Studio (Atmel Studio) solution targeting an AVR device (16 MHz F_CPU in headers.h).
main.cppInitializes a Wheel controller and runs a control loop: read command data, compute wheel speeds, update PWM to three motors.
Wheel.cpp / Wheel.hHolonomic mixing: 3×3 coupling matrix maps robot (vx, vy, ω)-style commands to three wheel velocities; Motor objects abstract per-wheel drive; get_joystick_data() reads UART packets (rcvdata[]), derives azimuth / elevation in preprocess_data(), and sets velocity_robot[] before calculate_wheel_velocity() and update_wheel_velocity().
uart.cpp / Motor.cppLow-level serial I/O and motor timing (MAX_RPM defined in Wheel.h).
Debug/*.hexBuilt firmware images (verify target MCU and fuse bits before flashing).

Typical workflow: open the solution in Microchip Studio, select the correct AVR part and programmer, build, then flash the hex to the base microcontroller. Confirm wheel rotation signs match your mechanical mounting before driving under joystick control.


Assembly & integration

  1. Fabricate Individual_mic and Mic_Array PCBs; populate headers and JST (or substitute compatible connectors).
  2. Mount mic elements on the cube; solder or connect flex leads to each Individual_mic board.
  3. Route eight channels into Mic_Array; from there, feed multicapture USB (see software repo) or your own AFE.
  4. Mount the base MCU and motor drivers; connect encoders/PWM as per your driver boards (not all motor electronics are in this repository).
  5. Flash 3_Omni_Base firmware and verify UART commands move the robot as expected.
  6. Run Sound-Source-Localization notebooks/scripts with the same geometry as the physical cube (channel order must match code).

Repository layout

PathContents
Individual array/KiCad single-mic breakout (MIC + JST + header).
Array_Ckt/KiCad Mic_Array routing + SVG artwork.
Controller_Mic/Second Mic_Array KiCad project (compare with Array_Ckt/ for your chosen revision).
3_Omni_Base/AVR holonomic base firmware (Atmel / Microchip Studio).
LICENSEMIT license.

License

This hardware description, design files, and firmware are provided under the MIT License (Copyright 2013–2020 Subash Timilsina).

For algorithm details, datasets, and SSL code, use the companion repository:
https://github.com/subashtimilsina/Sound-Source-Localization.

Parts

16
QtyValueFootprintReferences
2Mic1Pin_Headers:Pin_Header_Straight_1x02_Pitch2.54mmJ2, J10
2Mic1_chipPin_Headers:Pin_Header_Straight_1x02_Pitch2.54mmJ4, J12
2Mic2Pin_Headers:Pin_Header_Straight_1x02_Pitch2.54mmJ1, J9
2Mic2_chipPin_Headers:Pin_Header_Straight_1x02_Pitch2.54mmJ3, J11
2Mic3Pin_Headers:Pin_Header_Straight_1x02_Pitch2.54mmJ6, J14
2Mic3_chipPin_Headers:Pin_Header_Straight_1x02_Pitch2.54mmJ8, J16
2Mic4Pin_Headers:Pin_Header_Straight_1x02_Pitch2.54mmJ5, J13
2Mic4_chipPin_Headers:Pin_Header_Straight_1x02_Pitch2.54mmJ7, J15

Questions

What parts does the Mic Array use?

16 parts. 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 Mic Array KiCad files?

From the subashtimilsina/Sound-Source-Localization-Hardware repository on GitHub, at the commit this page was made from: the board is Controller_Mic/Mic_Array.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Mic Array design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from subashtimilsina/Sound-Source-Localization-Hardware

2
  • 2 layers164.2 × 199.4 mmIndividual mic, the printed circuit board in 3D

    Individual mic

    subashtimilsina/Sound-Source-Localization-Hardware

    Hardware Part of sound source localization. Array circuit and 3 wheel omni drive code

    16 partsMIT
  • 2 layersMic Array, the printed circuit board in 3D

    Mic Array

    subashtimilsina/Sound-Source-Localization-Hardware

    Hardware Part of sound source localization. Array circuit and 3 wheel omni drive code

    8 partsMIT

Similar boards

  • 2 layers140.5 × 30 mmType e, the printed circuit board in 3D

    Type e

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    16 parts3kApache-2.0
  • 2 layers41.4 × 14.5 mmU2f zero, the printed circuit board in 3D

    U2f zero

    conorpp/u2f-zero

    U2F USB token optimized for physical security, affordability, and style

    16 parts2.4k
  • 2 layers122 × 37 mmV0-UmbilicalBoard, the printed circuit board in 3D

    V0-UmbilicalBoard

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    16 parts1.1kGPL-3.0
  • 2 layers152 × 57.6 mmVideoslotadapter, the printed circuit board in 3D

    Videoslotadapter

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    16 parts1kGPL-3.0
  • 2 layers36 × 63.4 mmSmart ringfinal layout, the printed circuit board in 3D

    Smart ringfinal layout

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    16 parts915
  • 2 layers60 × 40 mmHASwitchPlate, the printed circuit board in 3D

    HASwitchPlate

    aderusha/HASwitchPlate

    LCD touchscreen for Home Automation

    16 parts738MIT
  • 2 layers21.1 × 26.9 mmDemo, the printed circuit board in 3D

    Demo

    easyw/kicadStepUpMod

    kicadStepUp: ECAD to MCAD FreeCAD WorkBench

    16 parts704