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

Projet de mesureur de distance Arduino et de niveau à bulle numérique

Dans ce tutoriel, nous allons apprendre à fabriquer un télémètre Arduino et un niveau à bulle numérique. Vous pouvez regarder la vidéo suivante ou lire le didacticiel écrit ci-dessous.

Aperçu

L'appareil comprend un capteur à ultrasons pour mesurer la distance à l'objet le plus proche, un accéléromètre pour mesurer l'angle par rapport au sol, un écran LCD pour afficher les résultats et un PCB conçu sur mesure sur lequel tous les composants sont connectés.

Nous pouvons faire fonctionner l'appareil avec un seul bouton. Une fois l'appareil alimenté, nous devons sélectionner l'unité de mesure.

En appuyant sur le bouton, nous pouvons basculer entre les unités, et si nous maintenons le bouton enfoncé pendant un certain temps, nous entrerons dans le premier programme. Ici, nous pouvons mesurer la distance et avoir également la possibilité de stocker les deux dernières mesures.

Pour accéder au deuxième programme, nous devons à nouveau appuyer sur le bouton et le maintenir enfoncé pendant un certain temps. Dans ce programme, nous pouvons mesurer une surface carrée en prenant deux mesures de distance perpendiculaires.

Le programme suivant est le niveau à bulle numérique et ici nous pouvons mesurer l'angle par rapport au sol.

À l'aide du bouton, nous pouvons basculer entre les deux axes ou nous pouvons mesurer le tangage ou le roulis.

Schéma du circuit du mesureur de distance Arduino

Voici le schéma de circuit de ce projet Arduino.

Notez que j'ai déjà des tutoriels détaillés sur le fonctionnement de chacun de ces modules, et vous pouvez les consulter sur les liens suivants :Tutoriel capteur ultrasonique, Tutoriel LCD, Tutoriel accéléromètre MEMS.

Vous pouvez obtenir les composants nécessaires à ce projet à partir des liens ci-dessous :

  • Capteur à ultrasons HC-SR04………………………………
  • Accéléromètre à gyroscope à 3 axes MPU6050………
  • LCD 16×2 caractères…………………………………………
  • Arduino Nano…………………………………………………

Conception de circuits imprimés personnalisés

Selon le schéma de circuit, nous devons concevoir le PCB personnalisé et je l'ai fait en utilisant le logiciel de conception de circuit en ligne gratuit EasyEDA.

Une fois que nous avons terminé la conception ici, nous pouvons simplement exporter le fichier Gerber qui est utilisé pour fabriquer le PCB. Vous pouvez consulter les fichiers de projet EasyEDA de ce projet ici.

Ensuite, nous pouvons commander notre PCB auprès de JLCPCB, qui est en fait le sponsor de ce projet.

Ici, nous pouvons simplement faire glisser et déposer le fichier Gerber. Une fois téléchargé, nous pouvons revoir notre PCB dans le visualiseur Gerber. Si tout va bien, nous pouvons continuer, sélectionner les propriétés que nous voulons pour notre PCB, puis nous pouvons commander notre PCB à un prix raisonnable. Notez que s'il s'agit de votre première commande auprès de JLCPCB, vous pouvez obtenir jusqu'à 10 PCB pour seulement 2 $.

Assemblage de l'appareil

Néanmoins, après plusieurs jours, les PCB sont arrivés. La qualité des PCB est excellente et tout est exactement comme dans la conception.

Ok, maintenant nous pouvons commencer à assembler l'électronique pour ce projet. J'ai commencé par souder des en-têtes de broches sur le PCB. De cette façon, nous pouvons facilement connecter et déconnecter les composants en cas de besoin.

Ensuite, j'ai inséré et soudé les trois résistances. Deux d'entre eux sont pour le diviseur de tension pour le contraste de l'écran LCD. La résistance 1k doit être placée sur R1 et les 220 ohms sur R2. Le troisième est une résistance de rappel pour le bouton.

Ensuite, je suis passé à la fabrication du boîtier de l'appareil. J'ai décidé d'utiliser de l'acrylique transparent parce que je voulais que la beauté de tous les composants électroniques soit visible. J'avais de l'acrylique de 5 mm d'un ancien projet et j'ai utilisé une circulaire pour le couper à la bonne taille.

