Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile

Composants et fournitures

Arduino UNO ×1
Shield PHPoC WiFi pour Arduino ×1
Résistance 100 kΩ ×1
Résistance 1 MΩ ×1
Fils de connexion (jumper wires) ×1

À propos de ce projet

Démonstration

Si vous débutez avec Arduino, vous pouvez commencer par les tutoriels Arduino pour débutants.

Fonctionnement

On peut utiliser une broche d'entrée analogique de l'Arduino pour mesurer une tension. Cependant, la tension maximale mesurable est de 5 V.

Pour augmenter la plage de mesure, il faut utiliser un diviseur de tension.

En théorie

Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile

La formule est la suivante :

V_mesure = (R1 + R2) / R2 × V_entrée

ratio = (R1 + R2) / R2

⇒ V_mesure = ratio × V_entrée

Si on choisit R1 = 10 × R2, on obtient :

V_mesure = 11 × V_entrée

Puisque V_entrée max = 5 V, la tension maximale mesurable est de 55 V.

Pour limiter le courant traversant la broche de l'Arduino (et éviter de l'endommager), il faut choisir des valeurs de résistance les plus élevées possibles.

J'ai choisi : R1 = 1 MΩ, R2 = 100 kΩ

En pratique

Deux problèmes surviennent en pratique :

Ces problèmes sont résolus lors de l'étape d'étalonnage.

Étalonnage

1. Mesurer la valeur réelle de (R1 + R2) / R2

Cette opération ne doit être faite qu'une seule fois pour obtenir le ratio.

Câblage comme indiqué ci-dessous :

Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile

ratio = (R1 + R2) / R2 = V_mesure / V_entrée = Valeur_lue_A1 / Valeur_lue_A0

ratio = Valeur_lue_A1 / Valeur_lue_A0

Le code pour cet étalonnage se trouve dans ResistorCalibration.ino (voir section Code).

2. Instabilité de l'alimentation

L'instabilité de l'alimentation cause une instabilité de la tension de référence de la broche analogique, ce qui fausse le calcul de la tension.

Pour y remédier, il faut mesurer la tension de référence fréquemment.

Comment mesurer la tension de référence ?

Connecter 3,3 V à la broche A1 :

Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile

La tension de référence est mesurée indirectement via la valeur lue sur A1 :

V_référence = 1023 × 3,3 / Valeur_A1

Calcul de V_mesure :

V_entrée = mapFloat(Valeur_A0, 0, 1023, 0, V_référence); V_mesure = ratio × V_entrée;

Câblage principal :

Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile

Procédure

  1. Câbler selon le schéma « câblage étalonnage résistances »
  2. Téléverser ResistorCalibration.ino
  3. Ouvrir le Traceur Série (Serial Plotter)
  4. Copier la valeur du ratio
  5. Remplacer cette valeur à la ligne 5 de Voltmeter.ino
  6. Recâbler selon le « câblage principal »
  7. Téléverser Voltmeter.ino
  8. Téléverser l'interface Web (voltmeter.php et voltmeter_body.jpg) sur le Shield PHPoC
  9. Accéder à la page Web https://adresse_ip_shield_phpoc/voltmeter.php pour voir la tension.

Vous pouvez visualiser la tension sur smartphone :

Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile

Conseils de câblage

Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile

Le meilleur kit de démarrage Arduino pour débutant

Voir Le meilleur kit Arduino pour débutants

Code

ResistorCalibration.ino Arduino

Câblage comme décrit dans la partie Étalonnage
Exécuter ce code une fois
Ouvrir le Traceur Série
Copier la valeur du ratio
Remplacer cette valeur à la ligne 5 de Voltmeter.ino

double ratio;
int analogReadAverage(int pin, int read_time) {
  unsigned long read_value = 0;
  for(int i = 0; i < read_time; i++) {
    read_value += analogRead(pin);
    delay(2);
  }
  read_value /= read_time;
  return read_value;
}

double resistorCalibration() {
  double _ratio;
  double A0_read_value = analogReadAverage(A0, 20);
  double A1_read_value = analogReadAverage(A1, 20);
  _ratio = A1_read_value / A0_read_value;
  return _ratio;
}

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

