Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Benoit92

Pages: 1 ... 9 10 [11] 12 13 14
151
Bibliothèques / Fast PWM et phase correct PWM
« le: octobre 27, 2017, 08:40:33 pm »
J'ai vu que l'on pouvait modifier la fréquence de récurrence  du PWM.
Par exemple, le Timer 2 peut modifier  la fréquence de récurrence  du PWM sur les broches 3 et 11.
//TCCR2B = TCCR2B & B11111000 | B00000001;    // set timer 2 divisor to     1 for PWM frequency of 31372.55 Hz
//TCCR2B = TCCR2B & B11111000 | B00000010;    // set timer 2 divisor to     8 for PWM frequency of  3921.16 Hz
//TCCR2B = TCCR2B & B11111000 | B00000011;    // set timer 2 divisor to    32 for PWM frequency of   980.39 Hz
  TCCR2B = TCCR2B & B11111000 | B00000100;    // set timer 2 divisor to    64 for PWM frequency of   490.20 Hz
//TCCR2B = TCCR2B & B11111000 | B00000101;    // set timer 2 divisor to   128 for PWM frequency of   245.10 Hz
//TCCR2B = TCCR2B & B11111000 | B00000110;    // set timer 2 divisor to   256 for PWM frequency of   122.55 Hz
//TCCR2B = TCCR2B & B11111000 | B00000111;    // set timer 2 divisor to  1024 for PWM frequency of    30.64 Hz
Question :
Ces fréquences correspondent t-il à un :
 - mode « Fast PWM Mode »
ou à un
 - mode « Phase Correct PWM Mode »
?????????

152
Bibliothèques / Re : Bibliothèque Nmra.Dcc.h
« le: octobre 26, 2017, 10:42:33 pm »
Bon, maintenant, je vais cesser de travailler uniquement sur la fameuse pin 13.
C'est l'heure de faire la lettre au Père Noël :

 - Digital : Eclairage  Cabine (et tableau de bord) ---> Digital pin 2

 - Digital : Eclairage  Feux en marche AV (4diodes  : 2 blanches + 2 rouges) - ce sont des diodes à 3 pattes blanche/rouge ---> Digital pin 4

 - Digital pin 7 : Eclairage variable Feux  en marche AR (4diodes : 2 rouges+ 2 blanches) --> Digital pin 7

 - PWM : Servo Attelage arrière ( à l'avant je mettrais un attelage à vis) ----> Digital Pin 9 (PWM)

 - PWM : Servo pantographe AV----> Digital Pin 5 (PWM)

 - PWM : Servo pantographe AR----> Digital Pin 6 (PWM)

 - PWM : Moteurs (2 moteurs 12V en série) ---> Digital Pin 3 (PWM)

 - Tx/ Rx : Module de son Serialmp3player Digital Pin 0 (Rx) et Digital Pin 1 (Tx)

+ le prescaler TIMER 2 du PWM Moteurs sera modifié suivant la techno des moteurs. A noter que la modification du prescaler modifie en fait 2¨PWM (pin 3 et 11).

+ gestion des taux d'accélération et de décélération par :
1)    une interruption interne "Timer 1" ??) pour éviter que l'Arduino ne  perde du temps à incrémenter ou décrémenter la vitesse ?????
2)   avec avec la fonction milli () ??????




153
Débuter / Re : Acheter des composants en Chine
« le: octobre 26, 2017, 04:17:54 pm »
Il est clair qu'il vaut les tester avant de les monter.
Aujourd'hui, je pense que ces composants basiques viennent tous du même endroit : Chine, Singapour, . . ;

154
Débuter / Re : Acheter des composants en Chine
« le: octobre 26, 2017, 01:01:37 pm »
Sur Aliexpress, par exemple, 50 x 7805 pour 4,76 € (port compris) délai 14-17 jours.

155
Bibliothèques / Re : Bibliothèque Nmra.Dcc.h
« le: octobre 26, 2017, 12:13:31 am »
Je crois qu'il ne faut pas de spécifier le numéro de pin (13)
Soit :
   obj_pantographe.detach();   

Là, le compilo ne me jette pas

