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

Pages: [1]
1
Vos projets / Re : Un Arduino par canton
« le: mai 11, 2021, 07:20:41 pm »
Merci beaucoup je vais essayer avec pwmsynchro.analogWrite(vitesse);

et merci pour les conseils

Bien cordialement

Pierre

2
Vos projets / Re : Un Arduino par canton
« le: mai 11, 2021, 06:48:03 pm »
désolé c'est un peu long. Je joins le setup et le loop. Il y a aussi plusieurs fonctions. Je compte ouvrir un projet sur le forum dés que j'aurai réussi cette intégration.

// déclaration des variables

#include <SyncPWM.h>
SyncPWM pwmsynchro;


const int pot_inertie_ACC = A0; // Règle l'inertie a l'accélération
int val_inertie_ACC; // Variable pour lire la valeur de pot_inertie_acc

const int detecteur_en_ZA = A1; // Détecteur produisant un signal 0v
bool etat_ZA = true; // si un train est à l'arrêt en ZA true sinon false

const int detecteur_en_ZT = A2; // Détecteur produisant un signal 0v
bool etat_ZT = true; // si un train est à l'arrêt en ZA, il l'est aussi en ZT true sinon false

const int pot_reglage = A6;  // potar pour régler la valeur max de la pwm et donc la vitesse

const int MarcheArret = A4; // Interrupteur marche arrêt

const int pot_inertie_FREIN = A5; // Règle l'inertie au freinage
int val_inertie_FREIN; // Variable pour lire la valeur de pot_inertie_frein

// A6 libre
// A7 libre

// LIBRE pour l'instant const int reglagevitesse = 2; // sur la pin 2 ou 3 exclusivement pour les interruption

const int led_feuxrouges = 4; // Led rouge si à l'arrët - Feu rouge
const int led_feuxoranges = A3; // Led orange si ralenti
const int led_feuxverts = 5; // Led verte si en marche - Feu vert

const int occup_canton_n1 = 13; // occupation du canton n1
const int occup_canton_n = 7; //  occupation du cabton n

const int led_A_B = 8; // Led sens de A vers B

//N1 et N2 correspondent aux bornes d'un pont en H L298N sont remplacés par DIR et PWM
const int BRAKE = 9; // Utilisation de BRAKE pour l'arrêt et le démarrage
const int DIR = 10; // Utilisation du PWM pour la direction
const int PWM = 3; // changer en 3 pour test syncpwm// Utilisation du PWM pour la valeur de PWM moteur analogique

const int LedMarcheArret = 12;
bool EtatMarcheArret = false; // on initialise Etat marche arrêt sur arrêt

int vitesse;
int vitesseralenti; // pour la vitesse de ralenti
int vitessearret; //pour mise en route
int vitessetest = 200;
int vitessetestetape6 = 50;
int mesure_potreglage = 0; // valeur pour mesurer la valeur du potar de réglage de la valeur max de la pwm
int mesure_potreglageancien = 0;

int etatinterruption = LOW;

int valDIR = 0;
int valPWM = 0;
int valBRAKE = 0;
int valeurmaxpwm =0;

bool sens_A_vers_B; // vrai si sens gare A vers gare B

int compteur; // pour suivre dans le monniteur l'avancement du programme
int timer = 3000;

int etat_detecteuren_ZA; // mémorise l'état du détecteur utilisé dans les tests HIGH si le détecteur a été actif
int etat_detecteuren_ZT; // quand N1 est libre le mettre systématiquement à LOW car nous l'utilisons pour un test qui provoque le ralenti du train.
                         //Si n1 devient libre avant l'arrêt du train il faut réinitialiser cette variable

