Close

Week 5

A project log for Reaction Wheel Self Balancing Cube

This project attempts to prototype a self balancing cube using three reaction wheels

dami-kimDami Kim 03/21/2025 at 07:570 Comments

Feb 9 - 15

#define PWM_PIN 9      // Yellow - Speed control (PWM)
#define START_PIN 8    // Blue - Start/Stop
#define DIR_PIN 7      // Green - Direction (CW/CCW)
#define BRAKE_PIN 4    // White - Brake (GND = brake, Floating = release)

void setup() {
    pinMode(PWM_PIN, OUTPUT);
    pinMode(START_PIN, OUTPUT);
    pinMode(DIR_PIN, OUTPUT);
    pinMode(BRAKE_PIN, OUTPUT);

    // Set Timer1 to 20kHz PWM frequency on pin 9
    TCCR1B = (TCCR1B & 0b11111000) | 0x01;  

    // Set default motor state
    digitalWrite(START_PIN, HIGH);  // Start motor
    digitalWrite(DIR_PIN, LOW);     // Default: CW rotation
    digitalWrite(BRAKE_PIN, HIGH);  // Release brake
    analogWrite(PWM_PIN, 128);      // Set speed to 50% (range 0-255)
}

void loop() {
    // Engage brake for 3 seconds, then release
    delay(5000);
    digitalWrite(BRAKE_PIN, LOW);  // Engage brake
    delay(3000);
    digitalWrite(BRAKE_PIN, HIGH); // Release brake

    // Toggle direction
    delay(1000);
    digitalWrite(DIR_PIN, !digitalRead(DIR_PIN));

    // Gradually increase speed
    for (int speed = 50; speed <= 255; speed += 50) {
        analogWrite(PWM_PIN, speed);
        delay(1000);
    }

    // Stop motor for 3 seconds
    digitalWrite(START_PIN, LOW);
    delay(3000);
    digitalWrite(START_PIN, HIGH);
}

Discussions