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 - jeff22150

Pages: [1] 2
1
Débuter / Re : Va et vient avec gare centrale voie unique
« le: décembre 24, 2019, 11:27:36 am »
Pour ce qui est du partage, je vous ferai un retour plus approfondi début janvier avec tout le cablage...
Bonne fêtes de fin d'année.

2
Débuter / Re : Va et vient avec gare centrale voie unique
« le: décembre 24, 2019, 07:23:10 am »
Bonjour
CA MARCHE !!!!

Juste à temps pour le réveillon, mon train fonctionne presque comme je le voulais...
Je n'arrive pas à modifier la vitesse de croisière mais je reverrai cela début janvier (la fin de l'année est très chargée)
Pour ceux qui le souhaite, voici mon programme arduino
#include <Encoder.h>
#include <ACS712.h>

//la représentation physique du rail
// G -- 1 -- 2 -- 3 -- C -- 4 -- 5 -- 6 -- 7 -- D

//Les pins
int pinZG = A0; /*détecteur gare G*/
int pinZ1 = A5; /*détecteur zone 1*/
int pinZ2 = 12; /*détecteur zone 2*/
int pinZ3 = 11; /*détecteur zone 3*/
int pinZC = A1; /*détecteur gare C*/
int pinZ4 = 10; /*détecteur zone 4*/
int pinZ5 = 9;  /*détecteur zone 5*/
int pinZ6 = 8;  /*détecteur zone 6*/
int pinZ7 = 7;  /*détecteur zone 7*/
int pinZD = A2; /*détecteur gare D*/
int pinACS = A3; /*capteur de courant*/
int pinEncP = 2; /*bouton poussoir de l'encodeur - AVEC UNE INTERRUPTION */
int pinEncS = 1; /*encodeur sens de rotation*/
int pinEncR = 3; /*encodeur rotation - AVEC UNE INTERRUPTION */
int pinPWM = 6; /*enB du OKY3195*/
int pinS1 = 5; /*sens direct du courant OKY3195 */ /*ATENTION : ne jamais avoir pinS1 et pinS2 à HIGH en même temps*/
int pinS2 = 4; /*sens opposé du courant OKY3195 */ /*ATENTION : ne jamais avoir pinS1 et pinS2 à HIGH en même temps*/
int pinSeed = A4; /*pour le grain de folie aléatoire*/
Encoder myEnc(pinEncS,pinEncR); /*déclaration de l'encodeur pour la bibliothèque Encoder.h*/
ACS712 sensor(ACS712_05B, pinACS); /* declaration du capteur de courant*/


//Les énumérations
enum zones {gareG,zone1,zone2,zone3,gareC,zone4,zone5,zone6,zone7,gareD}; /*les différentes zones (cantons)*/
enum vitesses {STOP, LENT, ACC, RAPIDE, RAL}; /*les différentes vitesses possibles*/
enum trajets {GC,CG,DC,CD,GD,DG}; /*Les différents trajets possibles (GC = de G à C)*/


/*les différentes allures en fonction des trajets*/
/*                            G       1      2        3      C      4      5      6      7      D      */
const int allures[][10] =   {{LENT , ACC  , RAPIDE , RAL  , STOP , STOP , STOP , STOP  , STOP , STOP},  /*le trajet GC*/
                            {STOP , RAL  , RAPIDE , ACC  , LENT , STOP , STOP , STOP  , STOP , STOP},  /*le trajet CG*/
                            {STOP , STOP , STOP   , STOP , STOP , LENT , RAL  , RAPIDE , ACC , LENT},  /*le trajet DC*/
                            {STOP , STOP , STOP   , STOP , LENT , LENT , ACC  , RAPIDE , RAL , STOP},  /*le trajet CD*/
                            {LENT , ACC  , RAPIDE , RAL  , LENT , LENT , ACC  , RAPIDE , RAL , STOP},  /*le trajet GD*/
                            {STOP , RAL  , RAPIDE , ACC  , LENT , LENT , RAL  , RAPIDE , ACC , LENT}}; /*le trajet DG*/

const int sens[6] = {1,-1,-1,1,1,-1}; /* les sens de trajet : 1 = de G vers D ; -1 = de D vers G */

