affichage voltage batterie

bonjour,
encore moi :slight_smile:

je viens d'intégrer le code pour afficher le voltage de la batterie, mais une chose m'échappe.
n'ayant rien de connecté à part l'usb pour l'alimentation de l'arduino, j'ai quand même un voltage qui s'affiche.

code prit dans le cookbook

*
DisplayMoreThan5V sketch
prints the voltage on analog pin to the serial port
Do not connect more than 5 volts directly to an Arduino pin.
*/

const int referenceVolts = 5; // the default reference on a 5-volt board
//const float referenceVolts = 3.3; // use this for a 3.3-volt board

const int R1 = 3000; // value for a maximum voltage of 20 volts
const int R2 = 1000;
// determine by voltage divider resistors, see text
const int resistorFactor = 255 / (R2/(R1 + R2));
const int batteryPin = 0; // +V from battery is connected to analog pin 0

void setup()
{
Serial.begin(9600);
}

void loop()
{
int val = analogRead(batteryPin); // read the value from the sensor
float volts = (val / resistorFactor) * referenceVolts ; // calculate the ratio
Serial.println(volts); // print the value in volts
delay(1000);                  //  Slow it dow
}

j'ai intégré le code après dans mon html afin de voir le voltage par internet, mais c'est la même chose.
ca donne ca dans la console

1980.00

-1020.00

-2300.00

-1090.00

-1910.00

-1970.00

-1070.00

-2310.00

-1025.00

-1970.00

-1870.00

-1130.00

-2300.00

-960.00

-1855.00

-1990.00

même en prenant le code le plus simple il y a toujours un voltage qui s'affiche

/*
Display5vOrless sketch
prints the voltage on analog pin to the serial port
Warning - do not connect more than 5 volts directly to an Arduino pin.
*/
const int referenceVolts = 5; // the default reference on a 5-volt board
const int batteryPin = 0; // battery is connected to analog pin 0
void setup()
{
Serial.begin(9600);
}
void loop()
{
int val = analogRead(batteryPin); // read the value from the sensor
float volts = (val / 1023) * referenceVolts; // calculate the ratio
Serial.println(volts); // print the value in volts
}

chose plus étrange,
si je connecte mes broches pour piloter mon bouton poussoir (cf le topic bouton poussoir) et que je connecte une simple pile pour afficher son voltage, à certains moment, le voltage de la pile et celui de la carte s'additionnent.
je me retrouve du coup avec une tension de 8-9v au lieu de 3v (tension de ma batterie pour les tests)

si vous pouviez m'expliquer le pourquoi de la chose, car ca m'échappe.
merci d'avance

Quelques remarques sur le logiciel.
referenceVolts et resistorFactor devraient être des float.
val devrait être un unsigned int

Quand tu n'as rien de branché sur l'entrée A0 c'est possible que tu mesures n'importe quoi puisque celle-ci est "en l'air".

chose plus étrange,
si je connecte mes broches pour piloter mon bouton poussoir (cf le topic bouton poussoir) et que je connecte une simple pile pour afficher son voltage, à certains moment, le voltage de la pile et celui de la carte s'additionnent.
je me retrouve du coup avec une tension de 8-9v au lieu de 3v (tension de ma batterie pour les tests)

C'est toujours vrais après avoir réuni les masses entre les 2 appareils?

oui, justement, c'est ca qui m'inquiète un peu.
car j'ai une batterie 12v pour alimenter ma carte regulateur solaire, donc ca s'ajoute à la pile de 3v que je veux tester en affichage.

pilotage de mon bouton via le 4 et GND
récupération de la tension de la pile via le A0 et GND

ca donne ca en gros
4------->base BC337
GND 1 ----->masse du regulateur
A0-----> + de la pile
GND 2----> - de la pile

ca donne ca en gros
4------->base BC337
GND 1 ----->masse du regulateur
A0-----> + de la pile
GND 2----> - de la pile

D'accord mais est-ce que la masse du régulateur est bien commune avec le - de la pile?
Si ce n'est pas le cas il faudrait utiliser un opto-coupleur au lieu d'un simple transistor pour piloter le bouton poussoir.

oui tout à fait.
pour le moment je fais les tests avec une pile de 3v connectée sur le regulateur de tension.
je termine le montage d’une résistance de 4.7K et d’une 1K pour monter au dessus des 5v de tension et connecter la batterie de 12v.

mais je me demande si l’alimentation via usb sur l’arduino ne perturbe pas le tout.

voici le code entier

#include <SPI.h>

#include <Ethernet.h>
#include <Server.h>


/*
Allumage led via internet
 */

byte mac[] = { 
  0x90, 0xA2, 0xDA, 0x00, 0x7C, 0xDB }; //physical mac address
byte ip[] = { 
  192,168,2, 177 }; 			// ip in lan
byte gateway[] = { 
  192, 168, 2, 2 };			// internet access via router
byte subnet[] = { 
  255, 255, 255, 0 };                   //subnet mask
Server server(80);                                      //server port
byte sampledata=50;            //some sample data - outputs 2 (ascii = 50 DEC)             
int ledPin = 4;  // LED pin
////------
const int referenceVolts = 5; // the default reference on a 5-volt board
//const float referenceVolts = 3.3; // use this for a 3.3-volt board

const int R1 = 4700; // value for a maximum voltage of 20 volts
const int R2 = 1000;
// determine by voltage divider resistors, see text
const int resistorFactor = 255 / (R2/(R1 + R2));
const int batteryPin = 0; // +V from battery is connected to analog pin 0
///-----------

//programmation regulateur 1
String readString = String(30); //string for fetching data from address
boolean LEDON = false; //LED status flag

void setup(){
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
  //Set pin 4 to output
  pinMode(ledPin, OUTPUT);  

  //enable serial datada print  
  Serial.begin(9600);

}
void loop(){

  int val = analogRead(batteryPin); // read the value from the sensor
  float volts = (val / resistorFactor) * referenceVolts ; // calculate the ratio
  Serial.println(volts); // print the value in volts 

    delay(1000);                  //  Slow it dow



  // Create a client connection
  Client client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        //read char by char HTTP request
        if (readString.length() < 100) 
        {
          //store characters to string 
          readString += c; //replaces readString.append(c);
        }  
        //output chars to serial port
        Serial.print(c);
        //if HTTP request has ended
        if (c == '\n') {
          //dirty skip of "GET /favicon.ico HTTP/1.1"
          if (readString.indexOf("?") <0)
          {
            //skip everything
          }
          else
            //lets check if LED should be lighted
            if(readString.indexOf("L=1") >0)//replaces if(readString.contains("L=1"))
            {
              //led has to be turned ON
              digitalWrite(ledPin, HIGH);    // set the LED on
              //analogWrite(ledPin,255);
              LEDON = true;
            }
          else{
            //led has to be turned OFF
            digitalWrite(ledPin, LOW);    // set the LED OFF
            LEDON = false;             
          }

          //Mise en prog module 1
          if(readString.indexOf("L=2") >0)//replaces if(readString.contains("L=1"))
          {
            //led has to be turned ON
            digitalWrite(ledPin, HIGH);    // set the LED on
            LEDON = true;
            delay(7000);
            digitalWrite(ledPin, LOW);    // set the LED OFF
            LEDON = false;   
          }
          //Impulsion module 1
          if(readString.indexOf("L=3") >0)//replaces if(readString.contains("L=1"))
          {
            //led has to be turned ON
            digitalWrite(ledPin, HIGH);    // set the LED on
            LEDON = true;
            delay(100);
            digitalWrite(ledPin, LOW);    // set the LED OFF
            LEDON = false;   
          }
          // now output HTML data starting with standart header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          //set background to yellow
          client.print("<body>");
          //send first heading

          client.println("<h1>Voltage batterie control</h1>");
          client.println(volts);
          client.println("<h1>LED control</h1>");
          //Mise en programmation du module 1
          client.println("<form method=get name=LED ><input type=hidden name=L value=2 >Mise en programmation du module
 <INPUT type=submit value=Envoyer> </form>");
          //Incrementation du module 1 
          client.println("<form method=get name=LED ><input type=hidden name=L value=3 >Impulsion module 1
 <INPUT type=submit value=Envoyer> </form>");
          //Teste de la led de tavail         
          client.println("<font color='blue' size='5'>Allumer/&eacute;teindre led");
          client.println("
");
          if (LEDON) {
            client.println("<form method=get name=LED ><select name=L > <option value=0 > eteindre </option>  <option value=1 > allumer </option> </select> <INPUT type=submit value=Envoyer> </form>");
          } 
          else {
            client.println("<form method=get name=LED ><select name=L ><option value=1 > allumer </option> <option value=0 > eteindre </option>  </select> <INPUT type=submit value=Envoyer> </form>");
          }
          client.println("
");

          //printing LED status
          client.print("<font size='5'>LED status: ");
          if (LEDON)
          {
            client.println("<font color='red' size='5'>ON"); 
          } 
          else {
            client.println("<font color='green' size='5'>OFF");  
          }   
          client.println("</body></html>");
          //clearing string for next read
          readString="";
          //stopping client
          client.stop();
        }
      }
    }
  }
}

bon, j'ai résolu en partie le problème en trichant un peu.
sur le bouton poussoir, j'ai du 5v max, donc pour afficher le voltage, j'ai multiplié par 2.4 pour afficher 12v.

je vais voir pour afficher la tension du panneau solaire en plus