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

Pages: [1]
1
Vos projets / Bibliothèque TMRpcm
« le: février 22, 2020, 09:44:37 pm »
Bonjour à tous

Je voulais vous faire part d'un problème que j'ai rencontré avec la bibliothèque TMRpcm. Je l'ai évoqué ici http://forum.locoduino.org/index.php?topic=912.msg9587#msg9587, mais ce n'est plus en rapport avec le titre, d'où l'ouverture d'un nouveau sujet.

En voulant utiliser une carte SD et la bibliothèque TMRpcm pour ajouter du son, je n'ai pas eu de problème quand je l'ai testée seule pour écouter les sons au bon format  Ca marche même très bien.
Par contre, en voulant l'utiliser pour sonoriser un passage à niveau, j'avais un fonctionnement bizarre des servos qui ne bougeaient pas alors que la variation d'angulation allait bien à son terme.
J'avais donc un controle des barrières fermées alors qu'elles étaient toujours ouvertes  ::)

Après pas mal d'essais et recherches, j'ai découvert que la bibiothèque TMRpcm utilisait le même timer que la bibliothèque Servo. (timer1).
Comme je ne suis pas en mesure de modifier les accès et la gestion direct du processeur, j'ai trouvé une autre bibiothèque PWM pour les servos (Servo_Hardware_PWM) mais qui ne fonctionne que sur Mega (avec un autre timer). Dans ce cas, les 2 bibliothèques sont compatibles.
Il y a quelques restrictions sur les bornes utilisables en PWM, mais ça fonctionne.

Il fallait que je reprenne un peu mon programme pour commander les servos.

Finalement, j'ai pu tester DFPlayer qui fonctionne parfaitement avec les servos sans rien changer. En plus, pas de contrainte particulière sur la spécification des fichiers son (à par la numérotation).
J'ai adopté cette solution.
J'utiliserai TMRpcm dans un autre montage.

Yves


2
Vos projets / Re : Re : Carte son DFR0534
« le: février 20, 2020, 02:49:54 pm »
Bonjour Yves

Regarde ces 2 posts

http://forum.locoduino.org/index.php?topic=157.0
http://forum.locoduino.org/index.php?topic=255.0

Cordialement
Marcel

Bonjour Marcel


J'ai bien pu tester cette première solution avant de voir celle avec DFPlayer.

Après avoir bien formatter les fichiers wav avec les bonnes caractéristiques, j'ai pu lancer mes sons sans souci sur une platine d'essai avec 2 lettres dans le moniteur série et 2 sons (voir le croquis ci-joint).

Mais je butte sur un problème :
Dans la bibiothèque TMRpcm, il est bien dit : "Lecture asynchrone: permet au code de la boucle principale de s'exécuter pendant la lecture audio."

Or quand je lance le son au moment du déclenchement de mon annonce PN, ça fonctionne, mais au démarrage des servos (7s après), les servos ne répondent pas.
Je décrémente bien le compteur de l'angle de fermeture, mais les moteurs restent fixes !
Dans mon programme, je n'ai aucun delay(). Tout est géré avec des compteurs utilisant millis().

Est-ce que quelqu'un a déja remarqué le phénomène, ou bien j'aurais raté quelque chose ?

J'ai fait quelque chose de simple puisque je n'ai qu'un son à envoyer :
pour la commande :
     if (digitalRead(PIN_CSR_T) == 0){etat_CSR_T = false; audio.play("annonce1.wav"); son1= 1;}   // memorisation du CSR

pour l'arrêt, je stoppe le son à environ 8° de l'horizontal, soit 1190, alors que la fin de course du servo est à 1100 :
if ((angle_SR1 <= 1190) && (son1 == 1)) {audio.pause(); son1 = 0;} // arrêt du son

Quand je remonte les barrières, il y a un mouvement des servos qui se remettent en concordance avec la valeur 1100 et ça remonte normalement.
Quand j'enlève audio.play("annonce1.wav");, tout fonctionne normalement
J'ai l'impression qu'il y a interférence.

Un indice ?


 

3
Vos projets / Re : Re : Carte son DFR0534
« le: février 18, 2020, 06:35:23 pm »
Je peux t'en envoyer 1 ou 2 si cela t’arrange, j'en ai pas mal en stock pour mon train de jardin

Super !
J'en veux bien 1.
Je viens d'en commander chez banggod, mais au moins 3-4 semaines de délai et peut être farcies du virus.

Je te la renverrai dès ça arrive.
Je te fournis mon adresse en MP

Merci

4
Vos projets / Re : Re : Re : Carte son DFR0534
« le: février 18, 2020, 05:15:12 pm »
Merci également pour cette solution qui me semble plus facile (!) pour mon niveau de connaissances.

