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.
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.
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.
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
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 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.
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.
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:
destination id +
packet type +
request type +
and corresponding response
destination id +
packet type +
sensor data +
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.