Body-ultrasound Sonography With Arduino

30,145

91

16

Introduction: Body-ultrasound Sonography With Arduino

Hello!

My hobby and passion is to realize physics projects. One of my last work is about ultrasonic sonography. As always I tried to make it as simple as possible with parts you can get on ebay or aliexpress. So let's take a look how far I can go with my simple items...

I was inspired by this a bit more complicated and more expensive project:

https://hackaday.io/project/9281-murgen-open-sourc...

Here are the parts you'll need for my project:

the main parts:

for the transmitter:

  • a step-up-converter for the needed 100V for 5 USD: 100V boost converter
  • a common step-up-converter supplying 12-15V for the 100V-boost-converter for 2 USD: XL6009 boost-converter
  • a LM7805 voltage regulator
  • monoflop-IC 74121
  • mosfet-driver ICL7667
  • IRL620 mosfet: IRL620
  • capacitors with 1nF (1x), 50pF (1x), 0.1µF (1x electrolytic), 47µF (1x electrolytic), 20 µF (1 x electrolytic for 200V), 100 nF (2x MKP for 200V: 100nF20µF
  • resistors with 3kOhm (0.25W), 10kOhm (0.25W) and 50Ohm (1W)
  • 10 kOhm potentiometer
  • 2 pcs. C5-sockets: 7 USD C5 socket

for the receiver:

  • 3 pcs. AD811 operational amplifie: ebay AD811
  • 1 pcs. LM7171 operational amplifie: ebay LM7171
  • 5 x 1 nF capacitor, 8 x 100nF capacitor
  • 4 x 10 kOhm potentiometer
  • 1 x 100 kOhm potentiometer
  • 0.25W resistors with 68 Ohm, 330 Ohm (2 pcs.), 820 Ohm, 470 Ohm, 1.5 kOhm, 1 kOhm, 100 Ohm
  • 1N4148 diodes (2 pcs.)
  • 3.3V zener diode (1 pcs.)

Step 1: My Transmitter- and Receiver-circuits

Sonography is a very important way in medicine to look inside the body. The principle is simple: A transmitter sends ultra-sonic-pulses. They spread out in the body, are being reflected by inner organs or bones and come back to the receiver.

In my case I use the gauge GM100 for measuring the thickness of paint layers. Though not really intended for looking inside the body i am able to see my bones.

The GM100-transmitter works with a frequency of 5 MHz. Therefore you have to create very short pulses with a length of 100-200 nanoseconds. The 7412-monoflop is able to create such short pulses. These short pulses go to the ICL7667-mosfet-driver, which drives the gate of an IRL620 (attention: the mosfet must be able to handle voltages up to 200V!).

If the gate is switched on, the 100V-100nF-capacitor discharges and a negative pulse of -100V is applied to the transmitter-piezo.

The ultrasonic-echoes, received from the GM100-head are going to a 3-stage amplifier with the fast OPA AD820. After the third step you'll need a precision-rectifier. For this purpose I use an LM7171 operational amplifier.

Pay attention: I got the best results, when I shorten the input of the precision-rectifier with a dupont-wire-loop (? in the circuit). I don't really understand why but you'll have to check it if you try to reconstruct my ultrasonic-scanner.

Step 2: The Arduino-software

The reflected pulses have to be stored and displayed by a microcontroller. The microcontroller must be fast. Therefore I choose an arduino due. I've tried two different types of fast analog-read-codes (look at the attachments). One is faster (about 0.4 µs per conversion) but I got 2-3 times the same value when reading in the analog input. The other one is a bit slower (1 µs per conversion), but hasn't the disadvantage of the repeated-values. I've chosen the first one...

There are two switches on the receiver-board. With those sitches you can stop the measurement and choose two different time-bases. One for measure-times between 0 and 120 µs and the other between 0 and 240 µs. I realized this by reading out 300 values or 600 values. For 600 values it takes twice the time, but then I take just every second analog-in-value.

The incoming echoes are being read with one of the analog-input-ports of the arduino. The zener-diode should protect the port for too high voltages because the arduino due can only read voltages up to 3.3V.

Each analog-input-value is then transformed into an value between 0 and 255. With this value a further grey-coloured-rectancle will be drawn on the display. White means high signal/echo, dark-grey or black means low signal/echo.

Here are the lines in the code for drawing the rectangles with 24 pixel width and 1 pixel height

for(i = 0; i < 300; i++)
{

values[i] = map(values[i], 0, 4095, 0, 255);

myGLCD.setColor(values[i], values[i], values[i]);

myGLCD.fillRect(j * 24, 15 + i, j * 24 + 23, 15 + i);

}

After one second the next column will be drawn...

Step 3: Results

I've examined different objects from aluminim-cylinders over water-filled balloons to my body. To see body-echos the amplification of the signals must be very high. For the aluminum-cylinders a lower amplification is needed. When you look at the pictures you can clearly see the echoes from the skin and my bone.

So what can I say about the success or failure of this project. It is possible to look inside the body with such simple methods and using parts, which aren't commonly intended for that purpose. But these factors are limiting the results too. You don't get such clear and well structured pictures compared with commercial solutions.

But and this is the most important thing, I've tried it and did my best. I hope you liked this instructables and it was at least interesting for you.

If you like to take a look at my other physics-projects:

https://www.youtube.com/user/stopperl16/videos?

And last but not least I'd be very happy if you could vote for me in the current arduino-contest. Thank's for that...

Arduino Contest 2019

Participated in the
Arduino Contest 2019

Be the First to Share

    Recommendations

    • Microcontroller Contest

      Microcontroller Contest
    • Automation Contest

      Automation Contest
    • Make it Glow Contest

      Make it Glow Contest

    16 Comments

    0
    goudarc
    goudarc

    3 months ago

    Hello Stoppi,
    This is a great project, love it. What kind of breadboard you recommend for this project?
    Thanks,

    0
    goudarc
    goudarc

    Reply 8 weeks ago

    Hello Stoppi,
    Happy New Year. Finally got all the parts from ebay (shipping delay due to holidays). Now I am assembling all the parts. Can you please help me answer the following questions?

    What does "IN" mean in Receiver circuit diagram? Where should this be connected to?
    What does "Piezo" mean in Sender circuit diagram?
    Where should the C5 sockets be connected, since they are not shown in both Sender and Receiver circuit diagram?
    Also, what does -9V mean? where should this be connected to?

    Thanks,
    Gouda

    0
    stoppi71
    stoppi71

    Reply 7 weeks ago

    Hello! The ultrasonic-head has two cables, pulse-in and signal-out. The pulse-in has to be connected with the piezo in my schematics, the signal out with the Input (in) of the receiver. The C5 sockets are located at "piezo" and "in" to connect the ultrasonic-head with the emitter and receiver...
    For the operational amplifiers you need a negative voltage (-9V). I use two 9V-switching power supplies and connect them in series. The middle point is Ground, and the other two potentials are +9V and -9V...
    Good luck.

    0
    goudarc
    goudarc

    Reply 5 weeks ago

    Hello Stoppi,

    Thank you so much for the additional info. I completed assembling all the components and tested the connections with multi-meter.

    I am having an issue with TFT screen display. Basically, it just shows up blank white screen. It does turn on but nothing is being displayed.

    I am using the same code with UTFT library, program compiled and uploaded successfully. But there is no output on the screen. Please see the attached screenshot showing the blank display.

    I am using the following TFT screen :
    "HiLetgo 3.5" TFT LCD Display ILI9486/ILI9488 480x320 36 Pins for Arduino Mega2560"
    https://www.amazon.com/gp/product/B073R7Q8FF/ref=p...

    Can you please tell me how to make the display work with Arduino Due?
    As always, truly appreciate your input.

    Arduino-LCD-BlankDisplay.jpg
    0
    suryagupta3690
    suryagupta3690

    5 months ago

    Hi! I really loved this project and want to develop it for a student organization at Ohio State. Would it be possible to chat?

    0
    ökkeşz
    ökkeşz

    Question 7 months ago on Step 3

    Hi, i will ask some questions;
    1. The resolution is to low, which method the upgrade resolution?
    2 İf i want use in my mobile phone, use bluetooth connection, is it possible?


    0
    D_Murph
    D_Murph

    8 months ago

    place a link so folks can vote for you easily.

    0
    shypatel360
    shypatel360

    1 year ago

    Hey Stoppi! I love your project. I am currently a high school student and am not as skilled with arduino wiring. I am a coding person. However, I am very interested in the medicine field therefore I want to try to make this project. Is there any way you could show the wiring and how you put it together? I tried my best with the schematics, but couldn't really figure out all the wiring. Is there any way you can maybe make this wiring a little bit easier for me? Thank you so much. And again, AMAZING project!

    0
    stoppi71
    stoppi71

    Reply 1 year ago

    Hello!
    Thank's for the compliment. I've added a picture of the whole circuit in step 1: My Transmitter- and receiver-circuits. There you can see the shematics and the real circuits too. For the +100V I needed two step-up-converters. The first for delivering about +16V and the second one for the +100V.

    There are just 4 connections between the circuit and the arduino. Two come from the two switches to select the timebase and to stop the image, then the trigger-pulse from the arduino to the transmitter-circuit and then the analog-signals from the receiver, which are connected to analog-7 from the arduino.

    The display is just plugged into the arduino-due-socket ;-)

    Good luck, regards stoppi

    0
    Alpha1605
    Alpha1605

    1 year ago

    Hi! Can I use a GM200 paint thickness gauge instead of GM100? Thanks

    0
    stoppi71
    stoppi71

    Reply 1 year ago

    I'm afraid no but you can buy just the transducer from the Gm100. This will not be too expensive...

    0
    stevenstevensteven

    Hey Stoppi! Thanks so much for this project, some friends and I are building it! But we can't get the code to work, is there a special way to organize it or an unmentioned library we need because it's not compiling :(

    Look forward to hearing from you.

    Thanks,

    Steve

    0
    stoppi71
    stoppi71

    Reply 1 year ago

    Hi Steve!
    I've added two versions of the complete program and two display-libraries (UTFT and HX8357). I hope you will get your software running. If not, post here a command once again. I'd be very interested in your results... Good luck, cheers stoppi

    0
    stevenstevensteven
    stevenstevensteven

    Reply 1 year ago

    Hey Stoppi. Thanks for the extra libraries and help!
    The ultrasonic circuits seem to work great, but I think our group's main issue is we can't understand how to get the screen you had to work on the Due.

    We connected the screen (ILI9486) directly but is there a special pinout or shield you connected so the screen would work and not occupy D3,D4, and D5?

    Steve

    0
    stoppi71
    stoppi71

    Reply 1 year ago

    Hello Steve!
    I took a standard 320x480 display (f.e. https://www.ebay.com/itm/3-5-inch-TFT-LCD-Color-Display-Module-320x480-Pixels-for-Ar-Mega2560-16-Bit/113226313262?epid=24023215785&hash=item1a5cd06e2e:g:c-sAAOSwPEFbh4~F) which is directly connected with the header on one side of the Arduino Due or Mega. There are just 2 separate pins on the side which go to the "reset" and "3.3V" pins.
    For the digital pins D3, D4 and D4 and also for the analogpin A0 I use 90° pins (https://www.ebay.com/itm/50pcs-single-row-male-pin-header-1x40p-40pin-2-54mm-pitch-right-angle-90-degree/271935802218?hash=item3f50a30b6a:g:oScAAOSwdxZbIdz1), because otherwise with 0°-pins the onboard display would be in the way. I've added two different programs working with two different displays (UTFT and HX8357), try both. Unfortunately it's often a problem to make the many different displays work. Good luck and if you were successful post some results here ;-)