Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Pengukur Jangkauan Arduino dan Proyek Tingkat Roh Digital

Dalam tutorial ini kita akan belajar cara membuat pengukur jarak Arduino dan level spirit digital. Anda dapat menonton video berikut atau membaca tutorial tertulis di bawah ini.

Ringkasan

Perangkat ini dilengkapi sensor ultrasonik untuk mengukur jarak ke objek terdekat, akselerometer untuk mengukur sudut terhadap tanah, layar LCD untuk menampilkan hasil, dan PCB yang dirancang khusus yang menghubungkan semua komponen.

Kami dapat mengoperasikan perangkat hanya dengan satu tombol. Setelah menyalakan perangkat, kita perlu memilih unit pengukuran.

Dengan menekan tombol tersebut kita dapat berpindah-pindah satuannya, dan jika kita menekan dan menahan tombol tersebut sebentar kita akan masuk ke program pertama. Di sini kita dapat mengukur jarak dan juga memiliki kemampuan untuk menyimpan dua pengukuran terakhir.

Untuk masuk ke program kedua, lagi-lagi kita harus menekan dan menahan tombol tersebut beberapa saat. Dalam program ini kita dapat mengukur luas persegi dengan melakukan dua pengukuran jarak yang tegak lurus.

Program selanjutnya adalah digital spirit level dan di sini kita dapat mengukur sudut terhadap tanah.

Dengan menggunakan tombol, kita dapat beralih di antara dua sumbu atau mengukur Pitch atau Roll.

Skema Sirkuit Pengukur Jangkauan Arduino

Berikut skema rangkaian proyek Arduino ini.

Perhatikan bahwa saya sudah memiliki tutorial terperinci tentang cara kerja masing-masing modul ini, dan Anda dapat memeriksanya di tautan berikut:Tutorial sensor ultrasonik, tutorial LCD, tutorial akselerometer MEMS.

Anda bisa mendapatkan komponen yang diperlukan untuk proyek ini dari tautan di bawah:

  • Sensor Ultrasonik HC-SR04………………………………
  • Akselerometer Giroskop 3 Sumbu MPU6050………
  • LCD Karakter 16×2………………………………………
  • Arduino Nano………………………………………………

PCB desain khusus

Menurut skema sirkuit, kita perlu mendesain PCB khusus dan saya melakukannya menggunakan perangkat lunak desain sirkuit online gratis EasyEDA.

Setelah kami menyelesaikan desain di sini, kami cukup mengekspor file Gerber yang digunakan untuk pembuatan PCB. Anda dapat memeriksa file proyek EasyEDA dari proyek ini di sini.

Kemudian kami dapat memesan PCB kami dari JLCPCB, yang sebenarnya adalah sponsor dari proyek ini.

Di sini kita cukup drag dan drop file Gerber. Setelah diunggah, kami dapat meninjau PCB kami di penampil Gerber. Jika semuanya baik-baik saja maka kita dapat melanjutkan, memilih properti yang kita inginkan untuk PCB kita, dan kemudian kita dapat memesan PCB dengan harga yang wajar. Perhatikan bahwa jika ini adalah pesanan pertama Anda dari JLCPCB, Anda bisa mendapatkan hingga 10 PCB hanya dengan $2.

Merakit Perangkat

Namun demikian, setelah beberapa hari PCB telah tiba. Kualitas PCB sangat bagus dan semuanya sama persis dengan desainnya.

Ok, sekarang kita bisa mulai merakit elektronik untuk proyek ini. Saya mulai dengan menyolder pin header pada PCB. Dengan cara ini kita dapat dengan mudah menghubungkan dan memutuskan komponen saat dibutuhkan.

Kemudian saya memasukkan dan menyolder ketiga resistor. Dua di antaranya untuk pembagi tegangan untuk kontras LCD. Resistor 1k harus ditempatkan pada R1 dan 220 ohm pada R2. Yang ketiga adalah resistor pull-up untuk tombol.

Selanjutnya saya melanjutkan dengan membuat kasing untuk perangkat. Saya memutuskan untuk menggunakan akrilik transparan karena saya ingin keindahan semua komponen elektronik terlihat. Saya memiliki beberapa akrilik centang 5mm dari proyek lama, dan saya menggunakan lingkaran untuk memotongnya sesuai ukuran.

Kemudian saya harus membuat lubang untuk LCD di sisi atas kasing, yang sebenarnya adalah centang 4mm karena akan lebih cocok dengan LCD. Jadi pertama-tama saya membuat dua lubang dengan bor dan kemudian memasukkan gergaji besi ke dalamnya. Dengan menggunakan gergaji besi saya buat lubangnya dengan kasar lalu dengan menggunakan serak saya buat garis lurus yang halus agar LCD bisa pas.

Kemudian dengan sedikit lebih awal saya membuat lubang untuk sakelar daya, tombol kontrol, dan sensor ultrasonik.

Setelah semua bagian siap, saya menggunakan epoksi 5 menit untuk merakit casing. Untuk bagian atas, saya memasukkan dan merekatkan dua baut yang dapat digunakan untuk memasang panel atas dan diamankan menggunakan beberapa mur di atasnya.

Kasingnya sekarang sudah siap dan saya melanjutkan dengan menyolder pin header ke LCD sehingga saya dapat dengan mudah memasangnya ke PCB. Saya juga menyolder pin header atau kabel lompat ke sakelar daya, tombol, dan konektor baterai.

