Le Deal du moment : -39%
Ordinateur portable ASUS Chromebook Vibe CX34 Flip
Voir le deal
399 €

UC arduino pour la Commande numerique

3 participants

Aller en bas

UC  arduino pour la  Commande numerique  Empty UC arduino pour la Commande numerique

Message  faux jetons Jeu 9 Nov - 9:10

salut
pendant les vacances je suis aller voir mon neveux dans le nord de l hexagone
est je vois c est deux filles 6 ans est 8 ans jouer ( ce chamailler ) avec des gros lego
elle pose par terre les deux lego et leurs bazars qui part dans tous les sens ???
c est quoi ce machin est la elle m explique en gros ce que c est
est la je voie les commande dans leur mains pour diriger leur bidule
en plus ca cour apres tous ce qui bouge
je me rappel il y a un moment visualiser la robotique éducative a la tv
des chalenges entre université avec une base arduino
j avais découvert la section Arduino sur le forum il y a un moment
j ai chercher un peux sur le net une grande partie est en anglais
https://www.arduino.cc/
j ai trouver une rubrique en français
https://www.arduino.cc/en/Reference/HomePage?from=Reference.Extended
https://forum.arduino.cc/index.php?board=33.0
j ai télécharger le logiciel Arduino
https://www.arduino.cc/en/Main/Software#
j ai acheter une mallette avec les composants de base
il y avez deux Arduino un uno r3 d origine est un méga un clone
un Arduino reconnue par le pc est pas l autre

il faut un drivers pour les clones

faire attention vaux mieux avoir un vrais Arduino uno r3
avec certain clone il faut ce faire bien chier pour essayer de les faire
fonctionner sans résultat
parcourue les liens les forum d Arduino
j ai une foule de marque page sur ce sujet ca commence a envahir le
navigateur
envisager les applications possible pour notre atelier
j ai essayer de comprendre le langage ?? c était de l eau avec le boudin
au bout d un certain temps c est de l eau de boudin
au début je me suis consigner sur un montage simple pour commencer
un Arduino uno r3 avec un écran LCD est comprendre le fonctionnement
je suis rester une semaine a chercher pour avoir la bonne configuration
j ai les deux mème écran LCD avec deux type d adresse (0x27,20,4);
(0x3f,20,4);
comme par hasard j avais la mauvaise configuration suivant l écran LCD utiliser
j ai même acheter un écrans LCD tactile il faut encore s avoir le configurer
https://fr.aliexpress.com/item/2-4i...h0104.8.46.40857a88Zp1E5R&transAbTest=ae803_3
ici tous est expliquer

https://www.instructables.com/id/How-to-Use-I2C-Serial-LCD-20X4-Yellow-Backlight/
il faut mètre la Bibliothèque a jours
dans la fenêtre croquis/ inclure une Bibliothèque / gestion de Bibliothèque
ca ouvre une fenêtre sur celle de droite un copie/coller LiquidCrystal I2C
sélection LiquidCrystal_I2C by franck de brabander
le branchement VCC +5V GND SDA SCL
Arduino brancher avec la prise USB du pc pour alimenter en tension
Arduino plus écran LCD
le program injecter depuis l  arduino  
telechargement du promarme arduino

Code:
 #include <Wire.h>
      #include <LiquidCrystal_I2C.h>
      LiquidCrystal_I2C lcd(0xf8,20,4);  // (0x27,20,4)
      void setup()
      {
        lcd.init();        // initialize lcd
        lcd.init();        // Print a message to the LCD.
        lcd.backlight();
        lcd.setCursor(3,0);  lcd.print("Hello, world!");
        lcd.setCursor(2,1);  lcd.print("Ywrobot Arduino!");
        lcd.setCursor(0,2);  lcd.print("Arduino LCM IIC 2004");
        lcd.setCursor(2,3);  lcd.print("Power By Ec-yuan!");
      }
      void loop()
      {
      }
j était soulager quant j ai vue le premier mots a l écran
j ai pas fait ca pour rien est ca peux aider du monde
entre temps je me suit dit si c est brancher ca doit fonctionner
du coup j ai chercher une autre alternative a l ecran lcd 2004
est j ai trouver la bonne configuration de l ecran lcd 2004
j avais pris un LCD TFT-3.2 a 6 € qui est rester dans la boite
http://f1rmb.blog.free.fr/index.php?post/2014/03/03/Utilisation-shield-LCD-TFT-3.2-avec-Touchscreen
a plus


Dernière édition par faux jetons le Jeu 9 Nov - 9:15, édité 2 fois
faux jetons
faux jetons
posteur Régulier
posteur Régulier

Messages : 155
Points : 187
Date d'inscription : 04/02/2023
Age : 63
Localisation : aquitaine 33220

Revenir en haut Aller en bas

UC  arduino pour la  Commande numerique  Empty Re: UC arduino pour la Commande numerique

Message  faux jetons Jeu 9 Nov - 9:12

salut

j ai pas fait cela pour voir tourner des lumières
je veux faire des montages en mode autonomes
avec une alimentation 12 /24 volts +/- 10 amperes



j ai chercher a comprendre le fonctionnement du clavier
bon pour finir j ai fait un copie coller d un fichier

Code:
#include <Wire.h>
      #include <LiquidCrystal_I2C.h>
      #include <Keypad.h>
      
       LiquidCrystal_I2C lcd(0x27,20,4);            // Réglez adresse de      l ecran LCD 0x27 / 0x3f  affichage 20 caractères et 4 lignes
      
      const byte numRows= 4;                      
      const byte numCols= 4;                      
                                                  
      char keymap[numRows][numCols]=
      {
          {'1','2','3','A'},
          {'4','5','6','B'},
          {'7','8','9','C'},
          {'.','0','#','D'}
          };
       byte rowPins[numRows] = {11,10,9,8};
       byte colPins[numCols]= {7,6,5,4};  
       Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins,      numRows, numCols);
       String numstr = "";
       void setup()
      {
        lcd.init();  
        lcd.backlight();
        lcd.print("start LCD2004");
        delay(1000);
        lcd.clear();
      }
       void loop()
      {
        lcd.setCursor(0,0);
        lcd.print(" 4x4 16 Keypad  ");
        char keypressed = myKeypad.getKey();
        if (keypressed != NO_KEY)
        {
          lcd.setCursor(0,1);
          lcd.print("keypressed=" + (String)keypressed + "  ");
          switch (keypressed)
          {
            case '1':        
            numstr = "1    ";
            break;
            case '2':          
            numstr = "2    ";
            break;  
            case '3':          
            numstr = "3    ";
            break;
            case '4':          
            numstr = "4    ";
            break;
            case '5':          
            numstr = "5    ";
            break;                
            case '6':          
            numstr = "6    ";
            break;
            case '7':          
            numstr = "7    ";
            break;
            case '8':          
            numstr = "9    ";
            break;
            case '0':          
            numstr = "0    ";
            break;
            case 'A':          
            numstr = "A   ";
            break;
            case 'B':          
            numstr = "B   ";
            break;
            case 'C':          
            numstr = "C  ";
            break;
            case 'D':          
            numstr = "D ";
            break;
            case '*':          
            numstr = "*    ";
            break;
            case '#':          
            numstr = "#    ";
            break;                                                
              
            default:          
            break;
          }
      
          if(numstr !="")
          {
            lcd.setCursor(0,2);
            lcd.print("numstr=" + (String)numstr + " ");
          }
      
        }
      
      }
a plus
faux jetons
faux jetons
posteur Régulier
posteur Régulier

Messages : 155
Points : 187
Date d'inscription : 04/02/2023
Age : 63
Localisation : aquitaine 33220

Revenir en haut Aller en bas

UC  arduino pour la  Commande numerique  Empty Re: UC arduino pour la Commande numerique

Message  faux jetons Jeu 9 Nov - 9:17

salut
j ai mis le driver qui était fournie dans le kit en boite
brancher sur les pattes step+ 12 dir+ 13
avec le moteur pas a pas brancher sur le drivers a a- b b-
avoir une configuration de base que j ai dans les favoris
je suis partie sur c est deux base essayer de comprendre le fonctionnement

virer ce que j aime pas est gardez ce qui me plait pour simplifier le
montage est le fonctionnement

j ai vérifier de prés les branchement sur les photo
UC  arduino pour la  Commande numerique  Img_2411
UC  arduino pour la  Commande numerique  Img_2412


https://www.cnczone.com/forums/arduino/215402-cnc-5.html#post1796162
https://www.homemodelenginemachinis...or-a-3-rotary-table.25783/page-5#post-291671

la aussi j ai mis du temps pour faire fonctionner le tous
le programme avec le moteur
a plus


Dernière édition par faux jetons le Jeu 9 Nov - 13:02, édité 1 fois
faux jetons
faux jetons
posteur Régulier
posteur Régulier

Messages : 155
Points : 187
Date d'inscription : 04/02/2023
Age : 63
Localisation : aquitaine 33220

Revenir en haut Aller en bas

UC  arduino pour la  Commande numerique  Empty Re: UC arduino pour la Commande numerique

Message  faux jetons Jeu 9 Nov - 9:22

salut

ce que je cherche a faire
c est de motoriser les trois axes sur ma fraiseuse détablie
une ZAY7045 FG/1 et pouvoir garder le mode manuelle
avoir un moteur sur les trois axes
les moteur tourne facilement a vide
je peux gardez les manivelles elle sont débrayable est pouvoir les utiliser en manuelle
j ai dejas une visse a bille sur l axe Z il me reste a insérer le moteur dessus

