I’ve been part of a lot of educational outreach for the SFU Satellite Design Team. It’s super fun talking about our projects to the public and showing what we’ve built. However, our good hardware is usually not available for these events since subteams are usually using it for development and we don’t want to risk damage. That’s where DemoSat comes in. It’s a purpose-built 3D printed CubeSat and a custom interactive desktop app.

Concept of Operations

I wanted this project to interactively show some of the issues we deal with when desigining satellites. Power was chosen as the main issue to demonstrate. It’s easy to show and everyone knows the pain of a dead battery. To do this, users will use a flashlight to charge up DemoSat. They will be able to see the “telemetry” on the screen, and they will be given several buttons to interact with. The satellite’s payload will be some LEDs that users can control.


  • DemoSat shall have some RGB LEDs onboard that users can control from the ground station app.
  • Users shall be able to use a flashlight to charge DemoSat.
  • The groundstation will simulate some temperature effects from charging and operating the payload.
  • Users will be able to see how different elements of a mission (charging, payload operation) work together.
  • Advice hints for running the mission will be provided from the groundstation.

There are two parts of this project - the groundstation app and the DemoSat hardware itself.

DemoSat Hardware

The hardware had the following requirements:

  • Small and 3D-printable in a short period of time.
  • Support for a repeatedly deployable antenna.
  • Provide protection for the electronics inside.
  • Illustate the real scale of a CubeSat.

I decided to use our previous generation onboard computer (OBC) that I developed as the embedded platform for this project. I know the hardware and the firmware very well, so adding the necessary commands for interactivity was sraightforward. It’s also cool to use some satellite hardware on the demonstration platform.

DemoSat Ground Station

The ground station was built using ReactJS, Redux and Electron. This will allow it to be cross-platform so it can be run on anyone’s laptop at events in the future. A few months ago, I built a simple serial monitor with this tech stack as a development experiment for the ORCASAT project. Since the requirements are almost identical, I based the DemoSat groundstation off this experiment.

DemoSat Ground Station DemoSat Ground Station App

Redux was used as the state management library. It handles all of the state variables, and is updated from the various buttons and from the telemetry stream that comes in from the satellite. The telemetry stream is a pared down version of what we normally send, and reports the following elements:

  • Deployment status
  • ADC reading of solar panel voltage
  • LED status

The app parses this stream when it comes in and updates the UI. Telemetry comes in at 1 Hz and commands are sent out from the app asynchronously. The interface for this is a UART, using the Node-SerialPort package.

The app also includes the logic for providing advice popups, and some logic to demonstrate the temperature level and battery state of charge. These aspects were handled on the app side (as opposed to on the OBC itself) to make it faster to prototype.

Demonstration Logic

The logic for temperature and battery state of charge operates as follows:

  • Shining a light on the solar panel will begin to charge the satellite.
  • Charging the satellite will cause its temperature to increase, since it’s in the Sun.
  • Activating the payload will drain the battery and increase the temperature.

Users are given some nominal zones to keep the battery state of charge and the temperature, and the advice popups occur to guide the user to the nominal zones. I plan to implement a very simple scoring system so that users can get a single-number metric on how well they’re doing with their satellite operations.