Outils pour utilisateurs

Outils du site


echopen_technique

Echopen-technique

Un projet d'échographie opensource http://echopen.org/
fig:echopen-bassin.jpg fig:echopen-electronic.jpg

L'idée est de construire un premier prototype puis plusieurs dans le but d'une performance artistique avec Shu Lea Cheang avec l'aide de makery.

EN COURS….

Informations générales

Fonctionnement échographie

  1. A chaque ligne, le transducteur se fige, il envoie un signal en créneau électrique, qui, une fois transformé par le transducteur cela fait une petite forme d'onde
  2. le moteur est mis à l'arrêt et attend les retours
  3. selon le nombre de points définis et la décimation (1 ou 8) conditionne la profondeur, le nombre de points définit le nombre de points reçus, le transducteur récupère au fur et à mesure de leur éloignement les échos correspondant à ce que rencontre la forme d'onde envoyée, les matériaux vont réfléchir (diffuser) + ou - ce qui va modifier l'amplitude du signal
  4. pour chaque ligne, on récupère donc le nombre de point définit, un amplificateur électronique peut amplifier le signal à la réception pour compenser l'atténuation des tissus
  5. ces valeurs sont envoyées sur la socket réseau
  6. on opère ensuite coté ordinateur à une transformée de Hilbert en utilisant une transformée Fourrier puis une analyse d'enveloppe pour définir l'amplitude du signal pour chaque point
  7. on interpole la valeur de chaque pixel de l'image à afficher en fonction de la position de chaque point de mesure (polaire > cartésien)
  8. ensuite cette amplitude peut être traitée pour la convertir en 0 255 (niveaux de gris) et former une image

Achats

  • Composants divers + Board dev CI MAX + red pitaya

chez mouser ~600€

  • connecteurs sma + arduino nano + cable +ca

chez radio-spare ~100€

Les cartes filles/mère

Toutes les infos techniques se trouvent ici. Pour notre premier prototype nous utilisons les cartes suivantes :

  • DB-Pulser_V2 > Convertisseur ultra rapide logique / -100V

echopen-DB_pulser_V2.JPG echopen-DB_pulser_V2.JPG

  • DB-supply_V1 > Tensions régulées (+/-12V, +/-5V, +3.3V) (alim 18V)

echopen-DB_supply_V1.JPG echopen-DB_supply_V1.JPG

  • DB-high_voltage_V1 > Générateur - 100V

echopen-DB_high_voltage_V1.JPG echopen-DB_high_voltage_V1.JPG

  • DB-filter_V1 > filtre passe bande ~ 3.5MHz

echopen-DB_filter_V1.JPG echopen-DB_filter_V1.JPG

  • DB-tr_switch_tgc_V1 > protection circuit + amplificateur à gain variable (pour contrer atténuation dans les tissus vivants)

echopen-DB_tr_switch_tgc_V1.JPG echopen-DB_tr_switch_tgc_V1.JPG

  • DB-enveloppe_detector_V1 > Détecteur d'enveloppe

echopen-DB_envelopper_detector_V1.JPG echopen-DB_envelopper_detector_V1.JPG

  • DB-motor_control_V3 > Controleur de moteur, générateur pulse/trigger

