Mostly inspired by the wrist device worn by Captain Jack Harkness in Dr Who and Torchwood, hence the name. However the design wandered somewhat from that initial idea so the look is a bit different. This is the idea I started with:
Mine is a little different, I needed more space to do what I want, so it is a bit fatter and it doesn't actually manipulate a time vortex (whatever that is). Instead it has the following functions:
- Touch screen interface
- Clock with optional beep and LED flash once a second, plus a function to set the time. It doesn't adjust automatically for daylight savings etc, but there is a UI to set the time manually.
- Compass
- Graphics demo
- Dalek detector
- Picture gallery (displays pictures from the SD card)
- Heart rate monitor, including display graph and data log to SD card.
- Sleep (power save) function, wakes up when the power button is pressed.
- Notifications board. Messages from a Bluetooth device (eg a phone) display here.
Hardware consists of a Teensy 3.2 mounted on a custom board the Main Board which contains circuitry for charging the attached LiPo battery when the USB port is connected, and an LSM303 to provide compass and accelerometer functions.
A second ILI9341 custom connector board connects to an ILI9341 touch screen. This board has a touch controller and a connector strip that matches the strip on the side of the main board.
There are some configuration settings stored on the SD card (file is hconfig.txt) which consists of the time zone, low pulse and high pulse rates. The pulse rates are used by the HRM to sound alarms if the pulse is outside that range. The time zone is used for the clock (except it isn't actually used now). The other files on the SD card are bmp files used for the picture gallery. These must be 240x320 images. All of these files are in the SDBackup directory.
Perhaps more importantly it is a development platform. There is plenty of spare capacity in the Teensy and there is still plenty of room in the assembly to add more stuff. The Main Board has connectors to unused pins on the Teensy as well. An example of adding more stuff is the heart rate monitor. I got hold of a better one which uses an I2C interface and, hardware-wise, it was simple to add the extra connections to the SDA and SCL for it, then a bit more programming and the job was done.
The assembly is a mix of leather and a 3D printed frame.
- Teensy 3.2 microprocessor board
- LSM303 Compass/accelerometer IC *
- SD Card Reader *
- Lipo Battery 3.7v
- 2.4" 240x320 SPI Serial TFT Color LCD Display Module+ILI9341 Touch Panel Screen Make sure you get a touch screen, there are screens in the same format/packing that just display with no touch.
- XPT2046 Touch Controller *
- MCP73811 battery management chip *
- LP298X voltage regulator *
- Speaker 8 ohm
- 2 LEDs (blue and green, or whatever colour you prefer)
- 32.768Khz Crystal soldered to the under side of the Teensy and a Coin Cell battery (CR2032) and holder.
- Switch *
- Button
- Various caps and resistors (see circuit diagrams for the boards)
- Heart Rate Monitor MAX30102 based breakout board.
Those marked with * are all surface mounted (SMD) parts.
I developed an interesting technique for generating the icons for this project and I put it in its own project.
The project uses an SD Card and you'll find a copy of mine in the SDBackup directory. It includes some bmp files which are images displayed by the gallery app, a configuration file calle hconfig.txt and a log file called datalog.txt.
The configuration file is one line: 12,120,150, the 12 was once a timezone but I no longer use that. 120 and 150 are heart rate limits. The display turns green when you pass 120 and red when you pass 150. For me green means I'm in a good exercise zone, but your numbers may be different.
You can add your own bmp files. As long as they are 240x320 BMP format they will display in the gallery. When I export mine from Gimp I use these settings:
Finally the datalog.txt file is a log of heart rates. The first column is a timestamp, then the beats per minute and finally the last interval between beats. It logs this every 10 minutes, the time is set in the setup() method in VortexManipulator.cpp:
intervals.create(10*60*1000L,new HRLogAction()); // 10 minutes