156
Bibliothèques / Re : Bibliothèque Nmra.Dcc.h
« le: octobre 25, 2017, 11:57:49 pm »
Voila .
#include <NmraDcc.h>
#include <Servo.h>
#include <PWMFreq.h>

#define This_Decoder_Address 3

struct CVPair
{
  uint16_t  CV;
  uint8_t   Value;
};

CVPair FactoryDefaultCVs [] =
{
// The CV Below defines the Short DCC Address
  {CV_MULTIFUNCTION_PRIMARY_ADDRESS, This_Decoder_Address},

  // These two CVs define the Long DCC Address
  {CV_MULTIFUNCTION_EXTENDED_ADDRESS_MSB, 0},
  {CV_MULTIFUNCTION_EXTENDED_ADDRESS_LSB, This_Decoder_Address},

// ONLY uncomment 1 CV_29_CONFIG line below as approprate
//  {CV_29_CONFIG,                                      0}, // Short Address 14 Speed Steps
  {CV_29_CONFIG,                       CV29_F0_LOCATION}, // Short Address 28/128 Speed Steps

//  {CV_29_CONFIG, CV29_EXT_ADDRESSING | CV29_F0_LOCATION}, // Long  Address 28/128 Speed Steps 
};

//xxxxxxxxxxxxxxxxxxxxxxxxxxxx
//  Début Essai Sens des feux
//xxxxxxxxxxxxxxxxxxxxxxxxxxxx
//    const int FEUX = 13;
//xxxxxxxxxxxxxxxxxxxxxxxxxxxx
//   Fin Essai Sens des feux
//xxxxxxxxxxxxxxxxxxxxxxxxxxx



//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//   Début Essai Eclairage cabine F0
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//     const int ECLAIRAGE_CABINE = 13;
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//   Fin Essai Eclairage cabine
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx



//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
//   Début Essai Servo pantographe
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
        Servo obj_panthographe;
        unsigned int signal = 0; // permet de gérer le front montant-descendant de la commande de levée-descente des pantographes
        unsigned int signalPrec = 0; // permet de gérer le front montant-descendant de la commande de levée-descente des pantographes

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
//   Fin Essai Servo pantographe
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 


NmraDcc  Dcc ;

uint8_t FactoryDefaultCVIndex = 0;

// Uncomment this line below to force resetting the CVs back to Factory Defaults
// FactoryDefaultCVIndex = sizeof(FactoryDefaultCVs)/sizeof(CVPair);

void notifyCVResetFactoryDefault()
{
  // Make FactoryDefaultCVIndex non-zero and equal to num CV's to be reset
  // to flag to the loop() function that a reset to Factory Defaults needs to be done
  FactoryDefaultCVIndex = sizeof(FactoryDefaultCVs)/sizeof(CVPair);
};

