HC3

HC3 CubeSat Overview

The HC3 CubeSat is a lightweight satellite designed for educational and research purposes, entirely constructed using advanced 3D printing technologies. Its structure is composed of four modular components that interlock to form the complete satellite. Utilizing PPA-CF filament, the HC3 achieves both durability and reduced weight, making it optimal for space applications. The design emphasizes cost-effectiveness and accessibility, showcasing how 3D printing can revolutionize satellite manufacturing.

 

Contribution of BambuLab

BambuLab's cutting-edge 3D printing technology has played a pivotal role in the HC3's development. Their high-precision printers and support for advanced materials like carbon-fiber-reinforced filaments have enabled the realization of intricate designs and robust structures. This collaboration exemplifies the potential of integrating commercial 3D printing expertise into aerospace projects, further bridging the gap between consumer-grade tools and advanced space exploration initiatives.

HC3 Mission: Design, Architecture, and

System Analysis for CubeSat Operation

Abstract

This paper presents an in-depth analysis of the design, structure, component configuration,

and operational capabilities of the HC3 CubeSat. The mission of the HC3 is to capture

environmental data while in orbit, relaying critical information to an Earth-based station. The

HC3 CubeSat utilizes advanced components, including a robust composite frame, solar

power systems, and a LoRa radio communication link, optimized for long-term reliability and

operational efficiency in low Earth orbit (LEO).

1. Introduction

The HC3 CubeSat project was initiated with the primary mission of demonstrating

cost-effective, reliable, and versatile CubeSat technology. Designed to collect and transmit

environmental data, the HC3 mission focuses on leveraging compact, efficient systems that

support remote sensing and data relay applications. The CubeSat integrates cutting-edge

materials and technologies, ensuring resilience and functionality in the challenging

conditions of space.

2. Mission Overview

The HC3 will deploy into LEO, where it will operate autonomously, collecting data on

temperature, humidity, and barometric pressure, among other environmental parameters.

Data collected by HC3 will be transmitted to Earth using LoRa radio technology, with a

planned mission duration of six months. The mission also seeks to validate the performance

of PPA-CF (polyphthalamide carbon fiber) composite material in the CubeSat structure,

which may have implications for future satellite designs.

3. Design and Structure

● FrameComposition: The HC3 frame is built from PPA-CF composite, offering a high

strength-to-weight ratio and excellent thermal resistance. This material is ideal for

small satellite construction due to its durability in extreme thermal environments.

● Thermal Management: Passive thermal control is achieved through the inherent

properties of PPA-CF, which can withstand significant temperature fluctuations. This

will maintain system integrity and prevent damage to sensitive internal components.

● Structural Integrity: The frame and casing are designed to withstand launch stress,

using a compact, lightweight structure that minimizes mass without compromising

strength.

4. Power System

● Battery Storage: HC3 is powered by a 3.7V 2500mAh Lithium-Ion Polymer Battery,

selected for its capacity-to-weight ratio and rechargeability.

● Solar Energy: The Solar Lipo Charger ensures continuous power supply, utilizing

solar panels that capture and convert sunlight for battery recharge. This dual power

source system minimizes reliance on ground-based interventions, maximizing HC3's

autonomy.

● EnergyManagement: Efficient power distribution is managed by a microcontroller

that monitors power levels, ensuring optimal energy allocation between systems.

5. Communication System

● LoRaRadio: The CubeSat employs a FireBeetle LoRa Radio 433MHz module for

data transmission. This module is well-suited for long-range communication, capable

of transmitting data over significant distances despite the CubeSat’s small size.

● Transmission Protocol: LoRa modulation allows for efficient use of power and

bandwidth, essential for small satellite applications where power is limited.

6. Control System and Propulsion

● GroundControl Interface: Communication with the ground station will occur at

scheduled intervals to upload data packets, with redundancy protocols in place for

failed transmissions.

● Attitude Control: An N20 Worm Gear Motor is used for precise control of the

CubeSat's orientation. This motor enables rotation on a fixed axis, facilitating

adjustments for optimal solar panel exposure or data collection alignment.

● Stability: With the worm gear motor, the CubeSat can maintain a stable orientation

