Coder Social home page Coder Social logo

dzwpusa / echomods Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kelu124/echomods

0.0 0.0 0.0 1.16 GB

Ultrasound processing modules and building blocks

Home Page: https://www.gitbook.com/book/kelu124/echomods/details

License: Other

SMT 0.02% Jupyter Notebook 67.28% Shell 0.04% C++ 0.32% Python 0.54% C 26.98% HTML 2.31% TeX 1.91% Smarty 0.05% VHDL 0.20% Lua 0.06% Assembly 0.28% Objective-C 0.01%

echomods's Introduction

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 75$ (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: 434$

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

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

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 ([email protected]) 2015-2018

Based on

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

Copyright Kelu124 ([email protected]) 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)

echomods's People

Contributors

kelu124 avatar ztaylor39 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.