Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Проект дальномера Arduino и цифрового спиртового уровня

<основной класс="главный сайт" id="главный">

В этом уроке мы узнаем, как сделать дальномер Arduino и цифровой спиртовой уровень. Вы можете посмотреть следующее видео или прочитать письменное руководство ниже.

Обзор

Устройство оснащено ультразвуковым датчиком для измерения расстояния до ближайшего объекта, акселерометром для измерения угла относительно земли, ЖК-дисплеем для отображения результатов и специально разработанной печатной платой, к которой подключены все компоненты.

Мы можем управлять устройством с помощью всего одной кнопки. После включения устройства нам нужно выбрать единицу измерения.

Нажимая кнопку, мы можем переключаться между единицами измерения, а если мы нажмем и удерживаем кнопку некоторое время, мы попадем в первую программу. Здесь мы можем измерить расстояние, а также иметь возможность сохранить два последних измерения.

Чтобы попасть во вторую программу, снова нужно нажать и удерживать кнопку некоторое время. В этой программе мы можем измерить площадь квадрата, выполнив два перпендикулярных измерения расстояния.

Следующая программа — это цифровой ватерпас, и здесь мы можем измерить угол относительно земли.

С помощью кнопки мы можем переключаться между двумя осями или измерять шаг или вращение.

Схема дальномера Arduino

Вот принципиальная схема этого проекта Arduino.

Обратите внимание, что у меня уже есть подробные руководства о том, как работает каждый из этих модулей, и вы можете ознакомиться с ними по следующим ссылкам:руководство по ультразвуковому датчику, руководство по ЖК-дисплею, руководство по акселерометру MEMS.

Компоненты, необходимые для этого проекта, можно получить по ссылкам ниже:

Плата индивидуального дизайна

В соответствии со схемой нам нужно спроектировать индивидуальную печатную плату, и я сделал это с помощью бесплатной онлайн-программы для проектирования схем EasyEDA.

Как только мы закончим проектирование здесь, мы можем просто экспортировать файл Gerber, который используется для изготовления печатной платы. Вы можете проверить файлы проекта EasyEDA этого проекта здесь.

Затем мы можем заказать нашу плату у JLCPCB, которая фактически является спонсором этого проекта.

Здесь мы можем просто перетащить файл Gerber. После загрузки мы можем просмотреть нашу печатную плату в программе просмотра Gerber. Если все в порядке, мы можем продолжить, выбрать свойства, которые мы хотим для нашей печатной платы, а затем мы можем заказать нашу печатную плату по разумной цене. Обратите внимание:если это ваш первый заказ в JLCPCB, вы можете получить до 10 печатных плат всего за 2 доллара США.

Сборка устройства

Тем не менее, через несколько дней печатные платы прибыли. Качество печатных плат отличное и все точно так же, как и в дизайне.

Хорошо, теперь мы можем начать собирать электронику для этого проекта. Я начал с пайки выводов на печатной плате. Таким образом, мы можем легко подключать и отключать компоненты, когда это необходимо.

Затем я вставил и припаял три резистора. Два из них предназначены для делителя напряжения контрастности ЖК-дисплея. Резистор номиналом 1 кОм должен быть размещен на R1, а резистор на 220 Ом — на R2. Третий — подтягивающий резистор для кнопки.

Далее я перешел к изготовлению корпуса для устройства. Я решил использовать прозрачный акрил, потому что хотел, чтобы красота всех компонентов электроники была видна. У меня было несколько 5-миллиметровых акриловых клеев из старого проекта, и я использовал циркуляр, чтобы обрезать их до нужного размера.

Затем мне пришлось сделать отверстие для ЖК-дисплея на верхней стороне корпуса, которое на самом деле составляет 4 мм, потому что оно лучше подходит для ЖК-дисплея. Итак, сначала я сделал два отверстия дрелью, а затем вставил в них ножовку. С помощью ножовки я примерно сделал отверстие, а затем с помощью рашпиля провел тонкие прямые линии, чтобы ЖК-дисплей мог плотно прилегать.

Затем с помощью биты Форстнера я сделал отверстия для выключателя питания, кнопки управления и ультразвукового датчика.

Когда все детали были готовы, я использовал 5-минутную эпоксидную смолу для сборки корпуса. Что касается верхней части, я вставил и приклеил два болта, через которые можно вставить верхнюю панель и закрепить ее с помощью гаек сверху.

Теперь корпус готов, поэтому я продолжил припаивать разъемы контактов к ЖК-дисплею, чтобы легко прикрепить его к печатной плате. Я также припаял контактные разъемы или соединительные провода к выключателю питания, кнопке и разъему аккумулятора.

