Jupyter Notebook C HTML TeX Python C++ Other
Switch branches/tags
Nothing to show
Clone or download
Latest commit e1d8ac9 Jul 18, 2018
Permalink
Failed to load latest commit information.
doc Update of us class Jul 18, 2018
doj Adding doj Jun 15, 2018
elmo Update for ADC code for RPi3 Jul 16, 2018
gh-pages Autopush Jul 15, 2018
gitbook Autopush Jul 15, 2018
goblin Remarks on expe Apr 21, 2018
include Update of us class Jul 18, 2018
lite.tbo Adding lite.tbo v2 May 2, 2018
matty Update of us class Jul 18, 2018
retired Autopush Jun 17, 2018
retroATL3 Retiring modules Apr 15, 2018
silent Retiring modules Apr 15, 2018
wirephantom Retiring modules Apr 15, 2018
LICENSE.txt Create LICENSE.txt Apr 18, 2016
Readme.md Update of PrepKernel Jun 25, 2018
WordOfCaution.md Autopush Jul 27, 2017
Worklog.md Updates Jul 15, 2018
etaix.png New experiments May 2, 2018
makedoc Autopush Jan 20, 2018
makedoc.py Cleaning folders Apr 15, 2018
makedoc.sh Commit of generated files on 2018-03-10 09:59:00 Mar 10, 2018
retire.py Retiring modules Apr 15, 2018

Readme.md

What is this project? [](@description Pitch/Intro of the project)

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:

DOI

  • 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.

What are the arduino-like ultrasound module ?

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!

What images does it give ?

What does it look like?

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:

What does it cost?

Raspberry Dev Kit

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 pHAT for 20Msps+ acquisition (elmo) -- get for 99$ (Where? OSHPark, MacroFab, 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)
  • 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: 458$

echOmods emulated

uC pings emulator and streams feedback

Total cost of the set: 229$

Wireless Dev Kit

The default setting for the sets

Total cost of the set: 389$

The Beaglebone version, along with an hacked probe

Some stuff, unexpensive to buy, to build a ultrasound testing kit, totalling less than 500$.

Total cost of the set: 443$

Ultrasound hardware structure

[](@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:

The modules organization

Graph

A recap of our modules

ThumbnailImage Name In Out
wirephantom: Just a phantom for calibrated signals
  • na
  • na
elmo: The aim of this module is to achieve 20Msps, at 9bits or more.
  • ITF-1_GND
  • ITF-2_VDD_5V
  • ITF-19_3.3V
  • ITF-12_RPIn
  • Signal Digitalized
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.
matty: The aim is to summarize all modules in a all-inclusive board. Fast ADC, good load of memory, good SNR.. the not-so-DIY module, as it comes already assembled with nothing to do =)
retroATL3: The aim of this echOmod is to get the mechanical movement of the piezos. Salvaged from a former ATL3.
  • ITF-A_gnd
  • ITF-F_12V
  • ITF-N_cc_motor_pwm
  • ITF-mET_Transducer
  • Motor
  • Tri-Piezo Head
  • Motor
  • ITF-mET_Transducer
  • Tri-Piezo Head
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.
  • ITF-1_GND
  • ITF-2_VDD_5V
  • ITF-7_GAIN
  • ITF-4_RawSig
  • ITF-3_ENV
  • ITF-18_Raw
  • ITF-mET_SMA
  • ITF-4_RawSig
  • ITF-3_ENV_signal_envelope
  • ITF-mEG_SPI
lite.tbo: The aim of this echOmod is to get the HV Pulse done.
  • ITF-1_GND
  • ITF-2_VDD_5V
  • ITF-9_Pon
  • ITF-10_Poff
  • ITF-19_3.3V
  • ITF-mET_Transducer
  • ITF-18_Raw
  • ITF-mET_SMA
  • ITF-mET_Transducer
silent: The aim of this echOmod is to simulate a raw signal that would come from the piezo and analog chain.
  • ITF-1_GND
  • ITF-2_VDD_5V
  • ITF-17_POff3
  • ITF-18_Raw

