Times is a work conceptualized by Victoria Hertel as part of Bad Clocks: Alley through a Pinhole involving 12 bells that sound when the audience walked around them. The work was finalized and built over the course of 2 weeks, so please excuse the rough edges should you spot any :).


After taking apart a standard Concierge bell to examine how it worked, we started experimenting with solenoid actuators to strike the bell since they were the simplest options both electrically and mechanically.

It's not that evident in the video below, but we found that by controlling how long the solenoid was activated for, we could change the resulting loudness of the tone.

The challenge was then to miniaturize the whole setup - the bells themselves were approximately 40mm in diameter, leaving barely any room to work with. We settled with mounting the solenoid at an angle after considering both aesthetics and keeping the Center of gravity centered so that the bell did not tip to the side.

Initial prototype of bell and solenoid mounted together
Final bells after a little slimming down


To detect people around the work, we used VL53L5CX Time-of-Flight multi-zone sensors. These sensors measure the distance to a grid of zones, which we use to detect whether a person is next to a bell.

Sensor mounted to support structure

A bit of experimentation suggested that the field-of-vision of a single sensor would not cover a sufficiently wide area, hence we mounted 4 of them around the circle for full coverage.

Sensor coverage

The tricky bit with using these sensors is communicating with them: the sensors communicate with a microcontroller over I2C, which is a fragile and sensitive protocol. Rather than risk flaky communications (especially considering the potential electrical noise caused by powering solenoids over long cables running next to communication lines), we chose to build individual sensor nodes that communicate with the main controller over RS485.

The software for the sensor nodes can be found at https://github.com/JustinOng/vl53l5cx-node

Main Controller

The main controller and sensor nodes are all based on ESP32-S2 development kits, chosen purely because I happened to have enough on hand from past projects.

Electrically it's straightforward:

Software Control

Software available at https://github.com/JustinOng/solenoid-controller

Solenoid Control Pulses

Earlier, we established that control of the pulse lengths would be very useful to allow adjustments to the loudness of the bells. Analogous to timers on a traditional microcontroller, we use the RMT peripheral to generate our pulses. We also took advantage of the GPIO matrix to route the same RMT channel to each of our 12 output pins since the ESP32-S2 only has 4 RMT channels. This worked well since the solenoids were triggered relatively infrequently, so queuing the pulses to be executed individually had no perceptible impact.

Control Interface

Since the ESP32-S2 has WiFi capabilities, we built a simple web interface to allow for configuration of various parameters, and monitoring of the sensors and system state. This worked really well, though we observed some instability when constantly polling for the sensor status.

Screenshot of the configuration interface

Communication with Sensor nodes

Although MODBUS would have been standard to layer over RS485 for communication, we instead chose to roll our own fixed-length protocol in the interest of development time.

A simple request:

header + destination id + packet type + request type + trailer

and corresponding response

header + destination id + packet type + sensor data + trailer

was sufficient for this application. The trailer was used to identify the end of packet transmission using the pattern trigger of the UART peripheral.


The structure was fabricated from laser-cut stainless steel then bolted together.

Shout-out to Baremetalco for the fabrication and Allister Towndrow for the rigging support, without which this work would not have been possible.