Наконец, у меня было все готово для сборки устройства. Я начал с установки ультразвукового датчика на печатную плату, а затем через отверстия на боковой панели. Далее была плата Arduino, модуль акселерометра, а также разъем для аккумулятора.

На верхней панели я закрепил ЖК-дисплей, выключатель питания и кнопку, а затем подключил их к печатной плате. Наконец, я вставил 9-вольтовую батарею в разъем и закрепил верхнюю панель гайками.

Вот и все, проект дальномера Arduino завершен, но в этом видео осталось объяснить, как работает программа, так что давайте взглянем на код Arduino.

Исходный код дальномера Arduino и цифрового спиртового уровня

Так как код немного длиннее, для лучшего понимания я буду размещать исходный код программы в разделах с описанием для каждого раздела. А в конце этой статьи я выложу полный исходный код.

Итак, сначала нам нужно включить библиотеку Wire.h для связи I2C акселерометра, а также библиотеку LiquidCrystal.h для управления ЖК-дисплеем. Затем нам нужно определить ЖК-дисплей, адрес I2C модуля акселерометра MPU6050, контакты ультразвукового датчика, а также некоторые переменные, необходимые для программы ниже.

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

В разделе настройки нам нужно инициализировать как интерфейс I2C акселерометра, так и жидкокристаллический дисплей, а также определить режимы контактов для триггера ультразвукового датчика и контактов эха, а также контакта кнопки.

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)

В разделе основного цикла у нас есть операторы переключения, с помощью которых мы можем переключаться между различными программами нашего устройства. В первом, или случае номер 0, выбираем единицу измерения. С помощью функции lcd.print() мы печатаем текст на ЖК-дисплее, а с помощью операторов if переключаемся между четырьмя единицами измерения.

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)

Здесь следует отметить, что переменная unitSelect действует в функции getDistance() cunstom, где она фактически сообщает, в какую единицу измерения мы должны преобразовать базовую единицу измерения в сантиметрах, которую мы получаем от ультразвукового датчика.

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

Для того, чтобы выбрать единицу измерения, а также попасть в первую программу прибора, достаточно удерживать кнопку дольше полсекунды.

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

В случае номер 1 или в программе измерения расстояния сначала мы получаем расстояние до ближайшего объекта, используя пользовательскую функцию 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)

Давайте посмотрим, как работает эта функция.

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

Здесь с помощью пускового штифта мы сообщаем датчику о необходимости генерировать ультразвуковую звуковую волну.

Затем, используя эхо-вывод и функцию pulseIn(), мы измеряем продолжительность пути волны от датчика до объекта и обратно. Учитывая скорость звука и время в пути, мы можем легко рассчитать расстояние. Таким образом, мы печатаем измеренное расстояние вместе с текстом на ЖК-дисплее и, используя операторы «если», если мы нажимаем кнопку, мы печатаем или сохраняем два последних измерения.

Далее идет программа для расчета площади, в которой мы используем аналогичные методы. Нам нужно взять два перпендикулярных измерения и просто перемножить их, чтобы получить площадь квадрата, который они образуют.

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)

Последний случай — это программа измерения угла. Здесь нам нужно прочитать данные акселерометра, которые на самом деле представляют собой силу гравитационного поля Земли по трем разным осям, X, Y и Z. Значение каждой оси хранится в 2 регистрах, поэтому нам нужно прочитать всего 6 регистров. и комбинируйте их, чтобы получить правильное значение.

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)

Когда у нас есть значения X, Y и Z акселерометра, мы можем рассчитать угол наклона или поворот вокруг оси Y, а также угол поворота или поворот вокруг оси X, используя два уравнения. Более подробную информацию об этих уравнениях можно найти в примечаниях к применению Freescale Semiconductor, Определение наклона с помощью трехосевого акселерометра. . Итак, после этого мы печатаем значения вместе с текстом на ЖК-дисплее и, нажимая кнопку, изменяем то, что мы показываем на ЖК-дисплее, будь то шаг или угол поворота.

Вот полный исходный код для этого проекта дальномера 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)

На этом все, надеюсь, вам понравился этот проект Arduino и вы узнали что-то новое. Не стесняйтесь задавать любые вопросы в разделе комментариев ниже.


Производственный процесс

  1. Цифровая командная станция DCC Model Rail Arduino и бесплатное приложение
  2. Цифровые игральные кости Arduino
  3. ЖК-анимация и игры
  4. Детектор звуковой частоты
  5. Клон Arduino Tamagotchi - цифровой питомец
  6. Tech-TicTacToe
  7. DIY вольтметр с Arduino и дисплеем Nokia 5110
  8. Таймер обратного отсчета Arduino
  9. Связь Python3 и Arduino
  10. FM-радио с использованием Arduino и RDA8057M