Experiments

  • 2016-08-09: Goblin tests: Testing the goblin board with the silent emulator. (20160809a)
  • 2016-08-14: RPi: Testing the acquisition with the BeagleBone DAQ. (20160814a)
  • 2016-08-22: BBB+Probe: Images acquired from a BeagleBone black with a probe (20160822a)
  • 2016-12-17: Croaker: Testing the acquisition with the croaker module. (20161217a)
  • 2017-06-11: Croaker: Testing the acquisition with the croaker module. (20170611a)
  • 2017-07-13: Elmo: Testing the new DAQ with two ADCs. (20170713a)
  • 2017-07-15: RetroATL3 acquisition: Getting an image from the retroATL3 probe. (20170715a)
  • 2017-09-30: Alt.tbo: Testing new pulser again 1/4 (20170930a)
  • 2017-10-01: Alt.tbo: Testing new pulser again 2/4 (20171001a)
  • 2017-10-01: Alt.tbo: Testing new pulser again 3/4 (20171001b)
  • 2017-11-11: Alt.tbo: Testing new pulser again 4/4 (20171111a)
  • 2017-11-12: Probe: Testing new probe with new pulser (20171112a)
  • 2017-11-24: Impedance matching: Doing some tests for impedance matching. (20171124a)
  • 2018-01-03: Felix experiment: Testing Felix setup with previous Bomanz module. (20180103a)
  • 2018-01-15: Matty: Receiving the first matty. (20180115a)
  • 2018-02-16: Alt.tbo and Elmo: Testing alt.tbo and elmo new boards. (20180216a)
  • 2018-02-17: Alt.tbo and Elmo: Testing alt.tbo and elmo new boards for pulser issues (there is not positive and negative pulse, only goes in direction). (20180217a)
  • 2018-02-24: Matty speed tests: Testing matty s acquisition at different speed, 12Msps to 24Msps. (20180224a)
  • 2018-02-24: Matty Gain: Testing matty's fixed gain settings. (20180224b)
  • 2018-02-25: Matty and RetroATL3: Acquisition of a probe image with matty. (20180225a)
  • 2018-03-10: Matty DAQ: testing the programmation of matty DAC control for the TGC. (20180310a)
  • 2018-04-03: Voltage checks: Testing matty at different voltages. (20180403a)
  • 2018-04-03: Matty TGC test: Testing matty 's TGC, including playing with the gain DAC and pulse control. (20180403b)
  • 2018-04-03: Tomas first acq: Tomas, a user, is getting a first image from a NDT setup with a block of steel. (20180403t)
  • 2018-04-15: Test of new batch 1/2: Testing the goblin board with silent, then test of the new lite.tbo pulser with a piezo. (20180415a)
  • 2018-04-15: Test of new batch 2/2: Testing the lite.tbo, goblin and elmo boards done at the fab - on a doj v2 motherboard. (20180415r)
  • 2018-04-17: echomods vs MATTY: Comparing the performances of the modules vs the FPGA board Matty (20180417a)
  • 2018-04-30: JSON and Servo: Better file management and servo control using Matty. (20180430a)
  • 2018-05-06: SPI timing on Raspberry: Checking SPI bottlenecks on Matty (20180506a)
  • 2018-05-11: Enveloppe detection: Checking different ways to rebuild enveloppe (20180511a)
  • 2018-05-16: Matty file format: Testing to format the data for experiments to be easily reproduced (20180516a)
  • 20180620a

Progress on building the modules

Module-wise

Note that the 'BONUS!' represents something that could be done, and does not count as a strict TODO.

Name of module ToDo Done Progress
wirephantom
  • None
  • All
50%
elmo
  • None
85%
doj
  • PCB on OSHPark
  • Having the list of strips accessible
  • Design
  • Change the viewme
  • Assemble it
  • Test it
  • Adapt power supply from v2 - smaller board footprint
  • Add a level shifter been Pon 3.3 and 5 and Poff 3.3 and 5
  • A bit more space around the Pi0/PiW headers
  • Proper silkscreening around the Pi0 headers (they are reversed)
  • Jumper for the ADC in.. and selector (enveloppe and amplified signal) (either to Feather or to ADC .. and dedicated pin on Rpi)
  • SPI from RPi to Oled... or SPI to screen (to be checked in both case) .. or both kept, there are two SPI