// Uncomment the #define below to print all Speed Packets
#define NOTIFY_DCC_SPEED
#ifdef  NOTIFY_DCC_SPEED
void notifyDccSpeed( uint16_t Addr, DCC_ADDR_TYPE AddrType, uint8_t Speed, DCC_DIRECTION Dir, DCC_SPEED_STEPS SpeedSteps )
{
  Serial.print("notifyDccSpeed: Addr: ");
  Serial.print(Addr,DEC);
  Serial.print( (AddrType == DCC_ADDR_SHORT) ? "-S" : "-L" );
  Serial.print(" Speed: ");
  Serial.print(Speed,DEC);
  Serial.print(" Steps: ");
  Serial.print(SpeedSteps,DEC);
  Serial.print(" Dir: ");
  Serial.println( (Dir == DCC_DIR_FWD) ? "Forward" : "Reverse" );
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//   Début Essai Sens des feux
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//     pinMode( FEUX, OUTPUT );
//       if( Dir == 1)
//          digitalWrite( FEUX, HIGH );
//      else
//          digitalWrite( FEUX, LOW );
//xxxxxxxxxxxxxxxxxxxxxxxxxxx
//   Fin Essai Sens des feux
//xxxxxxxxxxxxxxxxxxxxxxxxxxx


//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   
//   Début Essai Gestion vitesse (en cours)
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   
//setPWMFrequency(PINS_3_11, PWM_125); // 4k, 1k, 500, 250, 125, 30
//int pin1Moteur1=12; //cmd 1 du moteur 1
//int pin2Moteur1=8; // cmd 2 du moteur 1
//int pinPWMoteur1=3;// PMM du moteur 1
//int pin1Moteur2=2;//  cmd 1 du moteur 2
//int pin2Moteur2=4;//  cmd 2 du moteur 2
//int pinPWMoteur2=11;//  PWM du moteur 2
//
//pinMode( pin1Moteur1, OUTPUT );
//pinMode( pin2Moteur1, OUTPUT );
//pinMode( pinPWMoteur1, OUTPUT );
//pinMode( pin1Moteur2, OUTPUT );
//pinMode( pin2Moteur2, OUTPUT );
//pinMode( pinPWMoteur2, OUTPUT );
//
//int SpeedPrec
//       
//       if( (Speed)== 0)  //     Arret urgence
//          {
//            analogWrite(pinPWMoteur1,LOW);//Mettre moteur à 0
//            analogWrite(pinPWMoteur2,LOW);
//            digitalWrite(pin1Moteur1,LOW);
//            digitalWrite(pin2Moteur1,LOW);
//            digitalWrite(pin1Moteur2,LOW);
//            digitalWrite(pin2Moteur2,LOW);           
//          }
//        else
//      if(Speed != SpeedPrec)    // Détection changement vitesse (à partir du potentiomêtre MS2)
// {
//           if( (Dir)== 1)  // sens de marche avant
//          {
//            digitalWrite(pin1Moteur1,HIGH);
//            digitalWrite(pin2Moteur1,LOW);
//            digitalWrite(pin1Moteur2,HIGH);
//            digitalWrite(pin2Moteur2,LOW);
//            analogWrite(pinPWMoteur1,Speed);
//            analogWrite(pinPWMoteur2,Speed);
//           
//            for (pos =SpeedPrec; pos <= Speed; pos++)
//          }
//            else
//            if( (Dir)== 0)  // sens de marche arrière
//          {
//
//              digitalWrite(pin1Moteur1,LOW);
//              digitalWrite(pin2Moteur1,HIGH);
//              digitalWrite(pin1Moteur2,LOW);
//              digitalWrite(pin2Moteur2,HIGH);
//              analogWrite(pinPWMoteur1,Speed);
//              analogWrite(pinPWMoteur2,Speed);         
// }
//         SpeedPrec = Speed; // Détection changement vitesse

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//   Fin Essai Gestion vitesse (en cours)
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


};
#endif

