======Echopen-technique====== Un projet d'échographie opensource http://echopen.org/\\ {{media_03:echopen-bassin.jpg?300|fig:echopen-bassin.jpg}} {{media_03:echopen-electronic.jpg?300|fig:echopen-electronic.jpg}} L'idée est de construire un premier prototype puis plusieurs dans le but d'une performance artistique avec [[http://www.makery.info/2016/12/06/echopen-et-makery-invitent-lartiste-shu-lea-cheang-en-residence/|Shu Lea Cheang avec l'aide de makery]]. EN COURS.... ===== Informations générales ===== {{media_03:echographiehowitworks.png?800|}} ==== 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 * https://www.info-radiologie.ch/echographie.php\\ * https://fr.wikipedia.org/wiki/%C3%89chographie\\ * http://ultrasonographie-vasculaire.edu.umontpellier.fr/files/2012/08/MD-Bases-Echographie-DIUE-2014B4.pdf\\ ===== 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 [[https://github.com/echopen/PRJ-medtec_kit|ici]]. Pour notre premier prototype nous utilisons les cartes suivantes : * DB-Pulser_V2 > Convertisseur ultra rapide logique / -100V {{media_03:echopen-db_pulser_v2.jpg?200|echopen-DB_pulser_V2.JPG echopen-DB_pulser_V2.JPG}} * DB-supply_V1 > Tensions régulées (+/-12V, +/-5V, +3.3V) (alim 18V) {{media_03:echopen-db_supply_v1.jpg?200|echopen-DB_supply_V1.JPG echopen-DB_supply_V1.JPG}} * DB-high_voltage_V1 > Générateur - 100V {{media_03:echopen-db_high_voltage_v1.jpg?200|echopen-DB_high_voltage_V1.JPG echopen-DB_high_voltage_V1.JPG}} * DB-filter_V1 > filtre passe bande ~ 3.5MHz {{media_03:echopen-db_filter_v1.jpg?200|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) {{media_03:echopen-db_tr_switch_tgc_v1.jpg?200|echopen-DB_tr_switch_tgc_V1.JPG echopen-DB_tr_switch_tgc_V1.JPG}} * DB-enveloppe_detector_V1 > Détecteur d'enveloppe {{media_03:echopen-db_envelopper_detector_v1.jpg?200|echopen-DB_envelopper_detector_V1.JPG echopen-DB_envelopper_detector_V1.JPG}} * DB-motor_control_V3 > Controleur de moteur, générateur pulse/trigger {{media_03:echopen-db_motor_control_v3.jpg?200|echopen-DB_motor_control_V3.JPG echopen-DB_motor_control_V3.JPG}} * carte TGC > Ampli à gain variable (-5>+55db commandé 0>1V (analogique) {{media_03:echopen-tgc.jpg?200|echopen-TGC.JPG echopen-TGC.JPG}} * MAXIM4940 > Convertisseur ultra rapide logique / -100V {{media_03:echopen-max4940.jpg?200|echopen-MAX4940.JPG echopen-MAX4940.JPG}} * Carte mère {{media_03:echopen-motherboard.png?200|echopen-motherBoard.png echopen-motherBoard.png}} * Câbles SMA * 3 x 30cm mâle/mâle {{media_03:echopen-sma-cable.jpg?200|echopen-SMA-cable.JPG echopen-SMA-cable.JPG}} * * 3 x 60cm mâle/pin {{media_03:echopen-sma-pin.jpg?200|echopen-SMA-Pin.JPG echopen-SMA-Pin.JPG}} * liaison RedPitaya/motor-control {{media_12:rp_bottom_view.png?200|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 [[https://www.arduino.cc/en/guide/linux|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 script//instal.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\\ {{media_03:echopen-test-probea-enveloppe.png?400|fig:echopen-test-probeA-enveloppe.png}} {{media_03:echopen-test-probea-raw.png?400|fig:echopen-test-probeA-RAW.png}} * probe_mode_B affiche une image en niveau de gris à la manière d'une échographie\\ {{media_03:echopen-test-probeb.png?400|fig:echopen-test-probeB.png}} ==== Mise en route ==== /!\ Brancher la redpitaya avant d'alimenter les cartes électroniques * Télécharger les logiciels [[https://github.com/jerome2echopen/Perso_C/blob/master/echopen/functional_code/|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) * [[https://wiki.labomedia.org/images/c/c4/Unborn4.zip|unborn4.zip]] (OBSOLÈTE) * [[https://wiki.labomedia.org/images/f/f4/Unb0rn5.zip|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 {{ media_01:20_04_using_true_data_for_emulator.zip |}} et nouvelle version de server : ajout d'un port (7540) uniquement en UDP {{ media_12:server.zip |}} et un logiciel de test pour recevoir l'image {{ media_12: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 : {{ media_12:qt_gui.zip |}} Serveur 092020 multi clients ici : {{ media_03:display_server092020.zip |}} et pour la pi avec dernières modifs (socket video sur 7610) {{ media_03:displayserveur02102020pi.zip |}} Coque filet {{ media_05:coque_filet.stl |}} + gcode creality {{ media_05:ce3_coque_filet.zip |}} Reception de l'image sur Raspberry pi version ok {{ media_12:simple_raspberrypi_display02102020.zip |}} Boitier PVC {{ media_08:boitier_pvc.zip |}} {{tag> bj echopen pure_data realisations_materielles }}