Back when I first built a Star Trek Tricorder, it was purely for a Hackster contest under the βTV Propβ category. At that time, I hadnβt actually explored the Star Trek universeβI simply recreated the device as a visual prop.
After the contest, curiosity led me to finally watch Star Trek. Thatβs when I truly understood what the Tricorder representsβa multifunctional scientific tool capable of scanning environments, analyzing data, and assisting in exploration.
With this deeper understanding, I revisited my original project. Instead of just replicating the appearance, I wanted to bring it closer to its actual functionality. This led to Revision 2, where I focused on adding meaningful features, interactive elements, and a more authentic LCARS-style interface.
For this version, I also had the opportunity to collaborate with JustWay, who provided high-quality 3D printing support. Their service offers a wide range of materialsβfrom nylon and ABS to resin and even metalβmaking it possible to achieve a more refined and durable enclosure.
This project is no longer just a contest entryβitβs a personal build inspired by a deeper appreciation of Star Trek and its technology.
Whatβs New in Rev 2The Rev 2 Tricorder is a significant upgrade over the previous version, with improved functionality, better interaction, and more realistic implementation of features inspired by Star Trek. You can check out the previous version of this project here
Environmental Monitoring (BME280)
In this revision, I integrated the Bosch BME280 sensor to enable real-time environmental monitoring. The device can measure temperature, pressure, and altitude (calculated from sea-level pressure), making the Tricorder more aligned with its original concept of scanning surroundings.
Power Monitoring (INA219)
To monitor internal performance, I added the INA219 module. It measures voltage, current, and power consumption in real time. This allows observation of how the system behaves under different loadsβfor example, when LEDs are turned on or off.
LED Indicators (WS2812B)
The Tricorderβs iconic LED indicators are implemented using WS2812B LEDs. These allow fully customizable color patterns and animations through firmware, making it easy to adjust brightness, colors, and effects dynamically.
Audio & Feedback (JQ6500)
For sound output, I used the JQ6500 module. It adds audio feedback and enhances the interactive experience, bringing the device closer to the feel of a real sci-fi gadget.
Touch Controls (TTP223)
User interaction is improved with TTP223 touch modules. These act as buttons for navigating and selecting different features, replacing traditional mechanical switches.
Display & Animations (ST7735 + GFX)
The interface is displayed on a 1.8-inch ST7735 TFT screen using the Adafruit GFX Library. Advanced graphics functions are used to render animations and LCARS-style UI elements.
Auto Power Mechanism (Reed Switch)
A reed switch is used to detect the opening and closing of the Tricorder. When opened, the device powers on automatically, and when closed, it turns offβreplicating the behavior seen in the series.
Battery & Charging
The device includes a built-in battery system along with a charging module TP4056, making it fully portable and easy to recharge for continuous use.
Improved 3D Printing Quality
In Rev 2, the enclosure quality has been significantly improved using Resin Standard White (UTR 8360) material. This results in a much smoother surface finish and higher detail accuracy compared to the previous version.
Thanks to (JustWay) for making this possible with their high-quality 3D printing service.
Features and FunctionalityThe Rev 2 Tricorder is designed with an interactive interface controlled entirely through capacitive touch inputs, inspired by the LCARS-style navigation system from Star Trek. Each function is mapped to intuitive touch controls, allowing smooth navigation and real-time interaction.
Touch Navigation System
The device uses capacitive touch sensors to navigate through menus and operate features:
BIO Touch β Scroll Down
GEO Touch β Scroll Up
MET Touch β Select / Enter option
BIO + GEO (in submenu) β Back
This combination allows full menu control without physical buttons, making the interaction feel futuristic and responsive.
Startup Animation
When the Tricorder is opened, the system begins with a cinematic startup sequence inspired by Star Trek.
As you can see in GIF, It first displays a Section 31-style poster screen, setting the visual tone of the device. This is followed by an animated sequence of a spaceship moving through space, rendered frame-by-frame on the TFT display. During this sequence, ambient cockpit and spaceship audio is played through the audio module, creating an immersive startup experience. The combination of synchronized visuals and sound enhances realism and gives the device a true sci-fi feel.
Environment Monitoring Mode (BME280)
This mode uses the Bosch BME280 to measure real-time environmental conditions, including temperature, pressure, and altitude.
- Temperature Measurement:The BME280 uses an internal temperature sensor that measures ambient temperature near the chip. It applies factory calibration coefficients to compensate for sensor offsets and provide accurate readings.
- Pressure Measurement:The sensor contains a highly sensitive piezoresistive pressure sensor that detects atmospheric pressure changes. These readings are also calibrated internally using stored calibration data.
- Altitude Calculation:Altitude is not measured directly. It is calculated using atmospheric pressure based on the standard barometric formula. The device compares the measured pressure with a reference sea-level pressure to estimate altitude.
h=44330(1β(PP0)15.255)h = 44330 \left(1 - \left(\frac{P}{P_0}\right)^{\frac{1}{5.255}}\right)h=44330(1β(P0βPβ)5.2551β)Where:
- hhh = altitude (meters)
- PPP = measured pressure
- P0P_0P0β = sea-level pressure (typically 1013.25 hPa)
This allows the Tricorder to estimate elevation changes in real time, similar to how environmental scanning works in the original concept.
Battery & Power Monitoring
The system includes real-time battery and power monitoring using the INA219 module, enabling accurate measurement of voltage, current, and overall power consumption.
LED Control (E Touch)
The E capacitive touch is used to toggle WS2812B LED animations:
- Turn LEDs ON/OFF
- Visual feedback through dynamic color patterns
Continuous LED animations can sometimes be distracting and make it harder to focus on the display. This feature allows users to disable the LEDs when needed for a cleaner and more focused interface.
It also improves battery efficiency. With around 35 LEDs active, the system can draw over 350 mA, which drains the battery significantly faster. Turning them off helps extend usage time.
Alarm / Alert System (F1F2)
The F1F2 capacitive touch inputs act as a trigger for the alarm system:
- Activate alarm mode
- Display alert message on screen
Play alarm sound inspired by Star Trek
When triggered, the Tricorder shows an on-screen warning along with synchronized audio feedback, simulating an emergency alert scenario.
(Add GIF showing alarm trigger)Scanning Mode
This mode replicates the classic Tricorder scanning experience from Star Trek:
- Plays scanning sound effect
- Displays animated scanning visuals (GIF)
- Shows dynamic data of spaceships and individuals on screen
The combination of audio and visual feedback creates an immersive diagnostic feel, similar to how a Tricorder scans and analyzes targets.
Funny Mode
This mode adds a fun, interactive element inspired by iconic Star Trek moments:
- Displays a spaceship image on screen
- Plays a humorous audio clip from a Star Trek scene
It brings personality to the device, making it more engaging beyond its functional features.
Reference audio: (https://www.youtube.com/watch?v=Uh6a21aqOC4)
3D Models & EnclosureThe 3D design of the Tricorder remains the same as the previous version (previous project link). The enclosure was carefully designed to match the form factor and aesthetics inspired by Star Trek.
All 3D prints for this revision were sponsored by JustWay. Their high-quality printing service made it possible to bring the design to life with precision and durability.
Main Body (Resin Prints)
The primary structure of the Tricorder is printed using standard resin, which provides:
- Smooth surface finish
- High detail accuracy
- Professional-looking enclosure
This material is ideal for achieving the refined look required for a prop-inspired device.
LED Diffuser Parts (PETG Prints)
For the LED indicator sections, I used PETG filament instead of resin:
- Better light diffusion for LEDs
- Semi-translucent appearance
- Improved visual output of WS2812B animations
These parts allow the LED indicators to glow evenly and enhance the overall visual effect.
Main PCB (Core Control Board)
The main PCB is placed directly below the TFT display and acts as the central control unit built around the Seeed Studio XIAO ESP32S3.
It includes:
- TFT Display Interface (SPI):Connected via SPI lines (MOSI, SCK, CS, DC, RST) for driving the ST7735 display.
- Audio Module Interface:The JQ6500 is connected using UART (TX/RX) for playing sound effects.
- GPIO Expansion (IΒ²C):Since the ESP32-S3 XIAO has limited GPIOs, I used the MCP23008 to interface multiple TTP223 inputs.
- LED Control:One WS2812B LED array is directly driven from a GPIO pin for animations.
- FFC Connector (1mm pitch, 20-pin):This connector links the main PCB to the sensor panel, allowing modular design and compact assembly.
Sensor Panel (Peripheral Board)
The sensor panel contains all environmental and power monitoring components:
- Environmental Sensor:Bosch BME280 for temperature, pressure, and altitude.
- Power Monitoring:INA219 to measure voltage, current, and power consumption.
- LED Array (Secondary):A second WS2812B LED array for extended visual indicators.
- IΒ²C Bus Integration:All sensors communicate over a shared IΒ²C bus (SDA/SCL), simplifying wiring and reducing pin usage.
PCB for WS2812b Array 2
Interconnection (FFC Cable)
Both boards are connected using a 20-pin, 1mm pitch FFC cable, which carries:
- Power lines (VCC, GND)
- IΒ²C communication (SDA, SCL)
- Control signals for LEDs and peripherals
This approach:
- Keeps the design modular
- Reduces wiring complexity
After soldering components on it
The finishing process of the Tricorder enclosure is done in two steps to achieve a clean and professional look.
PaintStep 1: The 3D printed parts are first painted to give them the desired color and appearance.
Step 2: Clear Spray (Protective Coating)
After the base paint dries, a clear spray is applied as a finishing layer.
Assembly partThe assembly process of the Tricorder was carried out in multiple stages, starting from basic prototyping to full system integration.
Initially, all components were tested individually using temporary wiring. The WS2812B LEDs were verified for color output and animation patterns, while the ESP32-S3 was used to validate communication with sensors and peripherals. Breadboard-style connections helped in debugging pin mappings and ensuring stable operation before moving to the final hardware.
Once the basic functionality was confirmed, the custom PCBs were brought up and tested. The TFT display was verified for proper UI rendering, and the JQ6500 was tested with a speaker to ensure correct playback of sound effects. Sensor modules like the Bosch BME280 and INA219 were validated over the IΒ²C bus to confirm accurate readings.
After successful testing, both the main PCB and sensor panel were connected using a 20-pin FFC cable. This step ensured reliable communication between the two boards while maintaining a clean and compact internal layout.
The next phase involved fitting all components into the 3D printed enclosure. Careful attention was given to wire routing, component placement, and mechanical alignment to ensure everything fit properly without stress on connectors or cables.
Finally, a complete system test was performed after assembly. All featuresβincluding touch input, LED animations, display interface, sensor readings, and audio feedbackβwere tested together to verify stable and synchronized operation.
This step-by-step approach helped in identifying issues early and ensured a smooth transition from prototype to a fully functional Tricorder device.
FirmwareFolder-wise Architecture
main4/
β
βββ main4.ino
β
βββ ui.cpp / ui.h
βββ camera_tft.cpp / camera_tft.h
β
βββ bme.cpp / bme.h
βββ ina.cpp / ina.h
β
βββ mcp23008.cpp / mcp23008.h
β
βββ led.cpp / led.h
βββ audio.cpp / audio.h
β
βββ alert.cpp / alert.h
β
βββ scanning_run.cpp / scanning_run.h
βββ scanning_frames.h
β
βββ funny_run.cpp / funny_run.h
βββ funny_frames.h
β
βββ asset_png/
β βββ lcarsburgerframe.h
β βββ lcarssplitframe.h
β βββ space_ship.h
β βββ startrek_start.h
β βββ Star_Trek_Barnstar_01.h
β βββ Star_Trek_Barnstar_02.h
β βββ Star_Trek_Barnstar_03.h
β βββ section_31.h
β βββ star_trek_voyager.h
β βββ lcarsframeblank.h
β βββ purple1.h
β βββ sektion.h
β βββ background.h
β βββ mainmenu.h
β βββ backgraph.h
β βββ slider.h
β βββ slider2.h
β βββ videobg.h
β βββ mainmenu.jpg
β
βββ font/
β βββ font2.h
β βββ font2a.h
β βββ Font7srle.c / .h
β βββ Font16.c / .h
β βββ Font32rle.c / .h
β βββ Font64rle.c / .h
β βββ Font72rle.c / .h
β βββ Font72x53rle.c / .h
β βββ FreeSans20pt7b.h
β βββ glcdfont.c
β β
β βββ Custom/
β βββ GFXFF/
β βββ TrueType/
β
βββ gif/
β βββ gif_frames.cpp
β βββ gif_frames.h
β
βββ funny_gif/
β βββ 1.h β 12.h
β βββ 1.png β 12.png
β
βββ scanning/
β βββ scanning_frames.cpp
β βββ scanning_frames.h
β
βββ scanning_gif/
β βββ 1.h β 15.h
β
βββ scanning_gif2/
β βββ 1.h β 15.h
β
βββ scanning_gif3/
β βββ 1.h β 15.h
β
βββ start_gif/
β βββ frame_01_delay-0.1s.h
β βββ frame_02_delay-0.1s.h
β βββ ...
β βββ frame_31_delay-0.1s.h
β
βββ startup/
β βββ gif_frames.cpp / gif_frames.h
β βββ sektion.h
β βββ startup.cpp / startup.h
βThe complete firmware, including source code, module-wise implementation, and detailed flow, is available in the GitHub repository.
The code is organized in a modular structure, separating UI, sensor handling, animations, audio, and LED control into individual components. The main program (main4.ino) acts as the central controller, coordinating all subsystems and managing different operating modes such as scanning, environment monitoring, alert system, and fun mode.
main4/
β
βββ main4.ino
β
βββ core/
β βββ ui.cpp / ui.h
β βββ camera_tft.cpp / camera_tft.h
β
βββ drivers/
β βββ sensors/
β β βββ bme.cpp / bme.h
β β βββ ina.cpp / ina.h
β β
β βββ input/
β β βββ mcp23008.cpp / mcp23008.h
β β
β βββ output/
β β βββ led.cpp / led.h
β β βββ audio.cpp / audio.h
β
βββ features/
β βββ scanning/
β βββ funny/
β βββ alert/
β βββ startup/
β
βββ graphics/
β βββ images/
β βββ fonts/
β βββ gif_engine/
β
βββ utils/Hardware Used- ESP32-S3 (Seeed Studio XIAO ESP32-S3 Sense)
- TFT Display (ST7735)
- BME280 Sensor (IΒ²C)
- INA219 Power Monitor (IΒ²C)
- MCP23008 IO Expander (Input)
- WS2812B LEDs
- JQ6500 Audio Module
Boot
β
System Initialization
β
Startup Animation
β
Main Loop
βββ Read Inputs (MCP23008)
βββ Update UI State
βββ Execute Feature Mode
βββ Render Display
βββ Update LEDs
βββ Play AudioHow It Works- main4.ino initializes all modules
- UI system controls navigation
- Input driver reads touch/buttons
- Selected feature module executes
- Display + LEDs + Audio update in real-time
Install Required Libraries
- Adafruit GFX
- Adafruit ST7735
- Adafruit BME280
- Adafruit INA219
- FastLED (for WS2812B)








_4YUDWziWQ8.png?auto=compress%2Cformat&w=48&h=48&fit=fill&bg=ffffff)



_t9PF3orMPd.png?auto=compress%2Cformat&w=40&h=40&fit=fillmax&bg=fff&dpr=2)


_Ujn5WoVOOu.png?auto=compress%2Cformat&w=40&h=40&fit=fillmax&bg=fff&dpr=2)

Comments