IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Arduino Nano Min V3 et entrées analogiques


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 034
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 034
    Par défaut Arduino Nano Min V3 et entrées analogiques
    Bonjour à tous,

    J'essaie de faire un banal testeur de piles à l'aide d'un arduino nano mini V3 que je trouve pratique par son encombrement
    je vous sollicite parce que je ne trouve pas la bonne solution quant à la précision de ma mesure d'entrée sur A0

    je mesure mes différentes piles à partir d'un pont diviseur composé de 2 résistances que j'ai mesurées avec un multimètre à savoir
    ( gamme de 0 à 12v max )
    R1 = 98400.0; // ohms valeur mesurée
    R2 = 67800.0; // ohms valeur mesurée

    j'en détermine un coefficient soit : (R1+R2)/R2;

    et enfin je fais ma mesure sur A0 :
    Vmes = (map(raw, 0, 1023, 0, 5000) * coeffDiv )/1000 ;

    j'ai teste mon montage à partir d'un accu 18650 avec une valeur lue sur multimètre de 3.91v
    si je reporte mon montage sur arduino UNO basique , la valeur lue est 3.92v ( avec quelques sauts de lecture ) et ceci est tout à fait satisfaisant
    mais si je reporte le même mon montage et même programme sur l'Arduino Nano V3 Mini , la valeur lue est de 4.12v
    il semblerait donc que le CAN ne soit pas identique ou de même précision

    je vous sollicite pour savoir comment je pourrais améliorer dans le second cas la précision de ma mesure
    en sachant qu'il n'existe pas d'entrée AREF sur ce module semble-t-il
    voici le croquis de test ( je n'ai pas pu le mettre sur wokwi je n'ai pas trouvé le moyen de générer une tension d'entrée A0 sur le simu ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
     
    #define OLED_RESET -1
    Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);
     
    // Table des tensions nominales pour DIP switch
    float tensions[8] = {1.5, 3.0, 3.7, 4.5, 6.0, 9.0, 12.0, 0}; 
     
    // Broches
    const int analogPin = A0;   // mesure pile
    const int dipPins[8] = {3,4,5,6,7,8,9,10}; // DIP switch
     
    // Diviseur de tension 
    const float R1 = 98400.0;  // ohms valeur mesurée
    const float R2 = 67800.0;   // ohms valeur mesurée
    const float Correction = 0;
    const float coeffDiv = (R1+R2)/R2;  
     
     
    void setup() {
      Serial.begin(9600);
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
      display.clearDisplay();
     
      for(int i=0;i<8;i++){
        pinMode(dipPins[i], INPUT_PULLUP); // DIP vers GND
      }
    }
     
    void loop() {
      // Lire la tension de la pile
      int raw = analogRead(analogPin);
      float Vmes = (map(raw, 0, 1023, 0, 5000) * coeffDiv )/1000 ;
      //Vmes = Vmes + (Correction*Vnom) ; 
      Serial.println(Vmes);
      // Déterminer quel DIP est activé
      int index = -1;
      for(int i=0;i<8;i++){
        if(digitalRead(dipPins[i]) == LOW) {
          index = i;
          break;
        }
      }
      Serial.println(index);
      // Si aucun DIP  afficher erreur
      if(index == -1 || tensions[index] == 0){
        display.clearDisplay();
        display.setTextSize(1);
        display.setTextColor(SSD1306_WHITE);
        display.setCursor(10, 20);
        display.print("Choisir DIP!");
        display.display();
        delay(500);
        return;
      }
     
     
      // Calcul pourcentage
      bool HG = false ;
      float Vnom = tensions[index];
      Vmes = Vmes + (Correction*Vnom) ; 
      int pourcent = (int)((Vmes / Vnom) * 100.0);
     
      if(pourcent > 100) {
         pourcent = 100;
         HG = true ;
      }else{
         HG = false ;
      }   
      if(pourcent < 0) pourcent = 0;
     
      // Affichage
      display.clearDisplay();
      display.setTextColor(SSD1306_WHITE);
      display.setTextSize(1);
      display.setCursor(0,0);
      display.print("Type : ");
      display.print(Vnom,1);
      display.print(" V");
     
      display.setCursor(0,20);
      display.print("Mesure : ");
      display.print(Vmes,2);
      display.print(" V");
     
      display.setCursor(0,40);
      display.print("Etat : ");
      display.print(pourcent);
      display.print(" %");
     
      display.setCursor(20,50);
      if (HG) {
        display.print("Hors Gamme");
      }else{
        display.print(" ");  
      }
     
      display.display();
      delay(2000);
     
     
    }
    Images attachées Images attachées  

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 584
    Par défaut
    fait un autre essai avec une autre pile, et vois si tu trouves encore cet écart de 0.2V si c'est le cas, tu pourrais l'intégrer à ton calcul.
    En principe, la puce a bien un AREF (pin 20), mais elle n'est pas sortie sur les pins externes de la carte https://ww1.microchip.com/downloads/..._Datasheet.pdf

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 034
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 034
    Par défaut
    gamme entrée 3.7v => Mesure : 4.12v : Pile : 3.91v écart 0.21v

    gamme entrée 9v => Mesure : 8.22v : Pile : 7.82v écart 0.40v

    je pense avoir oublié un paramètre important : la tension fournit par pin 5v de l'arduino n'est pas de 5V (!) mais de 4.73V (USB)
    ceci change tout dans la formule :

    float Vmes = (map(raw, 0, 1023, 0, 5000) * coeffDiv )/1000 ;

    qu'il faut corriger en :

    float Vmes = (map(raw, 0, 1023, 0, 4730) * coeffDiv )/1000 ;

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 584
    Par défaut
    avec cette correction, tu retrouves les bonnes valeurs?

  5. #5
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 034
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 034
    Par défaut
    Oui ,
    c'est idiot de ma part je n'ai pas pensé qu'il n'y avait pas forcement 5v sur la pin Arduino (?)
    j'ai donc alimenté via Vin ( pile 9v) et là je retrouve mes valeurs

    je cherche maintenant une façon plus logique de faire une tension de référence 5v fixe (HT7350par ex)
    pour me permettre de n'être plus influencé par le 5v de l'Arduino

    je suis preneur de toute idée ...

Discussions similaires

  1. Réponses: 40
    Dernier message: 25/08/2025, 16h56
  2. Arduino Nano 33 IOT pin analogique problème
    Par Zedd2 dans le forum Arduino
    Réponses: 13
    Dernier message: 19/11/2021, 11h04
  3. A propos de LED_BUILTIN sur Arduino Nano
    Par Chamac dans le forum Arduino
    Réponses: 10
    Dernier message: 10/01/2017, 11h59
  4. Réponses: 8
    Dernier message: 23/12/2016, 19h06
  5. Thermocouple avec Arduino Nano v3.0
    Par redui dans le forum Arduino
    Réponses: 13
    Dernier message: 13/12/2016, 12h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo