Probleme d'incrementation

Bonjour,

Mon projet : apporter une plus grande précision aux éléments mobiles de mon tour Unimat sl.

Pour ce faire, j’ai penser adjoindre à chaque volant un écran indiquant l’avance en dixième de millimètre lorsque l’on tourne le volant.

Mon problème :

Trouvé la solution pour incrémenter le compteur.

J’ai pensé à un encodeur rotatif à arbre creux mais je ne trouve pas un modèle suffisamment petit pour le s volants (ils font environ 40mm de Ø).

En dehors de ca, je n’ai pas pour le moment de solution :thinking: . J’espère que vous allez m’aider.:wink:

Merci par avance.

Phil

Bonjour,

Savez vous a combien de degrés (rotation de l'axe) correspond une avance d'un dixième de millimètre ?

360° = 3 mm

3/360= 0.008mm

Bonjour plaf33140

Ca va être difficile à trouver.
L'encodeur qui va bien pour ça serait de ce type:
image

Si tu prends un 360, par exemple, ça te donnes 1440 divisions pour 1 tour donc 3 millimètre.

Pour l'entraînement, est ce que la vis traverse complètement le chariot, peux tu récupérer le bout pour entraîner l'encodeur?

A+
Cordialement
jpbbricole

Bonsoir JPB heureux de te croiser de nouveau sur ce forum.:smiley: :waving_hand:

Effectivement, on peut récupérer l’axe de l’autre coté ! idée géniale :wink: . un connecteur et le tour est joué !!

Il me reste à adapter le code récupérer sur le net.

Merci encore

Phil

Bonsoir plaf33140

Si tu as des problèmes de ce côté... :wink:

Le tour est un vaste champ d'application pour nos Arduino, à l'époque j'avais fait ça:

Essentiellement "pour le sport"

A+
Bonne soirée
jpbbricole

Bonjour Jpb,

Je voudrais te soumettre le schéma et le code concernant ce projet. Merci de me donner ton avis.

L’écran doit affiché l’avancer du charriot par le biais de l’encodeur en 10e de mm. La je ne sais pas faire …

j’ai adapté le schéma et le code en fonction de ma logique . qui n’est pas toujours la bonne ..

Merci. A+

Bonjour plaf33140

Quel modèle de codeur tu as choisi et quel est le modèle de ton affichage?

A+
jpbbricole

// Include the necessary libraries
#include <Encoder.h>
#include <LiquidCrystal.h>

// Define the pins for the encoder
#define ENCODER_A 2
#define ENCODER_B 3

// Define the pins for the LCD
#define LCD_RS 4
#define LCD_EN 5
#define LCD_D4 6
#define LCD_D5 7
#define LCD_D6 8
#define LCD_D7 9

// Initialize the encoder object
Encoder myEncoder(ENCODER_A, ENCODER_B);

// Initialize the LCD object
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);

// Define a variable to store the encoder value
long encoderValue = 0;

void setup() {
 // Set the LCD to 16 columns and 2 rows
 lcd.begin(16, 2);

 // Print a welcome message on the LCD
 lcd.print("Avance :");

 // Set the cursor to the second row
 lcd.setCursor(0, 1);

 // Print the initial encoder value
 lcd.print(encoderValue);
}

void loop() {
 // Read the encoder value
 encoderValue = myEncoder.read();

 // Update the LCD with the new value
 lcd.setCursor(0, 1);
 lcd.print(encoderValue);

 // Wait for 100 milliseconds before reading the encoder again
 delay(100);
}

J’ai choisi un encodeur rotatif optique.

Oui, mais quelle définition ou ticks par tour, donnes moi un lien.

Sacré sportif :clap::clap:!

Bonjour plaf33140

J'ai vu ton programme, c'est du ChatGPT?, c'est bien tu as utilisé la méthode en vogue (perso. je l'emploie souvent).
Pour le déplacement en millimètres, tu aurai du lui indiquer le nombre de ticks/tour *4, 360 *4 pour ton encodeur et le déplacement par tour, 3 mm dans ton cas..
J'ai donc redonné ton programme à ChatGPT et ça a donné ceci:

// Include the necessary libraries
#include <Encoder.h>
#include <LiquidCrystal.h>

// Define the pins for the encoder
#define ENCODER_A 2
#define ENCODER_B 3

// Define the pins for the LCD
#define LCD_RS 4
#define LCD_EN 5
#define LCD_D4 6
#define LCD_D5 7
#define LCD_D6 8
#define LCD_D7 9

// Initialize the encoder object
Encoder myEncoder(ENCODER_A, ENCODER_B);

// Initialize the LCD object
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);

// Variables
long encoderValue = 0;

// Paramètres de conversion
const float ticksParTour = 360.0 * 4.0;   // ticks par tour
const float deplacementParTourMM = 3.0;  // déplacement par tour en mm
float millimetresValue = 0;

void setup() {
	Serial.begin(115200);

	// LCD
	lcd.begin(16, 2);
	lcd.print("Avance (mm):");

	// Position sur la ligne 2
	lcd.setCursor(0, 1);
	lcd.print("0.0");
}

void loop() {
	// Lecture de l’encodeur
	encoderValue = myEncoder.read();

	// Conversion en millimètres
	millimetresValue = encoderValue * (deplacementParTourMM / ticksParTour);

	// Affichage sur LCD
	lcd.setCursor(0, 1);
	lcd.print("                "); // nettoie la ligne
	lcd.setCursor(0, 1);
	lcd.print(millimetresValue, 2); // 2 décimales

	// Debug série
	Serial.println(millimetresValue, 2);

	delay(100);
}

Et le chatGPT (il ne va pas rester en permanence)

A+
jpbbricole

Oui, mais seulement dans ce domaine :wink:
J'y ai ajouté un complément.

Merci jpb toujours aussi efficace !!.

Pour le schema c’est bon ?

Il me semble que oui.
L'affichage des valeurs est OK ? (je n'ai pas ce type d'afficheur),

Super !! Merci jpb !!

Bonjour Jpb,

Je rencontre un problème. après montage et test, l’écran reste bleu. pas d’affichage alors que le code est ok avant transfert.

Une idée?

Merci