during its orbit. This setup is efficient for small adjustments, which are essential in

optimizing data acquisition.

7. Sensors and Data Collection

● SensorArray: Equipped with an Arduino Nicla Sense ME module, HC3 can

measure environmental parameters such as temperature, pressure, and humidity.

● DataManagement: The data gathered by the sensors will be processed, stored, and

transmitted to the ground station through the LoRa radio link. Collected data helps

assess atmospheric conditions and can assist in validating CubeSat resilience in

various operational scenarios.

● SensorCalibration: Periodic recalibration of the sensors is managed by on-board

software to ensure data accuracy over the mission duration.

8. Processing Unit

● Processor and Data Handling: The main processing unit integrates an advanced

microcontroller system that coordinates all CubeSat operations. It manages data

collection, processing, and transmission, in addition to performing power distribution

control.

● Error Management: An error-correction protocol is embedded within the processor

to handle data transmission interruptions and maintain system stability.

9. Conclusion

The HC3 CubeSat is engineered to meet the challenges of an LEO mission, with a versatile

framework and autonomous systems designed for long-term data collection and

transmission. The mission provides a practical approach to small satellite applications,

utilizing durable composite materials, efficient energy management, and resilient

communication protocols. Future developments will explore the application of HC3

technologies in higher orbits and larger satellite platforms

CODE


//      @mpla
//      copyright 12024
//      MIT License

//   Permission is hereby granted, free of charge,
//   to any person obtaining a copy of this software 
//   and associated documentation files (the “Software”),
//   to deal in the Software without restriction,
//   including without limitation the rights to use,
//   copy, modify, merge, publish, distribute, sublicense,
//   and/or sell copies of the Software, and to permit
//   persons to whom the Software is furnished to do so,
//   subject to the following conditions:


const float G = 6.67430e-11;             // (m^3 kg^-1 s^-2)
const float M_earth = 5.972e24;          // (kg)
const float R_earth = 6371000;           // (m)
const float rho = 1.225;                 // (kg/m^3)
const float drag_coeff = 2.2;
const float area = 0.01;                 // (m^2)
const float mass_satellite = 1.3;        // (kg)
const float communicationPower = 0.5;    // (LoRa)
const float sensorPower = 0.05;          // (50mW)
const float controlSystemPower = 0.2;    // (reaction wheels)
const float microcontrollerPower = 0.03; // (30mA)
const float MAGNETIC_THRESHOLD = 1.5; 
const float GYROSCOPE_THRESHOLD = 5.0; 
const float ACCELEROMETER_THRESHOLD = 0.5;

float altitude = 110000; //  LEO (m)
float velocity = 7800;   // (m/s)
float pos_x = 0, pos_y = R_earth + altitude; // Χ0
float vel_x = velocity, vel_y = 0;
float dt = 1; // (1s)
float magneticFieldX, magneticFieldY, magneticFieldZ;
float gyroX, gyroY, gyroZ;
float accelX, accelY, accelZ;

unsigned long communicationTime = 1800; 
unsigned long sensorTime = 300;         
unsigned long controlTime = 600;        
unsigned long microcontrollerTime = 3600; 

const float max_acceleration = 10.0; // m/s²
const float max_angular_velocity = 20.0; // rad/s
const float max_magnetic_field = 50.0;   // μT


float calculateEnergy(float power, unsigned long time) {
  return power * time; 
}

float atmospheric_density(float altitude) {
  if (altitude > 100000) return 0; 
  return rho * exp(-altitude / 8500.0); 
}


float gravitational_force(float altitude) {
  float r = R_earth + altitude;
  return G * M_earth * mass_satellite / (r * r);
}


float drag_force(float velocity, float altitude) {
  float density = atmospheric_density(altitude);
  return 0.5 * density * drag_coeff * area * velocity * velocity;
}


float accelerometer_reading(float acc_x, float acc_y) {
  return sqrt(acc_x * acc_x + acc_y * acc_y);
}


float gyroscope_reading(float angular_velocity) {
  return angular_velocity;
}


float magnetometer_reading(float altitude) {
  return 40.0 * exp(-altitude / 20000.0); 
}