avec le moteur nema 34 qui a un axes de 14 mm
la vitesse des moteur est de 0 a 2000 tours /mn
avec la configuration de l Arduino j ai 400 steps par tour du moteur

j ai mis un certain temps avant de les faire fonctionne avec l Arduino
j avais la doc fournis avec le moteur le tous en anglais un plant c est lisible de tous le monde

j ai trouver qu aucun avec la bonne configuration fournis il ne pouvez tourner
il avez aucun référence de bonnes dans les fils de connexion il y avez pas la bonne couleur
il n étais pas relier ensemble dans la prise mal / femelle fournis avec le moteur // drivers
j ai démonter le cul du moteur est pris une photo remonter des borniers fils pour comprendre
maintenant ca fonctionne
analyse du comportement  moteur  nema 34
je vais faire des réducteurs planétaire pour adapter les visses a billes au pas de 1000
pour avoir un pas qui correspond a une uniter de mesure 1 steps = 0.005 mm

il y a peux de temps j ai acheter deux autre visse a bille de 2005 de 1300 mm de long pour les axes Y X
https://fr.aliexpress.com/item/Zero...218.html?spm=a2g0s.9042311.0.0.40696c37IkEAEE
je vais reprendre un moteur en plus ca se feras a la vitesse suivant les finances a ma disposition
je vous ferais un résumer en photo est commentaire en partant sans base avec un Arduino
il me resteras a faire le pupitre de commande et configurer le programme
avec trois Arduino est trois drivers un pour chaque axe est au cas pouvoir passer
en cnc avec ma fraiseuse avec un seul Arduino avec le programme MultiCN de CNCSERV
c est le meme branchement sur un nema 23.ou 34

je vais passer mon diviseur semi universel avec le nema 23 avec
un encodeur incremental 2500 pas que je viens de commander
UC  arduino pour la  Commande numerique  Nema_310
UC  arduino pour la  Commande numerique  Mnama-10
UC  arduino pour la  Commande numerique  Img_2397

a plus


Dernière édition par faux jetons le Jeu 9 Nov - 9:49, édité 1 fois
faux jetons
faux jetons
posteur Régulier
posteur Régulier

Messages : 155
Points : 187
Date d'inscription : 04/02/2023
Age : 63
Localisation : aquitaine 33220

Revenir en haut Aller en bas

UC  arduino pour la  Commande numerique  Empty Re: UC arduino pour la Commande numerique

Message  faux jetons Jeu 9 Nov - 9:27

salut
j ai fait des essais avec l encodeur incremental 400 pas que j ai
avec une code Basic
j arrive a visualiser le fonctionnement
j ai commander un a 2500 pas

essai encodeur incremental

Code:
#include <Wire.h>
#include <RotaryEncoder.h>
#include <LiquidCrystal_I2C.h>         
#include <Keypad.h>

LiquidCrystal_I2C lcd(0x3f,20,4);                                  // Réglez adresse de l ecran LCD 0x27 / 0x3f  affichage 20 caractères et 4 lignes


const byte ROWS = 4;                                                //  la configuration du clavier
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'.','0','#','D'}
};

byte rowPINS[ROWS] = {11,10,9,8};                                  // le numéro de la broche ranger relier du clavier a uno
byte colPINS[COLS] = {7,6,5,4};                                    // le numéro de la broche colonnes relier du clavier a uno

Keypad kpd = Keypad(makeKeymap(keys),rowPINS,colPINS, ROWS, COLS);

RotaryEncoder encoder(A3, A4);                // Setup a RoraryEncoder for pins A3 and A4:

void setup()
{
lcd.init();
lcd.backlight();
lcd.begin(20,4);                            // initialize the lcd
lcd.setBacklight(1);  lcd.print("Rotator LCD");
}                                           

void loop()                                        // Read the current position of the encoder and print out when changed.
{
static int pos = 0;
encoder.tick();

int newPos = encoder.getPosition();
if (pos != newPos) {

lcd.setCursor(0, 1);    lcd.print(newPos);    lcd.print(" ");
 
pos = newPos;
  }                                               
}


a plus
faux jetons
faux jetons
posteur Régulier
posteur Régulier

Messages : 155
Points : 187
Date d'inscription : 04/02/2023
Age : 63
Localisation : aquitaine 33220

Revenir en haut Aller en bas

UC  arduino pour la  Commande numerique  Empty Re: UC arduino pour la Commande numerique

Message  faux jetons Jeu 9 Nov - 9:51

salut
apres avoir regardez et compris le fonctionnement
du programme sur d autre forum

https://www.cnczone.com/forums/arduino/215402-cnc-5.html#post1796162
https://www.homemodelenginemachinis...or-a-3-rotary-table.25783/page-5#post-291671