//*************************************************************
void setup()
{
pinMode (BRAKE, OUTPUT);
digitalWrite (BRAKE,HIGH);
pinMode (DIR,OUTPUT);
pinMode (PWM, OUTPUT);
digitalWrite (DIR,LOW);
digitalWrite (PWM,LOW);
pinMode (MarcheArret,INPUT);
pinMode (LedMarcheArret,OUTPUT);
digitalWrite (LedMarcheArret,HIGH);

EtatMarcheArret= digitalRead (MarcheArret);
while (EtatMarcheArret == LOW)               // tant que le bouton marche arrêt n'est pas sur marche il ne se passe rien
{
EtatMarcheArret= digitalRead (MarcheArret);
}
// on passe l'état marche arrêt qui est devenu marche en ligne ci-dessus à arrêt pour mesurer plus tard le changement d'état du bouton marche arrêt

delay(300);

Serial.begin(9600);
digitalWrite (LedMarcheArret,LOW);
Serial.println("Etat Marche Arret");
Serial.println (EtatMarcheArret);

Serial.println( "demarrage du programme");

// Changement de fréquence du PWM
//TCCR1B &= 0xF8;
//TCCR1B |= B00000010;

  pwmsynchro.begin(6); // Start a synchronized PWM with sync on pin 6           
  pwmsynchro.analogWrite(30);

pinMode (occup_canton_n, OUTPUT);
digitalWrite (occup_canton_n, HIGH); // LOW pour libre, HIGH pour occupé

pinMode (occup_canton_n1, INPUT);

pinMode (pot_inertie_ACC, INPUT);
pinMode (pot_inertie_FREIN, INPUT);

valDIR = digitalRead (DIR);
Serial.println ("valeur DIR =");
Serial.println (valDIR);

valPWM = analogRead (PWM);
Serial.println ("valeur PWM =");
Serial.println (valPWM);
 
pinMode (detecteur_en_ZA, INPUT);
pinMode (detecteur_en_ZT, INPUT);

pinMode (led_A_B,OUTPUT); //  led de sens bicolore
digitalWrite (led_A_B,LOW);

pinMode (led_feuxrouges,OUTPUT);
digitalWrite (led_feuxrouges,HIGH);
pinMode (led_feuxverts,OUTPUT);
digitalWrite (led_feuxverts,LOW);
pinMode (led_feuxoranges,OUTPUT);
digitalWrite (led_feuxoranges,LOW);

analogWrite (vitesse,0);         // initialisation de la vitesse à 0                               

//attachInterrupt (0,Marche_Arret,FALLING); // validation du changement de vitesse ( commandé par le potentiomètre vitesse)
                                            // sur le réseau. mettre 0 si pin 2 et 1 si pin 3 V6 je change le nom de la fonction sans les ()

compteur =1;
etat_detecteuren_ZA = LOW; // ou = digitalRead (detecteur_en_ZA) mais le détecteur ne détecte pas si loco à l'arrêt
etat_detecteuren_ZT = LOW; //digitalRead (detecteur_en_ZT)

Serial.print ("test sur mise en route");
Serial.println (); 

 mise_en_route(); // cette fonction met les feux au rouge ou au vert et libère le brake pour que le LMD soit opérationnel

 //potreglagevitesse ();
   Serial.println("lecture réglage potentiomètre");
   mesure_potreglage = analogRead(pot_reglage);      //    lecture de la valeur du potar réglage valeur max de la pwm
   valeurmaxpwm = map(mesure_potreglage,0,1023,0,255);  // transfert de cette valeur en valeur correspondant à celle le la pwm
   Serial.print(valeurmaxpwm);
 
}
//*******************************************************
void loop()
{
  delay (30);// lorsque qu'une carte n'est pas une Arduino ou une Genuino

Serial.print ("passage dans le loop");
Serial.println ();

  Marche_Arret(); // arrêt d'urgence
  digitalRead(occup_canton_n1);
  Serial.print("occupation canton n1 = ");
  Serial.println(digitalRead(occup_canton_n1));
  digitalRead(occup_canton_n);
  Serial.print("occupation canton n = ");
  Serial.println(digitalRead(occup_canton_n));
  Serial.print("vitesse ");
  Serial.println (vitesse);
   Serial.print("lecture réglage potentiomètre");
   
   mesure_potreglage = analogRead(pot_reglage);      //    lecture de la valeur du potar réglage valeur max de la pwm
   valeurmaxpwm = map(mesure_potreglage,0,1023,0,255);  // transfert de cette valeur en valeur correspondant à celle le la pwm
   
   Serial.print("vitesse début loop ");
   Serial.println(vitesse);
   analogWrite(PWM,vitesse); // c'est celui ci qui me redonne la vitesse en fin étape 4 à l'initialisation
  detection();
}