100%
matty
  • Getting some signals!
33%
retroATL3
  • BONUS! Get RealTime acquisition
  • Finding the pins mapping
  • Acquire and build ultrasound pictures =)
  • Motor in action
  • Refill Oil
  • Test echoes
  • Make and insert a video: there
77%
goblin
  • Test Goblin v2
  • Check the power consumption
  • Testing the in and out signals of the board with the prudaq.
  • Specs to write
  • Agreeing on the strips
  • Check if 5V and 3.3V are stable
  • Defining the ICs to use
  • Getting schematics
  • Send microcircuits to Edgeflex
  • Receive the module
  • Publish the sources in KiCAD (@Sofian maybe?)
  • CANCELLED - Test it with the EMW3165
  • Plug it to a RPi0 or BBB or STM32
  • Connect the ADC to a RPi0
92%
lite.tbo
  • Review a bipolar design (originally alt.tbo -- but double the components and hence the price)
  • Preliminary testing
50%
silent 100%

Shopping list

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

Todos from Modules

Todos from worklog

  • 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
  • add some ideas for the pulser to the alt.pulser board
  • remove gitbook MD files from the log
  • link to files in the log (python)
  • Main readme as TPL
  • test some compressed sensing using golay codes on a single element piezo
  • senjak 15:07 In Which a PDF is a Git Repository Containing its own Latex Source and a Copy of Itself -- https://github.com/ESultanik/PDFGitPolyglot/blob/master/make_polyglot.sh
  • 20171111a and 20171112b Readmes
  • impedance matching -- see more -- Butterworth-Van-Dyke or here. Tuning Filter.
  • list other initiatives
  • classifier articles with link Article: =)
  • a page sumarizing the experiments (as in the Experiments page in the gitbook)
  • Brainstorm for @senjak information design:
  • un0rick site to have plenty of stuff
  • Publish first drafts on un0rick GH / GH-pages / gitbook
  • create v2 release once gob.v2 and corrected/working alt.tbo v2 are ready.
  • use General Design Procedure for Free and Open-Source Hardware for Scientific Equipment as a reference
  • compare old pulser (pulser) and new acs for matty readme
  • for matty Rip this intro?
  • clean all repos for a v2 release of modules
  • decrypt the connector =)
  • Script to check IMGs URL matches path
  • reorganise Loved Nasa: add to un0rick
  • change path of images when they have changed
  • Create detailed pages for the community in the gitbook
  • Create detailed pages for each probe I've played with in the gitbook
  • add dp location
  • listing experiments of others
  • before reclean full repo, create release "Full Dev Resources" and get corresponding version (v1.9 + hash)!
  • : Add Full GitBook PDF to it before
  • Sort the list of experiments, shortnames in SUMMARY
  • Community: list the contributors in a page + add the experiment. Individual page to point to experiment.
  • Page on documentation
  • Edit history page to add Matty.
  • Rewrite the Chapters Readme -> "This chapter is dedicated to the brain_dumps "
  • Do a Doj (LOW PRIORITY)
  • Redo a usable alt.tbo (LOW PRIORITY)
  • Clean Modules list (keep lite.tbo, goblin, cletus, doj, elmo, matty) + add "CNprobe"
  • Make 7 clean QuickStarts for remaining modules // copy them on Tindie.
  • Get "ShortNames" in JSON
  • Put alt.tbo, tobo, loftus, tomtom, croaker, retroATL3 and wirephantom in retired modules + add "PU3090" phantoms in retired
  • Remove sets in doc
  • Remake homepage in autodoc
  • Clean obsolete versions in repos
  • contact the author !
  • Resume work on article - Draft is here
  • contact the guys from https://www.iith.ac.in/~raji/Cpapers/LPFB.pdf (check their prices)
  • add Anna and Matthew to users list
  • idea for the ultrasound phat : QuietShark (see https://twitter.com/Dymaxion/status/962385327599112193?s=19 )
  • Add new un0rick code, and documentation (both FPGA side, FPGA SPI level, Python)
  • article un0rick article and pics
  • add the MSAS principles to the un0rick article

A recap of our retired modules

ThumbnailImage Name In Out
sleepy: The aim of this echOmod is to encase the whole modules object in a neat case, making it transportable.
  • None
  • None
tobo: The aim of this echOmod is to get the HV Pulse done.
  • ITF-1_GND
  • ITF-2_VDD_5V
  • ITF-9_Pon
  • ITF-10_Poff
  • ITF-19_3.3V
  • ITF-mET_Transducer
  • ITF-18_Raw
  • ITF-mET_SMA
  • ITF-mET_Transducer
alt.tbo: The aim of this echOmod is to get the HV Pulse done.
  • ITF-1_GND
  • ITF-2_VDD_5V
  • ITF-9_Pon
  • ITF-10_Poff
  • ITF-19_3.3V
  • ITF-mET_Transducer
  • ITF-18_Raw
  • ITF-mET_SMA
  • ITF-mET_Transducer
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.
  • ITF-A_gnd
  • ITF-B_5v
  • ITF-N_cc_motor_pwm
  • ITF-S_3_3v
  • ITF-mET_Transducer
  • ITF-mET_Piezo
  • ITF-mET_Piezo
  • ITF-mET_Transducer
tomtom: The aim of this echOmod is to digitalize the signal, and to control the pulser, servo, ...
  • ITF-1_GND
  • ITF-2_VDD_5V
  • ITF-3_ENV
  • ITF-15_GPIO21
  • ITF-16_POn3
  • ITF-16_POn3
  • ITF-17_POff3
  • ITF-14_PWM
  • Wifi
oneeye: The module aims at making a microcontroler, for the moment the ArduinoTrinketPro, usable with the motherboard and the set of modules.
  • ITF-3_ENV
  • ITF-1_GND
  • ITF-2_VDD_5V
  • ITF-7_GAIN
  • ITF-9_Pon
  • ITF-10_Poff
  • ITF-14_PWM
croaker: The aim of this echOmod is to receive the signal and process it, then stream it over wifi.
  • ITF-3_ENV
  • ITF-10_Poff
  • ITF-9_Pon
  • ITF-1_GND
  • ITF-2_VDD_5V
  • ITF-19_3.3V
  • ITF-mED-TFT-Screen
  • ITF-mED-OLED-Screen
  • ITF-mEC-WiFi-UDP-Stream
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.
  • ITF-1_GND
  • ITF-2_VDD_5V
  • ITF-19_3.3V
  • ITF-3_ENV
  • WiFi UDP Stream
  • ITF-mED-TFT-Screen
  • ITF-9_Pon
  • ITF-10_Poff
  • ITF-14_PWM
retro10PV: The aim of this echOmod is to get the mechanical movement of the piezos. Salvaged from a former ATL10PV.
  • ITF-A_gnd
  • ITF-F_12V
  • ITF-N_cc_motor_pwm
  • ITF-mET_Transducer
  • Motor
  • Tri-Piezo Head
  • Motor
  • ITF-mET_Transducer
  • Tri-Piezo Head
loftus: The aim of this module is to recycle a previous head
  • ITF-A_gnd
  • ITF-B_5v
  • ITF-N_cc_motor_pwm
  • ITF-S_3_3v
  • ITF-mET_Transducer
  • ITF-mET_Piezo
  • ITF-mET_Piezo
  • ITF-mET_Transducer
mogaba: The aim of this echOmod is to get 3.3V and 5V done.
  • ITF-mEM_Alimentation
  • ITF-1_GND
  • ITF-2_VDD_5V
  • ITF-19_3.3V

Interfaces table for the motherboard

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]

Interfaces for Raspberry Pi

-> 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

License

echOmods

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

Based on

The following work is base on a previous TAPR project, Murgen - and respects its TAPR license.

Copyright Kelu124 (kelu124@gmail.com) 2015-2018

Disclaimer

This project is distributed WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE.

[](@autogenerated - invisible comment)