echopen-DB_motor_control_V3.JPG echopen-DB_motor_control_V3.JPG

  • carte TGC > Ampli à gain variable (-5>+55db commandé 0>1V (analogique)

echopen-TGC.JPG echopen-TGC.JPG

  • MAXIM4940 > Convertisseur ultra rapide logique / -100V

echopen-MAX4940.JPG echopen-MAX4940.JPG

  • Carte mère

echopen-motherBoard.png echopen-motherBoard.png

  • Câbles SMA
    • 3 x 30cm mâle/mâle

echopen-SMA-cable.JPG echopen-SMA-cable.JPG

  • * 3 x 60cm mâle/pin

echopen-SMA-Pin.JPG echopen-SMA-Pin.JPG

  • liaison RedPitaya/motor-control

RP_bottom_view.png RP_bottom_view.png

Software

Pré-requis

  • Il existe un script pour installer les logiciels nécessaires pour le développement et la programmation des divers microcontrôleurs depuis le git
cd /ici ou là/
git clone https://github.com/echopen/PRJ-medtec_kit.git
cd PRJ-medtec_kit/installation/linux_user
sudo apt-get update
sh ./echopen_full.sh

ou

sh ./echopen_light.sh
  • installer l'IDE Arduino

voir ici

Arduino

  • Contrôle du moteur

la compilation du code donne l'erreur suivante avec la verion 1.05 de l'IDE

MDL-motor_control_v1.ino : 76:52: error: ‘digitalPinToInterrupt’ was not declared in this scope

plus de soucis avec la verion 1.8.2 de l'IDE Arduino

Red Pitaya

Visualisation

Une fois les librairies et logiciels installés il faut éxecuter le scriptinstal.sh qui se situe dans /PRJ-medtec_kit/installation/linux_user/src

cd PRJ-medtec_kit/installation/linux_user/src
sh install.sh

Il existe deux programme :

  • probe_mode_A

affiche ligne par ligne les mesure effectuées à la manière d'un oscilloscope
fig:echopen-test-probeA-enveloppe.png fig:echopen-test-probeA-RAW.png

  • probe_mode_B

affiche une image en niveau de gris à la manière d'une échographie
fig:echopen-test-probeB.png

Mise en route

/!\ Brancher la redpitaya avant d'alimenter les cartes électroniques

  • Télécharger les logiciels ici
  • Lancer le programme sur la redpitaya from

via ordinateur

cd functional_code/firmware/MDL-motor_control_v3
sh run.sh 192.168.128.3 probe

via ssh

cd functional_code/firmware/MDL-motor_control_v3
chmod 777 probe  
scp ./probe root@192.168.128.3:/tmp/
ssh root@192.168.128.3  
root  
cd /tmp/  
./probe
  • lancer la visualisation
cd functional_code/display/probe_mode_B
./probe_mode_B

Sonification avec Patch Pd

How To

Faire fonctionner le patch

  1. Installer les librairies manquantes : Aide : Find external
  • ggee
  • iemnet
  • iemlib
  • maxlib
  • markex
  • cyclone
  • unauthorized
  • zexy

Produire du son

  1. Se connecter au routeur Wifi “Unborn” : mot de passe : “unborn0x9”
  2.  Cliquer sur le bouton au dessus de “Pd net”
  3.  La table d'onde doit s'agiter

Echopen Unborn v1.1 2020

Nouveau firmware pour redpitaya : à télécharger ici 20_04_using_true_data_for_emulator.zip et nouvelle version de server : ajout d'un port (7540) uniquement en UDP server.zip et un logiciel de test pour recevoir l'image simple_raspberrypi_display.zip

Pour l'utiliser, il faut brancher la RedPiaya, se connecter au wifi redpitaya et lancer le bash send.sh qui envoie le firmware sur la RedPitaya et un fichier text contenant les données pour l'émulateur. Le bash te connecte aussi directement en ssh à la RedPitaya, il te reste à lancer le firmware ( avec un ./server ). De mémoire il faut installer sshpass (pour linux).

Ensuite pour le client, tu te connecte à l'IP 192.168.128.3 Port 7538 en TCP pour envoyer/recevoir les paramètres. Comme précédemment, à la connexion au server TCP tu reçois les paramètres par défaut de la RedPitaya, mais ils ne se présentent plus de la même façon, tu reçois un pacquet de 15*2 octet codés en int8_t. Les octets paires donnent l'id du paramère et celui qui suit la valeur de ce paramètre, voici l'énumération correspondante au paramétrage :

enum Settings_ID
{
    na = 0,
    tcp_udp,
    number_of_bit,
    decimation,
    number_of_line,
    number_of_point_msb,
    number_of_point_lsb,
    delay_msb,
    delay_lsb,
    angle,
    tgc_start,
    tgc_end,
    emulator,
    start,
    settings_size, //use to know automaticly number of settings
    client_id,
    ready, //use for RedPitaya
    end
    //na
}; 

L'ID 0 ne sert pas au cas où on envoit un buffer à 0, les ID >=15 sont particulier et ne sont pas censé te servir (à par éventuellement le end (18) qui force l'arrêt du firmware si = 1).

Pour changer les paramètres, tu renvoies les données de la même façon, sachant que tu peux envoyer le nombre de paramètres que tu veux, pas obligatoirement les 15. En réponse, la RedPitaya renvoie un buffer de 2*15 octet avec les nouveaux paramétrages pris en compte (ils peuvent changer de ceux que tu à envoyer si tu as dépasser leurs limites). Le nombre de points maximum est 16384.

Pour recevoir des données il faut mettre start à 1, et émulateur à 1 dans ton cas. Si tcp_udp = 0 les données sont envoyées en UDP, sinon en TCP sur le port 7539. ATTENTION pour recevoir les données tu dois lancer un server TCP ou UDP, là tu n'es plus client (pour simplifier l'utilisation de l'UDP). L'émulateur envoie ensuite des pacquts de number_of_point +1 “mots”, mots encodé en int8_t dans le cas ou number_of_bit = 8, et en int16_t dans le cas ou number_of_bit = 12. Avec number_of_point = 256*number_of_point_msb + number_of_point_lsb.

Par défaut la décimation est à 1 je crois, mais il faut mieux se mettre à 8, on travaillera comme ça pour faire des images. En fonction émulateur, delay, angle, tgc_start et tgc_end ne sont pas pris en compte.

Ensuite tu peux arrêter l'envoie de donner avec start = 0.

L'envoi de données se fait sur une autre socket

Installer et utiliser l'interface graphique en QT

Code source à télécharger ici : qt_gui.zip

Serveur 092020 multi clients ici : display_server092020.zip et pour la pi avec dernières modifs (socket video sur 7610) displayserveur02102020pi.zip

Coque filet coque_filet.stl + gcode creality ce3_coque_filet.zip

Reception de l'image sur Raspberry pi version ok simple_raspberrypi_display02102020.zip

Boitier PVC boitier_pvc.zip

echopen_technique.txt · Dernière modification: 2020/10/27 19:33 de serge