Ce n'est pas une bagarre entre Marcel et moi, on s'entend trop bien, mais je cherche la difficulté dans l'exemple joint.

Cordialement
Antoine

Aaah !!!

Non, je ne cherche pas à vous opposer, loin de moi cette idée  :)

Je ne vois aucune difficulté de cablage ni d'un coté ni de l'autre.
C'est juste que le module DFPlayer, je ne l'ai pas sous la main et que j'ai un module de carte SD que je n'ai jamais testé.

Si difficulté il y a, ce serait plutot dans l'adaptation du code du DFPlayer qui est un module DFRobot comme mon DFR0534 et où je bute sur les différentes commandes.
J'ai regardé le site DFRobot, et effectivement, le code parait plus simple que pour mon module.
Je testerai et te ferai un retour.

Mais si je peux utiliser plusieurs solutions, je ne serai pas pris s'il me reste une carte son de coté : j'ai d'autres projets où je pourrai l'utiliser sans problème (surtout au prix où on peut la trouver).

Ce qui m'importe c'est d'apprendre : je suis quand même débutant en arduino depuis peu. Et plus j'en découvre, plus ça m'interesse.
Il me reste encore un peu de temps avant d'être atteint par les maladies de la mémoire (quoique !!!).

Cordialement

Yves

 

 


5
Vos projets / Re : Carte son DFR0534
« le: février 18, 2020, 02:13:42 pm »
@ Antoine
Merci pour ta réponse rapide.
Non, je n'ai aucune raison d'avoir choisi cette "maudite" carte. Tout simplement, je croyais que ce serait plus facile à mettre en oeuvre.
Je vais me commander un DFPlayer pour voir si je peux l'adapter. J'espère ne pas avoir les mêmes problèmes.

@ Marcel
Merci également pour cette solution qui me semble plus facile (!) pour mon niveau de connaissances.
Par contre je n'ai jamais utilisé les entrées SPI, SCK, MISO,....
Je dois avoir un module de carte SD dans une boite. Je regarde si je peux tester cette solution.

A bientot

Yves

6
Vos projets / Carte son DFR0534
« le: février 18, 2020, 11:18:26 am »
Bonjour à tous

Comme je l'ai deja évoqué par ailleurs, je suis en train de réaliser un passage à niveau à l'identique.
Il sera bientot greffé sur une maquette HO avec les moteurs alsthom trouvés ici https://www.decapod.fr/passages-a-niveau/769-demi-barrieres-de-pn-sur-moteur-alsthom-ho--2001500028967.html
et les feux correspondants trouvés ici https://www.production-ludo-modelisme.fr/Feux-doubles-2-Leds-Resistances-cbaaaaaTa.asp

Grace au site et aux contributions de plusieurs d'entre vous, mon projet PN est quasiment terminé (photo en P.J.).

Tout ceci fonctionne :
  • Preavis
    pulsation des feux à 70/mn
    Temps de descente et de remontée
    Fonction train croiseur
    KBrO et KBrF (controle de position des barrières)
    Afficheur état du PN (n'existe pas en vrai, mais pour un autre projet à greffer dessus !)

Il me reste un point où je bute depuis plusieurs jours (semaines même puisque je l'avais acheter en décembre).
J'ai une carte son DFR0534 qui me paraissait interessante.
Par contre, je ne comprends pas son fonctionnement.
J'ai pu y ajouter mes sons, les faire jouer sur une carte individuelle (uno ou mega) avec l'exemple fourni (en boucle), mais je n'arrive pas à commander comme je le souhaite.

Plusieurs points nébuleux :
l'utilisation de la bibliothèque softwareserial :
pourquoi une déclaration de variable Serial1 (il n'y a qu'un port série sur uno)
Pourquoi ça marche sur les bornes 10 et 11, alors que la liaison est en Tx et Rx (normalement 0 et 1 sur uno) ?

Comment choisir le son voulu (ce sont des adresses en hexa), mais je ne comprends pas "char order [4]
A quoi servent les serial1.write (order, 4), (play, 6), volume, 5) : le chiffre dans la parenthèse ?

Pour commencer, je voudrai, à partir d'un inverseur, commander le son 17 (hex 11) ou le son 20 (hex14) et l'arreter au bout de 10s.
Je joins mon croquis en l'état et la doc de la carte. Helas, je ne trouve quasiment rien sur ce produit sur le net.

S'il y avait une bonne ame pour m'aider à comprendre l'usage de cette carte (surtout du langage C !) et me sortir du gué, je pourrais finir proprement   ;)

Merci par avance


https://drive.google.com/file/d/1S2yN067opf4_LBSVU3QdSNBBUJ6oP7TW/view?usp=sharing








7
Présentez vous ! / Re : Re : dernier arrivé
« le: février 15, 2020, 12:14:17 am »
Bonsoir Yves et bienvenue

Je lis avec intérêt que tu as beaucoup œuvré sur les passages à niveau.
Aurais-tu eu à traité de problèmes du PN sur un réseau de vélo-rail sur des portions en concession SNCF
et croisant des voies vicinales ?

Le sujet n'est pas d'intérêt général quoique ...

Cordialement Roland

Bonjour Roland

J'ai traité pas mal de cas (du mixte tramway-SNCF par ex : c'est à dire, soumis à la réglementation STRMTG et EPSF = 4 PN sur tout le réseau !)), mais jamais de vélo rail  ::).
Tout est faisable, mais il faut bien gérer la sécurité des uns et des autres.
Il faudra m'en dire plus !
Et je peux certifier que Arduino et Raspberry ne sont pas utilisables à un PN !
Il me semble que ça sort du cadre de locoduino  :D
Si besoin, en MP  ?

