Skip to content

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.