Definitely making serious progress! Here’s a 2 minute video, the first for the Hackaday Prize, which describes the concept and initial prototype:
I think it’d make a great story to say that the fellow who designed real (open source!) science tricorders made it into space, and so I’ve started the next chapter in the project — entering the hackaday prize to win a trip to space!
There’s something about a near-term fixed deadline that helps turn research projects and prototypes into complete and functional devices. The hackaday prize prototype has to be working in just over a month, and complete in a few months, with regular milestones on the way. This challenges you to be fast, efficient, make your mistakes cheaply, and make interesting but safe design choices to ensure that the design is completed on time. I confess that I’ve been excited about exploring the space of open source science tricorders, and so I’ve incorporated a lot of hot-off-the-press components into the designs that in many cases don’t yet have a lot of support or examples to work from. This makes for interesting and high-risk experiments, but it doesn’t lead to the end-game that I get so many e-mails about — actually having an inexpensive science tricorder-like device in your hands. Hopefully this will help change that.
I’ve redesigned an open, inexpensive, modular, mini version of the Arducorder — this time with more processing power, and transitioning back to a bright, beautiful OLED display. Part of the requirements for the hackaday prize are documenting your project, and I’ve taken this further to document the entire process from creative sketches, concept, and industrial design, to taking those designs and making them real. The first four project logs can be found here. This means much more frequent updates in the weeks and months to come, and I’ll post the links to new project logs here on the blog. The first logs are:
With more to come!
How can you help?
The hackaday prize is judged on several criteria, including community voting. There are three ways that folks interested in the project can help:
- Vote: There are two mechanisms for voting, and both require an account on Hackaday IO, but it only takes a moment to sign up. Once you’ve signed up, please visit the project on Hackaday IO and select “Give the project a ‘skull’ symbol” to show your support. This helps show your support for the project, and show it to more folks who visit Hackaday IO.
- More Voting: The second set of voting helps determine the interest in each project concept entered into the hackaday prize. It takes a minute or two to complete this step, and as a bonus you get to quickly become familiar with some of the other great projects in the competition!
- Write a kind note: The kind words of encouragement that folks send are genuinely helpful, and are very appreciated. If you like the project and have a moment, please feel free to write a note in the comments (either here or on the Hackaday IO project site). I read them all, and apologize that there sometimes isn’t enough time in the day to reply to them all while still making progress.
Thanks for reading! With the first set of boards being made as we speak, it should be an exciting few months! Stay tuned!
I’m very happy to announce the first release of the Open Source Computed Tomography (CT) scanner project. This is an early alpha release, and contains all of the source at the projects current stage, including the laser cutter design files for the machine structure, EAGLE source files, and the sample Arduino sketch.
The source is available for download here [zip], and is also available on GitHub. For potential contributors, the TODO file also includes near term project goals at a variety of skill levels, from adding end-stops and designing the official Arduino shield, to designing parallel detectors that decrease scan time, and developing a new source/detector pair for different wavelengths of interest.
I’m excited to see what folks do with this project, both now and as it matures. If you build one, want to contribute to the project, or encounter any issues, please send me a note.
In other news, the Bay Area Maker Faire is coming up in a short two months. With a good amount of progress on the Open Source CT Scanner, I’m going to switch gears for a while back to the Mark 5 Arducorder — I’d love to have the firmware and basic functionality working and demonstrable by then.
Very exciting news — the Open Source Desktop CT Scanner is featured in this month’s MAKE Magazine Homebrew Section. I’ve been a great fan of MAKE for years and presented the Science Tricorders at their first Hardware Innovation Workshop, and so it’s very exciting to see the project in this issue.
Source Files: There’s been a lot of interest in having the source files for the alpha version of the scanner, and so I’ll endeavor to have these up within a week or so. I’m in the process of collecting and packaging the source, as well as moving everything to GitHub (including TODO lists) so that it’s much easier for folks to contribute.
I think that the best thing for an open source project is to bootstrap an initial community of users that can grow into a community of contributors, and so I’d like to cut out a few sets of the laser cut parts to send to one or two folks who are interested in building (and ideally contributing) to the project. If you’re interested, please send along a note with your background and how you’d like to contribute, to peter at tricorderproject dot org.
After a marathon build session, the first images from the open source CT scanner are here! The story…
Recall that in the last update, the stock Radiation Watch Type 5 silicon photodiode high energy particle detector was found to be calibrated for Cesium, with a detection threshold likely somewhere near 80keV. This was too high to detect the ~22keV emissions of the Cadmium-109 source, and so I put together an external comparator that could adjust the threshold down to the noise floor. After testing the circuit on a protoboard, I designed a tiny board that sits on the back of the Type 5, and through the use of a 10-turn potentiometer allows you to recalibrate the threshold down to the noise floor.
I designed some mounting plates that could mount to the linear carriages for the source and detector.
Here, the detector is mounted onto an offset mounting plate, which in turn connects to the detector carriage. The wiring harness breaking out all the detector pins feeds through the center of the carriage to a fixed mount point on the bore that acts as a strain relief. Looks great!
Even with the upgraded extra-sensitive detector, I was still seeing many fewer detections than I was expecting — albeit about an order of magnitude more than without the enhancement. A kind fellow on the Radiation Watch facebook group made a spice simulation model based on the helpful schematics that the folks at Radiation Watch make available, and his simulations suggested that the noise floor for this circuit is around 30keV. This means that with Cadmium 109, whose primary emissions are around 22keV, I was likely still missing the majority of the emissions, and getting many fewer counts than I was expecting.
Enter the Barium-133. There are a number of radioisotope check sources that are commonly available, but many of them have very high energy emissions in the many hundreds (or thousands) of keV — likely far too high energy to be usefully absorptive for everyday objects. The emission spectra I’ve seen for the tubes in commercial CT scanners tend to have broad spectrum emissions centered around 60-70keV, and the datasheet for the silicon photodiode suggests it’s most sensitive from 10keV to 30keV, where the sensitivity drops off afterwards. A higher detection efficiency means that we can get by with a less intense source, and with check sources that are barely detectable over background a foot away, it’s a battle for signal, and every photon counts.
Barium-133 has primary emissions around the 33keV range, and seems to be one of the few commonly available radioisotopes (aside from Cadmium-109) with such low emissions. To give the system the best possible chance of working, I ordered a 10uCi Ba133 source (up from the 1uCi Cd109 source I was using previously). With the source 10cm away from the detector, with the background rate at 20 counts per minute, the Cd109 source reads about 70 (so a delta of 50), and the Ba133 source reads around 1500 (!), so we’re definitely detecting many more of the lower energy emissions, and this should have a much better signal-to-noise ratio, and decrease the acquisition time required for collecting good data.
The Ba133 source also comes as a sealed 25mm disc. I designed a sandwich mount for these source discs that contains between 3-6mm of lead shielding at a variety of angles, and a very rough approximation of a lead collimator with a 3mm hole drilled in the front to give some directionality to the source. Testing out a few angles, this appears to have brought the reading down to about 60 cpm at 15cm away, except for directly ahead, where the intensity is about 550cpm at 15cm. Sounds great!
Putting it all together
I have to confess, I’m a bit of a late sleeper (and a night owl), but I was so excited about finally putting everything together and collecting the first data, that I woke up early Saturday. After a marathon 13-hour build session, I finished designing and fabricating the source and detector mounts, and putting the bore back together.
With one of the bore covers removed, these pictures make it a little easier to see the complete linear axis mechanisms that are contained within the bore. You can thank my dad for discouraging my rampant hot glue use at a young age, and encouraging me to design things that were easily serviceable. I’ve given a few students the same talk when I see them wielding a hot glue gun for one of their projects… 😉
Putting it all back together — looks beautiful!
And now, the data!
After the marathon build session, I took the very first data from the instrument — a quick absorption image straight up the center of this apple. Data was low resolution and noisy, but fantastic for the very first data from the instrument.
A very tired, but very pleased person after collecting the first data off the scanner around 1am.
I had some time Monday evening to write some basic firmware for collecting images, storing them to an SD card, specifying the size and resolution parameters, the integration time for the detector, and so forth. In probably one of the strangest things I’ve ever done, and feeling very much like Doc Brown, I went to the grocery store and found a few vegetables that have internal structure and might be interesting to scan. I decided to start with the avocado…
I’d previously determined empirically that the optimal integration time for this setup is about 90 seconds per pixel — that tends to give a stable count of around 550cpm +/- 4 cpm. Lower integration times will give proportionately more noise, but be much quicker to scan.
The avocado is about 10cm by 12cm, and so to capture a first test image I set it to a 5mm resolution with a relatively fast 10 second integration time per point (bringing the total acquisition time to 20 x 24 x 10 seconds, or just over an hour).
And it worked! The image is certainly a bit noisy (as expected), but it looks great. The table and the avocado are clearly visible, and the seed might also be in there, but we’ll need a bit higher integration time to see if that’s real structure, or just noise.
Overlaying the scan atop the picture, the scan is a perfect fit!
The integration time for the first image was only 10 seconds per pixel, and so I setup a longer scan with an integration time of 60 seconds per pixel. Beautiful! This still isn’t quite at the empirically determined sweet spot of 90 seconds, but it really cleaned up the noise in the first image.
The same data, with log scaling rather than linear scaling. I’m not entirely certain whether avocado pits are more or less absorptive to 33keV photons than the surrounding avocado, so it’s not clear whether we’re seeing lots of absorption at the center because of the seed, or because there’s 10cm of fruit between the source and detector…
But I’d love to see some internal structure. So tonight I put the bell pepper on, which is about the same size as the avocado, and set it to an integration time of 20 seconds.
And the result! It definitely looks like a bell pepper, and you can clearly see the seed bundle inside. Incredibly cool!
The same image, log scaled instead of linear scaled.
And the overlay. Looks beautiful!
What a fantastic few days for the open source CT scanner, and the initial data looks great. There’s still plenty to do — now that the source and detector are working, I can finish designing the Arduino shield with four stepper controllers (two for the linear axes, one for the table, and one for the rotary axis). The source is also currently collimated in only the most liberal of senses, and in practice the detection volume for a given pixel is likely a pyramid that starts from the ~3mm source aperture and meets the ~1cm square detector — so the images should sharpen up a good deal by better controlling the beam shape. Once all of that is working, and I add an accelerometer sensor to the rotational axis to sense it’s angle, I should be able to scan from 180 degrees around the sample, and test the ability of the instrument in computed tomography mode, backing out the internal structure of a given slice from a bunch of 1D images. Very exciting!
Thanks for reading!
I thought I’d take a few moments to introduce the next prototype open source science tricorder that I’ve been working on, the Arduino-compatible Mark 5 Arducorder.
I wasn’t having a great deal of luck with the earlier Mark 5 design, and so I decided to start from scratch and create something completely different under the hood. The new design has a larger sensor suite (a few sensors have been updated, and a multi-gas sensor had been added), but it should also be easier to program, easier for folks to tinker with, more modular, and less expensive to produce. It’s also Arduino Due compatible, so the hundred thousand folks out there who love Arduino programming and building simple circuits should feel right at home tinkering.
Like the Mark 1 and 2, the Mark 5 Arducorder has a separate motherboard and sensor board. I think community building is a huge part of a successful open source design, and in this spirit I’d like it to be as easy as possible for folks to build new sensor boards for their Arducorders, or add expansions that I can’t anticipate. The Arduino folks have been very good with designing their boards to be expandable using “shields” that have standard, easy-to-prototype, 0.1″ headers. Similar to the idea of a shield, I’ve designed the Arducorder to have a 34-pin header for the sensor boards that expose a variety of pins for the I2C, UART, SPI, Analog, PWM, and Digital I/O peripherals, so that there are plenty of pins for expansion and interfacing to most kinds of sensors.
These boards were an interesting challenge to design. Conceptually the Arduino motherboards are fairly simple, but in order to maintain perfect compatibility with the Arduino Due board the routing was a little complex in areas. The whole Mark 5 Arducorder system is small — really small — and having the large easy-to-use sensor connector consumes a lot of real-estate, totaling nearly one quarter of the board area. Because of this I had to move to a 4-layer design, which takes a little longer to get fabbed. Still, the entire Arducorder including the 2.8″ LCD, WiFi module, and sensor board fits in about the same footprint as the original Arduino Due (or, about the size of my Blackberry), so it’s all quite compact and I’m very happy with the footprint.
In terms of hardware, the prototype Arducorder motherboard currently has the following specifications:
- Arduino Due compatible, using the Atmel SAM3X8E ARM Cortex-M3 CPU
- 84MHz CPU Clock, 512KBytes of flash, 96KBytes SRAM
- External 128KByte SPI SRAM
- microSD card socket for data, graphics, and so forth
- 2.8″ TFT LCD display w/touch panel
- FT800 Graphics and Audio Controller to offload graphical rendering. Supports JPEG decompression.
- CC3000 802.11b/g WiFi module
- Two user-selectable input buttons, one on either side
- microUSB for programming and charging (Due “native port”)
- Exposes the second programming port through a header, as well as the two erase/reset buttons on the side, to maintain Arduino Due compatibility
Having some mechanism to render quality graphics has been a requirement since the Mark 1 using its external SED1375 graphics controller, and was certainly the case with the Mark 2’s beautiful dual organic LED displays. But graphics of any resolution have always been difficult for microcontroller-powered systems, like the PIC family (used in the Mark 1) or the Atmel microcontrollers used with the Arduino family of boards. Even with a microcontroller fast enough to perform graphics rendering, most microcontrollers don’t have nearly enough memory to support even a single framebuffer for a 320x240x16bpp screen (128k), so any graphics they do render tend to look choppy.
Enter the FT800 Graphics controller, a new product from FTDI, the same folks who make the popular FT232R USB-to-serial converter. The FT800 looks a lot like a modern version of the the 2D tile-based graphics controllers found in handheld gaming systems a few years ago, while also incorporating audio and touch-screen peripherals. The Gameduino 2 is a recent Arduino-powered project that makes use of the FT800, and it shows Gameboy Advanced-era graphics on an Arduino Uno — so I’m confident that an attractive and elegant interface can be crafted on the Arducorder. While it has less graphical capabilities than the original Mark 5 design, it should be much easier for folks to modify — and I’m excited to see the first user interface themes folks come up with.
In terms of sensing capabilities, the current sensor board has footprints for the following sensors:
- Ambient Temperature and Humidity: Measurement Specialties HTU21D
- Ambient Pressure: Bosch Sensortec BMP180
- Multi-gas sensor: SGX-Sensortech MICS-6814
- 3-Axis Magnetometer: Honeywell HMC5883L
- Lightning sensor: AMS AS3935
- X-ray and Gamma Ray Detector: Radiation Watch Type 5
- Low-resolution thermal camera: Melexis MLX90620 16×4
- Home-built linear polarimeter: 2x TAOS TSL2561
- Colorimeter: TAOS TCS3472
- Open Mini Visible Spectrometer v1 using TAOS TSL1401CL 128-pixel detector, with NeoPixel light source
- GPS: Skytraq Venus 638
- Distance: Maxbotics Ultrasonic Distance Sensor
- Inertial Measurement Unit: Invensense MPU-9150 9-axis (3-axis accelerometer, gyro, and magnetometer)
- Microphone: Analog Devices ADMP401
Many of these are new or updated offerings that either offer new sensing modalities that weren’t previously available (like the lightning sensor from AMS), or that improve upon resolution, size, or cost over previous versions. Gas sensing has been on the wishlist for a long while, but many contemporary sensors are large and use power-hungry heating elements — so I’m particularly excited about trying out new line of micro gas sensors from SGX.
One sensor has been temporarily removed — the camera. There’s currently no easy way that I’m aware of to hook up a camera (which is a high bandwidth device) to an Arduino Due, which has limited memory. I’ve replaced the camera with a small board-to-board connector, in the hopes that someone in the open source community will develop a small SPI JPEG camera board with an onboard framebuffer shortly. If not, I’ll have to have a go at it once the rest of the device is functional.
While the top of the sensor board contains the thin, omnidirectional sensors, the bottom contains many of the larger, directional sensors including the open mini spectrometer and the ultrasonic distance sensor. I’d love to find a shorter alternative to these sensors at some point, as right now they are the determining factor in the Mark 5’s thickness — about an inch.
Currently I’m testing out the sensor board — some of the sensors are a bit expensive, so I’m iteratively populating the boards, testing, and so forth. I also have to 3D print more open mini spectrometers — my cats absolutely love to play with them, so the bunch I’ve made have vanished into the aether under the couch, never to be seen from again.
My current TODO list is to verify the basic functionality of the hardware (currently the FT800 as well as a few of the sensors have been tested), write low-level drivers for all the sensors and peripherals, then move on to creating the larger graphical user interface. At first the graphical environment will likely be somewhat modest, but I’d love to recruit the help of some skilled folks from the open source community who would enjoy working on the interface side of things once the prototype hardware is stable. Please feel free to contact me if you’re interested.
Thanks for reading!
I thought I’d post a quick update on the open source CT scanner, especially given that there’s been a lot of interest lately. Life has been a little busy over the past few months — in the lab with paper writing, visiting home for the holidays, as well as my mom very recently passing away after her 18 year battle with cancer — so I haven’t been as good at writing updates as I’d planned.
Before getting to the CT scanner, I’d like to put together a proper update on the Mark 5 Science Tricorder shortly. A quick preview — in November I redesigned the Mark 5 from scratch to be less expensive, more modular, easier to modify, and quicker to program — and I call the result the Arducorder. The Mark 5 is now Arduino Due compatible, so the hundred thousand folks out there who can program an Arduino should be able to comfortably pick up and modify the code quickly, while others looking to start writing code for the Arduino could do so over a weekend using the large existing library of books and resources available. The sensor board now attaches using a standard 0.1 inch header, so one should be able to prototype new sensor boards quickly. The system includes a separate graphics processor (the FT800), so the graphics capabilities should be similar to something like a Gameboy Advanced, and the motherboard also includes a WiFi module for wireless connectivity (the CC3000). The boards arrived just as I flew back in from the holidays, and I’ve been building them and writing the drivers and firmware over the past few weekends.
A source and detector for the CT scanner
As I mentioned in my first post, for safety I’ve designed the CT scanner to use a radioisotope x-ray source that’s barely above background levels — the tradeoff for this safety being acquisition time. There are a number of low-intensity radioisotope check sources commercially available, each with different emission spectra. I ended up deciding to use a Cadmium-109 source, which has the lowest energy photons I could find — it’s primary emissions are 22keV x-rays, with a small secondary 88keV emission. I’ve read that 22keV photons are about 50% absorbed by 2cm of tissue, so this seemed like a usefully contrastive figure — too much or too little absorption and you’ll need many more samples to make a useful image, which increases acquisition time. Higher energy emissions from other radioisotopes (in the many hundreds of keV) might be useful for imaging metals, but generally have much less absorption for non-metallic materials that I’d like to image first (like vegetables).
The detector data sheet from the folks who make the Radation Watch Type 5 also suggests that lower energy photons are much easier to detect, with a detection efficiency of around 30% for 22keV photons, where this drops to about 1% for 88keV photons (Note: although further discussions suggest that they might be using a slightly different photodiode than the FSX100-7 2.0 in the Type 5, so the efficiency curve in the datasheet is likely somewhat different). Functionally, this is like having a source that’s 30 times more intense — when every photon counts, if you can count them more efficiently, you can get by with much less exposure, and decrease the acquisition time.
The actual measured count from the Cd-109 source ended up being much less than I was expecting, and after some investigation it looked as though the detector was only measuring the 88keV emissions, which both account for only 4% of the total emissions, and are also detected much less efficiently — reducing the number of counts by a factor of about 2000. After chatting with the Radiation Watch folks, it looks as though the Type 5 is calibrated for Cesium-134 and 137, which emit higher energy photons, and would need to be recalibrated to sense the lower energy emissions of Cd-109.
Measuring high energy photons is a constant battle between signal and noise, in part due to the extreme amplification required to sense a single subatomic particle and convert this into a voltage signal with an energy many orders of magnitude larger that can be detected by a microcontroller. To keep the signal-to-noise ratio favorable, the Type 5 has a detection threshold somewhere above the noise floor of the amplifier circuit and below the energy produced when a high-energy Cesium photon hits the detector. To recalibrate the detector for the 22keV Cadmium-109 emissions, this threshold has to be lowered — but it can only be lowered so far, and if the peaks produced by the 22keV photons aren’t larger than the noise, then we’re out of luck and either have to choose a more sensitive detector or a source with higher energy emissions. Thankfully the folks who designed the Type 5 detector were good enough to include a test point after the amplifier and before the threshold comparator that can be used to see the raw signal, and recalibrate if required.
Above on the oscilloscope, the raw signal is pictured in blue (50mV/div), and the detector output (raw signal after the comparator) that’s fed into a microcontroller is pictured in yellow (2V/div). Here, an 88keV photon from the Cd-109 source has hit the detector, and we’re seeing the yellow line trigger. We can also see that the raw signal for this photon is about an order of magnitude above the noise floor — looking good.
Here we see a lower energy emission from the Cd-109 source, likely in the 22keV range. These lower energy emissions are just barely above the +/-80mV noise floor, and setting the oscilloscope to trigger at 90mV above has the scope triggering frequently when the Cd-109 source is near the detector, and very little when the source is taken away. So, we’re just barely squeaking in, and appear to be able to measure the ~22keV photons just above the noise floor.
To make a quick ball-park measurement of the signal-to-noise ratio, I measured the number of detections (by hand) above 90mV with the Cd-109 source 10cm away from the detector, as well as the background rate (Cd-109 source in a shielded container), and with a few nearby materials between the source and detector.
- The background rate is up from about 5 counts per minute (cpm) to around 15. These extra detections are likely a combination of actual lower-energy photons that the detector threshold was missing, as well as electrical noise.
- The count with the source 10cm from the detector is 80 cpm. This is still less than I was expecting, but it’s very workable as a starting point.
- With a 1/4 inch acrylic sheet between the source and detector, the detector measures 52 cpm — so it’s absorbing about 40% of the 22keV x-rays.
- With a 1/8 inch MDF sheet between the source and detector (the same material that the prototype CT scanner is constructed out of), the detector measures 68 cpm — or about 20% absorption.
- A bottle of water between the source and detector measures about 18 cpm, so nearly 95% absorption.
So, we’re looking very good, and these numbers should give useful contrast and interesting images for many small non-metalic objects.
Rather than modify the comparator on the detector circuit itself, I’ll put together a small board that connects to the raw test point, and has a comparator with a precision potentiometer for calibration. This will both make it a lot easier for folks to replicate, but also reduce the chances of introducing noise into the detector by removing and trying to replace the electrical shielding around the detector.
Because I’m seeing fewer detections than I’d expected, I’ll also make a small mechanical modification and move the source and detector from the outside of the gantry to the inside — reducing their distance from 30cm to somewhere in the 10-15cm range.
Once that’s complete, I should be able to acquire the first images of a few test targets!