Akhirnya, saya menyiapkan segalanya untuk merakit perangkat. Saya mulai dengan memasukkan sensor ultrasonik pada PCB, dan kemudian melalui lubang di panel samping. Berikutnya adalah papan Arduino, modul akselerometer, serta konektor baterai.

Di panel atas, saya mengamankan LCD, sakelar daya, dan tombol, lalu menghubungkannya ke PCB. Terakhir saya memasukkan baterai 9V ke konektor dan mengencangkan panel atas dengan mur.

Dan itu saja, proyek pengukur jarak Arduino sudah selesai tetapi yang tersisa di video ini adalah menjelaskan cara kerja program, jadi mari kita lihat kode Arduino.

Pengukur Jangkauan Arduino dan Kode Sumber Level Spirit Digital

Karena kodenya sedikit lebih panjang, untuk pemahaman yang lebih baik, saya akan memposting kode sumber program di bagian dengan deskripsi untuk setiap bagian. Dan di akhir artikel ini saya akan memposting source code lengkapnya.

Jadi pertama-tama kita perlu menyertakan perpustakaan Wire.h untuk komunikasi I2C dari akselerometer, serta perpustakaan LiquidCrystal.h untuk mengontrol LCD. Kemudian kita perlu mendefinisikan LCD, alamat I2C modul akselerometer MPU6050, pin sensor ultrasonik, serta beberapa variabel yang diperlukan untuk program di bawah ini.

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

Di bagian penyiapan, kita perlu menginisialisasi antarmuka I2C akselerometer dan layar kristal cair, serta menentukan mode pin untuk pemicu sensor ultrasonik dan pin gema, serta pin tombol.

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)

Di bagian loop utama, kami memiliki pernyataan sakelar di mana kami dapat beralih di antara berbagai program perangkat kami. Dalam kasus pertama, atau nomor 0, kami memilih unit pengukuran. Menggunakan fungsi lcd.print() kita mencetak teks pada LCD dan menggunakan pernyataan if kita beralih melalui empat unit pengukuran.

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)

Kita harus mencatat di sini bahwa variabel unitSelect mengambil tindakan dalam fungsi getDistance() cunstom, di mana ia benar-benar memberi tahu ke unit mana kita harus mengonversi satuan cm dasar yang kita peroleh dari sensor ultrasonik.

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

Untuk memilih satuan pengukuran dan juga masuk ke program pertama perangkat, kita hanya perlu menahan tombol tekan lebih dari setengah detik.

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

Dalam kasus nomor 1 atau dalam program pengukuran jarak pertama kita mendapatkan jarak ke objek terdekat menggunakan fungsi kustom 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)

Mari kita lihat bagaimana fungsi ini bekerja.

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

Di sini, menggunakan pin pemicu, kami memberi tahu sensor untuk menghasilkan gelombang suara ultrasonik.

Kemudian menggunakan pin echo dan fungsi pulseIn() kami mengukur durasi perjalanan gelombang dari sensor ke objek dan kembali. Mempertimbangkan kecepatan suara dan waktu tempuh, kita dapat dengan mudah menghitung jaraknya. Jadi kami mencetak jarak yang diukur bersama dengan beberapa teks pada LCD dan menggunakan pernyataan "jika", jika kami menekan tombol, kami mencetak atau menyimpan dua pengukuran terakhir.

Berikutnya adalah program untuk menghitung luas di mana kita menggunakan metode serupa. Kita perlu melakukan dua pengukuran tegak lurus dan mengalikannya untuk mendapatkan luas persegi yang terbentuk.

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)

Kasus terakhir, adalah program pengukuran sudut. Di sini kita perlu membaca data accelerometer yang sebenarnya merupakan kekuatan medan gravitasi bumi di tiga sumbu yang berbeda, X,Y, dan Z. Nilai setiap sumbu disimpan dalam 2 register, jadi kita perlu membaca total 6 register dan menggabungkannya untuk mendapatkan nilai yang tepat.

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)

Setelah kita mendapatkan nilai X, Y dan Z dari akselerometer, kita dapat menghitung sudut Pitch, atau rotasi di sekitar sumbu Y, serta sudut Roll, atau rotasi di sekitar sumbu X, menggunakan dua persamaan. Anda dapat menemukan detail selengkapnya tentang persamaan ini pada catatan aplikasi Semikonduktor Skala Bebas, Penginderaan Miring Menggunakan Akselerometer Tiga Sumbu . Jadi setelah itu kita mencetak nilai beserta beberapa teks pada LCD, dan dengan menekan tombol kita mengubah apa yang kita tampilkan di LCD, apakah Pitch atau sudut Roll.

Berikut adalah kode sumber lengkap untuk pengukur jangkauan Arduino dan proyek level roh:

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

Jadi itu saja, saya harap Anda menikmati proyek Arduino ini dan belajar sesuatu yang baru. Jangan ragu untuk mengajukan pertanyaan apa pun di bagian komentar di bawah.


Proses manufaktur

  1. Model Rail Digital DCC Command Station Arduino dan Aplikasi Gratis
  2. Arduino Digital Dice
  3. Animasi dan Permainan LCD
  4. Detektor Frekuensi Audio
  5. Klon Arduino Tamagotchi - Hewan Peliharaan Digital
  6. Tech-TicTacToe
  7. Voltmeter DIY dengan Arduino dan Tampilan Nokia 5110
  8. Penghitung Waktu Mundur Arduino
  9. Python3 dan Komunikasi Arduino
  10. Radio FM Menggunakan Arduino dan RDA8057M