Register | Sign in

Home > Touch Control System (TCS) > 3D Printed Desktop Satellite Antenna


3D Printed Desktop Satellite Antenna


A wide variety of interesting components were used to create this 3D printed satellite antenna model. With a WiFi enabled microcontroller, GPS receiver, magnetometer, and two stepper motors, this unit is capable of tracking celestial objects in real-time.



Get it on Pinshape


Desktop Satellite Antenna

Expansion Base with a Pi Zero mount

Arduino Code





The main body of the satellite antenna is completely self contained and can be lifted from the base without needing to detach wires or clips. The base section uses an inductive charging set to wirelessly transfer power to the main body components. This enables continuous rotation on the horizontal azimuth track, but also introduces a challenge faced by many space robots: The inductive charging set will not deliver enough power to continuously run the motors and other modules, so we’ll need to selectively power off modules and charge a battery until we have enough energy to perform a particular operation.























Update 10/27/16 - Recommended Upgrade

Added support for SRC022A-6 slip rings (use in place of the inductive charging kit) and a mounting adapter for attaching NeoPixels to the dish. See the images below.

The new base and main_mount files ending with _SRC022A-6.stl are compatible with both the inductive charging set and the SRC022A-6 slip ring. Use a 5V power supply with the slip ring and a 12V power supply with the inductive charging set. The next code release will drop support for the inductive charging set (waiting for battery charge before operations) in favor of the slip ring configuration. The original code will still be available in bitbucket for reference.



Next Update

There are two magnetometers listed below, the FLORA 9-DOF and the HMC583L. The current code uses the FLORA board and the next release will use the HMC5883L. This module has a white PCB like the breadboard and stepper drivers, and it is a lot easier to attach and orient.



Component List

Item Name Quantity Needed
Adafruit Feather M0 WiFi - ATSAMD21 + ATWINC15001
FeatherWing OLED - 128x32 OLED Add-on For All Feather Boards1
DIYmall Ublox NEO-7M-000 GPS Module MWC APM2.61
FLORA 9-DOF Accelerometer/Gyroscope/Magnetometer - LSM9DS0 - v1.01
HMC5883L Digital Compass Module1
Adafruit SPI Non-Volatile FRAM Breakout - 64Kbit / 8KByte1 (optional)
Inductive Charging Set - 5V @ 500mA max1
NEMA 11 Stepper Motors2
DRV8834 Low-Voltage Stepper Motor Driver Carrier2
Adafruit Perma-Proto Small Mint Tin Size Breadboard PCB - 3 pack1
100uf Electrolytic Capacitors2
Lithium Ion Polymer Battery - 3.7v 500mAh1 (not needed with slip ring)
Optical Endstop1
Panel Mount 2.1mm DC Barrel Jack1
Sunon 30mm fan1 (not needed with slip ring)
100 Ohm / 200 Ohm variable resistor1 (not needed with slip ring)
12V Power Supply1
625ZZ 5mm x 16mm x 5mm bearings5
Copper Foil Tape1 (optional)
Kapton Tape1 (optional)
M2.5X812
M3X81
M3X106
M3X12 Socket Head Cap Screw
M3X142
M3X162
M3X2013
M3X255
M5X401
M2.5 Washer8
M5 Nut1
M3 Nut2
M3 Washer3



We chose the Adafruit Feather M0 microcontroller for its built-in WiFi chip, LiPo charging capabilities, and large number of I/O pins. We are using a 500mAh battery.

The Adafruit FartherWing OLED module is used to display status messages and sensor readouts.

An inductive charging set is used to wirelessly power components while allowing for continuous rotation on the azimuth track and easy separation from the base. A 30mm fan mounted in the base keeps the inductive charging set cool and a 100/200 Ohm variable resistor is used to limit fan speed.

Low-voltage stepper drivers are used to operate the two NEMA 11 stepper motors.

An optical endstop is used to determine the altitude range of the dish.

A DIYmall Ublox NEO-7M GPS receiver module returns altitude, longitude, and latitude info with help from the TinyGPS++ library.

A FLORA 9-DOF module from Adafruit provides compass readings.

An Adafruit FRAM module can be used to permanently store settings and calibration values.



Printing, Assembly & Wiring

It is possible to print all of the parts, including the dish, without supports. We recommend printing everything at 10% infill with a high number of walls/shells (6 or more).

For a higher quality finish, we’ve split the dish into two parts that should be printed with supports.

Cut a layer or two (~0.4mm) of plastic from the inside of sat_shoulder.stl so that the bearing is recessed into the part like it is on the other side.

The receiving side of the inductive charging set (or slip ring) is connected to the USB pin on the Feather M0. The two inductive coils are lined up so they rotate right on top of each other. You may need to resolder one or more inductive coils so they can sit flush without one of the ends looping over the top of the coil. We are using a gel based super glue to hold the coils in place.

The two low-power stepper drivers are connected to BATT for the supply voltage, and D6 for the logic voltage so we can turn them off and on through code.

The FLORA 9-DOF, optical sensor, and FRAM module can be powered with 3.3v. The GPS receiver needs 5v to operate, so it needs to be connected directly to BATT.

The round FLORA 9-DOF pcb has a small white mark (halfway between X and Y) indicating the North direction. North on the chip should be pointing to the where the optical end-stop is mounted. We drilled a small hole through the dish to run wires back to the microcontroller.


M0 Wiring

Stepper Driver Logic Pin6
Step1 Pin12
Step2 Pin10
Dir1 Pin11
Dir2 Pin13
Optical End-Stop Pin5
GPS RXTX
GPS TXRX


Component Hardware

FRAM + inductive receiver board2x 3x20mm
controller mount2x 3x25mm
drivers4x 3x10mm
opto sensor2x 3x16mm
feather m04x 2.5x8mm
gps1x 3x8mm
motors x28x 2.5x8mm
dish1x 5x40mm + 1x 5mm nut + 2x 3x10mm
azimuth wheels6x 3x20mm
endstop mount2x 3x20mm
endstop2x 3x14mm + 2x 3mm nuts
fan3x 3x25mm
slip ring3x 3x20mm + 3xM3 washers


Install the TinyGPS++ library and make sure you can compile and run Adafruit library example sketches for all of the individual components (Feather M0, FeatherWing OLED, FLORA 9-DOF, FRAM).

An example DesktopSatelliteAntenna Arduino library is available here.

The included example sketch will calibrate the unit by centering the dish and rotating on the azimuth track to record min/max compass values.

There is an internal WaitForVolts() function in the library that makes the unit wait for a charge before performing the next operation. While waiting for the battery to charge, it will output battery voltage, compass direction in degrees, and GPS data.

The main loop() of the example sketch repeatedly positions the dish to North and then South.







Check out some of our other projects!

Touch Control System

3D Electronic Interface Development Platform






Hyperplane Engrave

Online GCODE Generator for 3D Printer Wood Engraving


Get Started