3
Vos projets / Re : Un Arduino par canton
« le: mai 11, 2021, 06:19:14 pm »
Non sur les arduino canton. Sur l'arduino qui envoie le clock je n'ai mis que le programme master clock et rien d'autre

#include <SyncPWM.h>

SyncPWM sp;

void setup() {
  sp.beginMasterClock();  // start a master clock on PWM pin 3 on Uno/Nano
                          // pin 6 on a Leonardo
}

void loop() {
}

4
Vos projets / Re : Un Arduino par canton
« le: mai 11, 2021, 01:39:13 pm »
Bonjour Jean Luc,

Merci pour cette réponse rapide.

Pour la vitesse j'utilise un potentiomètre de 10kohms sur la broche A6 et le programme suivant:


void potreglagevitesse ()
{   
   Serial.println("lecture réglage potentiomètre");
   mesure_potreglage = analogRead(pot_reglage);      //    lecture de la valeur du potar réglage valeur max de la pwm
   valeurmaxpwm = map(mesure_potreglage,0,1023,0,255);  // transfert de cette valeur en valeur correspondant à celle le la pwm
   vitesse = valeurmaxpwm;
   analogWrite (PWM, vitesse);
}

Pour le câblage ai je bien compris?

Bien cordialement

5
Vos projets / Re : Un Arduino par canton
« le: mai 10, 2021, 08:59:37 pm »
bonsoir Jean Luc,

Après avoir utiliser la bibliothéque PWM Freq qui fonctionne parfaitement, barvo, j'essaye toujours d'intégrer Syncpwm à mes programmes de cartes canton bâties autour d'un arduino nano et d'un LMD 18200. J'ai lu que les deux bibliothèques sont incompatibles j'en ai tenu compte.

J'ai compris qu'il fallait un arduino maitre sur lequel j'installe le programme Masterclock comme cité dans les exemples.
Je récupère une horloge maitresse sur la pin 3 de cet arduino maitre.
J'ai 17 cartes cantons. J'envoie l'horloge maitresse par 17 fils en parallèles sur la broche 8.
Je récupère la PWM de chaque carte canton esclave sur la pin 3 et c'est elle que je connecte au LMD18200. 

J'ai fait l'essai avec un arduino maitre n'ayant que le programme master clock téléchargé.

Constat: je ne peux pas régler la vitesse. Je suis toujours à vitesse max.

Question 1 :ai je bien compris le câblage?
Question 2: cet arduino maitre peut il être une des cartes cantons?
Question 3 : que fais je de mal pour ne plus pouvoir régler la vitesse?
Question 4: mes cartes sont malheureusement déjà cablées avec la pwm entre arduino et le LMD18200 sur la broche 11 compatible comme la broche 3 avec le timer 2. Pour pouvoir utiliser la broche 11 au lieu de la 3 pour la PWM suffit il de changer dans Syncpwm.cpp en lignes 59 et 86 le chiffre 3 par 11? Cela a t il une influence sur la pin de sortie de la masterclock?

Question 5: pour récupérer l'horloge maitresse sur la pin 6 au lieu de la pin 8 suffit il d'écrire pwm.begin(6)?

Beaucoup de questions en fait

Merci par avance
Bien cordialement
Pierre

6
Vos projets / Re : Un Arduino par canton
« le: avril 30, 2021, 01:40:39 am »
Merci pour cette réponse rapide.

J'ai fait la modification indiquée et cela compile parfaitement et sur le maitre et sur l'esclave.

