Aller au contenu


***** Bienvenue dans le forum MikrOscOpia ! *****
Photo

Olympus BX50 motorisation du Z , arduino, stacking


  • Veuillez vous connecter pour répondre
67 réponses à ce sujet

#1 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 4 semaines

Bonjour a tous,

 

j'ouvre ce nouveau sujet, j’espère être au bon endroit !!

 

Je désirerais partagé avec vous.

 

je possède un Olympus BX50 en trino , j'aime a photographier les diatomées vivantes , mais pas que , avec la méthode du stacking (Helicon focus).

 

Suite a des problèmes de prises de vus , régularité du pas, 3 ou 4 mains nécessaires pour aboutir correctement, etc....

 

J'ai décidé de motoriser le Z du microscope .

 

Voici le microscope avec son appareil de prises de vus, un Lumix G7 sur la sortie trino , un ecran Asus 24 pouces ProArt, calibré connecté en HDMI sur le lumix.

 

Avec un léger décalage de parafocalité ! mais comme je regarde rarement dans les oculaires , a résoudre plus tard.

 

 

BX50.jpg


Modifié par michelflashman, il y a 4 semaines.

  • 0

#2 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 4 semaines

La motorisation :

 

un moteur pas a pas directement connecté sur le bouton de mise au point micrométrique.

https://www.ebay.fr/...r8AAOSwUoNaEveT

 

Une carte Arduino mega (Chinoise !)

https://www.ebay.fr/...-mP0KXbOmc8XXhA

 

Un écran tactile Adafruit 2.8 pouces couleur.

https://boutique.sem...-resistive.html

 

Un relai commandé par la carte Arduino pour commander les déclenchements de prises de vus.

https://www.ebay.fr/...kcAAOSwomVbEQJe

 

Un joystick pour amener le 1er focus.

https://www.ebay.fr/...872.m2749.l2649

 

Divers

https://www.ebay.fr/...bIAAOSwqv9V6aj9

https://www.ebay.fr/...5MAAOSwQJhUh3lU

 

Niveau budget, moins de 100 euros, le plus cher est l’écran tactile de marque Adafruit, 40 euros environ.

 

a suivre........................

 

.


Modifié par michelflashman, il y a 4 semaines.

  • 0

#3 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 4 semaines

La méthode.

 

Apres la mise en route du microscope, éclairage, lame et lamelle avec le sujet, une visu sur l'ecran Asus au 10 ou 20X pour repérer un sujet.

Choix de l'objectif, souvent 40X , j’en possède 2,  1 UplanSapo 40X on 0.95 UIS2 , d'un emploi délicat !! et 1 40X Plan N on 0.65 UIS2. (tout les 2  a sec)

 

Avec l’écran tactile, grâce a un bargraph, je choisi le pas de déplacement du Z , de 0.5 microns a XX.

 

Suivant le pas choisi, une préconisation du bon objectif s'affiche.

 

Avec le joystick, en déplacement haut ou bas, j'actionne le moteur pour ajuster minutieusement le focus de départ.

 

Sur l'écran tactile, un bouton depart lance la procédure, un autre bouton Arret devient disponible pour stopper le processus en fin de prise de vus .

 

Le processus

le moteur pas a pas actionne la molette micrométrique du pas choisi, puis s’arrête, un cliché est pris , et le moteur relance a nouveau, nouvelle prise de vus , etc...........

 

Pour des raisons de sécurités, les prises de vus se font en descendant , afin d'éviter un choc frontal objectif/lame.

 

En surveillant l'avancement sur l'écran Asus 24 pouces,  le bouton tactile Arret stop le processus.

 

Il y a un compteur de prises de vus qui se remet a zéro a chaque Départ.

 

Voila en gros le système que je vais développer en détails dans les jours suivant.

 

La carte Arduinoi est programmé en C Arduino, un C un peu simplifié.

 

Un de mes métiers a été informaticien, il y a longtemps de cela mais les fondamentaux de développements non pas beaucoup changé.

 

Ne pas hésitez a commenter, critiquer et autres, vous êtes les bienvenues .

 

Amicalement

 

Michel

 

 

Un résultat au 40X a sec

 

GYROSIGMA attenuatum.jpg


Modifié par michelflashman, il y a 4 semaines.

  • 0

#4 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 4 semaines

Bonjour Michel,

 

Bravo et félicitations !

 

C'est une belle réalisation et nous allons certainement beaucoup en parler.

Ce qui m'intrigue le plus est comment tu as programmé le 28BYJ-48 (nombre de pas) car les docs ne sont pas explicites.

 

Pour le sujet, je le déplace dans l' Atelier il y a une rubrique Arduino (un peu trop vide, mais cela ne va pas durer.)

 

Amicalement.


  • 0

#5 scrophulaire

scrophulaire

    Procaryote

  • Membre confirmé
  • Pip
  • 157 messages

Posté il y a 3 semaines

Bonjour

Merci de donner un peu plus de détails sur le montage, la programmation...

Salut
  • 0

#6 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Bonjour a tous,

Le revoila mon sujet !! Et ça marche

Un grand merci a qui de droit .

Je compte developper le sujet dans ses moindres details .

1 la partie mecanique (hard) , moteur, joystick, carte arduino , etc..

2 la partie soft, le programme qui pilote l'ensemble , qu'il faudra decortiquer !

Pour le moment , tout fonctionne a 99,9%, j'ai un petit bug depuis que j'ai implanté le joystick, au premier demarrage, tout marche, ensuite il plante tout le systeme !!
Bon pas grave car j'ai rien controlé a l'implantation, j'ai voulu testé la faisabilité.

A suivre.......

Michel
  • 0

#7 patrice duros

patrice duros

    Procaryote

  • Membre confirmé
  • Pip
  • 148 messages

Posté il y a 3 semaines

Merci Michel pour ce début de présentation,

 

Je vais suivre la suite avec attention !

 

Dans ta description :


Pour des raisons de sécurités, les prises de vus se font en descendant , afin d'éviter un choc frontal objectif/lame.

 

J'aurais tendance à penser de faire les prises de vues en montant afin d'éloigner la frontale de l'objectif de la lame pour éviter justement les chocs ???
J'ai peut être mal compris ?

Merci en tout cas pour le partage


Modifié par patrice duros, il y a 3 semaines.

  • 0

#8 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 3 semaines

Bonjour Patrice,

 

Pardon de m’immiscer !

 

Tout est relatif à un référentiel.
Si on considère que c'est la platine, donc l'objet, qui est soumis à une translation en Z, ce qui est le cas ici, la proposition est tout à fait correcte.

Si au contraire, on considère que c'est l'objectif qui se déplace en Z, bien sûr tout est faux., ce qui n'est pas le cas ici bien entendu.

 

 

Amicalement.


  • 0

#9 patrice duros