Ensuite, j'ai dû faire une ouverture pour l'écran LCD sur le dessus du boîtier, qui est en fait de 4 mm car il s'adaptera mieux à l'écran LCD. Donc, j'ai d'abord fait deux trous avec une perceuse, puis j'ai inséré une scie à métaux à travers eux. À l'aide de la scie à métaux, j'ai fait grossièrement l'ouverture, puis à l'aide d'une râpe, j'ai tracé de fines lignes droites pour que l'écran LCD puisse s'adapter parfaitement.

Ensuite, à l'aide d'un foret, j'ai fait les ouvertures pour l'interrupteur d'alimentation, le bouton de commande et le capteur à ultrasons.

Une fois que j'ai eu toutes les pièces prêtes, j'ai utilisé un époxy de 5 minutes pour assembler au boîtier. En ce qui concerne le dessus, j'ai inséré et collé deux boulons à travers lesquels le panneau supérieur peut être inséré et fixé à l'aide d'écrous sur le dessus.

Le boîtier est maintenant prêt et j'ai donc continué à souder les en-têtes de broches sur l'écran LCD afin de pouvoir le fixer facilement au PCB. J'ai également soudé des en-têtes de broches ou des fils de raccordement à l'interrupteur d'alimentation, au bouton et au connecteur de la batterie.

Enfin, j'avais tout prêt pour assembler l'appareil. J'ai commencé par insérer le capteur à ultrasons sur le PCB, puis à travers les trous sur le panneau latéral. Vient ensuite la carte Arduino, le module accéléromètre ainsi que le connecteur de la batterie.

Sur le panneau supérieur, j'ai sécurisé l'écran LCD, l'interrupteur d'alimentation et le bouton, puis je les ai connectés au PCB. Enfin, j'ai inséré la pile 9 V dans le connecteur et fixé le panneau supérieur avec les écrous.

Et voilà, le projet de mesureur de distance Arduino est terminé mais il ne reste plus dans cette vidéo qu'à expliquer le fonctionnement du programme, alors regardons le code Arduino.

Mesureur de portée Arduino et code source du niveau à bulle numérique

Comme le code est un peu plus long, pour une meilleure compréhension, je posterai le code source du programme dans des sections avec une description pour chaque section. Et à la fin de cet article, je posterai le code source complet.

Nous devons donc d'abord inclure la bibliothèque Wire.h pour la communication I2C de l'accéléromètre, ainsi que la bibliothèque LiquidCrystal.h pour contrôler l'écran LCD. Ensuite, nous devons définir l'écran LCD, l'adresse I2C du module accéléromètre MPU6050, les broches du capteur à ultrasons, ainsi que certaines variables nécessaires au programme ci-dessous.

#include<Wire.h> // I2C communication library
#include <LiquidCrystal.h> // includes the LiquidCrystal Library

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int MPU = 0x68; // I2C address of the MPU6050 accelerometer

#define trigPin 8
#define echoPin 9
#define selectButton 10

int16_t AcX, AcY, AcZ;
long duration;
float distance;
int program = 0;
float d = 0;
float d1 = 0;
float d2 = 0;
float area = 0;
int axis = 0;
int angle = 0;
int unitSelect = 0;
String unit = "cm";Code language: Arduino (arduino)

Dans la section de configuration, nous devons initialiser à la fois l'interface I2C de l'accéléromètre et l'affichage à cristaux liquides, ainsi que définir les modes de broche pour les broches de déclenchement et d'écho du capteur à ultrasons, et la broche du bouton.

void setup() {
  // Initialize interface to the MPU6050
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);
  Wire.write(0);
  Wire.endTransmission(true);

  lcd.begin(16, 2); // Initializes the interface to the LCD screen
  
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(selectButton, INPUT_PULLUP);
}Code language: Arduino (arduino)

Dans la section principale de la boucle, nous avons une instruction switch à travers laquelle nous pouvons basculer entre les différents programmes de notre appareil. Dans le premier, ou cas numéro 0, nous sélectionnons l'unité de mesure. En utilisant la fonction lcd.print(), nous imprimons le texte sur l'écran LCD et en utilisant les instructions if, nous basculons entre les quatre unités de mesure.

