MOTORISATION D'UN MICROSCOPE.

Portrait de michelflashman

Bonjour a tous,

Passionné de biologie et de photographies de  diatomées en particulier, je veux motoriser le Z du microscope.

Les diatomées sont des algues unicellulaires a squelette silicieux, cette algue fait sa vie a l'interieur d'un squelette en silice qui se compose d'un dessus et d'un dessous comme une boite a fromage !! elles sont minuscules , 5 a 300 µm environ. De nombreuses variétés compose ces diatomées, plusieurs milliers d'espéces aux forme variés.

le squelette de ces diatomées possede une architecture fabuleuse mais minuscule, de l'ordre du nanometre ! pour restituer cela sur une photographie, il faut employer la technique du stacking qui consiste a multiplier les photographies en avançant le Z du microscope , entre chaque photos, pour capturer les minuscules zones de netteté . Ensuite, un logiciel , Hélicon focus permet de compiler ces photos pour restituer une photos avec une profondeur de champ qui couvre l'intégralité de la diatomée. De plus , pour restituer au maximum la finesse du squelette, l'emploi d'objectifs de grande qualité est necessaire, l'inconvenient, leurs profondeurs de champ est minuscule, donc multiplication des clichés avec une precision extréme.

Le Z est le réglage de hauteur du microscope, entre objectif et sujet observé, un vis gradué au micron permet d'avancé ou reculer le sujet par rapport a l'objectif.

LE BUT:

Automatiser le Z du microscope avec un pas variable , grace a un potentiometre, et automatiser le déclenchement de l'appareil photo entre chaque déplacement du Z.

Portrait de michelflashman

A partir d'une carte Arduino Uno, d'un moteur pas a pas 28BYJ48 5V avec son controleur ULN2003A, j'ai deja bien avancé , grace a Gael sur ce forum, que je remercie vivement, j'ai developpé un programme, largement inspiré sur celui de Gael, qui marche assez bien.

Pour le moment ce programme commande, grace au potentiomètre , le pas du moteur, qui actionne le Z microscope, entrecoupé du déclenchement d'un relai, "5V 2 Canaux Module Relais Bouclier Single-Chip Contrôle Arduino MCU ARM PIC AVR" acheté sur Ebay.

j'ai testé un bouton poussoir , qui grace a une interruption, permet de stopper le moteur a n'importe quel moment, cela marche a peut pres !!!!!, c'est en testant cette interruption que j'ai bloqué ma Devduino toute neuve !!!

Reste a connecté la télécommande de l'appareil photo, qui démonté montre un simple contact de 2 lames mais avec quelques résistances !!

Il me faudra ensuite intégré tout cela dans une belle boite , j'aurais certainement besoins de vos savoirs pour continué d'avancer .

Portrait de michelflashman

voici copie du programme en cours de finalisation, tout conseils, remarques, critiques est la bienvenue !!

#include <Stepper.h>

//BOUTTON*************************************
#define BOUTTONUN 2     //bouton en 2 pour M/A
//long etatBoutton = HIGH;

volatile boolean arret = false;  //drapeau M/A
volatile int temps ;

// MOTEUR *************************************
//nombre de pas

#define STEPS 48

Stepper moteur(STEPS, 8,9,10,11) ;                           // pas et broches

//POTENTIOMETRE*******************************
long portPotentiometre = A0 ;                                //sur port analogique A0
long valeurPotentiometre = 0 ;                               // variable de la valeur poten..

//RELAY **************************************
static int relaiPin = 7; //pin ou est connecté activation du relai

int nbPhoto =0;       //compteur de photos

/////////////////////////////////////////////////////////

                    // avancement du pas microscope
                    // 2 petit pas
                    // zero = arret  
                    // 20 = 1 micron / une graduation
                    // etc...
                    
//////////////////////////////////////////////////////////

void setup() {
 
  moteur.setSpeed ( 48 );                                   // tours par minutes 48 rpm/mn

   pinMode (BOUTTONUN, INPUT_PULLUP );  //bouton M/A
 //  attachInterrupt(0,appuiBouton,CHANGE); //interruption pour arret
   attachInterrupt(digitalPinToInterrupt(BOUTTONUN),appuiBouton,LOW); //interruption pour arret
 //  detachInterrupt(interruption);       //annul interruption a voir

   pinMode (relaiPin, OUTPUT );         //relay

   Serial.begin(9600);                                      //com 9600 bauds

}

void loop() {

 //     etatBoutton  = digitalRead (BOUTTONUN);
 
     valeurPotentiometre = analogRead(portPotentiometre);     //lecture du port A0
      valeurPotentiometre = valeurPotentiometre /10;          //divise la valeur par X  
      delay(1);                                            //delay de temporisation

  if (valeurPotentiometre > 10 && ! arret)
  {                         //condition si potentiometre > 10
 
         clicPhoto();                                      // fonction prise de vues
         gestionMoteur();
  }

   else {
    
        arretMoteur();
    
    }
}

//////////////////////////////////////////////////////////////////
//   Déclaration des Fonctions
//////////////////////////////////////////////////////////////////

void clicPhoto()
  {
         nbPhoto ++;
           Serial.print ("Nombre de photos : ");
           Serial.println(nbPhoto);
           delay (500);                         //delai pour vibrations microsocpe
       digitalWrite (relaiPin, HIGH);           //contact relai = clic photo
       delay (50);                              // temps de contact du relai
        digitalWrite (relaiPin, LOW);           //relache contact relai
        
  }

void gestionMoteur()
  {
    moteur.step (valeurPotentiometre); //nombre de pas ,zero = arret !
     Serial.print("valeur du pas : ");
     Serial.println(valeurPotentiometre);                 //affiche valeur du pas
 
    }

void arretMoteur()

    {
      moteur.step (0);      //arret moteur a voir

     Serial.println("ARRET MOTEUR ");
 
      }

void appuiBouton()
     
   {
    int present = millis();       //
    
    if (temps + 500 < present)      //temporisation contre rebon du boutton
    {
       arret =!arret;    //changement d'etat
       nbPhoto = 0 ;     //remise a 0 du compteur photo
       
      Serial.println("arret moteur");
      temps = present ;
      
      }
      
      }

Portrait de michelflashman

Un lien sur l'avancement de mon projet

https://www.youtube.com/watch?v=0GK62g5yEu0

Le moteur PaP est tres precis avec sa démultiplication, j'arrive a diviser une graduation de la vis micrométrique en 3 !! soit environ 300 nanometres  ou 0,3 µm

il faut maintenant mettre tout cela dans une boite !