patrice duros

    Procaryote

  • Membre confirmé
  • Pip
  • 148 messages

Posté il y a 3 semaines

Oui,

C'est bien ce que je pensais, j'ai mal compris.

C'est d'ailleurs ce que je fais ... sans motorisation


  • 0

#10 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 3 semaines

Ne t'inquiètes pas, la  première fois que j'ai lu ce sujet, j'ai compris comme toi, à l'envers.

Une motorisation en Z pour moi à priori, c'était une motorisation de l'objectif.

Mais ici, il s'agit bien de la platine par l'intermédiaire des vis de MAP, ce qui est plus facile.

Pour ma part, dans mon prototype de microscope, ce sont bien les objectifs qui sont motorisés en Z et sans que l'oculaire ne bouge (!)

 

Amicalement.


  • 0

#11 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Présentation du système

 

Pour le moment rien n'est finalisé , cela reste a ranger dans une jolie boite

 

 

IMG_20180923_104057.jpg

 

La fixation du moteur sur le bouton micrometrique

 

Le bouton micrometrique est couvert par un bloc caoutchouc  pour la préhension, il suffit de retirer ce bouchon pour découvrir une vis BTR de démontage .

 

 

IMG_20180923_102227.jpg

 

IMG_20180923_102241.jpg

 

Sur l'axe de sortie du Moteur pas a pas, grâce a une dremel, j'ai taillé une empreinte BTR mâle qui vient s’insérer dans la vis tete femelle du bouton micrometrique

 

Il existe de nombreuses méthodes de fixation pour ce moteur, il est possible que je change pour un bout de 3 a 4 centimètres coupé sur une clé BTR mâle , puis grâce a un tube caoutchouc au diamètre, faire le lien avec la sortie du moteur.

Avantage, cela peut faire office de cardan pour compenser un alignement incertain.


Modifié par michelflashman, il y a 3 semaines.

  • 0

#12 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Le moteur est fixé sur une planche de bois

 

Il suffit de la glisser pour connecter le moteur a la vis micro

 

IMG_20180923_104004.jpg

 

IMG_20180923_104023.jpg

 

IMG_20180923_104034.jpg


Modifié par michelflashman, il y a 3 semaines.

  • 0

#13 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Merci Michel pour ce début de présentation,

 

Je vais suivre la suite avec attention !

 

Dans ta description :


Pour des raisons de sécurités, les prises de vus se font en descendant , afin d'éviter un choc frontal objectif/lame.

 

J'aurais tendance à penser de faire les prises de vues en montant afin d'éloigner la frontale de l'objectif de la lame pour éviter justement les chocs ???
J'ai peut être mal compris ?

Merci en tout cas pour le partage

 

 

 

Bonjour,

 

J,ai dit je descend ! car c'est bien la lame qui bouge et non les objectifs ! donc j'éloigne la lame en descendant des fronts objectifs.

 

Mais notre intention est la même.

 

 

 

 

L'écran tactile Adafruit, le tableau de bord.

 

ecran.jpg

 

Le système reste bloqué tant que aucune sélection de pas de stacking n'est effectué .

 

Le pas de stacking s'effectue grâce au bargraph rouge en bas de l'écran, il suffit de poser le doigt sur le bargraph, plus vous allez a droite, plus le pas est important.

 

Suivant le pas choisi, un nom d'objectif est préconisé.

 

L'appuie sur le bouton MARCHE demarre le systéme.

 

IMG_20180923_101350.jpg

 

IMG_20180923_101448.jpg

 

Pour la dernière photo, le stacking a été lancé puis arrêté, un nombre de clichés pris s'affiche.

 

 

Le nombre en négatif qui s'affiche sur le bargraph represente le nombre de pas pour le moteur, une valeur négative inverse le sens de rotation du moteur. Il existe dans le langage C la fonction MAP() qui encadre et inverse tres bien les valeurs .

je pense plus tard , afficher le pas en Microns ! mais pour le moment, cette valeur est une information importante pendand la période de développement du logiciel de commande.


Modifié par michelflashman, il y a 3 semaines.

  • 0

#14 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Voila l'écran en cours de prise de vues, un bouton arrêt permet de stopper .

 

IMG_20180923_101926.jpg

 

 

Au sujet de l’écran Adafruit

 

C'est un shield écran tactile avec  un lecteur de carte microSD intégré. Cet écran dispose d'une diagonale de 2,8", il esttrès lumineux avec ses 4 LED blanche de rétro-éclairage et il peux afficher 262000 couleurs 18 bits dans une résolutionde 240x320 pixels. Il dispose egalement d'une dale tactile resistive pour détecter l'appui d'un doigt.

Il dispose d'une interface SPI pour le contrôler l'écran, plus lente d'un adressage en direct mais nécessite moins de pins. La gestion de la dalle tactile est également en SPI.

 

Shield signifie qu'il vient directement s'enficher sur la carte Arduino compatible , Uno et Mega. Mais une petite intervention de soudure au dos de l'écran est nécessaire pour etre compatible avec la Mega.

 

 

adafruit_products_1651bottom_LRG.jpg

 

Il faut souder en 1 et couper ne 2 pour une compatibilité avec la carte Arduino Mega, mais l'écran n"est plus compatible avec l'Arduino Uno, il faudrait remettre a l'origine !

il est nécessaire d'avoir une petite habitude du fer a souder pour ce genre d'opération !

 

Important: sur la Uno, l'écran couvre l’intégralité de la carte , ce qui rend les pins de connections très difficile d’accès ! alors que sur la carte Mega, , il y a beaucoup plus de pins et de place disponible , d’où mon choix d'une carte méga, il y aussi des capacités plus importante sur la Mega.

 

Pour la programmation de cet écran, surtout de la dalle tactile, un peu complexe, cela sera développé lorsque sera abordé le développement du logiciel de commande .


Modifié par michelflashman, il y a 3 semaines.

  • 0

#15 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Ne pas hésitez a commenter, critiquer ou faire des suggestions , tout cela est constructif .
 
 
La carte de prototypage !
 
IMG_20180923_101307prototy.jpg
 
s-l1600.jpg


Cette carte évite tout simplement d'avoir a faire un circuit imprimé, un peu comme une breadBoard , a partir de l'arduino et/ou d'une alimentation extérieur, il est possible de redistribuer la tension 5V ou 3.3V ou 12V , le GND ou masse et les pins de l'arduino.
De connecter les moteurs, relais et tout accessoires qui nécessitent tensions et pins de connections.

Il y a plein de modèles différents, certaines sous forme de shield, donc enfichable directement sur l'Arduino, d'autres connectables .

https://www.digikey....-perforated/636


Petit accessoire bien pratique !!

pins.jpg

https://www.ebay.fr/...xgAAOSwD4layEPx


Ces micro pins se casse a longeur voulue et se soude sur la carte de prototypage ce qui la transforme en semi-shield , grace a cela , il est possible de récupérer les pins en surface de la carte de prototypage .

Bonne nuit a tous !!

Modifié par michelflashman, il y a 3 semaines.

  • 0

#16 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 3 semaines

Bonjour Michel,

Ce qui est étonnant, c'est de " sacrifier " une des µStripboard de la Devduino pour brancher quelques fils.

Amicalement
  • 0

#17 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Bonjour Michel,
Ce qui est étonnant, c'est de " sacrifier " une des µStripboard de la Devduino pour brancher quelques fils.
Amicalement


Bonjour,

Lorsque j'ai commander la Devduino , il etait en rupture sur un accesoire et en echange , j'ai reçu 4 ou 5 Stripboard !!!
Mais tout cela est provisoire , je peux toujours recupérer cette carte.
Lors de la finalisation, certaines choses vont changé, le relai par exemple, je compte le remplacer par un transistor, la telecommande du boitier photo doit aussi disparaitre.

Amicalement

Michel
  • 0

#18 Jean-Luc Bethmont (Picroformol)

Jean-Luc Bethmont (Picroformol)

    Purgatorius

  • Membre Modérateur
  • 785 messages

Posté il y a 3 semaines

Bonjour Michel,

Ton projet est très intéressant.
Il y a quelques années j' ai mené un projet similaire (avec l' aide de mon beau-frère) . Ce système est composé d' un boitier de contrôle pour actionner un moteur pas à pas dont l' axe est relié à la vis micrométrique par un morceau de tuyau souple (ce qui évite de forcer sur la vis micrométrique en cas de problème du moteur ou erreur de programmation)..

Cordialement,
JL

P.S. J' ai fais un post à ce sujet mais je ne le retrouve pas. Tryphon si tu peux le retrouver merci d' avance
  • 0

#19 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 3 semaines

Bonjour Jean-Luc,

 

Ton message se trouve ici : http://forum.mikrosc...ère"#entry50550

 

Michel, en effet un transistor peut remplacer un relais. On prévoit souvent dans ce cas, un optocouplage.

 

Amicalement.


  • 0

#20 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 3 semaines

Bonjour Michel,

 

Je ne comprends pas ta carte proto-shield , elle est intéressante si on utilise un 16 X deux lignes ou un écran de Nokia 5110, mais pas tellement un écran tactile.

C'est toutefois un bel exemple de carte de test  qui facilite grandement l'interfaçage, car elle comporte des zones utilisables pour implanter des composants personnels.

 

Amicalement.


  • 0

#21 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Bonjour Michel,

Je ne comprends pas ta carte proto-shield , elle est intéressante si on utilise un 16 X deux lignes ou un écran de Nokia 5110, mais pas tellement un écran tactile.
C'est toutefois un bel exemple de carte de test qui facilite grandement l'interfaçage, car elle comporte des zones utilisables pour implanter des composants personnels.

Amicalement.

Pardon, c'etait juste pour l'exemple , montrer une carte un peu plus complexe .

J'avais indiquer plus haut au sujet de l'ecran Adafruit que la programmation sera abordé dans le programme global, je crois que c'est une erreur !!
Apres reflexion, je pense plus judicieux d'aborder la programmation par elements programmable
Je pense que cela sera plus clair.
Vous en pensez quoi ?

Amicalement

Michel

Modifié par michelflashman, il y a 3 semaines.

  • 0

#22 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Ecran Tactile - Programmation ( la théorie )

 

comme mon Français est un peu défaillant !! je fais un copier/coller a partir de documents Adafruit traduit en Français par MCHobby.be.

 

 

Il faut commencer par créer une objet écran tactile .

Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS);

Puisque nous utilisons le bus SPI matériel, la seule broche à préciser est Chip Select qui active la contrôleur tactile. La définition des autres broches SPI (clock, mosi et miso) ne sont pas définie ici. Pour le shield TFT, le Chip Select (CS) est toujours sur la broche #8.

Ensuite, vous pouvez démarrer la partie tactile avec

ts.begin()

Assurez-vous que la fonction retourne la valeur True, signifiant que le contrôleur à été trouvé. Dans le cas contraire, il faut vérifier la configuration des cavaliers de configuration SPI matériel: pour Leonardo/Mega les cavaliers/pastilles ICSP doivent être fermés.

Maintenant, nous pouvons appeler:

if (! ts.bufferEmpty())

ce qui permet de vérifier qu'il y a des données dans le buffer (mémoire tampon) du contrôleur. Le pilote tactile stockera constamment les points de touche. Vérifiez si le buffer (mémoire tampon du controleur) contient des données lorsque vous êtes prêt à les lires. S'il y en a, alors vous pouvez appeler

TS_Point p = ts.getPoint();

Pour obtenir le plus vieux point contenu dans le buffer. La structure TS_Point dispose des données de localisation .x .y et .z. Les valeurs de x et y évoluent entre 0 et 4095. Le STMPE610 ne stocke pas les données de calibration et ne s'occupe pas de gérer la rotation. Donc, si vous voulez utiliser la rotation d'écran, vous devrez permuter les axes x et y dans votre programme!. Les points z représentent la 'pression' dont la valeur évolue entre 0 et 255. Nous n'utiliserons pas les coordonnées Z ici mais rien ne vous empêche de faire vos expérimentations. Plus vous pressez et plus bas est la valeur.

Puisque les données provenant du STMPE610 évolue de 0 à 4095, mais que l'écran ne dispose que de 320 pixels par 240 pixels, nous pouvons utiliser la fonction map pour convertir les valeur de 0-4095 à 0-320 ou même 0-240.

L'appel à map ressemble à

p.x = map(p.x, 0, 4095, 0, tft.width());
p.y = map(p.y, 0, 4095, 0, tft.height());

Cependant, la partie tactile est un peu plus grand que l'écran lui-même. Par conséquent, vous aurez besoin d'ignorer les pressions hors de bord physique de l'écran (à moins d'y trouver une utilité). AdaFruit propose les valeurs suivantes qui reflètent assez fidèlement l'étendue des valeurs TS_POINT utiles correspondant à l'écran physique

#define TS_MINX 150
#define TS_MINY 130
#define TS_MAXX 3800
#define TS_MAXY 4000

Nous utilisons donc le code suivant à la place de la proposition précédente

p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width());
p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height());


Un dernier point (jeu de mot!), puisque le pilote tactile stocke les points de touche dans un buffer (mémoire tampon), vous pourriez trouver utile de savoir "si l'écran est touché JUSTE MAINTENANT". Vous pouvez demander au pilote "Dis-moi, y a t'il quelqu'un qui touche l'écran là maintenant?"

if (ts.touched())

Source: Adafruit 2.8" TFT Touch Shield v2
Créé par LadyAda pour AdaFruit Industries.

Traduction réalisée par Meurisse D pour MCHobby.be.


