Ceci est une ancienne révision du document !
Table des matières
Echopen-technique
Un projet d'échographie opensource http://echopen.org/
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
- 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
- le moteur est mis à l'arrêt et attend les retours
- 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
- 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
- ces valeurs sont envoyées sur la socket réseau
- 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
- on interpole la valeur de chaque pixel de l'image à afficher en fonction de la position de chaque point de mesure (polaire > cartésien)
- 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
- DB-supply_V1 > Tensions régulées (+/-12V, +/-5V, +3.3V) (alim 18V)
- DB-high_voltage_V1 > Générateur - 100V
- DB-filter_V1 > filtre passe bande ~ 3.5MHz
- DB-tr_switch_tgc_V1 > protection circuit + amplificateur à gain variable (pour contrer atténuation dans les tissus vivants)
- DB-enveloppe_detector_V1 > Détecteur d'enveloppe
- DB-motor_control_V3 > Controleur de moteur, générateur pulse/trigger
- carte TGC > Ampli à gain variable (-5>+55db commandé 0>1V (analogique)
- MAXIM4940 > Convertisseur ultra rapide logique / -100V
- Carte mère
- Câbles SMA
- 3 x 30cm mâle/mâle
- * 3 x 60cm mâle/pin
- liaison RedPitaya/motor-control
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
https://github.com/echopen/PRJ-medtec_kit/tree/master/electronic/modules/hardware/MDL-redpitaya
http://redpitaya.readthedocs.io/en/latest/doc/quickStart/SDcard/SDcard.html
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
- probe_mode_B
affiche une image en niveau de gris à la manière d'une échographie
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
- https://github.com/b01xy/Unborn_0x9 (OBSOLÈTE)
- unborn4.zip (OBSOLÈTE)
- unborn5.zip (EN COURS…)
How To
Faire fonctionner le patch
- Installer les librairies manquantes : Aide : Find external
- ggee
- iemnet
- iemlib
- maxlib
- markex
- cyclone
- unauthorized
- zexy
Produire du son
- Se connecter au routeur Wifi “Unborn” : mot de passe : “unborn0x9”
- Cliquer sur le bouton au dessus de “Pd net”
- 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