Bonne soirée

Yves

8
Présentez vous ! / Re : Re : dernier arrivé
« le: février 15, 2020, 12:00:59 am »
Bonjour et un grand merci à tous les 2.
Ca me permet d'avancer très vite !


Bonjour Yves, 

Sur le site éditorial, il y a article concernant la gestion du temps: https://www.locoduino.org/spip.php?article6
Je pense que cela va vous permettre de vous passer de la fonction delay(). 

Pour le PWM, il y a: https://www.locoduino.org/spip.php?article47
 
Pour l'affichage, il faut être un peu plus précis. Quel est le type d'afficheur voulez-vous gérer(LCD, Led, ...)? 

Bonjour chez vous, 

Brut de Pomme

Avec l'exemple que Tony04 m'a donné en répondant à la question que j'ai posée dans "mes projets" et avec ce lien, je pense que je n'aurai plus de souci avec delay().
Concernant l'affichage, j'utilise un LCD 2x16 en I2C.
Pour l'instant, j'ai réussi à le faire fonctionner (il faut bien la bonne adresse hexa !).
J'aimerais faire une ligne en scrolling à gauche ou à droite, mais je ne suis pas sûr que ce soit possible (en tout cas, les commandes du LCD 2x16 normal ne fonctionnent pas).
A voir prochainement. J'ai d'autres points à régler plus urgents.

Au plaisir, Brut de pomme


Bonjour Yves,

et pour la gestion des sons voici une bonne source avec des mini modules DFPlayer super fiables, mais tu en trouveras d'autres: https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299#Connection_Diagram

Tu peux même contrôler 2 DFPlayer pour avoir des sons superposés (bruit de foule + annonce en gare par exemple) en définissant 2 SoftwareSerial.

Cordialement
Antoine

Merci Antoine pour ces infos,
j'ai devancé un peu ta réponse : j'avais acheté il y a quelques temps un module dfrobot, mais le DF0534 !
On peut y mettre ses sons comme sur une clé USB ((jusqu'à 30), mais par contre, pour l'utilisation, je galère par ma méconnaissance du langage C. Je peux lancer un son à un instant précis (un déclenchement d'annonce par exemple) mais je ne trouve pas le moyen de l'arrêter à un autre moment (la fin de la descente des barrières à 8° de l'horizontal, par exemple).
Je vais tenter de me replonger dans ce module et si je n'y arrive pas, je reviendrai demander du secours.

En P.J., la doc du module

A très bientot sans doute !

9
Vos projets / Re : Affichage ecran
« le: février 12, 2020, 09:09:27 pm »
Bonsoir Antoine

tout d'abord un grand merci, ça fonctionne.
J'avais galéré avec millis parce que je m'étais cantonné à encadrer le switch et non l'ensemble du loop.

En second point, je vais modifié mon profil.

Yves

10
Présentez vous ! / dernier arrivé
« le: février 12, 2020, 06:52:11 pm »
Bonjour

Je viens de voir que je ne me suis pas présenté depuis mon inscription du 9 décembre dernier !

Je suis retraité de la SNCF et j'ai passé beaucoup de temps sur les passages à niveau et postes d'aiguillage.
Par contre, je n'ai jamais fait de modélisme.
Je m'intéresse à arduino depuis quelque temps et j'ai découvert ce site de passionnés en voulant chercher des infos sur la modélisation d'un passage à niveau.
J'ai entrepris de réaliser un passage à niveau avec toutes les fonctions réelles pour en faire une maquette.

Si vous avez besoin d'infos sur le fonctionnel, je serai à votre disposition (j'ai déja donné quelques infos dans la rubrique "réalsation d'un passage à niveau").
Par contre, je pense que je vais avoir besoin d'aide pour comprendre une partie des subtilités d'arduino :
La gestion du son
La gestion de PWM
La gestion d'affichage

Ces 3 points me posent problème car ils utilisent delay qui bloque l'ensemble du programme principale.

Au plaisir de prochains échanges  ;)


11
Vos projets / Affichage ecran
« le: février 12, 2020, 06:21:35 pm »
Bonjour

Je reposte mon sujet que j'ai mis par erreur dans la rubrique "un automatisme de passage à niveau".

Je suis en train de réaliser un passage à niveau au plus près de la réalité.
Presque tout fonctionne correctement, mais je me heurte à un problème d’affichage sur un écran.

Je voudrais afficher en permanence sur un écran LCD I2C, l’état de 4 relais pour indiquer l’état du PN.
J’arrive bien à faire fonctionner mon affichage dans un programme isolé en utilisant la fonction delay().
Par contre, quand j'insère ce programme dans le programme principal, delay() me bloque l’ensemble (c'est logique !).
Comment pourrais-je m’en sortir et remplacer delay par autre chose ?
J’avais pensé à utiliser MsTimer2, mais là, je suis bloqué !

Il y a bien msport qui m'a répondu  ;), mais je ne vois pas où gérer millis().

Merci de votre aide

/* Fonctionnement d'un ecran LCS I2C sur Mega *****************
 *  Branchement en +VCC, GND, SDA (20) et SLC (21)
 *  Informations provenant de 4 contats de relais
 *  branchés en A0, A1, A2 et A3 avec Resistances et capa
 *  pour gérer les rebonds (avec un trigger sur la carte finale
 *  ***********************************************************/

/* programme non compatible avec le reste du passage à niveau
 *  du fait de l'utilisation de la fonction delay(1000) pour
 *  l'affichage des différents états à l'écran (blocage du prog)
 *  *********************************************************/

#include <LiquidCrystal_PCF8574.h>
#include <Wire.h>
#include <MsTimer2.h>

LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display
int show = -1;
#define PIN_S0  A0
#define PIN_S1  A1
#define PIN_S2  A2
#define PIN_S3  A3
boolean etat0 ;
boolean etat1 ;
boolean etat2 ;
boolean etat3 ;
int etatbouton = 1;

void setup(){
// declaration des boutons en entrée
  pinMode (PIN_S0, INPUT);
  pinMode (PIN_S1, INPUT);
  pinMode (PIN_S2, INPUT);
  pinMode (PIN_S3, INPUT);

//  MsTimer2 :: set (1000, ecran); periode de 1s
//  MsTimer2 :: start();
 
  int error;
  Serial.begin(115200);
  Serial.println("LCD...");
  // wait on Serial to be available on Leonardo
  while (!Serial);
  Serial.println("Dose: check for LCD");
  // Voir http://playground.arduino.cc/Main/I2cScanner pour tester le port I2C.
  Wire.begin();
  Wire.beginTransmission(0x27);
  error = Wire.endTransmission();
  Serial.print("Error: ");
  Serial.print(error);
  if (error == 0) {
    Serial.println(": LCD found.");
    show = 0;
    lcd.begin(16, 2); // initialize the lcd
  } else {
    Serial.println(": LCD not found.");
  } // fin if
} // fin setup()

void loop(){
  etat0 = digitalRead(PIN_S0);
  etat1 = digitalRead(PIN_S1);
  etat2 = digitalRead(PIN_S2);
  etat3 = digitalRead(PIN_S3);
  lcd.setBacklight(255);
  lcd.home();
  lcd.clear();

  Serial.print(etat0);
  Serial.print(etat1);
  Serial.print(etat2);
  Serial.print(etat3);

switch (etatbouton) {
  case 1: if (etat0 == LOW){ //HIGH avec bascule de schmitt (inversion du signal) sinon LOW
      lcd.setCursor(0, 0);
      lcd.print(" PN a 298 metres ");
      lcd.setCursor(0, 1);
      lcd.print("  ");
  }
  case 2: if (etat1 == LOW){
    lcd.setCursor(0, 0);
    lcd.print(" PN a 240 metres ");
    lcd.setCursor(0, 1);
    lcd.print("     Ferme");
  }
  case 3: if (etat2 == LOW){
    lcd.setCursor(0, 0);
    lcd.print("     Danger ");
    lcd.setCursor(0, 1);
    lcd.print(" Ne pas franchir ");
  }
  case 4: if (etat3 == LOW){
    lcd.setCursor(0, 0);
    lcd.print("  Route barree");
    lcd.setCursor(0, 1);
    lcd.print("     travaux");
  }
 case 5: if (etat0==HIGH && etat1==HIGH && etat2==HIGH && etat3==HIGH){
    lcd.setCursor(0, 0);
    lcd.print("   Etat du PN ");
    lcd.setCursor(0, 1);
    lcd.print("   indetermine");
}
delay(1000); 
}
} //fin de loop

Pages: [1]