//les variables
long maxSpeed = 200; /* la vitesse maximale (entre 0 et 250 en PWM) que pourra atteindre le train dans les phases RAPIDE*/
const long minSpeed = 100; /*la vitesse du train dans les phases LENT et au redémarrage*/
long theSpeed;
long stepSpeed =20;

boolean isON = true; /* pour le bouton poussoir : isON = true -> le train a le droit de rouler ; isON = false -> arret d'urgence (PWM à 0)*/

const unsigned long antiRebond = 3; /*délai pour l'anti rebond du bouton poussoir */

int currentTrip;
boolean endTrip;

int currentZone =-999;

//Les fonctions
/*pour changer l'aléatoire de random*/
byte getSeed()
{
  byte seed = 0;
  byte i = 8;
  while (i > 0)
  {
    byte firstBit = analogRead(pinSeed) & 0x01;
    byte secondBit = analogRead(pinSeed) & 0x01;
    if (firstBit != secondBit)
    {
      seed = (seed << 1) | firstBit;
      i--;
    }
  }
  return seed;
}

/*pour savoir où est le train*/
int WhereIsMyTrain(int theZone)
{
  switch(theZone)
  {
    case gareG:
      if (digitalRead(pinZ1)==0) {return zone1;}
      else {return currentZone;}
      break;
    case zone1:
      if (digitalRead(pinZG)==0) {return gareG;}
      else if(digitalRead(pinZ2)==0) {return zone2;}
      else {return currentZone;}
      break;
    case zone2:
      if (digitalRead(pinZ1)==0) {return zone1;}
      else if(digitalRead(pinZ3)==0) {return zone3;}
      else {return currentZone;}
      break;
    case zone3:
      if (digitalRead(pinZ2)==0) {return zone2;}
      else if(digitalRead(pinZC)==0) {return gareC;}
      else {return currentZone;}
      break;
    case gareC:
      if (digitalRead(pinZ3)==0) {return zone3;}
      else if(digitalRead(pinZ4)==0) {return zone4;}
      else {return currentZone;}
      break;
    case zone4:
      if (digitalRead(pinZC)==0) {return gareC;}
      else if(digitalRead(pinZ5)==0) {return zone5;}
      else {return currentZone;}
      break;
    case zone5:
      if (digitalRead(pinZ4)==0) {return zone4;}
      else if(digitalRead(pinZ6)==0) {return zone6;}
      else {return currentZone;}
      break;
    case zone6:
      if (digitalRead(pinZ5)==0) {return zone5;}
      else if(digitalRead(pinZ7)==0) {return zone7;}
      else {return currentZone;}
      break;
    case zone7:
    if (digitalRead(pinZ6)==0) {return zone6;}
      else if(digitalRead(pinZD)==0) {return gareD;}
      else {return currentZone;}
      break;
    case gareD:
      if (digitalRead(pinZ7)==0) {return zone7;}
      else {return currentZone;}
      break; 
    default:
      int firstDetection = -1;
      while(firstDetection == -1)
      {
        if(digitalRead(pinZG)==0) {firstDetection = gareG;}
        else if(digitalRead(pinZ1)==0) {firstDetection = zone1;}
        else if(digitalRead(pinZ2)==0) {firstDetection = zone2;}
        else if(digitalRead(pinZ3)==0) {firstDetection = zone3;}
        else if(digitalRead(pinZC)==0) {firstDetection = gareC;}
        else if(digitalRead(pinZ4)==0) {firstDetection = zone4;}
        else if(digitalRead(pinZ5)==0) {firstDetection = zone5;}
        else if(digitalRead(pinZ6)==0) {firstDetection = zone6;}
        else if(digitalRead(pinZ7)==0) {firstDetection = zone7;}
        else if(digitalRead(pinZD)==0) {firstDetection = gareD;}
      }
      return firstDetection;
  }
}

/*choix du trajet suivant*/
int NextTrip(int CurrentTrip)
{
  int newTrip;
  //choix aléatoire d'un nombre
  int choix = random(0,2);
  //choix du nouveau trajet
  if (CurrentTrip == GC || CurrentTrip == DC)
  {
    if (choix == 0) {newTrip = CG;}
    else {newTrip = CD;}
  }
  else if (CurrentTrip == CG || CurrentTrip == DG)
  {
    if (choix == 0) {newTrip = GC;}
    else {newTrip = GD;}
  }
  else if (CurrentTrip == CD || CurrentTrip == GD)
  {
    if (choix == 0) {newTrip = DC;}
    else {newTrip = DG;}
  }

  if (sens[CurrentTrip]!=sens[newTrip])
  {
    /*attention il est impossible d'avoir les deux à HIGH en même temps*/
    /* il faut inverser les deux*/
    if (digitalRead(pinS1)==HIGH)
    {
      digitalWrite(pinS1,LOW);
      digitalWrite(pinS2,HIGH);
    }
    else /*si ce n'est pas S1 à HIGH, c'est forcément S2*/
    {
      digitalWrite(pinS2,LOW);
      digitalWrite(pinS1,HIGH);
    }
  }
  return newTrip;
}


void setup() {
  // initialisation des pins de l'arduino
  pinMode(pinZG,INPUT_PULLUP);
  pinMode(pinZ1,INPUT_PULLUP);
  pinMode(pinZ2,INPUT_PULLUP);
  pinMode(pinZ3,INPUT_PULLUP);
  pinMode(pinZC,INPUT_PULLUP);
  pinMode(pinZ4,INPUT_PULLUP);
  pinMode(pinZ5,INPUT_PULLUP);
  pinMode(pinZ6,INPUT_PULLUP);
  pinMode(pinZ7,INPUT_PULLUP);
  pinMode(pinZD,INPUT_PULLUP);
  pinMode(pinACS,INPUT);
  pinMode(pinEncP,INPUT_PULLUP);
  //pinMode(pinEncS,INPUT); dans la définition de l'encodeur ligne 21
  //pinMode(pinEncR,INPUT); dans la définition de l'encodeur ligne 21
  pinMode(pinPWM,OUTPUT);
  pinMode(pinS1,OUTPUT);
  pinMode(pinS2,OUTPUT);
  pinMode(pinSeed,INPUT);

  randomSeed(getSeed()); /*pour l'aléatoire*/

  endTrip = false;
  currentTrip = GD;
  digitalWrite(pinS2,HIGH);
  digitalWrite(pinS1,LOW);
  theSpeed = minSpeed;
 
  //démarrage du train mais à PWM insuffisant pour faire avancer le train
  analogWrite(pinPWM,80);

  //détection de la zone où se situe le train
  currentZone = WhereIsMyTrain(currentZone);
  Serial.println(currentZone);
  analogWrite(pinPWM,theSpeed);
}

void loop() {

  if(endTrip == true) //le trajet est-il terminée
  {
    currentTrip = NextTrip(currentTrip); //choisir un nouveau trajet
    endTrip = false;
    delay(3000); //attendre trois secondes avant le redémarrage
  }
 
  currentZone = WhereIsMyTrain(currentZone);
 
  switch (allures[currentTrip][currentZone])
  {
    case LENT:
      if (theSpeed != minSpeed && isON == true) {theSpeed = minSpeed;}
      break;
    case RAPIDE:
      if (theSpeed != maxSpeed && isON == true) {theSpeed = maxSpeed;}
      break;
    case ACC:
      if ((theSpeed+stepSpeed)<=maxSpeed && isON == true) {theSpeed = theSpeed+stepSpeed;}
      break;
    case RAL:
      if ((theSpeed-stepSpeed)>=minSpeed && isON == true) {theSpeed = theSpeed-stepSpeed;}
      break;
    case STOP: /*le trajet est terminé*/
      theSpeed = 0;
      endTrip = true;
  }
  analogWrite(pinPWM,theSpeed);
 
}

3
Débuter / Re : Va et vient avec gare centrale voie unique
« le: décembre 20, 2019, 03:32:58 pm »
Le truc j'ai fait testé avec le train sur les rails et en fonctionnement !

4
Débuter / Re : Va et vient avec gare centrale voie unique
« le: décembre 20, 2019, 10:51:55 am »
Merci pour ta réponse.
J'ai cette version : https://www.vs-elec.fr/fr/electricite/2185-robotdyn-capteur-de-courant-acs712-5a-3665662014528.html

Il est prévu pour 5A (mais il est vrai qu'il existe le même pour 20 et 30 A).
Mon dernier max471 a cramé et je n'ai pas trouvé de livraison dans des temps "raisonnable" de nouveaux max471. (en effet, tout ce que je fais est normalement pour animer un train de noel)

Pour vous le schéma de montage est bon ?
A quelle valeur d'intensité dois-je m'attendre ?
Merci encore pour votre aide
jeff22150

5
Débuter / Re : Va et vient avec gare centrale voie unique
« le: décembre 20, 2019, 06:50:29 am »
Bonjour.
Je suis désolé de faire appel à vous mais impossible de récupérer l'intensité à partir de mon nouvel ACS712.
À ce que j'ai compris, ce dernier se monte en série dans le montage.

J'ai donc réalisé le montage en pièce jointe.
Quand je mets mon alimentation des rails en route, pas de problème mon train roule.
Par contre, l'intensité affichée sur mon moniteur série est toujours et irrémédiablement égale à 0.

j'essaie d'utiliser cette bibliothèque pour ce capteur : https://github.com/muratdemirtas/ACS712-arduino-1

J'utilise se sketch (qui provient directement d'un exemple de la bibliothèque)
#include "ACS712.h"

/*
  This example shows how to measure DC current
*/

// We have 30 amps version sensor connected to A1 pin of arduino
// Replace with your version if necessary
ACS712 sensor(ACS712_05B, A3);

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

  // This method calibrates zero point of sensor,
  // It is not necessary, but may positively affect the accuracy
  // Ensure that no current flows through the sensor at this moment
  sensor.calibrate();
}

void loop() {
  // Get current from sensor
  float I = sensor.getCurrentDC();
 
  // Send it to serial
  Serial.println(String("I = ") + I + " A");
 
  // Wait one second before the new cycle
  delay(1000);
}

Si quelqu'un voulait bien m'aider (encore) ce serait super.
Merci d'avance
jeff22150

6
Débuter / Re : Va et vient avec gare centrale voie unique
« le: décembre 18, 2019, 07:34:21 pm »
Hourra !!!

Bonsoir à tous.
Ce petit message pour vous remercier car grâce à vous, tous mes détecteurs de consommation fonctionnent ! (après quelques résolutions de soudure mal faites quand même !)

Voici en photo ma plaque de prototypage.
L'encodeur est lui aussi pret et fonctionnel.
Il ne me reste plus qu'à mettre le capteur de courant (j'ai d'ailleurs changé pour une ACS712 au lieu du max471, on verra bien) et le L298 en route.
Je pense que le plus dure est fait.... mais on verra bien, j'aurai sans doute encore besoin de vous.
A+
jeff22150

7
Débuter / Re : Va et vient avec gare centrale voie unique
« le: décembre 17, 2019, 09:38:22 am »
effectivement il y avait quelques fautes de frappe.
Voici le code corrigé
int val = LOW;

void setup() {
pinMode(12,INPUT_PULLUP);
pinMode(13,OUTPUT);
}

void loop(){
if (digitalRead(12) == HIGH)
{     val = LOW; }
else
{     val = HIGH; }
digitalWrite(13,val);

}

Mon inquiétude était plutôt du coté rail : est-ce que simuler le train par une pile 9V est une bonne idée ou pas ?
Merci beaucoup pour votre aide.

jeff22150

8
Débuter / Re : Va et vient avec gare centrale voie unique
« le: décembre 17, 2019, 06:30:41 am »
Bonjour.
Je continue sur mon projet... j'ai presque fini les soudures de tous les détecteurs (toute le partie ltv824 avec diodes...)
Je voudrai maintenant tester chacun de ces détecteurs.

Puis-je juste mettre une pile 9V  (voire l'alim du train) à la place des rails et de l'autre coté mon arduino (branché à mon ordi) avec le progamme (très simple) suivant :
int val = LOW;

void setup() {
pinMode(12,INPUT_PULLUP);
pinMode(13,OUTPUTT);
}

void loop(){
if (digitalRead(12) == HIGH)
{
     val = LOW;
}
else
{
     val == HIGH;
}

digitalWrite(13, val);
}

9
Débuter / Re : Va et vient avec gare centrale voie unique
« le: décembre 10, 2019, 06:03:53 am »
Bonjour.
Merci à msport et dominique.
Si j'ai compris,
- je n'ai pas besoin de l'alimentation 5V : je supprime cette liaison rouge.
- je déclare le pin13 avec pinMonde(13,INPUT_PULLUP)

Ca donne donc le schéma joint (j'aime bien le visuel)

Pour le fait de tout griller j'en suis bien conscient mais mon premier max471 ayant grillé, il me faut attendre la livraison d'un autre.

cordialement

10
Débuter / Re : Va et vient avec gare centrale voie unique
« le: décembre 09, 2019, 06:42:33 pm »
Bonsoir.
Je continue mon projet.
J'aimerai juste testé mes détecteurs de courant (pour vérifier si mes soudures sont bonnes).
Comme je viens de griller mon max471 (ou OKY 3319) et qu'il va me falloir un peu de temps avant d'en recevoir un nouveau, je me permets de vous demander si je peux utiliser le schéma joint pour effectuer ces tests sans risque de tout griller (une nouvelle fois :) )
Merci d'avance pour vos réponses.
jeff22150

11
Débuter / Re : pourquoi mon 471 a-t-il cramé ?
« le: décembre 07, 2019, 11:33:55 am »
Merci pour toutes vos réponses.
Nous allons donc valider cette réponse d'inversion de polarité.
Cordialement
jeff22150

12
Débuter / Re : pourquoi mon 471 a-t-il cramé ?
« le: décembre 07, 2019, 09:37:48 am »
Bonjour
Aucune charge sur les rails car j'étais en test.
JF

13
Débuter / Re : pourquoi mon 471 a-t-il cramé ?
« le: décembre 07, 2019, 06:28:21 am »
Bonjour et merci pour cette piste.
J'en ai une autre : j'ai mesuré l'intensité aux bornes de mon alimentation et je suis à 3.5 A.
Est-ce que ça a pu faire griller le MAX471 ?
Est-ce que ça risque de faire grillé mon L298N (qui a pourtant "résisté" à mes première tentatives) ?
Faut-il que je mette une résistance pour "protéger" entre l'alim et L298N ? Si oui le calcul de résistance R = U/I = 25V / 2A = 12 ohms est-il juste ?
Merci d'avance pour les réponses
jeff22150

14
Débuter / pourquoi mon 471 a-t-il cramé ?
« le: décembre 06, 2019, 06:24:11 pm »
Bonsoir tout le monde
Tout est dans le titre : pourquoi mon oky 3319 (max471) a-t-l cramé.
Avant son installation, j'avais fait le montage sans. J'avais donc directement relié mon alimentation à l'OKY 3195 (équivalent à L298N) et cela fonctionnait.
Ensuite j'ai voulu rajouté le max471 selon le schéma joint et là patatra, lorsque j'ai branché l'alimentation, un beau clac et une belle fumée au niveau de ce dernier annonçant je pense sa fin de vie prématuré.
Pour ne pas refaire la même erreur j'aimerai comprendre pourquoi il a cramé.
Le montage lors du cramage est exactement celui en pièce jointe.
Merci d'avance pour vos lumières
Cordialement
jeff22150

15
Débuter / Re : Va et vient avec gare centrale voie unique
« le: novembre 28, 2019, 04:18:44 am »
Bonjour.
Je continue mon projet... petit à petit.
Je viens de réaliser le modèle du montage avec fritzing (en pièce jointe)
Les "fils" ochre correspondent à des soudure par dessous.
Les fils rose sont des "vrai".
Pouvez vous me dire si cela semble correcte ?
(Il ne faut pas prêter attention aux valeurs des résistances de la partie basse)

Merci beaucoup pour tous votre aide.
cordialement

Pages: [1] 2