Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino-afstandsmeter en digitaal waterpasproject

In deze tutorial leren we hoe je een Arduino-afstandsmeter en een digitale waterpas maakt. Je kunt de volgende video bekijken of de schriftelijke tutorial hieronder lezen.

Overzicht

Het apparaat is voorzien van een ultrasone sensor voor het meten van de afstand tot het dichtstbijzijnde object, een accelerometer voor het meten van de hoek ten opzichte van de grond, een LCD-display voor het weergeven van de resultaten en een speciaal ontworpen PCB waarop alle componenten zijn aangesloten.

We kunnen het apparaat met slechts één knop bedienen. Zodra we het apparaat van stroom hebben voorzien, moeten we de meeteenheid selecteren.

Door op de knop te drukken, kunnen we door de eenheden schakelen, en als we de knop een tijdje ingedrukt houden, komen we in het eerste programma. Hier kunnen we de afstand meten en hebben we ook de mogelijkheid om de laatste twee metingen op te slaan.

Om in het tweede programma te komen, moeten we opnieuw de knop een tijdje ingedrukt houden. In dit programma kunnen we een vierkant gebied meten door twee loodrechte afstandsmetingen uit te voeren.

Het volgende programma is de digitale waterpas en hier kunnen we de hoek meten ten opzichte van de grond.

Met behulp van de knop kunnen we schakelen tussen de twee assen of we kunnen de pitch of de rol meten.

Arduino Range Measurer Circuit Schematisch

Hier is het schakelschema van dit Arduino-project.

Merk op dat ik al gedetailleerde tutorials heb over hoe elk van deze modules werkt, en je kunt ze bekijken via de volgende links:Ultrasone sensor tutorial, LCD tutorial, MEMS accelerometer tutorial.

U kunt de benodigde componenten voor dit project vinden via de onderstaande links:

  • Ultrasone sensor HC-SR04………………………………
  • MPU6050 3-assige gyroscoopversnellingsmeter………
  • 16×2 karakter LCD…………………………………………
  • Arduino Nano………………………………………………

Aangepast ontwerp PCB

Volgens het circuitschema moeten we de aangepaste PCB ontwerpen en dat deed ik met behulp van de gratis EasyEDA-software voor online circuitontwerp.

Zodra we het ontwerp hier hebben voltooid, kunnen we eenvoudig het Gerber-bestand exporteren dat wordt gebruikt voor het vervaardigen van de PCB. U kunt de EasyEDA-projectbestanden van dit project hier bekijken.

Dan kunnen we onze PCB bestellen bij JLCPCB, dat eigenlijk de sponsor van dit project is.

Hier kunnen we het Gerber-bestand eenvoudig slepen en neerzetten. Eenmaal geüpload kunnen we onze PCB bekijken in de Gerber-viewer. Als alles in orde is, kunnen we doorgaan, de eigenschappen selecteren die we voor onze PCB willen, en dan kunnen we onze PCB tegen een redelijke prijs bestellen. Houd er rekening mee dat als het uw eerste bestelling bij JLCPCB is, u tot 10 PCB's kunt krijgen voor slechts $ 2.

Het apparaat in elkaar zetten

Toch zijn de PCB's na enkele dagen aangekomen. De kwaliteit van de PCB's is geweldig en alles is precies hetzelfde als in het ontwerp.

Ok, nu kunnen we beginnen met het monteren van de elektronica voor dit project. Ik begon met het solderen van pin-headers op de printplaat. Op deze manier kunnen we de componenten gemakkelijk aansluiten en loskoppelen wanneer dat nodig is.

Daarna heb ik de drie weerstanden geplaatst en gesoldeerd. Twee daarvan zijn voor de spanningsdeler voor het contrast van LCD. De 1k-weerstand moet op R1 worden geplaatst en de 220 ohm op R2. De derde is een pull-up weerstand voor de knop.

Vervolgens ging ik verder met het maken van de behuizing voor het apparaat. Ik besloot transparant acryl te gebruiken omdat ik wilde dat de schoonheid van alle elektronische componenten zichtbaar was. Ik had wat acryl van 5 mm teek van een oud project en ik gebruikte een cirkel om het op maat te knippen.

Daarna moest ik een opening maken voor het LCD-scherm aan de bovenzijde van de behuizing, dat is eigenlijk 4 mm dik omdat het beter bij het LCD-scherm past. Dus maakte ik eerst twee gaten met een boor en stak er vervolgens een ijzerzaag doorheen. Met behulp van de ijzerzaag heb ik de opening ruw gemaakt en vervolgens heb ik met een rasp fijne rechte lijnen gemaakt zodat het LCD-scherm goed past.

Vervolgens maakte ik met behulp van een forstner-bit de openingen voor de aan / uit-schakelaar, de bedieningsknop en de ultrasone sensor.

Toen ik alle stukken klaar had, gebruikte ik een epoxy van 5 minuten om de behuizing te monteren. Wat de bovenkant betreft, heb ik twee bouten geplaatst en gelijmd waardoor het bovenpaneel kan worden gestoken en vastgezet met enkele moeren erop.

De behuizing is nu klaar en dus ben ik verder gegaan met het solderen van pin-headers op het LCD-scherm, zodat ik het gemakkelijk op het PCB kan bevestigen. Ik heb ook pin-headers gesoldeerd of draden naar de aan / uit-schakelaar, de knop en de batterijconnector gesoldeerd.

