Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino-Entfernungsmesser und digitales Wasserwaagen-Projekt

In diesem Tutorial lernen wir, wie man einen Arduino-Entfernungsmesser und eine digitale Wasserwaage herstellt. Sie können sich das folgende Video ansehen oder das schriftliche Tutorial unten lesen.

Übersicht

Das Gerät verfügt über einen Ultraschallsensor zum Messen des Abstands zum nächsten Objekt, einen Beschleunigungsmesser zum Messen des Winkels in Bezug auf den Boden, ein LCD-Display zum Anzeigen der Ergebnisse und eine kundenspezifische Leiterplatte, auf der alle Komponenten verbunden sind.

Wir können das Gerät mit nur einer einzigen Taste bedienen. Sobald wir das Gerät mit Strom versorgt haben, müssen wir die Maßeinheit auswählen.

Durch Drücken der Taste können wir durch die Einheiten schalten, und wenn wir die Taste eine Weile gedrückt halten, gelangen wir in das erste Programm. Hier können wir die Entfernung messen und haben auch die Möglichkeit, die letzten beiden Messungen zu speichern.

Um in das zweite Programm zu gelangen, müssen wir erneut die Taste eine Weile gedrückt halten. In diesem Programm können wir eine quadratische Fläche messen, indem wir zwei senkrechte Abstandsmessungen durchführen.

Das nächste Programm ist die digitale Wasserwaage und hier können wir den Winkel zum Boden messen.

Mit der Taste können wir zwischen den beiden Achsen hin- und herschalten oder entweder den Pitch oder den Roll messen.

Schaltplan des Arduino-Entfernungsmessers

Hier ist der Schaltplan dieses Arduino-Projekts.

Beachten Sie, dass ich bereits detaillierte Anleitungen zur Funktionsweise jedes dieser Module habe, und Sie können sie unter den folgenden Links überprüfen:Ultraschallsensor-Anleitung, LCD-Anleitung, MEMS-Beschleunigungsmesser-Anleitung.

Die für dieses Projekt benötigten Komponenten erhalten Sie über die folgenden Links:

  • Ultraschallsensor HC-SR04………………………………
  • MPU6050 3-Achsen-Gyroskop-Beschleunigungsmesser ………
  • 16×2-Zeichen-LCD …………………………………………
  • Arduino Nano…………………………………………………

Kundenspezifisches PCB-Design

Gemäß dem Schaltplan müssen wir die kundenspezifische Leiterplatte entwerfen, und ich habe dies mit der kostenlosen Online-Schaltungsdesign-Software EasyEDA getan.

Sobald wir das Design hier fertiggestellt haben, können wir einfach die Gerber-Datei exportieren, die für die Herstellung der Leiterplatte verwendet wird. Sie können die EasyEDA-Projektdateien dieses Projekts hier überprüfen.

Dann können wir unser PCB bei JLCPCB bestellen, das eigentlich der Sponsor dieses Projekts ist.

Hier können wir die Gerber-Datei einfach per Drag &Drop ziehen. Nach dem Hochladen können wir unsere Leiterplatte im Gerber-Viewer überprüfen. Wenn alles in Ordnung ist, können wir weitermachen, die Eigenschaften auswählen, die wir für unsere Leiterplatte wünschen, und dann können wir unsere Leiterplatte zu einem günstigen Preis bestellen. Beachten Sie, dass Sie bei Ihrer ersten Bestellung bei JLCPCB bis zu 10 PCBs für nur 2 $ erhalten können.

Zusammenbau des Geräts

Trotzdem sind nach einigen Tagen die Platinen eingetroffen. Die Qualität der Leiterplatten ist super und alles ist genau so wie im Design.

Ok, jetzt können wir mit der Montage der Elektronik für dieses Projekt beginnen. Ich begann mit dem Löten von Stiftleisten auf der Platine. Auf diese Weise können wir die Komponenten bei Bedarf einfach verbinden und trennen.

Dann habe ich die drei Widerstände eingefügt und gelötet. Zwei davon sind für den Spannungsteiler für den Kontrast von LCD. Der 1k-Widerstand sollte an R1 und die 220 Ohm an R2 platziert werden. Der dritte ist ein Pull-up-Widerstand für die Taste.

Als nächstes ging ich weiter, um den Fall für das Gerät zu machen. Ich entschied mich für transparentes Acryl, weil ich wollte, dass die Schönheit aller elektronischen Komponenten sichtbar ist. Ich hatte etwa 5 mm dickes Acryl aus einem alten Projekt, und ich benutzte ein Rundschreiben, um es auf die richtige Größe zu schneiden.

Dann musste ich auf der Oberseite des Gehäuses eine Öffnung für das LCD machen, die eigentlich 4 mm dick ist, weil sie besser zum LCD passt. Also machte ich zuerst zwei Löcher mit einem Bohrer und steckte dann eine Metallsäge durch sie. Mit der Metallsäge habe ich grob die Öffnung gemacht und dann mit einer Raspel habe ich feine gerade Linien gemacht, damit das LCD fest sitzen kann.

Dann habe ich mit einem Forstnerbohrer die Öffnungen für den Netzschalter, den Bedienknopf und den Ultraschallsensor gemacht.

Sobald ich alle Teile fertig hatte, benutzte ich ein 5-Minuten-Epoxy zum Zusammenbau zum Gehäuse. Was die Oberseite betrifft, habe ich zwei Bolzen eingesetzt und geklebt, durch die die obere Platte eingesetzt und mit einigen Muttern darauf befestigt werden kann.

Das Gehäuse ist nun fertig und so fuhr ich mit dem Löten von Stiftleisten an das LCD fort, damit ich es leicht auf der Platine befestigen kann. Ich habe auch Stiftleisten oder Schaltdrähte an den Netzschalter, die Taste und den Batterieanschluss gelötet.

Endlich hatte ich alles bereit, um das Gerät zusammenzubauen. Ich begann mit dem Einsetzen des Ultraschallsensors auf der Platine und dann durch die Löcher in der Seitenwand. Als nächstes kam das Arduino-Board, das Beschleunigungssensormodul sowie der Batterieanschluss.

Auf der Oberseite befestigte ich das LCD, den Netzschalter und die Taste und verband sie dann mit der Platine. Zuletzt steckte ich die 9-V-Batterie in den Anschluss und befestigte die obere Platte mit den Muttern.

Und das war's, das Arduino Range Measurer-Projekt ist fertig, aber was in diesem Video übrig bleibt, ist zu erklären, wie das Programm funktioniert, also werfen wir einen Blick auf den Arduino-Code.

Quellcode für Arduino-Entfernungsmesser und digitale Wasserwaage

Da der Code etwas länger ist, werde ich zum besseren Verständnis den Quellcode des Programms in Abschnitten mit Beschreibung für jeden Abschnitt veröffentlichen. Und am Ende dieses Artikels werde ich den kompletten Quellcode posten.

Also müssen wir zuerst die Wire.h-Bibliothek für die I2C-Kommunikation des Beschleunigungsmessers sowie die LiquidCrystal.h-Bibliothek für die Steuerung des LCD einbinden. Dann müssen wir das LCD, die I2C-Adresse des MPU6050-Beschleunigungssensormoduls, die Ultraschallsensor-Pins sowie einige Variablen definieren, die für das folgende Programm benötigt werden.

#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"; Codesprache:Arduino (arduino)

Im Setup-Abschnitt müssen wir sowohl die I2C-Schnittstelle des Beschleunigungsmessers als auch die Flüssigkristallanzeige initialisieren sowie die Pin-Modi für die Trigger- und Echo-Pins des Ultraschallsensors und den Tasten-Pin definieren.

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);
} Codesprache:Arduino (arduino) 

Im Abschnitt der Hauptschleife haben wir eine Switch-Anweisung, mit der wir zwischen den verschiedenen Programmen unseres Geräts umschalten können. Im ersten oder Fall Nummer 0 wählen wir die Maßeinheit aus. Mit der Funktion lcd.print() drucken wir den Text auf dem LCD und mit den if-Anweisungen schalten wir durch die vier Maßeinheiten.

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; Codesprache:Arduino (arduino) 