Modifié par michelflashman, il y a 3 semaines.

  • 0

#23 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 3 semaines

Bonjour Tous et Toutes,

Pas beaucoup de réactions au dernier post (je comprends que c'est un peu complexe) alors je me lance.
Quand on développe un projet à base de microcontrôleur (ici c'est l' Arduino, j'aime bien!) on imagine comment l'utilisateur va interagir avec l'appareil.
Il y a l'idéal et ce que l'on peut concrètement faire en fonction de ses capacités et de son budget.
L'écran tactile et sa possibilité de communication est une solution.
Je n'ai pas personnellement choisi cette solution parce qu'elle me parait un peu lourde en moyens matériels et logiciels.
Mais pour cette application, elle me parait convenir parfaitement quand on a franchi le cap de la programmation. Pour un programmeur professionnel, ce n'est qu'un jeu.

Amicalement.
  • 0

#24 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Ecran Tactile - Programmation ( la pratique)
 
 
Bonjour a tous,

Doucement, pour des raisons de compréhension, un programme assez basic d'utilisation de l'écran Tactile

 

 

// exemple de programme, le programme commence ici

 

// zone de déclaration des contantes et variables

 

//declaration des bibliothèques

 

#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include <Adafruit_STMPE610.h>
#include <Stepper.h>

//coordonnées native ecran
#define TS_MINX 150
#define TS_MINY 130
#define TS_MAXX 3800
#define TS_MAXY 4000

 

// Pour le shield Adafruit, ce sont les paramètres par défaut.
#define STMPE_CS 8
Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS);

// ecran broches a déclarer SPI, plus #9 & #10
#define TFT_CS 10
#define TFT_DC 9
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

 

void setup() {

 

 // zone d'initialisation

 

 

 

                    }

void loop() {

 

 // boucle du programme principal

 

 

 

                    }


Modifié par michelflashman, il y a 3 semaines.

  • 0

#25 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Les bibliothéques

 

Les bibliothèques (libraries en anglais) sont des dossiers contenant des fonctions permettant de faciliter la programmation et l’utilisation d’un composant. Généralement elles contiennent également des programmes d’exemples afin de mieux comprendre comment l’utiliser lors de leur diffusion si le créateur décide de la partager.

De manière plus concrète, supposons que je souhaite faire des statistiques. Je pourrais refaire toutes les fonctions qui m’intéressent… Mais bien que cela ne soit pas inintéressant en soit, faire tout ce travail prendrait pas mal de temps pour écrire toutes les fonctions souhaitées et il s’avère que quelqu’un a déjà fait ce travail et l’a partagé … Donc pourquoi ne pas le réutiliser plutôt que de chercher à réinventer la roue ?

Dans notre cas , 4 bibliothèques

 

#include "Adafruit_GFX.h"                       //gestion graphique et .texte de l'écran
#include "Adafruit_ILI9341.h"                   //gestion ecran tactile
#include <Adafruit_STMPE610.h>           // idel ecran tactile
#include <Stepper.h>                               //gestion du moteur pas a pas


Modifié par michelflashman, il y a 3 semaines.

  • 0

#26 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Ecran Tactile - Programmation ( la pratique)
 
 
Bonjour a tous,

Doucement, pour des raisons de compréhension, un programme assez basic d'utilisation de l'écran Tactile
 
 
// exemple de programme, le programme commence ici
 
// zone de déclaration des contantes et variables
 
//declaration des bibliothèques
 
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include <Adafruit_STMPE610.h>
#include <Stepper.h>

//coordonnées native ecran
#define TS_MINX 150
#define TS_MINY 130
#define TS_MAXX 3800
#define TS_MAXY 4000
 
// Pour le shield Adafruit, ce sont les paramètres par défaut.
#define STMPE_CS 8
Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS);

// ecran broches a déclarer SPI, plus #9 & #10
#define TFT_CS 10
#define TFT_DC 9
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
 
//bouton tactile avec poussoir************************
// position et dimension de la barre rouge
#define FRAME_X 10    //position X
#define FRAME_Y 160   //positio y
#define FRAME_W 300   //longueur
#define FRAME_H 60    //hauteur

 
void setup() {
 
 // zone d'initialisation
 
tft.begin();                        //ini ecran
             tft.setRotation(1);                 //ecran horizontal
             tft.fillScreen(ILI9341_BLACK);      //fond d'ecran
             tft.setCursor(0, 0);
             tft.setTextColor(ILI9341_WHITE);
             tft.setTextSize(2);
          
   if (!ts.begin()) {
             tft.println("l'ecran tactile ne repond pas");
        }
      else {
             tft.println("Pret! ");
             tft.setCursor(5, 125);
             tft.setTextSize(2);
             tft.print("Nb de Photos :");            
           }

  boutonCurseur();                                  //affichage de la barre  rouge ,fonction perso
 
                    }

void loop() {
 
 // boucle du programme principal

 

  if (! ts.bufferEmpty ())                       //test buffer touch
     {         
            TS_Point p = ts.getPoint ();
            p.x        = map(p.x, TS_MINY, TS_MAXY, 0, tft.height());
            p.y        = map(p.y, TS_MINX, TS_MAXX, 0, tft.width());
                int y      = tft.height() - p.x;
                int x      = p.y;
 
 
       if (( x > 12 ) && (x < 298))              //zone du bouton pour pas du microscope pour x
       {
          if (( y > 165 ) && (y < 218))          //zone du bouton pour pas du microscope pour y
           {
                   curseurX  = x ;
                   pasMicroscope = map(x,12,290,0,-100);    //calcul du pas du Z microscope
                   boutonCurseur();
            
            }
        }

 
 
 
                    }

 

 

//****************************************************FIN DU LOOP*************************

 

ZONE DES FONCTIONS PERSO

   /////////////affichage du bouton curseur
void boutonCurseur()
  {
     tft.fillRect(FRAME_X,FRAME_Y,FRAME_W,FRAME_H,ILI9341_RED);    //affichage de la barre rouge tactile
  }

 

 

 

Voila un petit programme de gestion d'écran, il reprend une partie du programme de gestion du Z microscope .


Modifié par michelflashman, il y a 3 semaines.

  • 0

#27 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Le Moteur pas a pas et son driver

 

Ce moteur possede 48 pas combiné avec un réducteur de 1/64, ce qui correspond a 3072 positions angulaires différentes , position angulaire de 0,08 degré. (une précision redoutable !! )

En rotation par Minute, le moteur est assez lent, 9 T/mn maxi.

 

 

 

s-l1xx600.jpg

 

 

Il serait possible de gérer le moteur seul, sans le driver ! mais la programmation du moteur est largement facilité avec le driver.

Il est impératif de charger la bibliothèque stepper , qui offre les fonctions necessaires aux commandes du moteur.

 

Sur la carte Arduino, 4 pins sont nécessaire pour piloter le moteur.

 

petit programme de gestion du moteur

 

// MOTEUR , biblio et definitions

 

#include <Stepper.h>

 

#define STEPS 48 * 64                      //nombre de pas

#define IN1 9                                     //broches sur Arduino Uno
#define IN2 11
#define IN3 10
#define IN4 6

 

//Definition de l'objet moteur

Stepper moteur(STEPS, IN1,IN2,IN3,IN4) ;   // pas et broches pour Mega

 

void setup{

 

                        moteur.setSpeed(9);               //vitesse du moteur T/mn (le maxi)

 

                 }

 

void loop {

 

                       moteur.step(150);                   //rotation 150 pas  dans un sens

 

                        moteur.step(-100);                 //rotation 100 pas dans l'autre sens

 

                   }

 

 

Exemple de branchements sur carte Uno

 

Capture.JPG

 

 

Moteur Fin !!


Modifié par michelflashman, il y a 3 semaines.

  • 0

#28 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 3 semaines

Bonjour Michel,

 

Bravo, tout est clair dans tes explications et c'est très pédagogique.

Cela devrait en inciter plus d'un à se lancer dans la pratique de l' Arduino.

D'un autre côté, pour ne pas surcharger ton sujet, j'ai retiré des exemples personnels, mais je les remettrais dans un sujet à part en parallèle au tien.

Toutefois, je ferais déjà une remarque. La documentation du moteur est fausse et la plupart des tuto et exemples qu'on trouve sur internet sont faux et contradictoires.

Comme j'aime la précision, j'y suis allé voir de plus près et trouvé l'explication.

 

Amicalement.


  • 0

#29 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Bonjour a tous,

Tryphon, je suis curieux de ce que tu as put decouvrir au sujet des moteurs.

Pour la motorisation de mon microscope, j'ai bidouillé un peu pour trouver les bons réglages du moteur, mais maintenant, ça marche !!

Amicalement

Michel
  • 0

#30 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 3 semaines

Bonjour à tous(tes), 

Bonjour Michel,

 

Tu n'as pas vu mon sujet dans le même forum où sont mes réponses et mon expérience personnelle.

 

http://forum.mikrosc...s-et-bien-plus/

Je te disais en gros que dans ton cas, l'écran tactile est une très bonne solution et que pour la programmation du moteur, sur le net, il n'y a presque que des ânneries.

J'ai tout repris à zéro et j'explique qu' avec la ULN2003A  on ne pouvait pas dépasser les 2024 pas par tour.

Mais comme tu passes par une vis micrométrique, cela n'a pas beaucoup d'importance.

Donc ton initiative est particulièrement intéressante pour inciter ceux qui ne se sont pas encore lancés dans le stacking, et qui en un peu peur de l'électronique de s'y lancer.

D'un autre côté, il y a une très bonne pédagogie dans tes propos à condition qu'on les lise.

 

Amicalement.


  • 0

#31 Claude Brezisky

Claude Brezisky

    Reptile

  • Membre confirmé
  • PipPipPipPipPipPip
  • 692 messages

Posté il y a 3 semaines

Bonjour,

Pour moi, c'est beaucoup plus simple:

je filme et j'extrais les photos pour faire les compilations.

De ce fait, je n'ai pas d'acoup sur le déplacement de la platine et je peux choisir les photos les plus intéressantes avant la compilation.

L'intervalle et le nombre de photos peut varier à loisir à partir du mème film.

Le seul inconvénient est que la dimension des photos est plus petite que celle faite directement en photo, mais elle est largement suffisante pour internet et les ordinateurs grand écran.   

Cordialement

Claude


  • 0

#32 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 3 semaines

Pour moi !
La vis micrometrique est incontournable , car elle reprend ce que l'ont fait tres bien habituellement mais d'une façon automatisé .
Aucune vibration , meme en cadence rapide , dans mon processus , j'integre dans le programme des temps d'arret entre chaque cliché pour mettre au repos toute vibration .
Pour le film , la qualité n'est quand meme pas la meme, j'avais un D800E , 36 Mgpix, en stacking, je pouvais , avec une grande qualité, recadrer des series de photos prisent au 40X au lieu d'utiliser un 100X , beaucoup plus pointus pour le stacking.
Et de la , je tirais des A3 pour des expos scolaires, avec une qualité extreme !!
Le probleme du Nikon D800E , il fallais utiliser le flash electronique , en cause , la vabration du 1er rideau.

Amicalement

Michel
  • 0

#33 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 3 semaines

Heu pardon !

 

J'ai oublié de dire que les réponses un peu longues à ce sujet se trouvent ici : http://forum.mikrosc...s-et-bien-plus/

 

En même temps si je pouvais savoir qui voit le forum Laboratoire Mikroscopia et ses sous forums, (à la même adresse que ci-dessus) cela m'aiderait beaucoup, certains, semblerait-il ne les voient pas et cela me permettrait peut-être, à arranger tout çà.

 

Amicalement.


  • 0

#34 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 2 semaines

Nous allons continuer avec le relai et le joystick

 

IMG_20180923_101021.jpg

 

serveimage.jpg

 

// Joystick 2 axes

// constantes
const int VRx =A2;
const int VRy =A3;


// Variables de lecture
int calX, calY,  rawX, rawY ;


void setup(){

 

// Initialisation du port série pour lecture du résultat sur l'écran serie de l'appli Arduino developpement

 

Serial.begin(9600);

 

 

// Calibration de la valeur (0, 0) du joystick

 

calX = analogRead(VRx);
calY = analogRead(VRy);

 

}


void loop(){

 

// Mesure des valeurs en X et Y
             rawX = analogRead(VRx)- calX;
             rawY = analogRead(VRy)- calY;
             r

// Affichage des valeurs lues
           Serial.print("--- Nouvelles lectures --- ");
          Serial.println("Valeur X : ");
         Serial.println((int)(rawX));
         Serial.print("Valeur y : ");
         Serial.println((int)(rawY));
      

delay(500);// Temps de pause entre lecture

}

 

Fin de programme.

 

 

le joystick peut être enfoncé, ce qui correspond a un ON/OFF, ici, il n'est pas programmé.

 

a suivre ...............


Modifié par michelflashman, il y a 2 semaines.

  • 0

#35 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 2 semaines

En concret, programmation du joystick pour commander le moteur pas a pas.

 

le but, faire la mise au point du 1er cliché de stacking.

 

Attention: je n’ai pas trouvé de solution pour limiter la course , risque de collision objectif/lamelle !!

 

 

// MOTEUR , biblio et definitions

 

#include <Stepper.h>

 

#define STEPS 48 * 20                      //nombre de pas
 

#define IN1 34                          //broches sur arduino Mega
#define IN2 38
#define IN3 36
#define IN4 32

 

//Definition de l'objet moteur

Stepper moteur(STEPS, IN1,IN2,IN3,IN4) ;   // pas et broches pour Mega

 

//**Joystick*******************************************************************************
const int VRx =A9;                             //utilise le X
const int SW =A8;                              //le bouton en appuyant sur le joystick (au cas ou !!)

// Variables de lecture du joystick
int calX,  calSW, rawX, rawSW;

 

void setup{

 

                        moteur.setSpeed(9);               //vitesse du moteur T/mn (le maxi)

 

  // Calibration de la valeur (0, 0) du joystick

                        calX = analogRead(VRx);
                        calSW = analogRead(SW);

 

                 }

 

void loop {

 

                           joystick()                            //appel de la fonction perso joystick

 

                   }

 

 

Fonctions perso

 

  void joystick()

  {
     // Mesure des valeurs en X
rawX = int (analogRead(VRx)- calX);
rawSW = int(analogRead(SW));


    if (rawX < -100 or rawX > 100)
        {
            moteur.step ( map(rawX,-500,500,-20,20) );         //la fonction map() permet a partir de la lecture de la variable rawX

                                                                                          // de ramener de champs des valeurs d'origine, -500 et +500

                                                                                          // a des valeurs compatibles avec le moteur pas a pas , de -20 a +20
        }
      else
        {
                 moteur.step (0);                 //arret moteur a voir
                digitalWrite(IN1, LOW);
                digitalWrite(IN2, LOW);
                digitalWrite(IN3, LOW);
                digitalWrite(IN4, LOW);

        }
   }


Modifié par michelflashman, il y a 2 semaines.

  • 0

#36 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 2 semaines

Bonjour Michel,

 

Attention: je n’ai pas trouvé de solution pour limiter la course , risque de collision objectif/lamelle !!

 

La solution est d'une très grande simplicité ! D'ailleurs, il existe de nombreuses solutions.

La première consiste à placer un micro-switch sur la platine. L'Ardiono lit l'état du micro-switch et prend la décision que tu auras choisie.

La seconde consiste à faire "le zéro" avec ton moteur. Monter la platine pas par pas et au moment que tu jugeras opportun, remettre une variable à zéro par appui sur un bouton dans ton menu...

Je fais çà quotidiennement, c'est même à la base du contrôle de la position de la broche dans les Machines CNC.

 

Amicalement.


  • 0

#37 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 2 semaines

Bonjour Tryphon,


Je ne crois pas que cela soit si simple, bien sur, j'avais pensé au microswitch et au point zero mais c'est justement au cours du point zero que le risque de collision existe !
La monté pas a pas pour obtenir un point zero, c'est ce que je pratiquais avant l'installation du joystick, je n'avais pas besoin de memoriser ce point car dans mon processus , la platine descent pour stacker. Le probleme avec l'ancien systeme, j'etais obligé de deconnecter le moteur de la vis micrometrique car celle ci etait bloqué par le moteur ! Donc , il me fallais faire la mise au point du depart et ensuite connecter le moteur, ce qui, parfois , faisait bouger la mise au point.
Quand au microswitch, il ne me semble pas assez sensible ! Lorsque je fais la mise au point avec l'objectif UplanSapo 40X on 0.95, la distance de travail est infime , je pense incompatible avec un reglage mecanique.
Le probleme vient peut etre du joystick , j'ai voulu automatisé l'approche et la mise au point qui dans ce cas se fait en montant la platine !! contrairement au prises de vues.
Mais je suis preneur de solutions, j'avais pensé a un laser ! Il en existe a prix abordable .
Je me demande, chez les grands constructeurs de microscopes, comment fonctionne , dans la nouvelle microscopie, l'automatisation des focus ? Mais les moyens financiers et techniques ne sont pas du méme ordre !!!

Amicalement

Michel

Modifié par michelflashman, il y a 2 semaines.

  • 0

#38 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 2 semaines

Hello ,

 

Il ne faut pas rendre plus complexes les choses qu'elles le sont réellement.

Les machines-outil qui travaillent avec la plus grande précision , y compris pour usiner des microscopes, ont toutes  des systèmes de mise à zéro.

C'est même la base du positionnement à tout instant, et avec une très grande précision, de l'outil et donc, de la précision de l'usinage.

Pourquoi un micro-switch ne serait-il pas précis ?

Il déclenche à un moment précis, répétitif. Sa précision est celle de son positionnement.

C'est son positionnement qui est mis à zéro. S'il est positionné grâce à une vis au pas de 1 (vis de 6 mm, c'est ce qu'on appelle déjà une vis micrométrique !)  tu peux obtenir très facilement le centième ce qui est largement suffisant pour ne pas écraser la lamelle.

Mais il y a d'autres moyens (sans faire intervenir les supposés pouvoirs du laser  :lol: )

La mise à zéro en z des machines CNC se fait grâce à un contact électrique détecté par le système de contrôle.Il y a aussi des capteurs sans contact à effet Hall, IR, laser (oui aussi!) , et d'autres encore...

 

 

ZeroZ.jpg

Contact électrique

 

capteur.jpg

Effet Hall

 

65025-12084772.jpg

Laser

 

 

 

ils détectent tous au même moment, l'essentiel est la précision avec laquelle on les place.

Pour les moyens financiers, n'exagérons pas non plus, quelques centimes suffisent.

 

Amicalement.


  • 0

#39 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 2 semaines

Bonjour,

Je crois bien que l'ont parle pas de la meme chose !!

Dans mon cas, en prise de vue sur microscope, je n'ai absolument pas besoin d'un point zéro, car il devrait varier en fonctions des objectifs utilisés, en fonction des objets (diatomées) observés qui n'ont pas toutes la meme epaisseur !, du parallelisme de l'ensemble lame et lamelle et voir le parallelisme de la platine !.

Dans ma situation, une 1ere mise au point haute verifié de visu sur l'ecran 24 pouces suffit a demarrer le stacking, une surveillance de ce meme ecran me permet de stopper le processus en fin de stacking. Ce systeme est vraiment tres facile, fiable et simple et donc me convient parfaitement.

Le seul probleme (dans l'eventualité d'une faute d'inatention ! ) se pose lors de l'utilisation du joystick pour obtenir le 1er focus de chaque stacking, auparavent, en manuel, le probleme ne se posait pas.

J'ai la possibilité de diminuer la vitesse de remonté pour sécurisé et aussi installer une vis de butée haute pour la platine mais je ne veux pas toucher a l'intégrite du microscope en cas de revente, il est comme neuf et je tient beaucoup a ce qu'il le reste !

J'avais envisagé une solution logiciel grace a une reconnaissance de netteté un peu a la Helicon focus, developpé en C++ mais je crois bien que cela depasse mes capacités d'informaticien en retraite !!! Cela aurait ete une solution somptueuse .

Pour une eventualité laser, il ne s'agit pas de couper un rayon interrupteur mais de mesurer une distance !! Aller et retour du faisceau et dans ce cas, necessite un matériel assez sofistiqué, si cela est possible ?

Il faut aussi relativiser, les fronts objectifs sont montés sur ressort anti collision.

Donc, ce n'est , pour moi, pas un probléme primordial.

Amicalement

Michel

Modifié par michelflashman, il y a 2 semaines.

  • 0

#40 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a 2 semaines

Oh que si !

 

Attention: je n’ai pas trouvé de solution pour limiter la course , risque de collision objectif/lamelle !!

 

C'est toi qui le dit, alors je te répond en fonction de mon expérience.

 

Une solution existe déjà sur certains microscopes et pas chez les plus chers.

Il y a une butée mécanique réglable qui interdit la collision.

Maintenant si tu n'en as pas, cela peut se résoudre par une mise à zéro dans le programme ou mieux un switch.

De toute façon, si tu as une butée mécanique bien réglée, il te faut débrayer le moteur une fois arrivé  au point zéro, sinon, avec la démultiplication, tu ne vas pas casser que la lamelle.

Ce point zéro me parait indispensable pour plusieurs raisons.

Le programme qui comporte des bugs, (il n'est jamais au point la première fois) la mauvaise manip (erreur de sens dans l'utilisation du joystick) faute d'inattention.

Le micro-switch peut à lui tout seul faire cette mise à zéro automatiquement.

 

Amicalement.


  • 0

#41 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 2 semaines

Oh que si !
 

Attention: je n’ai pas trouvé de solution pour limiter la course , risque de collision objectif/lamelle !!

C'est toi qui le dit, alors je te répond en fonction de mon expérience.
 
Une solution existe déjà sur certains microscopes et pas chez les plus chers.
Il y a une butée mécanique réglable qui interdit la collision.
 
Amicalement.

Le microscope Olympus BX50 possede cette butée mais , pour moi, inaproprié dans la situation.
  • 0

#42 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 2 semaines


La tramontane souffle fort !!

Plus de connection internet dans ce cas , sauf au café !! Pour garder ma santé, j'attend qu'internet revienne pour continuer ce sujet.

Amicalement

Michel
  • 0

#43 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 2 semaines

Oh que si !
 

Attention: je n’ai pas trouvé de solution pour limiter la course , risque de collision objectif/lamelle !!

C'est toi qui le dit, alors je te répond en fonction de mon experience.
 
Amicalement.

Pas de souci, tout au contraire ! Je ne suis pas certain d'avoir raison .
  • 0

#44 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 2 semaines

Bonjour a tous,

 

Internet est de retour !!

 

petites explications sur la programmation du joystick.

 

Le joystick fonctionne en X et Y comme un double potentiomètre, c'est a dire qui fait varier une tension de 0 a X volts, comme le bouton du volume d'une radio classique.

 

il est en mode analogique, contrairement a l'information de type digitale , 1 ou 0 , le binaire.

 

Pour notre joystick, l'info qu'il renvoie varie de 0 a 1024 environ de sa position extrême gauche a sa position extrême droite, au repos central, la valeur est environ de moitié, soit 500.

 

Pour récupérer un signal variant a partir de la position centrale du joystick, il faut définir une variable , ici calX, qui récupère la valeur du joystick au repos, au centre.

calX = analogRead(VRx);

 

Ensuite , dans la boucle void loop{}, lire la valeur de X en soustraillant la valeur de calX

rawX = int (analogRead(VRx)- calX);

 

 

la valeur renvoyé par rawX va varier de -500 a +500.

Pour retrouver un champ de valeurs compatible avec le moteur pas a pas, la fonction map().

moteur.step ( map(rawX,-500,500,-20,20) );         //la fonction map() permet a partir de la lecture de la variable rawX

 

il est possible de formuler directement dans les arguments d'une commande, exemple moteur.step

formulation de la fonction map(), 5 arguments. Nom de la variable a traiter , valeur 1 a traiter, valeur 2 a traiter, valeur 1 demandé, valeur 2 demandé.

 

const int VRx =A9;                             //utilise le X, position sur la carte arduino, broche analogique.

 

// Variables de lecture du joystick
int calX,  rawX;

 

void setup{

 

                      

 

  // Calibration de la valeur (0, 0) du joystick

                        calX = analogRead(VRx);
                      

 

                 }

 

void loop {

 

     // Mesure des valeurs en X
rawX = int (analogRead(VRx)- calX);

 

moteur.step ( map(rawX,-500,500,-20,20) );

 

}


Modifié par michelflashman, il y a 2 semaines.

  • 0

#45 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 2 semaines

Terminer pour l'utilisation et la programmation du joystick.

 

Si vous avez des questions, n’hésitez pas, si je peux y répondre !


  • 0

#46 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a 2 semaines

Les relais

 

serveimage.jpg

 

sqfcsq.jpg

 

 

Principe de fonctionnement

On souhaite commander de la puissance (une lampe, un moteur, une ventilation, le chauffage, en 220V par exemple...) à partir d'un microcontrôleur (carte Arduino).
Une carte Arduino ne supporte que 40mA et 5V par broche de sortie, et a donc besoin d'un intermédiaire pour commander de la puissance.

Un relais permet de commuter (comme un interrupteur) cette puissance à la demande.

Le module de relais utilisé ici reçoit en entrée 5V et gère en sortie jusqu'à 10A, 250 V/AC.

 

IMG_20180923_101559.jpg

 

Au repos (module non alimenté) 1-2 est connecté, tandis que 2-3 est ouvert.

 

L'alimentation du relai se fait par le gnd (masse) et le + 5v

 

il suffit d'envoyer 5v sur RX pour fermer le relai.

 

realai 2.jpg

 

//RELAY **************************************
#define relaiPin 28          //pin ou est connecté l'activation du relai arduino mega

 

void setup()  {

 

}

 

 

void loop()   {

 

 

                delay(10);                    //REPOS POUR VIBRATIONS §§
                clicPhoto();                   //prend la photo

 

 

 

                   }

 

 

//fonction perso

 

clicPhoto()

 

 {
           nbPhoto ++;                                    //compteur des photos         
          digitalWrite (relaiPin, HIGH);           //contact relai = clic photo
           delay (50);                                      // temps de contact du relai
         digitalWrite (relaiPin, LOW);             //relache contact relai

    
  }

 

pour info, je remplacerais le relai, dans la situation du microscope, pas vraiment nécessaire,; par un transistor .

 

pour le moment, ce relai appuie a ma place sur la télécommande du Lumix G7, que j'ai court-circuité .


Modifié par michelflashman, il y a 2 semaines.

  • 0

#47 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a une semaine

Bonjour Michel,

 

Ta programmation du Joystick est très élégante! ( J'en tiendrais compte la prochaine fois...)

Pour ma part, je fais un peu plus compliqué, mais bien plus simple à intégrer quand on n'est pas informaticien.

Je fais un test "if then else" avec la valeur retournée du potentiomètre ,avec une zone "interdite" autour du zéro. 

Comme c'est moi qui l'ait imaginée, ce n'est pas parfaitement rigoureux: mais ça fonctionne .

(Réflexions faite, je pense que ma methode est plus précise...)

 

Précision sur la limite numérique/analogique.

 

 

il est en mode analogique, contrairement a l'information de type digitale , 1 ou 0 , le binaire.

 

Pour notre joystick, l'info qu'il renvoie varie de 0 a 1024 environ de sa position extrême gauche a sa position extrême droite, au repos central, la valeur est environ de moitié, soit 500.

 

 

Un potentiomètre (joystick) est bien analogique (en chair et en os ! :lol: ), mais les valeurs que renvoie le convertisseur de l'arduino , entre 0 et 1023 (et non pas 1024) ne sont pas des valeurs analogiques, mais bien des valeurs numériques

Même dans ce domaine la confusion s'installe entre le monde réel et le monde virtuel.

Le potentiomètre est bien RÉEL/ANALOGIQUE, mais toutes les données manipulées par un ordinateur (tout comme le fait notre cerveau) sont VIRTUELLES/NUMÉRIQUES.

Pour passer de l'un à l'autre, il faut un CONVERTISSEUR. Dans le cas de l'Optique, le convertisseur se situe dans la rétine et les aires visuelles.Dans l'arduino, c'est dans ces entrailles et tout ce qu'il délivre au programme est numérique.

(Je ne dis pas cela pour toi Michel , tu le sais déjà, mais pour un large public, un peu dépassé par ces "subtilités".)

 

Je reviens donc à la programmation d'un joystick.

 

De part se construction le joystick est un potentiomètre (double, mais en fait, ici on ne l'utilise que pour le Z) qui est forcé en position milieu par des ressorts. et de ce fait, on n'est pas certain de la valeur du point milieu (de repos) soit exactement au milieu , d'où l'idée de noter le point zéro dans une variable en début du programme..

 

Le potentiomètre est forcé en position médiane par des ressorts, mais, comme celui-ci est généralement constitué d'un dépôt linéaire d'une substance résistive, la valeur lue correspond à la résistance de cette substance entre le curseur et un point extrême. Avant le "numérique" il y avait " l'analogique" et certains se souviennent encore des "potards qui crachaient" . Les joystick bon marché, ont aussi tendance à "cracher" là où ils sont utilisés le plus souvent, c'est à dire au point zéro...

 

Donc , même si la valeur zéro est connue à un moment donné, il n'est pas démontré que cette valeur soit stable dans le temps. Mon idée était donc de  déclarer une zone centrale , zone interdite. Pour moi, elle est de + ou - 40.

 

Amicalement.


  • 0

#48 michelflashman

michelflashman

    Nucléotide

  • Membre confirmé
  • 41 messages

Posté il y a une semaine

Bonjour Michel,


il est en mode analogique, contrairement a l'information de type digitale , 1 ou 0 , le binaire.

Pour notre joystick, l'info qu'il renvoie varie de 0 a 1024 environ de sa position extrême gauche a sa position extrême droite, au repos central, la valeur est environ de moitié, soit 500.


Un potentiomètre (joystick) est bien analogique (en chair et en os ! :lol: ), mais les valeurs que renvoie le convertisseur de l'arduino , entre 0 et 1023 (et non pas 1024) ne sont pas des valeurs analogiques, mais bien des valeurs numériques.
Bonjour Typhon,

Je crois que ....

La valeur 1023 n'existe pas nativement en informatique, elle n'est pas un multiple de 2 , le systeme binaire.

Donc pour l'obtenir , cela demande en language machine beucoup de calcul !! Vraiment pas absolument necessaire pour l'utilisation d'un potentiometre manuel ou un joystick sur Arduino.

1024 est un multiple de 2 , 2 puissance 10, les valeurs de base du systeme binaire .

2 4 8 16 32 64 128 256 1024 2048 etc...ce n'est pas le hasard si la ram memoire se compte en puissance 2, idem pour les criptages d'informations voir le Windows 16 bits ou 64 bits .

J'ai indiqué , pour le potentiometre une valeur de 0 a 1024, car cela ne peut etre que cela mais , une lecture direct sur le joystick peut etre differente car imprescise , il n'est pas sur que le convertisseur analogique/numerique soit tres precis !Dans cette situation , 1023 ou 1024 , c'est la meme chose.

Il existe en language machine des operations de decalages de bits qui permettent de calculer les puissances de 2 a la vitesse du process, soit pour l'Intel core i7 de 8eme generation , une vitesse de calcul casi direct a 4 milliars d'operation seconde !!

Tout les systemes informatiques, y compris les accesoires, respect ces regles de base, il ne peut se faire autrement !! Sauf a vouloir obtenir une valeur particuliere, dans ce cas, il faut programmer avec des lignes de code en dur.

Amicalement

Michel

Modifié par michelflashman, il y a une semaine.

  • 0

#49 Jean Marie Cavanihac

Jean Marie Cavanihac

    AUTEUR-MODERATEUR

  • Co-Admin
  • 3 351 messages

Posté il y a une semaine

Bonjour

je pense que l' on mélange plusieurs choses. En effet on raisonne bien en puissances de 2, mais techniquement le fait de décomposer 1024 en bits montre qu il faut un bit supplémentaire pour l’écrire soit 11 (11111111110) alors que 1023 (impair) s écrit 1111111111 soit 10 bits. En pratique le fait de gérer un bit de plus oblige a prévoir une position de compteur supplémentaire...Pas grave en soft mais en hard on rajoute un compteur par 2

nb: je suis plus calé en logique discrète que soft ce qui fait que je ne participe que peu à ce sujet très intéressant!

Amitiés
JMC


Modifié par Jean Marie Cavanihac, il y a une semaine.

  • 0

#50 Tryphon T

Tryphon T

    oooOooo

  • Membre confirmé
  • PipPipPipPipPipPipPipPipPipPip
  • 13 716 messages

Posté il y a une semaine

Hello,

 

On ne s'est pas compris.

Une résolution de 10 bits, on est d'accord, correspond à 2 exposant 10 c'est à dire 1024. 

C'est à dire concrètement  que le signal peut prendre 1024 valeurs de ZÉRO à 1023. Le compte est bon.

C'est la même chose pour 8 bits : 2 exposant 8 = 256 soit  de 0 à 255. 

Ce qui est curieux c'est que 255 est beaucoup plus connu que 1023 mais c'est le même principe, la valeur zéro est la première valeur qui correspond à l'absence de signal mais dont on est obligé de tenir compte.

 

Amicalement.


  • 0




N'oubliez pas de consulter notre Magazine en ligne ... MIK-MAG!