Mesurer le courant et la tension d'un panneau solaire avec un capteur INA219 et d'une carte Arduino UNO

Bonjour, je suis nouveau sur le forum et je suis débutant sur Arduino.
J'ai un projet de fin d'année en 1ère STI2D, et je dois mesurer le courant et la tension d'un panneau solaire avec un capteur INA219, puis retransmettre les informations sur un écran LCD et tout cela relié avec une carte Arduino UNO et une platine d'essais. J'ai déjà fait mon code, mais je ne sais pas si il est bon. Pouvez vous me dire quels sont les erreurs et me les indiquer où elles le sont ?

Merci d'avance

Voici le code :

#include <Wire.h>
#include <Adafruit_INA219.h>

Adafruit_INA219 ina219;


void setup(void) 
{
  Serial.begin(115200);
  while (!Serial) {
      // will pause Zero, Leonardo, etc until serial console opens
      delay(1);
  }

  uint32_t currentFrequency;
    
  Serial.println("Hello!");
  
  // Initialize the INA219.
  // By default the initialization will use the largest range (32V, 2A).  However
  // you can call a setCalibration function to change this range (see comments).
  if (! ina219.begin()) {
    Serial.println("Failed to find INA219 chip");
    while (1) { delay(10); }
  }
  // To use a slightly lower 32V, 1A range (higher precision on amps):
  //ina219.setCalibration_32V_1A();
  // Or to use a lower 16V, 400mA range (higher precision on volts and amps):
  //ina219.setCalibration_16V_400mA();

  Serial.println("Measuring voltage and current with INA219 ...");
}

void loop(void) 
{
  float shuntvoltage = 0;
  float busvoltage = 0;
  float current_mA = 0;
  float loadvoltage = 0;
  float power_mW = 0;

  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();
  loadvoltage = busvoltage + (shuntvoltage / 1000);
  
  Serial.print("Bus Voltage:   "); Serial.print(busvoltage); Serial.println(" V");
  Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
  Serial.print("Load Voltage:  "); Serial.print(loadvoltage); Serial.println(" V");
  Serial.print("Current:       "); Serial.print(current_mA); Serial.println(" mA");
  Serial.print("Power:         "); Serial.print(power_mW); Serial.println(" mW");
  Serial.println("");

  delay(2000);
}

#include <Wire.h>
#include <Adafruit_INA219.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSerifItalic12pt7b.h>

Adafruit_INA219 ina219;

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
float current_mA = 0;
float loadvoltage = 0;
float power_mW = 0;

void setup(void)
{
  Serial.begin(115200);
  while (!Serial) {
    // will pause Zero, Leonardo, etc until serial console opens
    delay(1);
  }
  uint32_t currentFrequency;

  if (! ina219.begin()) {
    Serial.println("Failed to find INA219 chip");
    while (1) {
      delay(10);
    }
  }

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); // Don't proceed, loop forever
  }
  // Clear the buffer
  display.clearDisplay();
  Serial.println("Measuring voltage and current with INA219 ...");
}

void loop(void)
{
  
  float shuntvoltage = 0;
  float busvoltage = 0;
  current_mA = 0;
  loadvoltage = 0;
  power_mW = 0;

  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();
  loadvoltage = busvoltage + (shuntvoltage / 1000);

  Serial.print("Load Voltage:  "); Serial.print(loadvoltage); Serial.println(" V");
  Serial.print("Current:       "); Serial.print(current_mA); Serial.println(" mA");
  Serial.print("Power:         "); Serial.print(power_mW); Serial.println(" mW");
  Serial.println("");
  display.clearDisplay();
  voltCurrent();
  delay(2000);
  display.clearDisplay();
  powerr();
  delay(2000);
}

void voltCurrent() {
  display.setFont();
  display.setTextSize(2); // Draw 2X-scale text
  display.setTextColor(WHITE);
  display.setCursor(0, 0);            // Start at top-left corner
  display.print(loadvoltage);
  display.print("V");
  display.setCursor(0, 18);
  display.print(current_mA);
  display.print("mA");
  display.display();
}

void powerr() {
  display.setFont(&FreeSerifItalic12pt7b);
  display.setTextSize(1); // Draw 2X-scale text
  display.setTextColor(WHITE);
  display.setCursor(0, 20);            // Start at top-left corner
  display.print(power_mW);
  display.print("mW");
  display.display();
}

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

1 Like

Bonjour clem4957

Petite erreur de presse-papier? :wink:
Il semblerai que ton sketch soit dédoublé.

A+
Cordialement
jpbbricole

1 Like

Bonjour,
Merci beaucoup car j'ai fait un code pour l'ina219, le panneau solaire et la carte arduino, plus un autre code avec en plus l'écran LCD. Du coup j'ai enlevé le premier code et ça marche.

PS : je suis débutant, je pense que ça se voit :sweat_smile:
Et désolé pour le dérangement
Merci infiniment

Bonjour clem4957

Il n'y a pas de dérangement qui soit, on est tous passés par là :wink:

Bonne continuation.

Cordialement
jpbbricole

Bonjour tout le monde,

Je reviens sur ce sujet car j'ai une question similaire.
Je cherche à déterminer la puissance délivrée par des panneaux photovoltaïques utilisés pour recharger une batterie au cours de la journée.
J'utilise 4 panneaux avec une tension à vide (Voc) de 7,92 V chacun. J'avais prévu d'utiliser un pont diviseur pour mesurer la tension, mais je peur que les variations dues à l'intensité lumineuse ne faussent la sortie de celui-ci.
J'ai pensé à utiliser le module INA219, mais il semble qu'il ne supporte pas des tensions supérieures à 26 V, alors qu'avec les 4 panneaux, je pourrais potentiellement dépasser 30 V. Est ce qu'il existe un module compatible avec des tensions aussi élevées ?

Je vous remercie pour votre temps.

Salut.
Je vois que tu tiens compte de la tension à vide, avec raison, car lorsque ton chargeur coupera la charge, la tension du panneau remontera au maxi.
Oui, l'INA226 admet 36V.

Bonjour,
Merci beaucoup pour ton aide.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.