WiReSens Workshop

WireSens
Workshop

Everything you need to know to buy and build your own resistive tactile sensing system.

Overview

Goals

By the end of this workshop, participants will know how to:

  • Order, set up, and test WiReSens zero potential readout circuits
  • Analyze tactile sensing data
  • Order and assemble flex PCB tactile sensors
Before You Begin

Prerequisites

Action required: Install the required software and create accounts for all required services listed below before the workshop begins. Items marked Optional are only needed if you plan to build or modify firmware yourself.
VSCode and PlatformIO Optional
Purpose: For building and flashing custom firmware onto WiReSens devices
CP210x Driver
Purpose: to enable communication between the computer and the WiReSens devices
  1. Step 1: Download the driver according to your OS
  2. Step 2: Unzip the folder and find the silabser.inf file
  3. Step 3: Right click the silabser.inf file and select "Install"
GitHub
Purpose: for accessing the codespace for data analysis
Inkscape
Purpose: For editing tactile sensor designs
Hardware Overview

Resistive Tactile Sensing Speedrun

Resistive tactile sensors are particularly useful for capturing spatially distributed, dynamic forces. A resistive tactile sensing system built with WiReSens will have three high-level components: the sensor, a readout circuit, and a microcontroller.

Let's have a closer look at each.

Basic system components overview

Resistive Matrix Tactile Sensors

Resistive matrix sensor structure

Resistive matrix-based sensors are made by orthogonally arranging top and bottom electrodes over a piezoresistive layer. They measure pressure through the change in resistance at the intersections of these electrodes.

WiReSens Tidbits
  • WiReSens supports up to 16×16 sensors

Readout Circuit

To actually measure this change in resistance, a voltage divider circuit is traditionally used.

Voltage divider circuit

While simple and minimal, you'll encounter two major problems if you stop here.

The first is you'll get a lot of "cross-talk". In other words, if you apply pressure at one individual sensing "node", all of the surrounding nodes will see a change in resistance also. This is because the current has lots of paths it can travel.

Cross-talk in a resistive sensor array
"High-Accuracy, Compact Scanning Method and Circuit for Resistive Sensor Arrays", Kim et. al

You can solve this by adding an "op amp" on the read-in side of the sensing array — our circuit does exactly this.

Op-amp circuit eliminating cross-talk
"High-Accuracy, Compact Scanning Method and Circuit for Resistive Sensor Arrays", Kim et. al

The second problem is the sensitivity and range of pressures we can sense is limited by the choice of R1. If our piezoresistive material has a high base resistance (R2) relative to R1, Vout will always read ~Vref. Similarly if R2 is low relative to R1, Vout will always read ~0V.

Adding a digital potentiometer allows us to control this R1 value, and effectively tune the "sensitivity"/range of the system for different sensors.

WiReSens circuit with digital potentiometer
WiReSens circuit architecture including isolation amplifiers and digital potentiometer
WiReSens Tidbits
  • Uses flex cable connectors to interface with the tactile sensor
  • Qwiic ports available for interfacing with other sensors via I2C or ESP analog read
  • Works best if the base resistance of your sensor is between 300 Ω and 50 kΩ
  • Uses external ADC for improved sampling rate

Microcontroller

The microcontroller's main job is to 1) scan the sensing array, 2) read the sensor values, and 3) transmit the sensor values to your laptop.

We use the Adafruit Feather ESP32, mainly because it's familiar, has native LiPo battery ports/charging, works wirelessly, and has compact access to lots of I/O.

WiReSens Tidbits
  • We support and recommend wireless communication via the ESP-NOW protocol — more information in the firmware sections
Hardware

The Readout Circuit

This section covers ordering, programming, and verifying the readout circuit before connecting sensors.

Ordering the PCB

The PCB is best ordered through JLCPCB. Detailed step by step instructions are provided at this site: PCB Docs.

  1. Download the PCB design files (gerbers + BOM) from the above link
  2. Upload gerber files to JLCPCB
  3. Select appropriate board specifications
  4. Upload BOM and component placement for assembly
  5. Order the Adafruit Feather ESP32 V2 — one per PCB for USB connection, or two for wireless
  6. Order (female) headers for the microcontroller and (male) headers for the breakout board — headers
  7. Order flex cable connectors (16 pins, 0.5mm pitch, any length and type)
  8. Order an FFC breakout board (16 pins, 0.5mm pitch)
  9. (Optional) Order ribbon cables
  10. (Optional) Order LiPo batteries from Adafruit — other brands may have reversed polarity, which can damage the microcontroller
Heads up — component rotation issue: The rotation of components in the placement file is off and hasn't been fixed yet. If you receive an email from JLCPCB asking about component orientations, you can reply with the images below, which show the correct orientations for both sides of the board.
Correct component orientations for PCB top side
Correct component orientations — top side
Correct component orientations for PCB bottom side
Correct component orientations — bottom side

Downloading Firmware to the PCB

Firmware is flashed directly from your browser using WiReSens-Online — no local toolchain required.

  1. Solder the header pins to the PCB and plug in the ESP32. The USB port should face the FFC connectors; the back pins of the ESP32 align with the back pins of the readout circuit (pins will hang out at the front — that is normal).
  2. Connect the transmitter microcontroller to your laptop via USB.
  3. Open wiresens-online.vercel.app in Chrome.
  4. In the Connection panel, click Transmitter → Flash firmware.
  5. If you are using wireless transmission, repeat the process for the receiver: connect it via USB and click Receiver → Flash firmware.
  6. For the receiver, also click the Pair button to pair it to the transmitter.

Testing the PCB

After flashing, verify everything is functioning from WiReSens-Online before attaching sensors.

  1. With the transmitter connected via USB, click the Connect button in WiReSens-Online. Confirm you can see the packet counter increasing — this means the device is communicating correctly.
  2. If using a receiver, click Connect on the receiver as well and confirm its packet counter is also increasing.
  3. While the transmitter is connected, you can adjust the gain of the sensor to tune sensitivity for your specific sensor material.
  4. You can also switch between wireless and wired transmission modes from this panel.
Going wireless: To use the sensor wirelessly, switch the transmitter to wireless mode while it is still connected via USB, then disconnect the USB cable and plug in a LiPo battery. The transmitter will continue streaming data to the paired receiver over ESP-NOW.
Software

Record and Analyze Data

Once the readout circuit is connected and transmitting, this section covers how to capture, process, and visualize tactile sensing data.

WiReSens-Online

Chrome required: WiReSens-Online uses Web Serial API, which is only supported in Chrome-based browsers.

WiReSens-Online is a browser-based tool for connecting WiReSens devices, flashing firmware, configuring settings, and visualizing and recording tactile sensing data — no local software installation required.

What you can do in WiReSens-Online
  • Flash firmware to the transmitter and receiver directly from the browser
  • Pair the receiver to the transmitter with a single click
  • Monitor live packet counts to confirm the device is communicating
  • Adjust the sensor gain while connected to tune sensitivity
  • Switch between wireless and wired transmission modes
  • Record data sessions using the Record button

WireSensBackend

WireSensBackend is a Python library for recording data locally and performing offline analysis. Use it when you need more control over the recording process, want to interface with other technologies, or are building a custom application. The backend also supports multiple devices simultaneously. The repository includes a GitHub Codespace so you can start using it immediately without any local setup.

Sensors

Flex PCB Sensors

The sensing element is a flexible PCB that conforms to a glove substrate. This section covers ordering and assembling pre-made flex PCB glove sensors, and designing custom sensor layouts for your own application.

Ordering & Assembling Gloves

Detailed documentation for ordering and assembling the flex PCB glove sensors already exists — follow the guide below, which covers everything from sourcing components to final assembly.

Flex PCB Glove Docs — Ordering & Assembly

Designing Your Own Sensors

To design sensors for a custom form factor, draw your electrode geometry as SVG paths in Inkscape or Illustrator. The files handBackNew.svg and handFrontNew.svg in this repository contain worked examples of hand-shaped SVG electrodes you can use as a starting point.

Once you have an SVG, use the Python tooling in the repository below to convert it to a KiCad file, then export gerbers from KiCad for fabrication. The README includes step-by-step instructions for both conversions, and this process is well-suited to acceleration with generative AI tools.

fpcb-glove-design — SVG → KiCad → Gerber tooling