Arduino - Traitement de l'information

Toutes les discussions sur l'Arduino !

Modérateur : MOD

Avatar du membre
likiki
Éloquent
Messages : 301
Enregistré le : dim. 29 avr. 2012, 15:21
Echelle pratiquée : H0 3R
Prénom : Christian
Site Internet : http://passionnement.forumactif.org
Localisation : Corbeil Essonne
Âge : 52

Re: Arduino - Traitement de l'information

Message par likiki » lun. 16 déc. 2013, 18:16

Toutafé, fils du dieux Arduino et de la déesse Mega2560, toujours habillé d'une toge rayé Jaune/Vert.

:mdr2:
Cordialement,

Christian.

jepi54
Papotier
Messages : 192
Enregistré le : mer. 13 janv. 2010, 13:40

Re: Arduino - Traitement de l'information

Message par jepi54 » lun. 16 déc. 2013, 23:01

:moi: ben moi je suis largué de chez largué…

jp :ugeek:

Avatar du membre
Arduino
Prolixe
Messages : 1700
Enregistré le : mer. 25 sept. 2013, 17:14

Re: Arduino - Traitement de l'information

Message par Arduino » jeu. 19 déc. 2013, 10:16

Dans ce forum, on se rend compte qu'il y a une différence entre le prototype qui fonctionne et l'application en condition réelle. Le problème est la sensibilité au bruit (pas sonore mais électronique :lol: ) et aux parasites !

Il faut dire qu'en DCC, vu la fréquence du courant avec un signal carré alternatif, cela rayonne avec pas mal d'harmoniques (fréquences de rayonnement).

Le même montage aurait sans doute très bien fonctionné en alimentation analogique (courant continu) .... encore que ! (voir par exemple le rayonnement d'un téléphone mobile proche de l'application). :gne:

Il faut donc rechercher les solutions pour isoler le montage microcontrôleur de l'environnement (blindage, mise à la masse, capas de découplage) et ceci devient un problème d'électronique.

Mais c'est très bien d'avoir mis le doigt dessus et d'avoir solutionné. :applause:

Il ne faut jamais se décourager d'un montage qui ne fonctionne pas comme on le souhaiterait ; il y a toujours une solution.

Christian

Avatar du membre
likiki
Éloquent
Messages : 301
Enregistré le : dim. 29 avr. 2012, 15:21
Echelle pratiquée : H0 3R
Prénom : Christian
Site Internet : http://passionnement.forumactif.org
Localisation : Corbeil Essonne
Âge : 52

Re: Arduino - Traitement de l'information

Message par likiki » jeu. 19 déc. 2013, 18:36

Actuellement, j'ai enrobé le cordon qui relis les capteurs a la carte d'un papier d'aluminium. le fait de poser un doigt sur la feuille d'aluminium permet un fonctionnement sans faille.

Je pense remplacer ce cordon par un cordon type fils téléphone blindé (le temps d'en trouver une chute pour faire un essais).

:siffle:
Cordialement,

Christian.

macsddau
Papotier
Messages : 114
Enregistré le : jeu. 17 oct. 2013, 22:46
Echelle pratiquée : N

Re: Arduino - Traitement de l'information

Message par macsddau » dim. 12 janv. 2014, 18:00

Bonjour à tous

J'ai regarder le code de Likiki. Je m'en suis inspiré pour écrire mon propre programme. Comme je n'ai pas d'afficheur je l'ai remplacé par une transmission des résultats par la ligne série de l'Arduino.
Le programme a été testé avec un minimum de composants (pas de capteur IR…). J'utilise de boutons poussoirs qui ont l'inconvénient de provoquer des rebonds.
Voici le schéma du montage
Image
Et le code

Code : Tout sélectionner

//Utlisation directe des registres de l'AVR
//car plus rapide que les fonctions Arduino (dans certains cas)
#include <avr/io.h>

//entrées en pull up (état 1 lorsque le bouton n'est pas pressé)
#define ENTREE_ON PIND & (1 << PIND2)//entrée =digitalRead(2) 
#define SORTIE_ON PIND & (1 << PIND3)//sortie =digitalRead(3)

//paramètres du modèle réduit
#define LONGUEUR_ES  0.1//m
#define ECHELLE    160.0// 1:ECHELLE

// les variables dans lesquelles sont enregistrés les temps de passage
volatile unsigned long  tEntreeOn  = micros();
volatile unsigned long  tEntreeOff = tEntreeOn;
volatile unsigned long  tSortieOn  = tEntreeOn;
volatile unsigned long  tSortieOff = tEntreeOn;
volatile byte nValeurs             = 0; // drapeau nouvelles valeurs 

void setup () {
  //Pattes d'entrée (équivalent à pinMode)
  // Arduino UNO v3 borne D2 (PD2/INT0) pour l'entrée
  // Arduino UNO v3 borne D3 (PD3/INT1) pour la sortie
  DDRD &= ~(1 << DDD2 | 1 << DDD3);
  
  //Utilisation des interruptions INT0 et INT1
  EICRA |= 1 << ISC00 | 1 << ISC10;//détection de front
  EIMSK |= 1 << INT0 | 1 << INT1;//autorise INT0 et INT1

  Serial.begin(115200);

  sei();//active les interruptions
}

// détection à l'entrée
ISR ( INT0_vect ) {
  //A faire immédiatement :
  unsigned long t = micros();//lire le temps de passage
  byte etat = ENTREE_ON;//lire l'état de l'entrée 
  
  if (etat) {
    tEntreeOn = t;
    nValeurs = 2;
  } else {
    tEntreeOff = t;
    nValeurs = 1;
  }
  attenteMs(2);//supprime les rebonds. Retirer la ligne avec un capteur propre
}

// détection à la sortie
ISR ( INT1_vect ) {
  //A faire immédiatement :
  unsigned long t = micros();//lire le temps de passage
  byte etat = SORTIE_ON;//lire l'état de la sortie
  
  if (etat) {
    tSortieOn = t;
    nValeurs = 4;
  } else {
    tSortieOff = t;
    nValeurs = 3;
  }
  attenteMs(2);//supprime les rebonds. Retirer la ligne avec un capteur propre
}

float vitesse(unsigned long d, float l) {
  return l / d * 3.6e6 * ECHELLE;//m/us -> km/h à l'échelle
}

//A utiliser à la place de Delay(ms) car accepte les interruptions
//Ajuster le max de i :
//    utiliser un chronomètre avec duree = 10000 (10s) par exemple
//    ou plus pour une meilleure précision (65,535s max)
void attenteMs (unsigned int duree) {
  volatile unsigned int i; 
  unsigned int j;
  for (j=0; j<duree; j++) {
    for (i=0; i<100; i++) {//a ajuster
    }   
  }
}

void loop () {
  if (nValeurs == 4) {
    cli();//désactivation les interruptions
    //récupération des temps de passage
    unsigned long nTSortieOff = tSortieOff;
    unsigned long nTEntreeOff = tEntreeOff;
    unsigned long nTSortieOn  = tSortieOn;
    unsigned long nTEntreeOn  = tEntreeOn;
    nValeurs = 0;//lu r.à z.
    sei();//réactivation des interruptions   

    float vNN = vitesse(nTSortieOff - nTEntreeOff,LONGUEUR_ES);
    float vCC = vitesse(nTSortieOn  - nTEntreeOn,LONGUEUR_ES);
    float vMoy = (vNN + vCC)/2;

    Serial.print(vNN);
    Serial.print(" km/h NN ");
  
    Serial.print(vCC);
    Serial.print(" km/h CC ");

    Serial.print(vMoy);
    Serial.println(" km/h Moy");
  } 
}
J'utilise les interruptions car la mesure du temps (heure) de détection du passage est plus précise.

Je n'ai pas bien compris à quoi sert la vitesse devant un capteur (vkmn2 & 3). Avec 0,3 mm de long la mesure doit être très imprécise. J'ai remplacé ces 2 vitesse par le calcul d'une vitesse moyenne.

Bonne continuation dans vos projets Arduino
Fichiers joints
Speedometer1_00.png
Speedometer1_00.png (8.22 Kio) Vu 3277 fois
Modifié en dernier par macsddau le dim. 12 janv. 2014, 18:46, modifié 1 fois.
MS2 CC2 S-DEC-4-DC Rocrail

macsddau
Papotier
Messages : 114
Enregistré le : jeu. 17 oct. 2013, 22:46
Echelle pratiquée : N

Re: Arduino - Traitement de l'information

Message par macsddau » dim. 12 janv. 2014, 18:43

J'ai lu les derniers messages concernant les problèmes de perturbations radio-électriques.

Dans le schéma de Likiki les entrées sont câblées de tel sorte que lorsque la diode est bloquée tu te retrouve avec une antenne de 60cm.
Voici 2 méthodes de câblage (à gauche celle de Likiki à droite une de celles décritent dans le LR798).

Image

J'aurai tendance à utiliser celle de droite bien qu'elle inverse la logique mais il n'y a plus d'antenne.
Fichiers joints
CablagesEntree.png
CablagesEntree.png (2.98 Kio) Vu 3273 fois
MS2 CC2 S-DEC-4-DC Rocrail

Avatar du membre
likiki
Éloquent
Messages : 301
Enregistré le : dim. 29 avr. 2012, 15:21
Echelle pratiquée : H0 3R
Prénom : Christian
Site Internet : http://passionnement.forumactif.org
Localisation : Corbeil Essonne
Âge : 52

Re: Arduino - Traitement de l'information

Message par likiki » dim. 12 janv. 2014, 18:58

Quel co.... je suis de ne pas avoir compris ça de suite.

Je vais essayer d'essayer ça dans la semaine.

:siffle:
Cordialement,

Christian.

macsddau
Papotier
Messages : 114
Enregistré le : jeu. 17 oct. 2013, 22:46
Echelle pratiquée : N

Re: Arduino - Traitement de l'information

Message par macsddau » dim. 12 janv. 2014, 20:33

Dans le montage que je propose, il va peut-être y avoir un problème de seuil de détection. Je ne connais pas grand chose en électronique mais je suppose que lorsque la diode est passante elle doit avoir une tension résiduelle. L'Arduino risque de ne pas détecter le changement d'état (les électrons sont faignants et choisissent le chemin le plus facile). Il faudra peut-être alors faire un câblage comme celui de droite :
Image
En prenant bien soins de placer le transistor et la résistance du collecteur au plus près de ton détecteur. Voir si phototransistor pourrai faire l'affaire.

Fais appel a des électroniciens confirmés pour valider le montage et choisir les composants.
Fichiers joints
CablagesEntree2.png
CablagesEntree2.png (3.58 Kio) Vu 3266 fois
MS2 CC2 S-DEC-4-DC Rocrail

macsddau
Papotier
Messages : 114
Enregistré le : jeu. 17 oct. 2013, 22:46
Echelle pratiquée : N

Re: Arduino - Traitement de l'information

Message par macsddau » lun. 13 janv. 2014, 17:25

Le câblage suivant m'a été conseillé. A voir pour les composants Rb=10k, le reste je ne sais pas. En tout état de cause il faut éviter de laisser les entrées de l'Arduino "en l'air".
Bonne continuation
Image
Fichiers joints
CablageEntree3.png
CablageEntree3.png (5.01 Kio) Vu 3240 fois
MS2 CC2 S-DEC-4-DC Rocrail

Avatar du membre
Ramboman
Disert
Messages : 423
Enregistré le : lun. 23 oct. 2006, 18:13
Echelle pratiquée : LGB
Localisation : Waterloo, Belgique
Âge : 75

Re: Arduino - Traitement de l'information

Message par Ramboman » lun. 13 janv. 2014, 18:36

Pourquoi faire simple quand on peut faire compliqué :mdr2:

Avatar du membre
likiki
Éloquent
Messages : 301
Enregistré le : dim. 29 avr. 2012, 15:21
Echelle pratiquée : H0 3R
Prénom : Christian
Site Internet : http://passionnement.forumactif.org
Localisation : Corbeil Essonne
Âge : 52

Re: Arduino - Traitement de l'information

Message par likiki » lun. 13 janv. 2014, 18:40

Ben, dans ce cas précis, j'avais fait simple, résultat, une antenne a parasites. :mdr:

Je vais tenter l'idée de "marcsddau", si cela fonctionne, ce sera top. :siffle:
Cordialement,

Christian.

Guillaume22
Papotier
Messages : 145
Enregistré le : dim. 29 sept. 2013, 09:20

Re: Arduino - Traitement de l'information

Message par Guillaume22 » sam. 18 janv. 2014, 22:19

Pour un projet, j'ai essayé les barrières IR.
J'ai essayé le cablage d'abord de likki pour une barrière IR. Impossible d'avoir des mesures correctes en analogique ne parlons pas du digital.
Puis j'ai connecté la LED IR comme un bouton poussoir : le 5v est connecté à une résistance de 100kohm de l'autre l'entrée de l'arduino ainsi que l'anode de la photodiode IR (récepteur à 2 pattes) et la cathode au GND.
Si barrière non coupée, entrée à 0 sinon entrée à 1 (digitale) ou 1023 y approchant en cas analogique. Cela marche au poil.
N'oubliez pas de mettre une résistance aussi sur l'émetteur sinon c'est grillage assuré, je viens de le faire...

macsddau
Papotier
Messages : 114
Enregistré le : jeu. 17 oct. 2013, 22:46
Echelle pratiquée : N

Re: Arduino - Traitement de l'information

Message par macsddau » sam. 18 janv. 2014, 22:33

Bonne nouvelle pour Likiki !
Guillaume22 a écrit :Puis j'ai connecté la LED IR comme un bouton poussoir : le 5v est connecté à une résistance de 100kohm de l'autre l'entrée de l'arduino ainsi que l'anode de la photodiode IR (récepteur à 2 pattes) et la cathode au GND.
Si je comprends bien tu as utilisé ce montage :
Image
Guillaume22 a écrit :Si barrière non coupée, entrée à 0 sinon entrée à 1 (digitale)
.
En effet la logique est inversé. Il suffit de dire "Un train passe devant la barrière optique" la pin de l'Arduino est à HIGH et "Pas de train" la pin est à LOW.

Comme les électroniciens disent le tout est de bien soigner ses entrées.
Fichiers joints
CablagesEntree2.png
CablagesEntree2.png (2.89 Kio) Vu 3175 fois
MS2 CC2 S-DEC-4-DC Rocrail

Guillaume22
Papotier
Messages : 145
Enregistré le : dim. 29 sept. 2013, 09:20

Re: Arduino - Traitement de l'information

Message par Guillaume22 » sam. 18 janv. 2014, 23:26

Oui c'est ce montage.

Avatar du membre
likiki
Éloquent
Messages : 301
Enregistré le : dim. 29 avr. 2012, 15:21
Echelle pratiquée : H0 3R
Prénom : Christian
Site Internet : http://passionnement.forumactif.org
Localisation : Corbeil Essonne
Âge : 52

Re: Arduino - Traitement de l'information

Message par likiki » sam. 18 janv. 2014, 23:27

Et avec ça, pas de perturbation en DCC ni en analogique ? :siffle:
Cordialement,

Christian.

Répondre