void check_sensor_limits(float acceleration, float angular_velocity, float magnetic_field) {
  if (acceleration > max_acceleration) {
    Serial.println("a out of order");
  }
  if (angular_velocity > max_angular_velocity) {
    Serial.println("Ω-u out of order");
  }
  if (magnetic_field > max_magnetic_field) {
    Serial.println("T out of order");
  }
}

void update_position_and_velocity() {
  
  float r = sqrt(pos_x * pos_x + pos_y * pos_y);

  float F_gravity = gravitational_force(r - R_earth);

  float F_drag = drag_force(velocity, r - R_earth);

 
  float acc_x = -F_gravity * (pos_x / r) / mass_satellite;
  float acc_y = -F_gravity * (pos_y / r) / mass_satellite;

  
  acc_x -= (F_drag / mass_satellite) * (vel_x / velocity);
  acc_y -= (F_drag / mass_satellite) * (vel_y / velocity);

  
  vel_x += acc_x * dt;
  vel_y += acc_y * dt;

 
  pos_x += vel_x * dt;
  pos_y += vel_y * dt;

  
  velocity = sqrt(vel_x * vel_x + vel_y * vel_y);

  
  float acceleration = accelerometer_reading(acc_x, acc_y);
  float angular_velocity = gyroscope_reading(velocity / r);
  float magnetic_field = magnetometer_reading(r - R_earth);

  check_sensor_limits(acceleration, angular_velocity, magnetic_field);

  Serial.print("H: ");
  Serial.print(r - R_earth);
  Serial.print(" m, U: ");
  Serial.print(velocity);
  Serial.print(" m/s, a: ");
  Serial.print(acceleration);
  Serial.print(" m/s², T: ");
  Serial.print(magnetic_field);
  Serial.println(" μT");
}

void setup() {
  Serial.begin(9600);

  
  float energyCommunication = calculateEnergy(communicationPower, communicationTime);
  float energySensor = calculateEnergy(sensorPower, sensorTime);
  float energyControl = calculateEnergy(controlSystemPower, controlTime);
  float energyMicrocontroller = calculateEnergy(microcontrollerPower, microcontrollerTime);

 
  Serial.print("W-J:\n");
  Serial.print("Communication: ");
  Serial.print(energyCommunication);
  Serial.println(" J");

  Serial.print("Sensors: ");
  Serial.print(energySensor);
  Serial.println(" J");

  Serial.print("GSN: ");
  Serial.print(energyControl);
  Serial.println(" J");

  Serial.print("Micro Controler: ");
  Serial.print(energyMicrocontroller);
  Serial.println(" J");


  float totalEnergy = energyCommunication + energySensor + energyControl + energyMicrocontroller;
  Serial.print("F-J: ");
  Serial.print(totalEnergy);
  Serial.println(" J");
}

void loop() {
  
  magneticFieldX = analogRead(A0);  
  magneticFieldY = analogRead(A1);  
  magneticFieldZ = analogRead(A2);  

  gyroX = analogRead(A3);  
  gyroY = analogRead(A4);  
  gyroZ = analogRead(A5);  

  accelX = analogRead(A6); 
  accelY = analogRead(A7); 
  accelZ = analogRead(A8); 

  
  if (abs(magneticFieldX) > MAGNETIC_THRESHOLD || abs(magneticFieldY) > MAGNETIC_THRESHOLD || abs(magneticFieldZ) > MAGNETIC_THRESHOLD) {
    Serial.println("T error");
    
  }

  if (abs(gyroX) > GYROSCOPE_THRESHOLD || abs(gyroY) > GYROSCOPE_THRESHOLD || abs(gyroZ) > GYROSCOPE_THRESHOLD) {
    Serial.println("R error");
    
  }

  if (abs(accelX) > ACCELEROMETER_THRESHOLD || abs(accelY) > ACCELEROMETER_THRESHOLD || abs(accelZ) > ACCELEROMETER_THRESHOLD) {
    Serial.println("a error");
    
  }

  delay(1000); 
}
icon FAQ.zip 2.11MB Download(0)
License
All Rights
Reserved
licensBg
0