Horse & Chariot (2023)

Through audio transmission, touch input, drawing ability, audio reception and motor power, this Arduino project takes a satirical stance on the creation of useful devices in order to explore capabilities of physical computing. It consists of two robots, the Horse and the Chariot, who must work together in order to draw a user-defined path. Conceptually, this project takes a single robot with a path-planning drawing function and, for no useful reason, decides to separate it into two different robots that are connected via a string and sound. This project was developed as part of the Computational Design and Digital Fabrication seminar at ITECH master´s program in collaboration with Cornelius Carl and Paula Castel. All the code for this project can be found on GitHub.

The Chariot is the brains of the operation, it receives a drawing from the user via a touchpad. It rationalizes a path into a set of movement commands then encodes it into a series of floating point numbers. One by one, the Chariot transmits the commands as audio (one approximately every 3 seconds) to the Horse. The Horse is the wheels of the operation. Using a microphone, it receives the floating point number over audio from the Chariot and decodes it into a movement command, which it promptly executes. The Horse pulls the Chariot along with it via a string and together they traverse the path. All the while, the Chariot drags chalk to mark out the users’ drawing.

With the objective of drawing a user input picture, the robots' process is organized into a series of steps that directly relate to hardware organization.

  1. 1. User defines path
  2. 2. Path converted to audio movement commands
  3. 3. Transmit (1) audio
  4. 4. Decode audio movement command
  5. 5. Execute movement & draw!

We will now examine these steps in greater detail in order to build a rounded picture of the system complexity.

1. User defines path

The process of drawing is initated by drawing a custom path on the Chariot's touchscreen. It records the drawing from the moment of contact until you release your finger. Internally, the path is divided into segments.

2. Path converted to audio movement commands

Next, the path segemtns are converted into vectors, orient via the previous direction. These values are encoded as numbers between 0.000 and 0.999, where 0.000 is left and 0.999 is right. Each value is converted into a series of five frequencies that are stored in a list.

3. Transmit (1) audio

Once every two seconds, the Chariot transmits the series of five frequencies via audio to the Horse.

4. Decode audio movement command

Upon recieveing audio, the Horse decodes the direction, virtually reverse engineering the encoding steps to determine the direction vector. The Horse then changes the speed of each wheel in relation to the movement direction.

5. Execute movement & draw!

Once all steps are combined together, the Horse and the Chariot begin to draw! An observer can watch and listen as the robot moves around and then evaluate if the movement path is similar to that of what they had drawn on the touch screen. *Above is a previous iteration of the robot body design.


  • (1) Arduino Nano 33 BLE
  • (1) Arduino Nano 33 BLE Sense
  • (1) Breadboard
  • (1-2) Piezo Speaker
  • (1) 1k Ohm Resistor
  • (1) 3.5” IPS Capacitive Touchscreen
  • (2) DC motor
  • (2) Matching wheel
  • (1) Arduino Shield L298N
  • (2) Battery Pack (9V + 12V)
  • (1) Handful of Wires
  • (1) Stick of Chalk
  • (700g) PLA
  • (200g) Rectangular Weight
  • (5) Castor Wheels
  • 3D Printer
  • Soldering Iron
  • Wire Stripper
  • Screwdriver
  • Drill
  • Caliper or ruler

Above is the list of items needed to build this project. We found that the motor driver is not optimal for the task, but [for the most part] it worked. The two robots also require a 3D-printed body, that is fully customizable.

Assembly of the Chariot requires most of the hardware and software. It requires a 9V battery to operate.

Assembly of the Horse is more delicate, as the motors must be fine tuned in relation to the incoming audio. It requires a 12V battery to operate.

Errors in wiring during the project resulted in the destruction of (2) Arduino Nano BLE Senses. This was quite frustrating and mildly costly. If one is to attempt to recreate this project based on what is shown here, a newer model of a motor driver is recommended.