j ai enlever certaine option
inserrer un joystick
fait un programme pour clavier 4 x 4

Code:
 const byte ROWS = 4;                                                //  la configuration du clavier
    const byte COLS = 4;
    char keys[ROWS][COLS] = {
    {'1','2','3','A'},
    {'4','5','6','B'},
    {'7','8','9','C'},
    {'.','0','#','D'}
    };

    byte rowPINS[ROWS] = {11,10,9,8};                                  // le numéro de la broche ranger relier du clazvier a uno
    byte colPINS[COLS] = {4,5,6,7};                                    // le numéro de la broche colonnes relier du clazvier a uno

fait un programme pour clavier 4 x 5 il y a que cela qui change
Code:
  const byte ROWS = 5;                                                //  la configuration du clavier
    const byte COLS = 4;
 
    char keys[ROWS][COLS] = {
  {'A','F','#','.'},
  {'1','2','3','H'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'G','0','D','E'}
  };

    byte rowPINS[ROWS] = {11,10,9,8,7};                                  // le numéro de la broche ranger relier du clazvier a uno
    byte colPINS[COLS] = {3,4,5,6};                                    // le numéro de la broche colonnes relier du clazvier a uno

le programme complet pour un plateaux diviseur circulaire 1/90
Code:
 #include <AxisJoystick.h>
    #include <Arduino.h>
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <Keypad.h>
    #include <AccelStepper.h>

    LiquidCrystal_I2C lcd(0x27,20,4);                                   // Réglez adresse de l ecran LCD 0x27 / 0x3f  affichage 20 caractères et 4 lignes

    
    const byte ROWS = 4;                                                 //  la configuration du clavier
    const byte COLS = 4;
    char keys[ROWS][COLS] = {
    {'1','2','3','A'},
    {'4','5','6','B'},
    {'7','8','9','C'},
    {'.','0','#','D'}
    };

    byte rowPINS[ROWS] = {11,10,9,8};                                   // le numéro de la broche ranger relier du clazvier a uno
    byte colPINS[COLS] = {4,5,6,7};                                     // le numéro de la broche colonnes relier du clazvier a uno

    Keypad kpd = Keypad(makeKeymap(keys),rowPINS,colPINS, ROWS, COLS);

    


    int buttonState = 0;                                                // variable pour lire l'état du bouton-rotation a A0  
    const byte motorSpeedPin = 12;                                      // Définition des broches driver pour le joystick
    const byte motorDirPin = 13;
    const int pull = 12;                                                // connecter a la broche 12 a pull+
    const int dir = 13;                                                 // connectez la broche 13 à dir+
    const int Multiplier = 100;                                         // nema 23  = 800 rapport 1/90=360 degrees = 288000 steps / 3200  steps = 1 tour moteur / 800  steps  = 1 Degrees        
    float Degrees = 0;                                                  // Degrés d'entrée série  nema 34 = 100 rapport  1/90 = 360 degrees = 36000 steps / 400 steps = 1 tour moteur / 100  steps  = 1 Degrees            
    float ToMove = 0;                                                   // Étapes à suivre=    nema 34 + 1/36 = 1600 rapport 1/40 = 360 degrees = 576000 steps / 14400 steps = 1 tour moteur / 1600  steps  = 1 Degrees
    float bob = 0;
    float Divisions;
    float current = 0;
    int Mode = 0;
    int speed = 0;                                                      // lire depuis le potentiomètre
    int maxspeed = 8000;                                                // vitesse maximale du drivers
    int stepspeed = 8000;                                                // vitesse en pas par seconde
    byte percentage = 100;                                              // vitesse% sur LCD
    AccelStepper stepper(1, pull, dir);                                 // (mode:1 = driver)

                                                                        // configuration joystick
    const byte joyStickPinX = A1;                                       // Définition axes X joystick
    const byte joyStickPinY = A2;                                       // Définition axes y joystick joystick
    const byte joyStickPinSW = 2;                                       // Définition bouton centrale

    int joyValue = 127;                                                   //Joystick input variables
    int joyValueMax = 1023;                                              // valeur maxi
    int joyValueMin = 0;                                                 // valeur mini
    int joyValueMid = 512;                                               // valeur au point centrale
    int joyValueMidUpper = joyValueMid + 50;                             // valeur signée de + 462 à + 562
    int joyValueMidLower = joyValueMid - 50;                             // valeur signée  

    byte motorSpeed = 0;                                                // motor joystick variables
    byte motorSpeedMax = 255;                                           // motor joystick variables
    byte motorSpeedMin = 51;                                             // motor joystick variables

    unsigned long startDelay;
  
    int tempo = 6;

    void setup()
    {
    lcd.init();                                                         // initialiser le lcd
    pinMode(pull, OUTPUT);
    pinMode(dir, OUTPUT);
    pinMode(A0, INPUT);                                                 // initialiser le potentiomètre
    Serial.begin(9600);

    stepper.setMaxSpeed(maxspeed);                                      // vitesse maximale du Moteur
    stepper.setSpeed(stepspeed);                                        // vitesse pas à pas
    stepper.setAcceleration(100);                                       // accélération pas à pas: pas nécessaire
    stepper.setCurrentPosition(0);                                      // position actuelle du Moteur

    pinMode(joyStickPinX, INPUT);
    pinMode(motorSpeedPin, OUTPUT);
    pinMode(motorDirPin, OUTPUT);
    startDelay = millis();
  
    lcd.backlight();                                                    //  efface ecran LCD noir                                              
    lcd.setCursor(0,0);  lcd.print(" Plateau    Rotatif ");             //  message bienvenue sur ecran LCD  tableaux  1 eme affichage
    lcd.setCursor(0,1);  lcd.print(" Diviseur Universel ");    
    lcd.setCursor(0,2);  lcd.print(" Usinage  De Formes ");
    lcd.setCursor(0,3);  lcd.print(" Rapport 90/1 = 360 ");             //  affichage de la configuration du rapport de division  
    delay(2000);
    lcd.begin(20,4);

    Mode = GetMode();
    }

    void software_Reset()                                               //Redémarre le programme depuis le début mais ne réinitialise pas les périphériques et les registres
    {
    asm volatile ("  jmp 0");
    }

    float GetNumber()                                                   // selection  degrees   .00  
    {
    float num = 0.000;
    float decimal = 0.000;
    float decnum = 0.000;
    int counter = 0;
    char key = kpd.getKey();      
    lcd.setCursor(0,0);   lcd.print(" Enter Degrees  .00 ");                 // demande de selection  
    lcd.setCursor(0,1);   lcd.print(" Puis Appuyez Sur # ");            // marche a suivre
    lcd.setCursor(0,2);   lcd.print("       Mode Joystick");
    lcd.setCursor(0,3);   lcd.print(" Reinitialiser  = D ");            // revenir a l ecran de presentation
    lcd.setCursor(0,2);                                                 // affichage nselection la 3 case 3 lignes
    bool decOffset = false;

    while(key != '#')                                                   //  valider ce chois                      
    {
    switch (key)
    {
    case NO_KEY:                                                        // affichage selection des numeros sur le clavier
    break;
 
    case '.':
    if(!decOffset)
    {
    decOffset = true;
    }
    lcd.print(key);                                                     // affichage selection des numeros sur le clavier
    break;
  
    case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
    
    if(!decOffset)
    {
    num = num * 10 + (key - '0');
    lcd.print(key);
    }
    else if((decOffset) && (counter <= 1))
    {
    num = num * 10 + (key - '0');
    lcd.print(key);
    counter++;
    }
    break;

    case 'D':                                                            //  Reinitialiser  revenir a l ecran de presentation
    software_Reset();
    break;
    }

    decnum = num / pow(10, counter);
    key = kpd.getKey();                                                 // fin configuration rotation
      
    joyValue = analogRead(joyStickPinX);                                  //joyValue = analogRead(joyStickPinY);
        
    if(joyValue > joyValueMidUpper)                                     //Forward
    {
    motorSpeed = map(joyValue, joyValueMidUpper, joyValueMax, motorSpeedMin, motorSpeedMax);
    MotorForward(motorSpeed);
    }
    else if(joyValue < joyValueMidLower)                                //Backward
    {
    motorSpeed = map(joyValue, joyValueMidLower, joyValueMin, motorSpeedMin, motorSpeedMax);
    MotorBackward(motorSpeed);
    }
    else
    {
    MotorStop();
    }
 
    }
    return decnum;
    }
    float Getjogging()                                                  // selection  Jogging  
    {
    float Degrees = 0;
    float num = 0.000;
    char key = kpd.getKey();
    lcd.clear();
    lcd.setCursor(0,0);  lcd.print(" Enter Degree A B C ");
    lcd.setCursor(0,1);  lcd.print(" A 20 B 45 C 90 Jog ");
    lcd.setCursor(0,2);  lcd.print("       Mode Joystick");
    lcd.setCursor(0,3);  lcd.print("OK #");     lcd.print(" Reinitialiser D");  // revenir a l ecran de presentation
    while(key != '#')
    {
    switch (key)
    {
    case NO_KEY:
    break;
    case 'A':
    Degrees = 20;      
    lcd.setCursor(0,2);lcd.print(Degrees);
    break;
    case 'B':
    Degrees = 45;
    lcd.setCursor(0,2);lcd.print(Degrees);
    break;
    case 'C':
    Degrees = 90;
    lcd.setCursor(0,2);lcd.print(Degrees);
    break;
    case 'D':                                                           // Reinitialiser  revenir a l ecran de presentation
    software_Reset();
    break;  
    }
    key = kpd.getKey();
  
    joyValue = analogRead(joyStickPinX);                                  //joyValue = analogRead(joyStickPinY);    
        
    if(joyValue > joyValueMidUpper)                                     //Forward
    {
    motorSpeed = map(joyValue, joyValueMidUpper, joyValueMax, motorSpeedMin, motorSpeedMax);
    MotorForward(motorSpeed);
    }
    else if(joyValue < joyValueMidLower)                               //Backward
    {
    motorSpeed = map(joyValue, joyValueMidLower, joyValueMin, motorSpeedMin, motorSpeedMax);
    MotorBackward(motorSpeed);
    }
    else
    {
    MotorStop();
    }
  
    }
  
    return Degrees;
    }

    float GetDivisions()                                               // selection  Divisions                                        
    {
    float Degrees = 0;
    float num = 0.000;
    char key = kpd.getKey();      
    lcd.clear();
    lcd.setCursor(0,0);   lcd.print(" Enter Divisions Nbs");           // demande de selection du chois  
    lcd.setCursor(0,1);   lcd.print(" Valider Appuyez  # ");           // marche a suivre
    lcd.setCursor(0,2);   lcd.print("       Mode Joystick");
    lcd.setCursor(0,3);   lcd.print(" Reinitialiser  = D ");           // revenir a l ecran de presentation  
    lcd.setCursor(0,2);
    while(key != '#')                                                  //  valider ce chois                      
    {
    switch (key)
    {
    case NO_KEY:                                                       // affichage selection des numeros sur le clavier
    break;

    case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
    num = num * 10 + (key - '0');
    lcd.print(key);
    break;

    case 'D':                                                          //  Reinitialiser  revenir a l ecran de presentation  
    software_Reset();
    break;
    }
    key = kpd.getKey();                                                // fin configuration rotation
      
    joyValue = analogRead(joyStickPinX);                                  //joyValue = analogRead(joyStickPinY);
        
    if(joyValue > joyValueMidUpper)                                    //Forward
    {
    motorSpeed = map(joyValue, joyValueMidUpper, joyValueMax, motorSpeedMin, motorSpeedMax);
    MotorForward(motorSpeed);
    }
    else if(joyValue < joyValueMidLower)                               //Backward
    {
    motorSpeed = map(joyValue, joyValueMidLower, joyValueMin, motorSpeedMin, motorSpeedMax);
    MotorBackward(motorSpeed);
    }
    else
    {
    MotorStop();
    }
 
    }
    return num;
    }

    int Rotation()                                                     // selection Rotation                                                  
    {
    int num = 0;
    char key = kpd.getKey();  
    lcd.clear();
    lcd.setCursor(0,0);    lcd.print(" Entrez Nombre Tours");          // demande de selection du nombre  et marche a suivre
    lcd.setCursor(0,1);    lcd.print(" Valider Appuyez  # ");          // demande de marche a suivre sur ecran LCD
    lcd.setCursor(0,2);    lcd.print("       Mode Joystick");
    lcd.setCursor(0,3);    lcd.print(" Reinitialiser  = D ");          //  Reinitialiser  revenir a l ecran de presentation
    lcd.setCursor(0,2);

    while(key != '#')                                                  //  valider ce chois                      
    {
    switch (key)
    {
    case NO_KEY:                                              
    break;

    case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
    num = num * 10 + (key - '0');
    lcd.print(key);
    break;
 
    case 'D':                                                          //  Reinitialiser  revenir a l ecran de presentation  
    software_Reset();
    break;
    }
    key = kpd.getKey();                                                // fin configuration rotation
      
    joyValue = analogRead(joyStickPinX);                                  //joyValue = analogRead(joyStickPinY);
        
    if(joyValue > joyValueMidUpper)                                    //Forward
    {
    motorSpeed = map(joyValue, joyValueMidUpper, joyValueMax, motorSpeedMin, motorSpeedMax);
    MotorForward(motorSpeed);
    }
    else if(joyValue < joyValueMidLower)                               //Backward
    {
    motorSpeed = map(joyValue, joyValueMidLower, joyValueMin, motorSpeedMin, motorSpeedMax);
    MotorBackward(motorSpeed);
    }
    else
    {
    MotorStop();
    }
 
    }

    return num;
    }
    int GetMode()
    {            
    int mode = 0;                                                      // tableaux presentation 2 eme affichage
    lcd.setCursor(0,0);  lcd.print(" Degrees   /  360 A ");
    lcd.setCursor(0,1);  lcd.print(" Division  /  360 B ");            // affichage selection du mode  
    lcd.setCursor(0,2);  lcd.print(" Jogging 20 45 90 C ");
    lcd.setCursor(0,3);  lcd.print(" Rotation Nbs 360 D ");
  
    while(mode == 0)
    {
    char key = kpd.getKey();
    if(key == 'A')                                                     //   degres minutes
    {
    mode = 1;
    }
    if(key == 'B')                                                     //  mode  diviseur    
    {
    mode = 2;
    }
    if(key == 'C')                                                     //  Rotation Jogging  
    {
    mode = 3;
    }
    if(key == 'D')                                                     //  Nbr Rotation *360
    {
    mode = 4;
    }
    }

    lcd.clear();
    return mode;
    }
    void loop()                                                        // affichage selection du chois
    {
    if(Mode == 1)                                                      // chois 1 en nombres  de degres et minute  = 60 ou radians = 100      
    {
    Degrees = GetNumber();
    }
   if(Mode == 2)                                                      // chois 2 divisions  
    {
    Divisions = GetDivisions();
    Degrees = (360/Divisions);
    }
    if(Mode == 3)                                                      // chois 3 jogging
    {
    Degrees = Getjogging();
    }
    if(Mode == 4)                                                      // chois 4 en nombres de rotations
    {
    Degrees = (Rotation()*360);
    }
    lcd.clear();
    lcd.setCursor(7,0);  lcd.print("Total");                          // operation du total   400 steps =  1 degrees
    lcd.setCursor(0,3);  lcd.print(" Av+ A Ar- B Chan C ");           // affichage selection du chois 4 eme ligne sur ecran LCD
    char key = kpd.getKey();
    while(key != 'C')                                                  // retourne aao chois
    {
    
    speed = analogRead(A0);
    stepspeed = map(speed,0,1023,1,maxspeed);
    percentage = map(speed,0,1023,1,100);
    stepper.setSpeed(stepspeed);
    lcd.setCursor(0,0);    lcd.print(abs(Degrees),2);   lcd.print((char)223);  //  affichage du point
    lcd.setCursor(13,0);   lcd.print(bob,5);            lcd.print("       ");  //(bob)   affichage resultat des degrees(bob,1) = 0.0 (bob,5) = 0.00000 evite l echo
    lcd.setCursor(0,1);    lcd.print("Steps");                                 //  affichage des degres  2 eme lignes sur ecran LCD
    lcd.setCursor(10,1);   lcd.print("Speed:");                                // affichage de la vitesse en % 2 eme lignes sur ecran LCD
    lcd.setCursor(16,1);   lcd.print("   ");                                                                    
    lcd.setCursor(16,1);   lcd.print(percentage);       lcd.print("%");      
    lcd.setCursor(0,2);    lcd.print("");               lcd.print(ToMove,0);   // ligne affichage du nombres de steps
    key = kpd.getKey();
    
    if(key == 'A')                                                     //  valider ce chois
    {
    if(current + Degrees <= 360)
    {
    current = ((stepper.currentPosition()/ Multiplier) + Degrees);
    }
    else
    {
    current = (stepper.currentPosition()/ Multiplier) + Degrees-360;
    }
    
    bob = bob + Degrees;
    ToMove = (Degrees*Multiplier)*+1;
    stepper.move(ToMove);
    Serial.println(ToMove);
    stepper.setSpeed(stepspeed);
    Serial.println(stepper.speed());
    lcd.setCursor(0,2);
    }
      
    else if(key == 'B')                                                // rotation en sens inverse anti horaire
    {
    if(current - Degrees >= 0)
    {
    current = ((stepper.currentPosition()/ Multiplier) - Degrees);
    }
    else
    {
    current = (stepper.currentPosition()/ Multiplier) - Degrees + 0;
    }
    bob = bob - Degrees;
    ToMove = (Degrees*Multiplier)*-1;                                  //  le resultat de l operation en negatif
    stepper.move(ToMove);                                              // stepper = en mouvement pas a pas  
    Serial.println(ToMove);
    stepper.setSpeed(-stepspeed);
    Serial.println(stepper.speed());
    lcd.setCursor(0,2);                                               // affichage moteur en rotation 3 eme lignes 8/20 letres sur ecran LCD
    }
  
    if (buttonState == LOW) {
    lcd.setCursor(8,2);   lcd.print("En Rotation ");                  //  affichage 3 eme lignes En Rotation
                                        
    while (stepper.distanceToGo() != 0)
    {
    stepper.runSpeedToPosition();
    }    lcd.setCursor(0,2);   lcd.print("                    ");
       }
     }
    lcd.clear();                                                       // fin de l affichage 3 eme lignes En mouvement
    }

   void MotorBackward( byte Spd)
    {
    digitalWrite (motorDirPin, 1);
 
    if (millis() >= startDelay + (2400/Spd)-10)
    {  digitalWrite (motorSpeedPin, 1);
    if (millis() >= tempo + startDelay + (255/Spd)-15)
    {digitalWrite (motorSpeedPin, 0);
     startDelay = millis();                                            // on mémorise le temps courant du chrono    
       }
      }
    }

    void MotorForward( byte Spd)
    {
    digitalWrite (motorDirPin, 0);
 
    if (millis() >= startDelay + (2400/Spd)-10)
    {  digitalWrite (motorSpeedPin, 1);
    if (millis() >= tempo + startDelay + (255/Spd)-15)
    {digitalWrite (motorSpeedPin, 0);
    startDelay = millis();                                             // on mémorise le temps courant du chrono    
         }
      }
    }

    void MotorStop()
    {
    }