// Uncomment the #define below to print all Function Packets
#define NOTIFY_DCC_FUNC
#ifdef  NOTIFY_DCC_FUNC
void notifyDccFunc(uint16_t Addr, DCC_ADDR_TYPE AddrType, FN_GROUP FuncGrp, uint8_t FuncState)
{
  Serial.print("notifyDccFunc: Addr: ");
  Serial.print(Addr,DEC);
  Serial.print( (AddrType == DCC_ADDR_SHORT) ? 'S' : 'L' );
  Serial.print("  Function Group: ");
  Serial.print(FuncGrp,DEC);

  switch( FuncGrp )
   {
#ifdef NMRA_DCC_ENABLE_14_SPEED_STEP_MODE   
     case FN_0:
       Serial.print(" FN0: ");
       Serial.println((FuncState & FN_BIT_00) ? "1  " : "0  ");
       break;
#endif
 
     case FN_0_4:
       if(Dcc.getCV(CV_29_CONFIG) & CV29_F0_LOCATION) // Only process Function 0 in this packet if we're not in Speed Step 14 Mode
       {
         Serial.print(" FN 0: ");
         Serial.print((FuncState & FN_BIT_00) ? "1  ": "0  ");
         
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   
//   Début Essai Eclairage cabine F0
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   
//         Serial.print("FuncState:");
//         Serial.print(FuncState);
//         Serial.print("FN_BIT_00:");
//         Serial.print(FN_BIT_00);
//         
//     pinMode( ECLAIRAGE_CABINE, OUTPUT );
//       if( (FuncState && FN_BIT_00) == 1)
//          digitalWrite( ECLAIRAGE_CABINE, HIGH );
//      else
//          digitalWrite( ECLAIRAGE_CABINE, LOW );
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//   Fin Essai Eclairage cabine F0
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
       }
       
       Serial.print(" FN 1-4: ");
       Serial.print((FuncState & FN_BIT_01) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_02) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_03) ? "1  ": "0  ");
       Serial.println((FuncState & FN_BIT_04) ? "1  ": "0  ");
       
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   
//  Debut Essai Pantographe F01
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   

         Serial.println("FuncState:");
         Serial.println(FuncState);
         Serial.println("FN_BIT_01:");
         Serial.println(FN_BIT_01);
        int pos;

        signal = (FuncState & FN_BIT_01);    // Détection front montant
          Serial.println("signal:");
          Serial.println(signal);
         
      if(signal != signalPrec)    // Détection front montant-descendant
       {
        obj_panthographe.attach(13);
              Serial.println("FuncState1:");
              Serial.println(FuncState & FN_BIT_01);

          if( (signal)== 1)  // Condition MS2-F01 = 1
          {
              for (pos =0; pos <= 255; pos++){  // goes from 0 degrees to 180 degrees in steps of 1 degree
              obj_panthographe.write(pos);              // tell servo to go to position in variable 'pos'
              Serial.print("MONTEE PANTOGRAPHE:");
              Serial.println(pos);
              delay(15);                       // waits 15ms for the servo to reach the position
              }
          }
            else // Condition MS2-F01 == 1
              Serial.print("FuncState0:");
              Serial.println(FuncState);
             
              for (pos =255; pos >= 0; pos--){  // goes from 180 degrees to 0 degrees
              obj_panthographe.write(pos);              // tell servo to go to position in variable 'pos'
              Serial.print("DESCENTE PANTOGRAPHE:");
              Serial.println(pos);
              delay(15);                       // waits 15ms for the servo to reach the position
             }
//          }
       obj_panthographe.detach(13);
       }
         signalPrec = signal; // Détection front montant
 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//  Fin Essai Pantographe F01
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   

       break;

     case FN_5_8:
       Serial.print(" FN 5-8: ");
       Serial.print((FuncState & FN_BIT_05) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_06) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_07) ? "1  ": "0  ");
       Serial.println((FuncState & FN_BIT_08) ? "1  ": "0  ");
       break;
   
     case FN_9_12:
       Serial.print(" FN 9-12: ");
       Serial.print((FuncState & FN_BIT_09) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_10) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_11) ? "1  ": "0  ");
       Serial.println((FuncState & FN_BIT_12) ? "1  ": "0  ");
       break;

     case FN_13_20:
       Serial.print(" FN 13-20: ");
       Serial.print((FuncState & FN_BIT_13) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_14) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_15) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_16) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_17) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_18) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_19) ? "1  ": "0  ");
       Serial.println((FuncState & FN_BIT_20) ? "1  ": "0  ");
       break;
 
     case FN_21_28:
       Serial.print(" FN 21-28: ");
       Serial.print((FuncState & FN_BIT_21) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_22) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_23) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_24) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_25) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_26) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_27) ? "1  ": "0  ");
       Serial.println((FuncState & FN_BIT_28) ? "1  ": "0  ");
       break; 
 
   }
}
#endif

// Uncomment the #define below to print all DCC Packets
#define NOTIFY_DCC_MSG
#ifdef  NOTIFY_DCC_MSG
void notifyDccMsg( DCC_MSG * Msg)
{
  Serial.print("notifyDccMsg: ");
  for(uint8_t i = 0; i < Msg->Size; i++)
  {
    Serial.print(Msg->Data[i], HEX);
    Serial.write(' ');
  }
  Serial.println();
}
#endif

// This function is called by the NmraDcc library when a DCC ACK needs to be sent
// Calling this function should cause an increased 60ma current drain on the power supply for 6ms to ACK a CV Read

const int DccAckPin = 15 ;

