THE TECHNIQUE¶
Narrative¶
A motor rotates &, setting a gear in motion, lifts the bubbles, initiating a rhythm that resembles breathing-like movements. The object defines the rhythm. The wearer begins to adapt, slowly attuning to its rhythm.
It becomes a quiet reminder: to listen to nature, to reconnect with its tempo, & to relearn how to adapt— rather than expecting the world to adapt to us.


Hardware Assumptions¶
System Flow (Simplified)¶
- The power bank supplies power to the Seeed XIAO RP2040 through USB.
- The 7.4V Li-ion battery supplies power to the TB6612FNG motor driver.
- The XIAO RP2040 reads the push button input.
- The button toggles the motor state on and off.
- The TB6612FNG motor driver receives control signals from the XIAO.
- The motor driver powers the MG-6V-1 DC gear motor.
- The motor rotates the gear mechanism.
- The gear mechanism lifts the bubbles and initiates a breathing-like motion.
- The object defines the rhythm; the wearer adapts to it.
Short¶
- XIAO = Brain (logic)
- Push button = Input (trigger)
- TB6612FNG = Motor control interface
- DC gear motor = Output (movement)
- Power bank = Logic power
- 7.4V Li-ion battery = Motor power
- Gear mechanism = Motion transfer
System Components & Functions¶
Component Overview¶
| Component | Type | Role in the System | Important Notes |
|---|---|---|---|
| Seeed XIAO RP2040 | Microcontroller | Central controller: reads the button state and controls the motor driver | Powered separately by the power bank via USB |
| Power Bank | Power source | Supplies power to the XIAO RP2040 | Used only for the microcontroller / logic side |
| 7.4V Li-ion Battery | Power source | Supplies power to the motor driver and motor | Must share common ground with the XIAO system |
| TB6612FNG Motor Driver | Driver / Interface | Controls the DC motor based on signals from the XIAO | The motor must not be driven directly from the microcontroller |
| MG-6V-1 380-30RPM DC Gear Motor | Actuator | Generates rotational movement | Drives the gear mechanism; rated for 6V, so 7.4V should be used with caution |
| Push Button | Input | Toggles the motor state on and off | Uses internal pull-up in the code |
| Gear Mechanism | Mechanical transmission | Transfers motor rotation into lifting motion | Converts motor rotation into the breathing movement of the bubbles |
| Wiring (jumper wires, connectors, etc.) | Connectivity | Connects all components electrically | Common ground is essential |
Wiring Connections¶
Power Supply¶
Logic Power - Power bank USB → Seeed XIAO RP2040 USB-C port Motor Power - 7.4V Li-ion Battery (+) → TB6612FNG VM - 7.4V Li-ion Battery (−) → TB6612FNG GND Driver Logic Power - XIAO 5V or 3.3V → TB6612FNG VCC - XIAO GND → TB6612FNG GND
Common Ground (Very Important)¶
Even though the XIAO & motor use separate power sources, they must share a common ground: - XIAO GND → TB6612FNG GND - Li-ion battery (−) → TB6612FNG GND All grounds must be connected together.
Microcontroller (Seeed XIAO RP2040)¶
Control Pins from Code | XIAO Pin | Function | | -------- | -------- | | D10 | PWMA | | D9 | IN1 | | D8 | IN2 | | D7 | STBY | | D6 | BUTTON |
Push Button¶
- One side of the push button → XIAO D6
- Other side of the push button → GND
TB6612FNG Motor Driver¶
| TB6612FNG Pin | Connection |
|---|---|
| VM | 7.4V Li-ion battery (+) |
| VCC | XIAO 5V or 3.3V |
| GND | Common GND |
| PWMA | XIAO D10 |
| AIN1 | XIAO D9 |
| AIN2 | XIAO D8 |
| STBY | XIAO D7 |
DC Motor¶
| Motor Terminal | Connection |
|---|---|
| Motor wire 1 | TB6612FNG A01 |
| Motor wire 2 | TB6612FNG A02 |
THE CODE¶
#define PWMA D10
#define IN1 D9
#define IN2 D8
#define STBY D7
#define BUTTON D6
bool motorState = false; // false = OFF, true = ON
bool lastButtonState = HIGH; // for detecting button press
void setup() {
pinMode(PWMA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(STBY, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP); // internal pull-up resistor
// Enable motor driver
digitalWrite(STBY, HIGH);
stopMotor();
}
void loop() {
bool currentButtonState = digitalRead(BUTTON);
// Detect button press (HIGH → LOW transition)
if (lastButtonState == HIGH && currentButtonState == LOW) {
motorState = !motorState; // toggle state
delay(200); // simple debounce
}
lastButtonState = currentButtonState;
// Control motor based on state
if (motorState) {
rotateForward(40);
} else {
stopMotor();
}
}
void rotateForward(int speed) {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(PWMA, speed);
}
void stopMotor() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(PWMA, 0);
}

THE PLACEMENT¶

with technical support of: Jose Ángel Gerardo Mora Aquino
. . . . . . .
©️ Copyright 2024 laura Muth
- All project & material experiment images are my own & were photographed by me.
- Other images are credited to the respective artists below.