j ai fait un montage a blanc qui fonctionne
UC  arduino pour la  Commande numerique  Img_2398
UC  arduino pour la  Commande numerique  Img_2399

a plus


Dernière édition par faux jetons le Jeu 9 Nov - 9:56, édité 1 fois (Raison : ux cir)
faux jetons
faux jetons
posteur Régulier
posteur Régulier

Messages : 155
Points : 187
Date d'inscription : 04/02/2023
Age : 63
Localisation : aquitaine 33220

Revenir en haut Aller en bas

UC  arduino pour la  Commande numerique  Empty Re: UC arduino pour la Commande numerique

Message  faux jetons Jeu 9 Nov - 12:33

salut
je viens de metre en boite un premier montage

avec une alimentation 24 volts 10 ampères que j ai dépiauter
pour gagner de la hauteur dans un boitier de 160 x 240 x 90

avec une plaque de font visser au boitier pour fixer le montage dessus

deux oméga fixer sur la plaque qui passe par dessus de l alimentation
pour y fixer dessus le divers est l arduino

dans le couvercle l écran un potentiomètre est un manette de jeux
j ai fat la configuration pour le diviseur circulaire 1/90 qui fonctionne
je vais pouvoir faire avec la couronnes du réducteur planétaire

j ai mis une protection avec un films de plastic mous
sur le boitier et le moteur pour éviter les projection

