Auteur Sujet: Problème de programme  (Lu 91 fois)

LO

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Problème de programme
« le: février 13, 2019, 07:07:12 pm »
Bonjour, je prépare mon bac et pour cela, j'ai besoin d'effectuer un programme qui, à l'aide d'un capteur infrarouge (pour capter la vitesse) et un capteur d'intensité, me permettrai de mesurer la consommation d’ampère au cours du temps, de la vitesse, tout en pouvant faire varier la charge tractée, le tout enregistrer sur une carte SD... voilà pour le contexte (sachant que la charge est changée manuellement, donc sans capteur (je sais même pas si ça existe)).
Mon problème est : je suis une débutante au niveau d'Arduino  :-[. Voici mon programme :

#include <SPI.h>;
#include <SD.h>;
File fichierSD;
const byte CARTE = 12; //brancher carte sd sur digital 12

const int AnalogIntensite = A0;
const int AnalogRotation = A5;
int Intensiteinitiale = 0;
int Vitesseinitiale = 0;
float Intensite = 0;
float Rotation = 0;

unsigned long t = 0;

void setup() {
       Serial.begin(115200);
       SD.begin(CARTE);
        t = millis();

 }

void loop() {

 Intensite = analogRead(AnalogIntensite); // la valeur d'intensité varaible est ce qui est lu sur le signal
 Rotation = (analogRead(AnalogRotation)/16); //la valeur de la rotation mesuré = au nombre de fois où l'infrarouge lit un trou/ le nombre de trou
 Serial.println(Intensite);
 Serial.println(Rotation);

 //Ouverture du fichier ANALOG
 fichierSD = SD.open("analog.txt" , FILE_WRITE);

 //Test pour écriture
 if(fichierSD) {
  Serial.println(F("Ecriture en cours"));
 // Ecriture
 fichierSD.println("Courant =" (Intensite))( "Rotation(tr/s) =" (Rotation));
 fichierSD.close();
 }

 delay(500);
 
 }

Honnêtement, j'ai travaillé à partir des codes des capteurs fournit par les constructeurs, avec des tutos, et aussi avec des articles de locoduino, mais le programme ne fonctionne toujours pas  :-\.

Si quelqu'un pouvait m'aider svp

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1554
  • 100% Arduino et N
    • Voir le profil
Re : Problème de programme
« Réponse #1 le: février 13, 2019, 07:21:30 pm »
Bonjour,

Pouvez-vous expliquer votre problème, ce que vous attendez, ce que vous n’obtenez pas, les erreurs constatées, quelle application du modéliste ferroviaire est-ce, etc..

Les exemples de Locoduino fonctionnent bien donc vous devriez trouver vos erreurs en comparant.

LO

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Problème de programme
« Réponse #2 le: février 13, 2019, 07:46:41 pm »
Concrètement, mon programme n'as aucun rapport avec ce qui est ferroviaire :
 
but du programme : mesurer intensité, vitesse de rotation au cours du temps + les enregistrer sur carte SD
attendus : affichage des valeurs de Intensité et de Rotation sur un fichier bloc-notes d'une carte SD
problèmes : affichage de valeurs de I non correctes (pas possible qu'elles soient produites puisque la batterie qui est relié au moteur ne peut pas fournir une telle intensité)

LO

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Problème de programme
« Réponse #3 le: février 13, 2019, 07:46:58 pm »
Voici un programme modifié:

#include <SPI.h>;
#include <SD.h>;
File fichierSD;
const byte CARTE = 12; //brancher carte sd sur digital 12
const int AnalogIntensite = A0;
const int AnalogRotation = A5;
float Intensite = 0;
float Rotation = 0;
unsigned long t = 0;

void setup() {
Serial.begin(115200);
  SD.begin(CARTE);
  t = millis();

 }

void loop() {

 Intensite = analogRead(AnalogIntensite); // la valeur d'intensité varaible est ce qui est lu sur le signal
 Rotation = ((analogRead(AnalogRotation)/16)*100); /*la valeur de la rotation mesuré = au nombre de fois où
                                                     l'infrarouge lit un trou/ le nombre de trou*100(conversion en s*/
 //Ouverture du fichier ANALOG
 fichierSD = SD.open("analog.txt" , FILE_WRITE);

 //Test pour écriture
 if(fichierSD) {
  Serial.println(F("Ecriture en cours"));
 // Ecriture
 Serial.println("Courant =");
 Serial.println(Intensite);
 Serial.println("Rotation(tr/s) =");
 Serial.println(Rotation);
 Serial.println("Temps(m/s)");
 Serial.println(t);
 fichierSD.close();
 }

 delay(500);
 
 }

« Modifié: février 13, 2019, 07:50:56 pm par LO »

msport

  • Hero Member
  • *****
  • Messages: 542
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Problème d'attention
« Réponse #4 le: février 13, 2019, 09:59:08 pm »
J'ai l'impression qu'il manque dans le setup un petit morceau de l'exemple de la référence Arduino.
https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/

On vous laisse trouver quoi ?
« Modifié: février 13, 2019, 10:00:39 pm par msport »
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1377
    • Voir le profil
Re : Problème de programme
« Réponse #5 le: février 13, 2019, 11:28:41 pm »
Bonsoir

Juste pour être sûr, la lecture de vitesse se fait en comptant les impulsions : un trou dans une roue passe devant un capteur fourche ?
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1554
  • 100% Arduino et N
    • Voir le profil
Re : Problème de programme
« Réponse #6 le: février 14, 2019, 12:47:56 am »
Êtes-vous certaine que la carte SD sert à quelque chose ?

On ne pourra sûrement pas vous aider sans le schéma de montage et un peu plus de détails, car on ne voit pas bien ce qui est mesuré toutes les 1/2 secondes.

« Modifié: février 14, 2019, 12:55:28 am par Dominique »

msport

  • Hero Member
  • *****
  • Messages: 542
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : Problème de logique
« Réponse #7 le: février 14, 2019, 10:58:48 am »
la lecture de vitesse se fait en comptant les impulsions : un trou dans une roue passe devant un capteur fourche ?
/la valeur de la rotation mesuré = au nombre de fois où l'infrarouge lit un trou

Il y a effectivement un problème de logique :
avec une mesure analogique, difficile de compter un nombre de fois ...
Cordialement