void loop() {
  ratio = resistorCalibration();
  Serial.print("ratio:");
  Serial.println(ratio);
  delay(200);
}

Voltmeter.ino Arduino

Code principal. Avant de le téléverser :

double V_measure, V_in, V_reference;
double ratio = 11.59; // À remplacer par votre valeur calibrée

double mapFloat(double x, double in_min, double in_max, double out_min, double out_max) {
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

int analogReadAverage(int pin, int read_time) {
  unsigned long read_value = 0;
  for(int i = 0; i < read_time; i++) {
    read_value += analogRead(pin);
    delay(2);
  }
  read_value /= read_time;
  return read_value;
}

double getVoltageReference() {
  double A1_value = analogReadAverage(A1, 20); // A1 connecté à 3,3V
  double V_REF = 1023 * 3.3 / A1_value;
  return V_REF;
}

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

void loop() {
  V_reference = getVoltageReference();
  double A0_value = analogReadAverage(A0, 20);
  V_in = mapFloat(A0_value, 0, 1023, 0, V_reference);
  V_measure = ratio * V_in;
  Serial.println(V_measure);
  delay(200);
}

voltmeter.php PHP

Interface Web utilisateur. À téléverser sur le Shield PHPoC avec l'image de fond voltmeter_body.jpg

<!DOCTYPE html>
<html>
<head>
  <title>PHPoC Shield - VOLTMETER</title>
  <meta name="viewport" content="width=device-width, initial-scale=0.7">
  <link rel="stylesheet" media="screen" href="https://fontlibrary.org/face/segment7" type="text/css"/>
  <style>
    html {height: 100%;}
    body {width: 100%; height: 100%; text-align: center;}
    .container {width: 100%; min-height: 99%; max-height: 100%;}
    canvas {
      background: url(voltmeter_body.jpg);
      background-size: contain;
      font-family: 'Segment7Standard';
      font-weight: bold;
      font-style: italic;
    }
  </style>
  <script>
    var COLOR_LCD_TEXT = "#000000";
    var COLOR_LCD_BGR = "#00FFFF";
    var IMG_WIDTH = 583;
    var IMG_HEIGHT = 1235;
    var METER_WIDTH, METER_HEIGHT;
    var ws, canvas, ctx, buffer = "", voltage = 0;

    function init() {
      canvas = document.getElementById("graph");
      ctx = canvas.getContext("2d");
      canvas_resize();
      update_view(voltage);
      var ws_host_addr = "";
      if((navigator.platform.indexOf("Win") != -1) && (ws_host_addr.charAt(0) == "[")) {
        ws_host_addr = ws_host_addr.replace(/[\[\]]/g, '');
        ws_host_addr = ws_host_addr.replace(/:/g, "-");
        ws_host_addr += ".ipv6-literal.net";
      }
      ws = new WebSocket("ws://" + ws_host_addr + "/serial_monitor", "uint8.phpoc");
      ws.onopen = ws_onopen;
      ws.onclose = ws_onclose;
      ws.onmessage = ws_onmessage;
      ws.binaryType = "arraybuffer";
    }
    // ... (fonctions ws_onopen, ws_onclose, ws_onmessage, update_view, canvas_resize)
    window.onload = init;
  </script>
</head>
<body onresize="canvas_resize()">
  <div class="container" id="container">
    <canvas id="graph"></canvas>
  </div>
</body>
</html>

Schémas

À téléverser sur le Shield PHPoC

Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile

Processus de fabrication

  1. Construire une console de contrôle Photoshop DIY avec Arduino Nano RP2040
  2. Système de pointage RFID fiable avec Arduino et Python (base de données phpMyAdmin)
  3. Construire une télécommande Android universelle avec Arduino, 1Sheeld et contrôle IR
  4. Construire un Capteur de Rythme Cardiaque Infrarouge Fiable avec Arduino : Guide Étape par Étape
  5. Mesure Précise de Fréquence et Rapport Cyclique avec Arduino UNO
  6. Construire un voltmètre DIY avec Arduino et écran Nokia 5110
  7. Mesure de distance en temps réel par sonar Arduino et visualisation Processing
  8. MobBob : Construisez votre propre robot Arduino, contrôlé via smartphone Android
  9. Contrôle fluide de la luminosité LED avec Bolt IoT et Arduino UNO