il me reste a tailler les outils pour usiner la couronne
UC  arduino pour la  Commande numerique  Img_2400
UC  arduino pour la  Commande numerique  Img_2401


a plus
faux jetons
faux jetons
posteur Régulier
posteur Régulier

Messages : 155
Points : 187
Date d'inscription : 04/02/2023
Age : 63
Localisation : aquitaine 33220

Revenir en haut Aller en bas

UC  arduino pour la  Commande numerique  Empty Re: UC arduino pour la Commande numerique

Message  faux jetons Jeu 9 Nov - 12:53

salut
apres avoir fait un montage
pour passer un plateaux circulaire
en commande numerique
UC  arduino pour la  Commande numerique  Img_2402

ca donne ca en video

essai de l encodeur avec un moteur nema 23 avec l affichage
essai de l encodeur avec un moteur nema 23 avec l affichage

vous avez rien remarquer de bizarres ??

j ai penser de joindre un afficheur sur le pupitre de commande les composents pour ce boitier il y en a pour +/- 300 €
UC  arduino pour la  Commande numerique  Img_2410


j ai refait montage avec une partie de l ancien qui fonctionne
UC  arduino pour la  Commande numerique  Img_2404
UC  arduino pour la  Commande numerique  Img_2407
UC  arduino pour la  Commande numerique  Img_2408
UC  arduino pour la  Commande numerique  Img_2409