Eindelijk had ik alles klaar om het apparaat te monteren. Ik begon met het plaatsen van de ultrasone sensor op de printplaat en vervolgens door de gaten in het zijpaneel. Het volgende was het Arduino-bord, de accelerometermodule en de batterijconnector.

Op het bovenpaneel heb ik het LCD-scherm, de aan / uit-schakelaar en de knop vastgezet en vervolgens op de PCB aangesloten. Ten slotte heb ik de 9V-batterij in de connector gestoken en het bovenpaneel met de moeren vastgezet.

En dat is het, het Arduino-project voor het meten van het bereik is voltooid, maar wat overblijft in deze video is om uit te leggen hoe het programma werkt, dus laten we eens kijken naar de Arduino-code.

Arduino afstandsmeter en digitale waterpas broncode

Omdat de code wat langer is, zal ik voor een beter begrip de broncode van het programma in secties plaatsen met een beschrijving voor elke sectie. En aan het einde van dit artikel zal ik de volledige broncode posten.

Dus eerst moeten we de Wire.h-bibliotheek opnemen voor de I2C-communicatie van de accelerometer, evenals de LiquidCrystal.h-bibliotheek voor het besturen van het LCD-scherm. Vervolgens moeten we het LCD-scherm, het I2C-adres van de MPU6050-versnellingsmetermodule, de ultrasone sensorpinnen en enkele variabelen definiëren die nodig zijn voor het onderstaande programma.

#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)

In het setup-gedeelte moeten we zowel de I2C-interface van de accelerometer als het liquid crystal display initialiseren, evenals de pin-modi definiëren voor de ultrasone sensortrigger en echo-pinnen, en de knoppin.

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)

In de hoofdlussectie hebben we een schakelverklaring waarmee we kunnen schakelen tussen de verschillende programma's van ons apparaat. In het eerste, of casusnummer 0, selecteren we de meeteenheid. Met behulp van de lcd.print()-functie printen we de tekst op het LCD-scherm en met de if-statements schakelen we tussen de vier meeteenheden.

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)

We moeten hier opmerken dat de variabele unitSelect actie onderneemt in de functie getDistance() cunstom, waar het feitelijk vertelt naar welke eenheid we de basis cm-eenheid die we van de ultrasone sensor krijgen, moeten converteren.

/ 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)

Om de meeteenheid te selecteren en ook in het eerste programma van het apparaat te komen, hoeven we alleen de drukknop langer dan een halve seconde ingedrukt te houden.

// 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)

In het geval nummer 1 of in het programma voor het meten van afstanden, krijgen we eerst de afstand tot het dichtstbijzijnde object met behulp van de aangepaste functie 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)

Laten we eens kijken hoe deze functie werkt.

//===== 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)

Hier gebruiken we de triggerpin en vertellen we de sensor om een ​​ultrasone geluidsgolf te genereren.

Vervolgens meten we met behulp van de echo-pin en de pulseIn()-functie hoe lang de golf van de sensor naar het object en terug reisde. Gezien de snelheid van het geluid en de reistijd kunnen we eenvoudig de afstand berekenen. Dus we printen de gemeten afstand samen met wat tekst op het LCD-scherm en met behulp van de "if"-statements, als we op de knop drukken, printen we of slaan we de laatste twee metingen op.

Het volgende is het programma voor het berekenen van het gebied waarin we vergelijkbare methoden gebruiken. We moeten twee loodrechte metingen doen en ze vermenigvuldigen om de oppervlakte van het vierkant te krijgen dat ze vormen.

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)

Het laatste geval is het hoekmeetprogramma. Hier moeten we de versnellingsmetergegevens lezen, wat in feite de sterkte is van het zwaartekrachtveld van de aarde in drie verschillende assen, X, Y en Z. De waarde van elke as wordt opgeslagen in 2 registers, dus we moeten in totaal 6 registers lezen en combineer ze om de juiste waarde te krijgen.

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)

Zodra we de X-, Y- en Z-waarden van de versnellingsmeter hebben, kunnen we de Pitch-hoek, of rotatie rond de Y-as, evenals de Roll-hoek, of rotatie rond de X-as, berekenen met behulp van de twee vergelijkingen. U kunt meer details over deze vergelijkingen vinden in de toepassingsnotitie van Freescale Semiconductor, Tilt Sensing Using a Three-Axis Accelerometer . Dus daarna printen we de waarden samen met wat tekst op het LCD-scherm, en door op de knop te drukken, veranderen we wat we op het LCD-scherm laten zien, of het nu de Pitch- of de Roll-hoek is.

Hier is de volledige broncode voor dit Arduino-project voor afstandsmeter en waterpas:

/*
  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)

Dus dat zou alles zijn, ik hoop dat je genoten hebt van dit Arduino-project en iets nieuws hebt geleerd. Stel gerust een vraag in de opmerkingen hieronder.


Productieproces

  1. Model Rail Digital DCC Command Station Arduino en gratis app
  2. Arduino digitale dobbelstenen
  3. LCD-animatie en gaming
  4. Audiofrequentiedetector
  5. Arduino Tamagotchi Clone - Digital Pet
  6. Tech-TicTacToe
  7. DIY voltmeter met Arduino en een Nokia 5110-display
  8. Arduino Countdown Timer
  9. Python3- en Arduino-communicatie
  10. FM-radio met Arduino en RDA8057M
  11. Sumpniveaumonitor