Parfait et bravo.

Cordialement

Pierre

7
Vos projets / Re : Un Arduino par canton
« le: avril 29, 2021, 02:19:40 pm »
Bonjour Jean Luc

J'essaie d'utiliser la bibliothèque SyncPWM. Sur les cartes cantons esclaves arduino nano j'ai inclus les deux lignes
#include <SyncPWM.h>
SyncPWM pwmsynchro;

et ces deux là dans le setup
  pwmsynchro.begin(6); // Start a synchronized PWM with sync on pin 6           
  pwmsynchro.analogWrite(30);

à la compilation j'ai ce message d'erreur:

Arduino : 1.8.13 (Mac OS X), Carte : "Arduino Nano, ATmega328P (Old Bootloader)"

In file included from /Users/Pierre/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/avr/io.h:99:0,
                 from /Users/Pierre/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/avr/pgmspace.h:90,
                 from /Users/Pierre/Library/Arduino15/packages/arduino/hardware/avr/1.8.3/cores/arduino/Arduino.h:28,
                 from /Users/Pierre/Documents/Arduino/libraries/SyncPWM-master/SyncPWM.h:24,
                 from /Users/Pierre/Documents/Arduino/libraries/SyncPWM-master/SyncPWM.cpp:24:
/Users/Pierre/Documents/Arduino/libraries/SyncPWM-master/SyncPWM.cpp:123:29: error: stray '$' in program
         TIMSK2 = _BV(OCIE2A=$);
                             ^
/Users/Pierre/Documents/Arduino/libraries/SyncPWM-master/SyncPWM.cpp: In member function 'void SyncPWM::begin(byte)':
/Users/Pierre/Documents/Arduino/libraries/SyncPWM-master/SyncPWM.cpp:123:18: error: expected primary-expression before ')' token
         TIMSK2 = _BV(OCIE2A=$);
                  ^
exit status 1
Erreur de compilation pour la carte Arduino Nano

Et là j'avoue que cela dépasse mes compétences.

Ai je oublié d'inclure une bibliothèque?
Dans la bibliothèque avr je n'ai pas de io.h et dans pgmspace.h il n'y a pas de ligne 99 cela s'arrête à la ligne 44

8
Vos projets / Re : Un BV animé par ATtiny 85
« le: avril 23, 2021, 02:07:45 pm »
Merci beaucoup pour la réponse et le lien.

Votre site contient tellement d'informations que le plus difficile est de trouver les bons mots pour une recherche.
J'avoue  que je passe du temps à ouvrir tous les fils de conversation et si je ne note pas le nom du fil je ne retrouve que très difficilement l'information.

Je cherchais ATtiny 85 je ne risquais pas de trouver effectivement.

Bravo pour votre site
Bien cordialement

Pierre

9
Vos projets / Re : Un BV animé par ATtiny 85
« le: avril 15, 2021, 08:12:41 pm »
Euréka.
En cherchant sur internet j'ai trouvé. La toute première étape celle qui transforme l'arduino en programmateur doit se faire en Arduino UNO ISP et non pas arduino as ISP. et là le programme compile et la suite se passe bien.

Ouf

10
Vos projets / Re : Un BV animé par ATtiny 85
« le: avril 15, 2021, 07:22:23 pm »
Bonjour Dominique

Je suis admiratif devant votre exemple.
J'essaie de le mettre en oeuvre.

Je présume que malgré son port l'ATTINY85 se programme comme le montre la série ATtiny45.
Dans ce cas j'ai un pb. Lors de la compilation du programme Arduino ISP de la rubrique exemple j'ai une erreur de compilation dés la ligne 136 #define SERIAL Serial. L'IDE me retourne Serail was not declared in the scope. Et là je ne comprends pas ce que je peux faire.

Merci pour vos lumières

Bien cordialement
Pierre

11
Vos projets / Re : Projet de gare aléatoire
« le: avril 08, 2021, 10:17:14 pm »
Bonsoir à tous,