Wir sollten hier beachten, dass die Variable unitSelect in der cunstom-Funktion getDistance() aktiv wird, wo sie tatsächlich angibt, in welche Einheit wir die Grundeinheit cm konvertieren sollen, die wir vom Ultraschallsensor erhalten.

/ 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";
  } Codesprache:Arduino (arduino) 

Um die Maßeinheit auszuwählen und auch in das erste Programm des Gerätes zu gelangen, müssen wir nur die Taste länger als eine halbe Sekunde gedrückt halten.

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

In Fall Nummer 1 oder im Entfernungsmessprogramm erhalten wir zuerst die Entfernung zum nächsten Objekt mit der benutzerdefinierten Funktion 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; Codesprache:Arduino (arduino) 

Mal sehen, wie diese Funktion funktioniert.

//===== 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;
} Codesprache:Arduino (arduino) 

Hier teilen wir dem Sensor mit dem Auslösestift mit, dass er eine Ultraschallwelle erzeugen soll.

Dann messen wir mit dem Echo-Pin und der Funktion pulseIn () die Dauer, die die Welle vom Sensor zum Objekt und zurück zurückgelegt hat. Unter Berücksichtigung der Schallgeschwindigkeit und der Reisezeit können wir die Entfernung leicht berechnen. Also drucken wir die gemessene Entfernung zusammen mit etwas Text auf dem LCD und verwenden die „if“-Anweisungen, wenn wir die Taste drücken, drucken oder speichern wir die letzten beiden Messungen.

Als nächstes kommt das Programm zur Flächenberechnung, in dem wir ähnliche Methoden anwenden. Wir müssen zwei senkrechte Messungen vornehmen und sie einfach multiplizieren, um die Fläche des Quadrats zu erhalten, das sie bilden.

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; Codesprache:Arduino (arduino) 

Der letzte Fall ist das Winkelmessprogramm. Hier müssen wir die Beschleunigungsmesserdaten lesen, die tatsächlich die Stärke des Gravitationsfeldes der Erde in drei verschiedenen Achsen, X, Y und Z, darstellen. Der Wert jeder Achse wird in 2 Registern gespeichert, also müssen wir insgesamt 6 Register lesen und kombinieren Sie sie, um den richtigen Wert zu erhalten.

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; Codesprache:Arduino (arduino) 

Sobald wir die X-, Y- und Z-Werte des Beschleunigungsmessers haben, können wir den Neigungswinkel oder die Drehung um die Y-Achse sowie den Rollwinkel oder die Drehung um die X-Achse unter Verwendung der beiden Gleichungen berechnen. Weitere Einzelheiten zu diesen Gleichungen finden Sie im Anwendungshinweis von Freescale Semiconductor, Tilt Sensing Using a Three-Axis Accelerometer . Danach drucken wir die Werte zusammen mit etwas Text auf dem LCD aus und durch Drücken der Taste ändern wir, was wir auf dem LCD anzeigen, sei es der Neigungs- oder der Rollwinkel.

Hier ist der vollständige Quellcode für dieses Arduino-Entfernungsmesser- und Wasserwaagen-Projekt:

/*
  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;
} Codesprache:Arduino (arduino) 

Das wäre alles, ich hoffe, Sie haben dieses Arduino-Projekt genossen und etwas Neues gelernt. Fühlen Sie sich frei, Fragen im Kommentarbereich unten zu stellen.


Herstellungsprozess

  1. Model Rail Digital DCC Command Station Arduino und kostenlose App
  2. Arduino Digital Dice
  3. LCD-Animation und -Spiele
  4. Audiofrequenzdetektor
  5. Arduino Tamagotchi Klon - Digitales Haustier
  6. Tech-TicTacToe
  7. DIY Voltmeter mit Arduino und einem Nokia 5110 Display
  8. Arduino-Countdown-Timer
  9. Python3- und Arduino-Kommunikation
  10. FM-Radio mit Arduino und RDA8057M