void notifyCVAck(void)
{
  Serial.println("notifyCVAck") ;
 
  digitalWrite( DccAckPin, HIGH );
  delay( 8 ); 
  digitalWrite( DccAckPin, LOW );
}


void setup()
{
  Serial.begin(115200);
  Serial.println("NMRA Dcc Multifunction Decoder Demo 1");


   
 
  // Configure the DCC CV Programing ACK pin for an output
  pinMode( DccAckPin, OUTPUT );
  digitalWrite( DccAckPin, LOW );
 
    // Setup which External Interrupt, the Pin it's associated with that we're using and enable the Pull-Up
  Dcc.pin(0, 2, 0);
 
  // Call the main DCC Init function to enable the DCC Receiver
  //Dcc.init( MAN_ID_DIY, 10, CV29_ACCESSORY_DECODER | CV29_OUTPUT_ADDRESS_MODE, 0 );

  Dcc.init( MAN_ID_DIY, 10, FLAGS_MY_ADDRESS_ONLY, 0 );

  // Uncomment to force CV Reset to Factory Defaults
  notifyCVResetFactoryDefault();
}



void loop()
{
  // You MUST call the NmraDcc.process() method frequently from the Arduino loop() function for correct library operation
  Dcc.process();
 
  if( FactoryDefaultCVIndex && Dcc.isSetCVReady())
  {
    FactoryDefaultCVIndex--; // Decrement first as initially it is the size of the array
    Dcc.setCV( FactoryDefaultCVs[FactoryDefaultCVIndex].CV, FactoryDefaultCVs[FactoryDefaultCVIndex].Value);
  }
 
}

157
Bibliothèques / Re : Bibliothèque Nmra.Dcc.h
« le: octobre 25, 2017, 10:41:19 pm »
J'ai changé Servo PANTOGRAPHE; par :
Servo obj_panthographe;

 obj_panthographe.detach(13) -----------> et j'ai le message suivant : no matching function for call to 'Servo::detach(int)'

158
Débuter / Re : Acheter des composants en Chine
« le: octobre 25, 2017, 09:51:17 pm »
Je suis d'accord avec toi.

159
Débuter / Re : Acheter des composants en Chine
« le: octobre 25, 2017, 07:37:45 pm »
Sachant qu'aujourd'hui une majorité de matériel est fabriquée en Chine.
En France, je connaissais PORTESCAPE, mais, c'est pour de applications professionnelles.
Sinon, il reste bien entendu l'Allemagne mais les prix sont WAOUH.
Je vais essayer avec des moteurs chinois. Cela me permettra de valider les rapports de réduction.
Après, j'achèterai peut-être des moteurs de qualité (sachant que les chinois peuvent faire aussi de la qualité).
Il faut en parler à l'ancien PDG d'ALCATEL (société qui aujourd'hui n'existe plus -> concept de la société sans usine : FABLESS) qui considérait les chinois tout juste bon à visser des téléphones.
Maintenant, il y a aussi HUWAI, LENOVO, ONEPLUS. . . 

160
Bibliothèques / Re : Bibliothèque Nmra.Dcc.h
« le: octobre 25, 2017, 07:23:17 pm »
J'ai mis tout ce que j'avais fait.
Il reste en particulierà terminer la gestion vitesse (pilotage pont en H).
A priori, je partirai sur la base de 2 moteurs de 12 V monté en série.
Ci-joint la partie pantographe :
Attention, j'ai mis 255 comme butée car je travaille sur la LED 13 (pour la voir).
A adapter sur ta locomotive pour éviter que le pantographe ne touche le plafond !

        Signal = (FuncState & FN_BIT_01);    // Détection front montant
          Serial.println("Signal:");
          Serial.println(Signal);
         
      if(Signal != SignalPrec)    // Détection front montant-descendant
       {
          PANTOGRAPHE.attach(13);
              Serial.println("FuncState1:");
              Serial.println(FuncState & FN_BIT_01);

          if( (Signal)== 1)  // Condition MS2-F01 = 1
          {
              for (pos =0; pos <= 255; pos++){  // goes from 0 degrees to 180 degrees in steps of 1 degree
              PANTOGRAPHE.write(pos);              // tell servo to go to position in variable 'pos'
              Serial.print("MONTEE PANTOGRAPHE:");
              Serial.println(pos);
              delay(15);                       // waits 15ms for the servo to reach the position
              }
          }
            else // Condition MS2-F01 == 1
     
           if( (Signal)!= 1)  // Condition MS2-F01 = 1         
          {
              Serial.print("FuncState0:");
              Serial.println(FuncState);
             
              for (pos =255; pos >= 0; pos--){  // goes from 180 degrees to 0 degrees
              PANTOGRAPHE.write(pos);              // tell servo to go to position in variable 'pos'
              Serial.print("DESCENTE PANTOGRAPHE:");
              Serial.println(pos);
              delay(15);                       // waits 15ms for the servo to reach the position
             }
          }
       }
         SignalPrec = Signal; // Détection front montant

