Our project combines mechanical design with robotics to create a unique drawing machine: a cat-themed polargraph plotter designed as a medium for "cat-to-human communication". This playful concept imagines a machine that could "translate" a cat's meows into written messages for their human companions.
Initially, we planned to participate in Flamingalo, the Portuguese version of Burning Man, with an art installation featuring a cable robot traveling between trees. However, due to circumstances, we redirected our efforts to align with our final project: the Cat's Gym.
Original sketch of the cable robot concept
Our design is inspired by a traditional polargraph plotter, which uses two motors mounted at the top corners of a surface. These motors control the length of two cords or belts, which suspend a pen in between them. By precisely changing the lengths of these cords, the pen moves smoothly across a 2D surface, plotting images or text.
We adapted this basic idea with custom cat-themed mechanical features:
CAD model of the pen holder with rack and pinion system
Cat-shaped laser-cut components
Testing electronics setup
Wiring the components
Unlike traditional polargraph designs that use fishing line or string, our system uses dented belts for transmitting movement from the stepper motors to the gondola. This provides more precision and reliability. The counterweights on one side balance with the gondola weight, ensuring smooth movement. The servo motor connects to a rack and pinion system that precisely controls the pen's up/down movement.
Complete electronics setup for the cat-themed polargraph
Before implementing the full IPAD solution, we tested the hardware components individually. The following Arduino test sketch allowed us to verify the connections and proper functioning of both stepper motors and the servo:
// Polargraph Components Test Sketch
// Tests 28BYJ-48 stepper motors and servo on specified pins
#include <Stepper.h>
#include <Servo.h>
// Define stepper parameters
const int stepsPerRevolution = 2048; // 28BYJ-48 steps per revolution with gear reduction
Servo penServo;
// Initialize left stepper on pins 8, 10, 9, 11 (this order is important for proper rotation)
Stepper leftStepper(stepsPerRevolution, 8, 10, 9, 11);
// Initialize right stepper on pins 4, 6, 5, 7 (this order is important for proper rotation)
Stepper rightStepper(stepsPerRevolution, 4, 6, 5, 7);
// Servo setup on pin 12
int servoPin = 12;
int penUp = 90; // Adjust these angles based on your setup
int penDown = 140;
void setup() {
// Set stepper motor speed (RPM)
leftStepper.setSpeed(10); // 10 RPM is a good starting speed for testing
rightStepper.setSpeed(10);
// Initialize servo
penServo.attach(servoPin);
penServo.write(penUp); // Start with pen up
// Initialize serial for debugging
Serial.begin(9600);
Serial.println("Polargraph Components Test");
Serial.println("Commands: 'L' - Left stepper, 'R' - Right stepper, 'U' - Pen up, 'D' - Pen down, 'B' - Both steppers");
}
void loop() {
// Check if there's any incoming serial data
if (Serial.available() > 0) {
char command = Serial.read();
switch (command) {
case 'L':
case 'l':
// Test the left stepper motor with 1/4 rotation in each direction
Serial.println("Testing left stepper - 1/4 rotation clockwise");
leftStepper.step(stepsPerRevolution / 4); // 512 steps = 1/4 rotation
delay(500);
Serial.println("Testing left stepper - 1/4 rotation counter-clockwise");
leftStepper.step(-stepsPerRevolution / 4);
break;
case 'R':
case 'r':
// Test the right stepper motor with 1/4 rotation in each direction
Serial.println("Testing right stepper - 1/4 rotation clockwise");
rightStepper.step(stepsPerRevolution / 4);
delay(500);
Serial.println("Testing right stepper - 1/4 rotation counter-clockwise");
rightStepper.step(-stepsPerRevolution / 4);
break;
case 'U':
case 'u':
// Move the servo to pen-up position
Serial.println("Pen up");
penServo.write(penUp); // 90 degrees by default
break;
case 'D':
case 'd':
// Move the servo to pen-down position
Serial.println("Pen down");
penServo.write(penDown); // 140 degrees by default
break;
case 'B':
case 'b':
// Test both steppers simultaneously for coordinated movement
Serial.println("Testing both steppers simultaneously");
// Move both steppers forward simultaneously
for (int i = 0; i < (stepsPerRevolution / 8); i++) {
leftStepper.step(1);
rightStepper.step(1);
}
delay(500);
// Move both steppers backward simultaneously
for (int i = 0; i < (stepsPerRevolution / 8); i++) {
leftStepper.step(-1);
rightStepper.
rightStepper.step(-1);
}
break;
}
}
}
// Modify these lines to match your pin connections
// Left stepper on pins 8,9,10,11
#define LEFT_STEP_PIN1 8
#define LEFT_STEP_PIN2 9
#define LEFT_STEP_PIN3 10
#define LEFT_STEP_PIN4 11
// Right stepper on pins 4,5,6,7
#define RIGHT_STEP_PIN1 4
#define RIGHT_STEP_PIN2 5
#define RIGHT_STEP_PIN3 6
#define RIGHT_STEP_PIN4 7
// Servo on pin 12
#define SERVO_PIN 12
When working with the IPAD software, we paid special attention to:
Close-up of the pen holder with the servo-controlled rack and pinion system
The final assembly brought together all components into our cat-themed design. The dented belts connect the stepper motors to the gondola with the cat-themed frame. The servo-controlled rack and pinion system provides precise pen control, while the counterweights ensure smooth motion across the drawing surface.
Our polargraph successfully draws various patterns and shapes, and with further development could be integrated into our broader Cat's Gym project. The cat-shaped aesthetic perfectly complements its intended purpose as a "feline secretary" that translates cat communications into visual form.
Note: This project combines mechanical design with electronics and programming to create a unique, cat-themed polargraph drawing machine. The design not only functions as a plotting device but also serves as an artistic expression of how technology might help bridge the communication gap between cats and their human companions.