Pour répondre à la problématique de slamccb.

Je suis en analogique.
J'utilise le détecteur de courant de Pierre59
A l'arrêt pas de consommation de courant.

La solution que j'ai trouvé:
J'utilise une variable occup_canton_n. Cette variable est mise à HIGH si un train est présent et à LOW si le canton est vide.

A l'initialisation, dans le setup, le programme commence par mettre la tension à zéro, puis j'augmente lentement la vitesse. Dés qu'une consommation de courant est détectée je remet la vitesse à zéro et je donne la valeur HIGH à la variable.
Dans mon test de démarrage je fixe une valeur max à la vitesse de test de présence. Dés que cette vitesse est atteinte j'estime le canton libre, variable à LOW et je remet la vitesse à zéro.

Ensuite je lance mon programme dans le loop en utilisant les résultats de l'initialisation.

Bien cordialement

12
Vos projets / Re : Projet de gare aléatoire
« le: avril 08, 2021, 10:05:19 pm »
Merci beaucoup Pierre.
J'ai essayé mais j'ai du mal à intégrer ces lignes de codes au bon endroit dans mon programme.

Du coup j'ai fait un autre essai que j'ai eu plus de facilité à intégrer.

J'ai utilisé la bibliothèque bounce. J'ai déclaré les détecteurs de courant comme des objets bounce, donné la valeur 1000 à "interval". j'utilise la fonction read() dans les tests, des boucles while et des if. Dans mes boucles je fait un "update" avant de lire la valeur des détecteurs.

Depuis je n'ai plus aucun bug lié à des pertes de détection de consommation de courant.

par contre je ne suis pas bien certain de comprendre exactement ce qui se passe. J'avoue avec tester par empirisme.

Bien cordialement

13
Vos projets / Re : Projet de gare aléatoire
« le: mars 21, 2021, 12:24:56 am »
Bonjour à tous,

Je suis sur un réseau analogique. J'ai réalisé le type de détecteur que Pierre59  propose. Des mauvais contacts me font perdre la détection d'occupation. Je cherche la solution via l'arduino sans succès pour l'instant.
Pierre 59 écrit:
"J'ai déjà proposé sur le forum un schéma semblable avec optocoupleur qui a l'avantage d'être très simple car le traitement du signal se fait sur l'Arduino (notamment le délais de libération nécessaire pour les mauvais contacts)."

Je n'arrive pas à trouver sur le forum le code pour ce traitement du signal.

Pourriez vous donner la page svp?

Merci d'avance.

14
Vos projets / Re : Un Arduino par canton
« le: janvier 16, 2020, 09:16:38 pm »
Bonjour Jean Luc,

Je suis en train de finaliser mon projet de canton analogique. J'ai 17 cantons à synchroniser. J'utilise un LMD 18200 pour les alimentations des voies.
J'ai deux questions:
1- je ne comprends pas bien l'utilisation de la synchronisation des PWM. Un arduino maitre pour la générer ok. Mais ensuite? la sortie PWM est elle cablée en parallèle une sortie raccordée à 17 entrées ou en série la sortie sur le premier canton puis du premier vers le deuxième etc..? ou autre solution?

2- en page deux de la discussion en mars 2015 vous proposez des shémas de carte et d'implantation des composants. Ils ne sont pas lisible dans le fils de la discussion. Je ne les retrouve pas dans le lien dropbox qui fonctionne. Auriez vous la gentillesse de les proposer sur un lien qui fonctionne?

merci à vous

Pierre

15
Vos projets / Re : Un Arduino par canton
« le: mai 08, 2017, 11:20:41 pm »
Bonjour Jean Luc,

Nouveau sur le forum que je parcours avec grand intérêt je serai preneur d'information sur l'alimentation traction canton analogique.
Vous nous proposez gentiment un lien via dropbox. Seulement il ne fonctionne plus.
Y a t il un endroit ou un lien qui permettrait de le visualiser svp?

Merci beaucoup

Pages: [1]