161
Débuter / Acheter des composants en Chine
« le: octobre 25, 2017, 01:08:56 pm »
Ok, ça tombe bien car j'ai déjà les moteurs 12V et en plus, j'économise des pins sur l'arduino.
Le site lextronic est intéressant.
J'ai tendance en général à commander sur Aliexpress : les délais ont beaucoup diminué 17-22 jours pour certains articles).
1) Cela peut être plus rapide qu'avec certains sites français qui en fait, achète en Chine (jusqu'à 4 mois d'attente pour des pièces moto sur un site français: c'est du (mal)vécu).
2) Les prix sont beaucoup moins chers
3) le suivi de commande et le contact vendeur est très rapide
3) Cela évite de favoriser les bouches inutiles (le type qui marge comme un chancre et qui n'y connait rien, d'ailleurs, il est en général injoignable (téléphone, SMS, Email), et si, par hasard on arrive à le contacter, il a toutes les excuses : le nouvel an chinois, un ouragan. . . )
4) De toute façon, la majorité des composants est réalisée en Chine
5) Je n'ai jamais eu de litiges avec eux

162
Débuter / Re : Fréquence de récurrence PWM
« le: octobre 25, 2017, 11:32:58 am »
Ok, je vais y réfléchir sachant que j'ai pris des moteurs/réducteur chez Aliexpress (dont je ne connais pas trop les perfos)
J'ai 2 types de moteurs réducteurs (
1) moteur réducteur à monter verticalement avec sortie latérale
    - Avantage : facilité d'intégration
    - Inconvénients : le freinage peut être violent en cas de perte de courant.
(Ne prendre en compte que l'aspect géométrique pour le moteur décrit  ci-dessous)
https://fr.aliexpress.com/item/1PCS-Reversible-High-Torque-12V-DC-200RPM-Worm-Geared-Motor-Gear-Reducer-Turbo-Motor-Suitable-For/32801628457.html?spm=a2g0w.search0104.3.9.CLaZow&ws_ab_test=searchweb0_0,searchweb201602_5_10152_10065_10151_10344_10068_10345_10342_10343_10340_10341_10541_10540_10084_10083_5370020_10305_10304_10307_10306_10177_10302_10060_10155_10154_10056_10055_10539_10538_10537_10312_10536_10059_10313_10184_10314_10534_10533_100031_10103_10073_10102_5590020_5640020_10142_10107,searchweb201603_25,ppcSwitch_5&btsid=5c42d60d-46f8-497e-9bff-cf8816a3f57a&algo_expid=59ac744f-4f02-42e0-975f-831cf9688f04-1&algo_pvid=59ac744f-4f02-42e0-975f-831cf9688f04


2) Moteur réducteur axiale
    - Avantage : pas de blocage violent en cas de perte de courant.facilité d'intégration
    - Inconvénients : la longueur  moteur + réducteur =  (je ne sais pas si cela passera dans la largeur de la loco)
(Ne prendre en compte que l'aspect géométrique pour le moteur décrit  ci-dessous)
https://fr.aliexpress.com/item/25-MM-370-Brosse-Mini-Moteur-COURANT-CONTINU-12-Volts-Moteur-lectrique-Motor-ducteur-Haute-Couple/32670886100.html?spm=a2g0w.search0104.3.70.xR9hhT&ws_ab_test=searchweb0_0%2Csearchweb201602_5_10152_10065_10151_10344_10068_10345_10342_10343_10340_10341_10541_10540_10084_10083_5370020_10305_10304_10307_10306_10177_10302_10060_10155_10154_10056_10055_10539_10538_10537_10312_10536_10059_10313_10184_10314_10534_10533_100031_10103_10073_10102_5590020_5640020_10142_10107%2Csearchweb201603_25%2CppcSwitch_5&btsid=f3c1e0b8-c535-4d51-9543-4dce2c34d315&algo_expid=3b2ec934-560a-42b1-8f23-89fc1b853df2-9&algo_pvid=3b2ec934-560a-42b1-8f23-89fc1b853df2

3) Question : vaut-il mieux 2 moteurs de 24 V en parallèle ou 2 moteurs 12 V en série ?

163
Débuter / Re : Fréquence de récurrence PWM
« le: octobre 25, 2017, 10:26:09 am »
Ok,
De toute façon, je sais qu'il faudra que je fasse des essais pour déterminer la fréquence de récurrence applicable au moteur en vérifiant :
 - la température des moteurs,
 - la température du pont (double) en H.
 - écouter les moteurs "chanter"

Le lien documentaire "http://www.locoduino.org/spip.php?article202" que tu m'as fourni est en effet  très intéressant.

Nota :une idée : je peux aussi mettre les deux moteurs en série (ils vont s'autoréguler par le couple)

164
Bibliothèques / Re : Bibliothèque Nmra.Dcc.h
« le: octobre 25, 2017, 09:59:27 am »
Il est clair que quand je monte ou descend le pantographe (sur la led 13!), l'arduino ne fait que cela (vu sur le moniteur), mais c'est pas grave car, dans la réalité, la locomotive ne fait rien pendant la montée et la descente du pantographe.
Pour l'instant, j'essaye de valider "en gros, le programme.
En parallèle, j'ai l'usinage de ma 2D2 (à l'échelle 1 :: 1/32) à réaliser (minitour + Minifraiseuse + Imprimante 3D).
C'est pas forcément évident car je dois usiner une plaque d'inox de 8 mm d'épaisseur pour faire les 16 roues.
Après, on peut toujours affiner avec un slowmotion, le rebondissement du pantographe sur la caténaire et même le petit "TSSSITTTTTTTTT" lors du contact pantographe/caténaire.
Pour la gestion de la vitesse je pourrais ensuite affiner en:
  - intégrant les taux d'accélération et décélération linéaires puis non linéaires
  - mesurant la valeur moyenne du signal Dcc pour engager un freinage ou une accélération progressive (système de canton avec 3 ou 4 diodes en série)
Pour le dételage, je pense installer directement l'attelage sur un servo.
pour l'instant, les fonctions suivantes fonctionnent :
  - Allumage cabine
  - Allumage des feux en fonction du sens de marche
  - Montée/Descente des pantographes (certes en linéaire), mais pour le résultat final, il faut que je réfléchisse sur le montage et la cinématique du servo.

Je m'attaque en suite à la gestion de la vitesse en essayant de ne pas bloquer l'arduino. C'est pour cela que je détecte si la consigne vitesse à changer avant de modifier les PWM des 2 moteurs.
J'y vais progressivement ! ! !

165
Bibliothèques / Re : Bibliothèque Nmra.Dcc.h
« le: octobre 25, 2017, 12:02:00 am »
Merci  à tous pour ces conseils.
Je vais prendre une aspirine.
1) Par contre, comment repérer-vous les numéros de lignes ?
Ok, vu, j'ai modifié les préférences !
2) les instructions que j'ai écrites sont-elles bien placées par rapport à l'ensemble du programme (avant le set-up) ?

"Tomber en marche" est souvent utilisé au moins dans l'industrie (j'ai 30 ans d'expérience) pour expliquer qu'un système fonctionne alors qu'il devrait théoriquement foiré.

"Tomber en panne" c'est quand un système ne marche pas alors que théoriquement, il devrait marcher.

Quelque part, ça permet de rester modeste!

Cela fait partie des lois de Murphy.

Pages: 1 ... 9 10 [11] 12 13 14