le montage en video pour comprendre
plateaux diviseur circulaire de 150 mm  1/90
plateaux diviseur circulaire de 150 mm  1/90

a plus


Dernière édition par faux jetons le Lun 13 Nov - 20:34, édité 1 fois
faux jetons
faux jetons
posteur Régulier
posteur Régulier

Messages : 155
Points : 187
Date d'inscription : 04/02/2023
Age : 63
Localisation : aquitaine 33220

Revenir en haut Aller en bas

UC  arduino pour la  Commande numerique  Empty Re: UC arduino pour la Commande numerique

Message  KOKO 57 Jeu 9 Nov - 15:37

Salut Faux jetons.....................tu as l'air de bien t amuser,travail de ouf What a Face chapeau

Cool
KOKO 57
KOKO 57
complétement accro
complétement accro

Messages : 9671
Points : 10613
Date d'inscription : 05/05/2015
Age : 57
Localisation : Moselle (57)

Revenir en haut Aller en bas

UC  arduino pour la  Commande numerique  Empty Re: UC arduino pour la Commande numerique

Message  Philippe_555 Mer 15 Nov - 20:42

On peut parfois se demander pourquoi ils ont inventé la ponctuation, les majuscules, les capitales, les points…
Philippe_555
Philippe_555
petit nouveau
petit nouveau

Messages : 34
Points : 36
Date d'inscription : 30/11/2017
Age : 64
Localisation : France

Revenir en haut Aller en bas

UC  arduino pour la  Commande numerique  Empty Re: UC arduino pour la Commande numerique

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum