Skip to main content
Version: ACS CC

Pip-Boy 2000

Wrist-mounted device that displays various info on a screen.

info

Author: Matei Rareș-Andrei
GitHub Project Link: Pip-Boy 2000

Description

Pip-Boy 2000 is a device that is mounted on someone's wrist and contains various sensors and modules in order to track the wearer's well being and the surrounding environment. The recorded data is displayed on a LCD screen and the wearer can cycle through it by pressing buttons on the device. To ensure the device's safety, to be used it needs to scan the wearer's fingerprint when mounted.

Motivation

I always wanted to try tech from games I played or that fascinated me and the Fallout universe is one of the most interesting worlds in gaming fiction, so I thought that I should try to build something from it and the Pip-Boy 2000 seemed the obvious choice.

Architecture

Log

Week 5 - 11 May

Docs week

Week 12 - 18 May

Hardware week

I changed the fingerprint sensor with a capacitive one that requires 3.3V and is using I2C.

I was unsure if I needed a step-down and a logic level translator for the pulse sensor but I found out that the component I bought already has LDO to lower the voltage to 1.8V, so the module works with the 3.3V from the pico.

I did the sum of all currents used by the modules to see if the pico can power them.

ModuleCurrent
GY-BMP2804.2 * 10^-3 mA
GPS GY-NEO6MV210 mA
MAX301001.2 mA
SKU SEN035960 mA
LCD Screen3 + 20 mA
Total~100 mA

From pico datasheet: "3V3 is the main 3.3V supply to RP2350 and its I/O, generated by the on-board SMPS. This pin can be used to power external circuitry (maximum output current will depend on RP2350 load and VSYS voltage; it is recommended to keep the load on this pin under 300mA)."

This table from the rp2350 datasheet also indicates this.

I also uploaded a KiCad schematic of the circuit.

For the wiring I tried to match the wires:

Orange - VCC

Gray - GND

Green - SCL / SCK / TX

Blue - SDA / RX

Red - CS and RESET from the LCD screen

Yellow - A0 from the LDC screen / INT from MAX30100

Black - Button pins

Week 19 - 25 May

Software week

I started the software part by programming the bmp280 as we used it in a lab. At first I used that code but I found the bme280-rs crate that also works with bmp280 and it made the code easier. Then I continued with the lcd screen as we also used one of those in a lab. Initially I tried to use the st7735-lcd-rs crate thinking it will be easy as it was named after the module, but I didn't manage to get it to work, so I rolled back to use the mipidsi crate used in the lab and it worked fine.

Next I programmed the buttons to cycle through the screens. I used a mutex to hold the index of the current page and created 2 tasks, one for each button, that loop infinitely while waiting the button to be pressed. In the main loop I take the value from the mutex and match it to select what to display on the screen. I also programmed the GPS but it says that it doesn't have signal.

For the fingerprint sensor I needed to do the crate myself, I found the official repository with the Cpp code and I tried to convert the minimum ammount I needed into Rust code. I did 2 functions, one to save a fingerprint and one to identify, but I didn't manage to understand the packets sent from the sensor to the pico, so unfortunately it doesn't work.

I also needed to create a crate for the pulse sensor, as the one on crates.io is blocking and it doesn't work in my project. I didn't have much time with this one so I tried to do something else.

Lastly I implemented a clock in this device by counting the seconds starting from the start of the code and adding the time saved when building the project.

Hardware

  1. Raspberry Pi Pico 2W
  • Processes the data recieved from the sensors and sends it to the screen
  • Stores GPS coordinates that the wearer wants saved
  1. Barometric Pressure Sensor GY-BMP280
  • Measures atmosferic pressure and temperature
  1. GPS GY-NEO6MV2 with antenna
  • Uses radio waves and satelite navigation to determine coordinates
  1. Pulse Sensor MAX30100
  • Measures the wearers pulse
  1. Gravity Capacitive Fingerprint Sensor SKU SEN0359
  • Used to start the device, only reacts to wearer's fingerprint
  1. LCD Screen 1.44 inch diag (128x128 px)
  • Displays data from the sensors, can cycle through multiple screens
  1. Other stuff
  • Batteries, wires, breadboard, buttons

This is the device's circuit. I need to make a small case to hide the wires and the components, except the screen, fingerprint sensor, pulse sensor and the buttons.

Circuit_image

Schematics

Schematic_image

Bill of Materials

DeviceUsagePrice
Raspberry Pi Pico 2WProcessing power39.66 RON
Barometric Pressure Sensor GY-BMP280Pressure and temperature sensor8.49 RON
GPS GY-NEO6MV2 with antennaTracks GPS coordinates44.95 RON
Pulse Sensor MAX30100Monitors wearer's pulse24.99 RON
Gravity Capacitive Fingerprint Sensor SKU SEN0359Scans wearer's fingerprint to start the device184.79 RON
1.44'' LCD ScreenDisplays data from the sensors27.99 RON
Other stuff (breadboard, wires, battery, buttons)Used to assemble the device60 RON
Total-390.87 RON

Software

LibraryDescriptionUsage
embassy-rpHAL implementation to not use registers directlyGives access to GPIO, I2C, SPI ports
bme280_rsDriver for the Bosch BME280 sensor to query temperature, pressure and humidity, also works with the BMP280Tracks temperature and atmospheric pressure
ubloxLibrary for uBlox GPS devicesTracks GPS coordinates
mipidsiGeneric display driver that supports the ST7735-LCD Screen modelDisplays data on screen

Demo

Demo with debugger

Demo with batteries

  1. PM Labs
  2. Ideea
  3. Another product
  4. Ebay Product