switch (program) {  // Switch between different programs
    case 0:  // Select unit of measurement
      lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed
      lcd.print("Select Unit: ");
      lcd.setCursor(13, 0);
      lcd.print(unit);
      lcd.print("  ");
      delay(10);
      // If button is pressed - change unit
      if (digitalRead(selectButton) == 0) {
        if (unitSelect == 0) {
          unit = "in";
          unitSelect = 1;
        }
        else if (unitSelect == 1) {
          unit = "m";
          unitSelect = 2;
        }
        else if (unitSelect == 2) {
          unit = "ft";
          unitSelect = 3;
        }
        else if (unitSelect == 3) {
          unit = "cm";
          unitSelect = 0;
        }
        // If button is held longer then half a second - change program
        delay(500);
        if (digitalRead(selectButton) == 0) {
          program = 1;
          lcd.clear();
          delay(500);
        }
      }
      break;Code language: Arduino (arduino)

Nous devons noter ici que la variable unitSelect agit dans la fonction personnalisée getDistance(), où elle indique en fait dans quelle unité nous devons convertir l'unité de base en cm que nous obtenons du capteur à ultrasons.

/ Converting the units
  if (unitSelect == 1) {
    distance = distance; // cm to cm
    unit = "cm";
  }
  else if (unitSelect == 2) {
    distance = distance *  0.393701; // cm to in
    unit = "in";
  }
  else if (unitSelect == 3) {
    distance = distance * 0.01; // cm to m
    unit = "m";
  }
  else if (unitSelect == 0) {
    distance = distance * 0.0328; // cm to ft
    unit = "ft";
  }Code language: Arduino (arduino)

Pour sélectionner l'unité de mesure et accéder au premier programme de l'appareil, il suffit d'appuyer sur le bouton pendant plus d'une demi-seconde.

// If button is held longer then half a second - change program
        delay(500);
        if (digitalRead(selectButton) == 0) {
          program = 1;
          lcd.clear();
          delay(500);
        }
      }
      break;Code language: Arduino (arduino)

Dans le cas numéro 1 ou dans le programme de mesure de distance, nous obtenons d'abord la distance jusqu'à l'objet le plus proche à l'aide de la fonction personnalisée getDistance().

case 1:   // Distance measuring program
      distance = getDistance(); // Distance to the nearest object
      lcd.setCursor(0, 0);
      lcd.print("Dist: ");
      lcd.print(distance); // Prints the distance value from the sensor
      lcd.print("    ");
      lcd.setCursor(14, 0);
      lcd.print(unit);
      delay(10);
      lcd.setCursor(0, 1);
      lcd.print("d:");
      lcd.setCursor(8, 1);
      lcd.print("d:");
      delay(200);
      // Save distance 1
      if (digitalRead(selectButton) == 0) {
        if (d == 0) {
          lcd.setCursor(0, 1);
          lcd.print("d:     ");
          lcd.setCursor(2, 1);
          lcd.print(distance);
          d = 1;
          delay(100);
        }
        // Save distance 2
        else if (d == 1) {
          lcd.setCursor(8, 1);
          lcd.print("d:     ");
          lcd.setCursor(10, 1);
          lcd.print(distance);
          d = 0;
          delay(100);
        }
        // If button is held longer then half sencond change program
        delay(500);
        if (digitalRead(selectButton) == 0) {
          program = 2;
          d = 0;
          lcd.clear();
          delay(500);
        }
      }
      break;Code language: Arduino (arduino)

Voyons comment cette fonction fonctionne.

//===== getDistance - Custom Function
float getDistance() {
  // Clears the trigPin
  digitalWrite(trigPin, LOW);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);
  // Calculating the distance
  distance = duration * 0.034 / 2; // distance in cm
  
  // Converting the units
  if (unitSelect == 1) {
    distance = distance; // cm to cm
    unit = "cm";
  }
  else if (unitSelect == 2) {
    distance = distance *  0.393701; // cm to in
    unit = "in";
  }
  else if (unitSelect == 3) {
    distance = distance * 0.01; // cm to m
    unit = "m";
  }
  else if (unitSelect == 0) {
    distance = distance * 0.0328; // cm to ft
    unit = "ft";
  }
  return distance;
}Code language: Arduino (arduino)

Ici, en utilisant la broche de déclenchement, nous disons au capteur de générer une onde sonore ultrasonique.

Ensuite, à l'aide de la broche d'écho et de la fonction pulseIn (), nous mesurons la durée du trajet de l'onde du capteur à l'objet et vice-versa. Compte tenu de la vitesse du son et du temps de trajet, nous pouvons facilement calculer la distance. Nous imprimons donc la distance mesurée avec du texte sur l'écran LCD et en utilisant les instructions "if", si nous appuyons sur le bouton, nous imprimons ou enregistrons les deux dernières mesures.

