This project has a specific target of providing a low-cost, open source technological kit to allow scientists, academics, hackers, makers or OSHW fans to hack their way to ultrasound imaging - below 500$ - at home, with no specific equipment required. For complementary sources of information, you can visit:
- the github repo, for the source files, raw data and raw experiment logs;
- the online manual/book for a easily readable and searchable archive of the whole work;
- the hackaday page, where I tried to blog day-to-day experiments in a casual format;
- an article summarizing the experiment on the Journal of Open Hardware - DOI:10.5334/joh.2;
- the slack channel if you want to discuss;
- the Tindie store for the analog processing unit and the pulser or the motherboard.
- Disclaimer #0: This is not a medical ultrasound scanner! It's a development kit that can be used for pedagogical and academic purposes - possible immediate use as a non-destructive testing (NDT) tool, for example in metallurgical crack analysis. As in all electronics, be careful.
- Disclaimer #1: though an engineer, this project is the first of its sort, I never did something related. It's all but a finalized product.
- Disclaimer #2: Ultrasound raises questions. In case you build a scanner, use caution and good sense!
- Disclaimer #3: This project is not part of echopen.
Creating modules to facilitate ultrasound hacking : the principles of the echOmods is to enable a full chain of ultrasound image processing and hardware control.
We have chosen to use a module approach to make sure that each key component inside ultrasound image processing can easily be replaced and compared with another module, while providing logical logic blocks and corresponding interfaces for these modules to communicate. There's a module for high-voltage pulsing, one for the transducer, one for the analog processing, one for data acquisiton, ... and many more!
The modules sit on a breadboard, and communicate through the tracks laying below. The configuration represented below show the Basic dev kit.
and used in a wider context:
Using a simpler linux-enabled controler (the all-powerful Pi in its RPi 0 or Pi W) for the dev kit. Cost of materials aims at being as low as possible, below the 500$.
- Simply the servo and transducer module (cletus) -- get for 80$ (Where? Recycling a transducer from ebay, servo from anywhere (Amazon?))
- The Pi Heart of the echOmods (tomtom) -- get for 10$ (Where? Get the Pi W from plenty of sources)
- Using a dual ADC raspberry extension for 20Msps+ DAQ (elmo) -- get for 45$ (Where? OSHPark, MacroFab)
- Goblin: a TGC-Envelop-ADC module (goblin) -- get for 149$ (Where? Custom made, get the Gerbers, or buy it preassembled on Tindie, or contact @kelu124)
- Tobo: the HV-pulser (tobo) -- get for 120$ (Where? Custom made, get the Gerbers, buy it preassembled on tindie or contact @kelu124)
Total cost of the set: 404$
uC pings emulator and streams feedback
- This is the module which emulates the signal coming from the analog processing chain. (silent) -- get for 35$ (Where? Get from Adafruit)
- The acquisition heart of the echOmods (croaker) -- get for 35$ (Where? Get Feather from Amz or Adafruit. OLED at Amz)
- Mogaba, the power supply (mogaba) -- get for 5$ (Where? Anywhere, or eg Amazon?)
- The motherboard of the echomods (doj) -- get for 5$ (Where? Anywhere for stripboard. Or PCB from OSHPark if you can order by 3. Or straight from Tindie.)
- Goblin: a TGC-Envelop-ADC module (goblin) -- get for 149$ (Where? Custom made, get the Gerbers, or buy it preassembled on Tindie, or contact @kelu124)
Total cost of the set: 229$
The default setting for the sets
- Simply the servo and transducer module (cletus) -- get for 80$ (Where? Recycling a transducer from ebay, servo from anywhere (Amazon?))
- The acquisition heart of the echOmods (croaker) -- get for 35$ (Where? Get Feather from Amz or Adafruit. OLED at Amz)
- Mogaba, the power supply (mogaba) -- get for 5$ (Where? Anywhere, or eg Amazon?)
- Goblin: a TGC-Envelop-ADC module (goblin) -- get for 149$ (Where? Custom made, get the Gerbers, or buy it preassembled on Tindie, or contact @kelu124)
- Tobo: the HV-pulser (tobo) -- get for 120$ (Where? Custom made, get the Gerbers, buy it preassembled on tindie or contact @kelu124)
Total cost of the set: 389$
Some stuff, unexpensive to buy, to build a ultrasound testing kit, totalling less than 500$.
- Retrohacking the ATL Access 3 probe (retroATL3) -- get for 75$ (Where? Recycling a probe from ebay)
- This is the module to get high-speed (40Msps) signal acquisition. (toadkiller) -- get for 79$ (Where? A bundle at 169$ from Groupgets or as a standalone at 79$ )
- Mogaba, the power supply (mogaba) -- get for 5$ (Where? Anywhere, or eg Amazon?)
- Goblin: a TGC-Envelop-ADC module (goblin) -- get for 149$ (Where? Custom made, get the Gerbers, or buy it preassembled on Tindie, or contact @kelu124)
- Tobo: the HV-pulser (tobo) -- get for 120$ (Where? Custom made, get the Gerbers, buy it preassembled on tindie or contact @kelu124)
- The motherboard of the echomods (doj) -- get for 5$ (Where? Anywhere for stripboard. Or PCB from OSHPark if you can order by 3. Or straight from Tindie.)
- One-eye, the controler (oneeye) -- get for 10$ (Where? from Adafruit)
Total cost of the set: 443$
[](@autogenerated - invisible comment)
[](@description Short description of the organization of modules)
To produce an image, the modules have to create a high voltage pulse, which excites a transducer. Echoes coming from the body are amplified using a TGC + LNA, which cleans the analog signal, which itself gets digitalized.
The diagram is represented below:
ThumbnailImage | Name | In | Out |
---|---|---|---|
tobo: The aim of this echOmod is to get the HV Pulse done. |
|
|
|
elmo: The aim of this module is to achieve 10Msps, ideally 20Msps, at 9bits or more. Inspired from the Bomanz project as well, which tried several high-speed ADCs setup for Raspberry Pi. |
|
|
|
cletus: The aim of this module is to interface the transducer and the servo, aka the physical parts, to the analog part of the modules chain. More to come with the Loftus head. |
|
|
|
tomtom: The aim of this echOmod is to digitalize the signal, and to control the pulser, servo, ... |
|
|
|
doj: Getting a motherboard: that's fitting all the modules in an easy way, with an easy access to all tracks. See this for the Kicad files. | |||
croaker: The aim of this echOmod is to receive the signal and process it, then stream it over wifi. |
|
|
|
retroATL3: The aim of this echOmod is to get the mechanical movement of the piezos. Salvaged from a former ATL3. |
|
|
|
goblin: The aim of this echOmod is to get the signal coming back from a transducer, and to deliver the signal, analogically processed, with all steps accessible to hackers. |
|
|
|
loftus: The aim of this module is to recycle a previous head |
|
|
|
silent: The aim of this echOmod is to simulate a raw signal that would come from the piezo and analog chain. |
|
|
Note that the 'BONUS!' represents something that could be done, and does not count as a strict TODO.
Name of module | ToDo | Done | Progress |
---|---|---|---|
tobo |
|
100% | |
elmo |
|
100% | |
cletus |
|
|
33% |
tomtom |
|
|
90% |
doj |
|
100% | |
croaker |
|
50% | |
retroATL3 |
|
63% | |
goblin |
|
100% | |
loftus |
|
|
50% |
silent |
|
100% |
Here's a couple of things we're working on, for which you could help as well.
- Boosting the 6Msps croaker acquisition (see Wayne?) to the full 6Msps
- Remove the jitter (see image in Rdme) (in cletus)
- Include notes (in cletus)
- Save images as DICOMs (in tomtom)
- Replace the work done by OneEye by Croaker - that is, pulse control. (in croaker)
- Get better total ADC speed with an iterleaved move (in croaker)
- Develop a Cletus+Croaker way of working with a gyroscope+accelerometer. (in croaker)
- Have Croaker generate its own AP (in croaker)
- TBD (in loftus)
- 6Msps on the STM32
- dig into CMOS Ultrasound Transceiver Chip for High-Resolution Ultrasonic Imaging Systems.
- add Visa, possibly Pouya and Thomas as contributors
- map interested (green)
- Add a documentation server
- Display IP on the OLED.
- Need to have a look at this RPI GPIO DMA - https://github.com/hzeller/rpi-gpio-dma-demo
- Include some cletus remarks (sourcing) on gitbook
- convert all previous images to dicom
- put probe on the setup
- set the gain on the AFE using Doj v1.2
- use the GetSuppliersList function to list equipment suppliers
- Add PCBA
- Test UHF probe
- board pulser + processing + ADC for RPi
- add some ideas for the pulser to the alt.pulser board
- get orders from Sam CN.
- remove gitbook MD files from the log
- link to files in the log (python)
- Main readme as TPL
- DICOM rest of images
- test some compressed sensing using golay codes on a single element piezo
ThumbnailImage | Name | In | Out |
---|---|---|---|
sleepy: The aim of this echOmod is to encase the whole modules object in a neat case, making it transportable. |
|
|
|
hannin: The aim of this echOmod is to acquire the enveloppe of the signal and stream it. Designed for slow (~64 lines / s) acquisitions. |
|
|
|
oneeye: The module aims at making a microcontroler, for the moment the ArduinoTrinketPro , usable with the motherboard and the set of modules. |
|
|
|
toadkiller: The aim of this echOmod is to simulate the enveloppe (or maybe soon the raw signal) that would come from the piezo and analog chain. |
|
|
|
retro10PV: The aim of this echOmod is to get the mechanical movement of the piezos. Salvaged from a former ATL10PV. |
|
|
|
mogaba: The aim of this echOmod is to get 3.3V and 5V done. |
|
|
Name | Title | Amplitude | Raspberry GPIO |
---|---|---|---|
ITF-1_GND |
Ground | [0V] | |
ITF-2_VDD_5V |
5V alimentation | [5V, 5V] | |
ITF-3_ENV |
Enveloppe of the signal | [0V, 2.5V] | |
ITF-4_RawSig |
Amplified filtered signal | [0V, 2.5V] | |
ITF-5_RENV |
Raw signal envelope | [VREF, 2.5V] | |
ITF-6_P6 |
_ OLED SDA_ | [0V, 3V] | GPIO 02 |
ITF-7_GAIN |
Amplifier gain control | [0V, 1V] | |
ITF-8_P8 |
-Pi OLED SCL | [0V, 3V] | GPIO03 |
ITF-9_Pon |
Pulse on | [0V, 5V] | Jumper to connect to GPIO 23 |
ITF-10_Poff |
Pulse off | [0V, 5V] | Jumper to connect to GPIO 24 |
ITF-11_OffSig |
Signal offset by Vref/2 | [0V, 3.3V] | |
ITF-12_RPIn |
Pi ADC DAQ | [0V, 3.3V] | GPIO 05 |
ITF-13_P13 |
Unused | ||
ITF-14_PWM |
Servo PWM | [0V, 3.3V] | GPIO 06 |
ITF-15_GPIO21 |
GPIO21 connection | GPIO 21 | |
ITF-16_POn3 |
Pulse On 3V | [0V, 3.3V] | GPIO 23 |
ITF-17_POff3 |
Pulse Off 3V | [0V, 3.3V] | GPIO 24 |
ITF-18_Raw |
Raw signal fro transducer | [-5V, 5V] | |
ITF-19_3.3V |
3.3V alimentation | [3.3V, 3.3V] |
-> Core
#define ADC_CLK 4
#define RPIn 5
#define PWM 6
#define Puls_ON 23
#define Puls_OFF 24
#define TRACKER 21
-> Optional
#define oled_sda 2
#define oled_sdc 3
//ADC 1
#define BIT0_PIN 16
#define BIT1_PIN 17
#define BIT2_PIN 18
#define BIT3_PIN 19
#define BIT4_PIN 20
#define BIT5_PIN 22
#define BIT6_PIN 25
#define BIT7_PIN 26
#define BIT8_PIN 27
//ADC 2 (leaves SPI0 free)
#define BIT0_PIN 7
#define BIT1_PIN 8
#define BIT2_PIN 9
#define BIT3_PIN 10
#define BIT4_PIN 11
#define BIT5_PIN 12
#define BIT6_PIN 13
#define BIT7_PIN 14
#define BIT8_PIN 15
The echOmods project and its prototypes are open hardware, and working with open-hardware components.
Licensed under TAPR Open Hardware License (www.tapr.org/OHL)
Copyright Kelu124 (kelu124@gmail.com) 2015-2018
The following work is base on a previous TAPR project, Murgen - and respects its TAPR license.
Copyright Kelu124 (kelu124@gmail.com) 2015-2018
[](@autogenerated - invisible comment)