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
The MakerWorld files : https://makerworld.com/en/models/911790#profileId-872850
The GitHub files : https://github.com/petros-mpla
Profile on X : https://x.com/petros_mpla
// @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);
}