Vient ensuite le programme de calcul de surface dans lequel nous utilisons des méthodes similaires. Nous devons prendre deux mesures perpendiculaires et simplement les multiplier afin d'obtenir l'aire du carré qu'elles forment.

case 2:   // Area measuring program
      distance = getDistance();
      lcd.setCursor(0, 0);
      lcd.print("Area: ");
      lcd.print(area); // Prints the calculated area from the two measurements
      lcd.setCursor(12, 0);
      lcd.print(unit); // Prints the selected unit and the square sign below
      lcd.print("^2");
      delay(200);
      if ( d == 0) {
        lcd.setCursor(0, 1);
        lcd.print("d1:       ");
        lcd.setCursor(3, 1);
        lcd.print(distance);
        delay(200);
      }
      else if (d == 1) {
        lcd.setCursor(9, 1);
        lcd.print("d2:      ");
        lcd.setCursor(12, 1);
        lcd.print(distance);
        delay(200);
      }
      else if (d == 2) {
        lcd.setCursor(6, 0);
        lcd.print(area);
        delay(200);
      }
      // Save distance 1
      if (digitalRead(selectButton) == 0) {
        if (d == 0) {
          lcd.setCursor(0, 1);
          lcd.print("d1:    ");
          lcd.setCursor(3, 1);
          lcd.print(distance);
          d = 1;
          d1 = distance;
          delay(100);
        }
        // Save distance 2
        else if (d == 1) {
          lcd.setCursor(9, 1);
          lcd.print("d2:    ");
          lcd.setCursor(12, 1);
          lcd.print(distance);
          d = 2;
          d2 = distance;
          area = d1 * d2; // Calculate the area
          delay(100);
        }
        else if (d == 2) {
          lcd.clear();
          d = 0;
          area = 0;
          delay(100);
        }
        // If button is held longer then half sencond change program
        delay(500);
        if (digitalRead(selectButton) == 0) {
          program = 3;
          d = 0;
          lcd.clear();
          delay(500);
        }
      }
      break;Code language: Arduino (arduino)

Le dernier cas est le programme de mesure d'angle. Ici, nous devons lire les données de l'accéléromètre qui sont en fait la force du champ gravitationnel de la Terre dans trois axes différents, X, Y et Z. La valeur de chaque axe est stockée dans 2 registres, nous devons donc lire un total de 6 registres et combinez-les pour obtenir la bonne valeur.

case 3:    // Angle measuring program
      // Read the accelerometer data
      Wire.beginTransmission(MPU);
      Wire.write(0x3B); // Start with register 0x3B (ACCEL_XOUT_H)
      Wire.endTransmission(false);
      Wire.requestFrom(MPU, 6, true); // Read 6 registers total, each axis value is stored in 2 registers
      AcX = Wire.read() << 8 | Wire.read(); // X-axis value
      AcY = Wire.read() << 8 | Wire.read(); // Y-axis value
      AcZ = Wire.read() << 8 | Wire.read(); // Z-axis value
     
      if ( axis == 0) {
        // Calculating the Pitch angle (rotation around Y-axis)
        angle = atan(-1 * AcX / sqrt(pow(AcY, 2) + pow(AcZ, 2))) * 180 / PI;
        lcd.setCursor(0, 0);
        lcd.print("Pitch");
      }
      else if (axis == 1) {
        // Calculating the Roll angle (rotation around X-axis)
        angle = atan(-1 * AcY / sqrt(pow(AcX, 2) + pow(AcZ, 2))) * 180 / PI;
        lcd.setCursor(0, 0);
        lcd.print("Roll ");
      }
      lcd.setCursor(0, 1);
      lcd.print("Angle: ");
      lcd.print(abs(angle));
      lcd.print("     ");
      lcd.setCursor(10, 1);
      lcd.print("deg");
      delay(200);

      // Change axis
      if (digitalRead(selectButton) == 0) {
        if (axis == 0) {
          axis = 1;
          delay(100);
        }
        // Save distance 2
        else if (axis == 1) {
          axis = 0;
          delay(100);
        }
        // If button is held longer then half sencond change program
        delay(500);
        if (digitalRead(selectButton) == 0) {
          program = 0;
          lcd.clear();
          delay(500);
        }
      }
      break;Code language: Arduino (arduino)

Une fois que nous avons les valeurs X, Y et Z de l'accéléromètre, nous pouvons calculer l'angle de tangage, ou la rotation autour de l'axe Y, ainsi que l'angle de roulis, ou la rotation autour de l'axe X, en utilisant les deux équations. Vous pouvez trouver plus de détails sur ces équations dans la note d'application de Freescale Semiconductor, Détection d'inclinaison à l'aide d'un accéléromètre à trois axes . Donc, après cela, nous imprimons les valeurs avec du texte sur l'écran LCD, et en appuyant sur le bouton, nous modifions ce que nous affichons sur l'écran LCD, que ce soit le pas ou l'angle de roulis.

Voici le code source complet de ce projet de télémètre et de niveau à bulle Arduino :

/*
  DIY Digital Range Measurer and Spirit Level

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
#include<Wire.h> // I2C communication library
#include <LiquidCrystal.h> // includes the LiquidCrystal Library

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int MPU = 0x68; // I2C address of the MPU6050 accelerometer

#define trigPin 8
#define echoPin 9
#define selectButton 10

int16_t AcX, AcY, AcZ;
long duration;
float distance;
int program = 0;
float d = 0;
float d1 = 0;
float d2 = 0;
float area = 0;
int axis = 0;
int angle = 0;
int unitSelect = 0;
String unit = "cm";

void setup() {
  // Initialize interface to the MPU6050
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);
  Wire.write(0);
  Wire.endTransmission(true);

  lcd.begin(16, 2); // Initializes the interface to the LCD screen
  
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(selectButton, INPUT_PULLUP);
}
void loop() {
  switch (program) {  // Switch between different programs
    case 0:  // Select unit of measurement
      lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed
      lcd.print("Select Unit: ");
      lcd.setCursor(13, 0);
      lcd.print(unit);
      lcd.print("  ");
      delay(10);
      // If button is pressed - change unit
      if (digitalRead(selectButton) == 0) {
        if (unitSelect == 0) {
          unit = "in";
          unitSelect = 1;
        }
        else if (unitSelect == 1) {
          unit = "m";
          unitSelect = 2;
        }
        else if (unitSelect == 2) {
          unit = "ft";
          unitSelect = 3;
        }
        else if (unitSelect == 3) {
          unit = "cm";
          unitSelect = 0;
        }
        // If button is held longer then half a second - change program
        delay(500);
        if (digitalRead(selectButton) == 0) {
          program = 1;
          lcd.clear();
          delay(500);
        }
      }
      break;
      
    case 1:   // Distance measuring program
      distance = getDistance(); // Distance to the nearest object
      lcd.setCursor(0, 0);
      lcd.print("Dist: ");
      lcd.print(distance); // Prints the distance value from the sensor
      lcd.print("    ");
      lcd.setCursor(14, 0);
      lcd.print(unit);
      delay(10);
      lcd.setCursor(0, 1);
      lcd.print("d:");
      lcd.setCursor(8, 1);
      lcd.print("d:");
      delay(200);
      // Save distance 1
      if (digitalRead(selectButton) == 0) {
        if (d == 0) {
          lcd.setCursor(0, 1);
          lcd.print("d:     ");
          lcd.setCursor(2, 1);
          lcd.print(distance);
          d = 1;
          delay(100);
        }
        // Save distance 2
        else if (d == 1) {
          lcd.setCursor(8, 1);
          lcd.print("d:     ");
          lcd.setCursor(10, 1);
          lcd.print(distance);
          d = 0;
          delay(100);
        }
        // If button is held longer then half sencond change program
        delay(500);
        if (digitalRead(selectButton) == 0) {
          program = 2;
          d = 0;
          lcd.clear();
          delay(500);
        }
      }
      break;

    case 2:   // Area measuring program
      distance = getDistance();
      lcd.setCursor(0, 0);
      lcd.print("Area: ");
      lcd.print(area); // Prints the calculated area from the two measurements
      lcd.setCursor(12, 0);
      lcd.print(unit); // Prints the selected unit and the square sign below
      lcd.print("^2");
      delay(200);
      if ( d == 0) {
        lcd.setCursor(0, 1);
        lcd.print("d1:       ");
        lcd.setCursor(3, 1);
        lcd.print(distance);
        delay(200);
      }
      else if (d == 1) {
        lcd.setCursor(9, 1);
        lcd.print("d2:      ");
        lcd.setCursor(12, 1);
        lcd.print(distance);
        delay(200);
      }
      else if (d == 2) {
        lcd.setCursor(6, 0);
        lcd.print(area);
        delay(200);
      }
      // Save distance 1
      if (digitalRead(selectButton) == 0) {
        if (d == 0) {
          lcd.setCursor(0, 1);
          lcd.print("d1:    ");
          lcd.setCursor(3, 1);
          lcd.print(distance);
          d = 1;
          d1 = distance;
          delay(100);
        }
        // Save distance 2
        else if (d == 1) {
          lcd.setCursor(9, 1);
          lcd.print("d2:    ");
          lcd.setCursor(12, 1);
          lcd.print(distance);
          d = 2;
          d2 = distance;
          area = d1 * d2; // Calculate the area
          delay(100);
        }
        else if (d == 2) {
          lcd.clear();
          d = 0;
          area = 0;
          delay(100);
        }
        // If button is held longer then half sencond change program
        delay(500);
        if (digitalRead(selectButton) == 0) {
          program = 3;
          d = 0;
          lcd.clear();
          delay(500);
        }
      }
      break;

    case 3:    // Angle measuring program
      // Read the accelerometer data
      Wire.beginTransmission(MPU);
      Wire.write(0x3B); // Start with register 0x3B (ACCEL_XOUT_H)
      Wire.endTransmission(false);
      Wire.requestFrom(MPU, 6, true); // Read 6 registers total, each axis value is stored in 2 registers
      AcX = Wire.read() << 8 | Wire.read(); // X-axis value
      AcY = Wire.read() << 8 | Wire.read(); // Y-axis value
      AcZ = Wire.read() << 8 | Wire.read(); // Z-axis value
     
      if ( axis == 0) {
        // Calculating the Pitch angle (rotation around Y-axis)
        angle = atan(-1 * AcX / sqrt(pow(AcY, 2) + pow(AcZ, 2))) * 180 / PI;
        lcd.setCursor(0, 0);
        lcd.print("Pitch");
      }
      else if (axis == 1) {
        // Calculating the Roll angle (rotation around X-axis)
        angle = atan(-1 * AcY / sqrt(pow(AcX, 2) + pow(AcZ, 2))) * 180 / PI;
        lcd.setCursor(0, 0);
        lcd.print("Roll ");
      }
      lcd.setCursor(0, 1);
      lcd.print("Angle: ");
      lcd.print(abs(angle));
      lcd.print("     ");
      lcd.setCursor(10, 1);
      lcd.print("deg");
      delay(200);

      // Change axis
      if (digitalRead(selectButton) == 0) {
        if (axis == 0) {
          axis = 1;
          delay(100);
        }
        // Save distance 2
        else if (axis == 1) {
          axis = 0;
          delay(100);
        }
        // If button is held longer then half sencond change program
        delay(500);
        if (digitalRead(selectButton) == 0) {
          program = 0;
          lcd.clear();
          delay(500);
        }
      }
      break;
  }
}

//===== getDistance - Custom Function
float getDistance() {
  // Clears the trigPin
  digitalWrite(trigPin, LOW);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);
  // Calculating the distance
  distance = duration * 0.034 / 2; // distance in cm
  
  // Converting the units
  if (unitSelect == 1) {
    distance = distance; // cm to cm
    unit = "cm";
  }
  else if (unitSelect == 2) {
    distance = distance *  0.393701; // cm to in
    unit = "in";
  }
  else if (unitSelect == 3) {
    distance = distance * 0.01; // cm to m
    unit = "m";
  }
  else if (unitSelect == 0) {
    distance = distance * 0.0328; // cm to ft
    unit = "ft";
  }
  return distance;
}Code language: Arduino (arduino)

Donc ce serait tout, j'espère que vous avez apprécié ce projet Arduino et appris quelque chose de nouveau. N'hésitez pas à poser des questions dans la section des commentaires ci-dessous.


Processus de fabrication

  1. Station de commande numérique DCC de modélisme ferroviaire Arduino et application gratuite
  2. Dés numériques Arduino
  3. Animation LCD et jeux
  4. Détecteur de fréquence audio
  5. clone Arduino Tamagotchi - animal numérique
  6. Tech-TicTacToe
  7. Voltmètre DIY avec Arduino et un écran Nokia 5110
  8. compte à rebours Arduino
  9. Communication Python3 et Arduino