Получение максимального значения из HX711 и использование его в коде далее
я использую HX711 модуль, чтобы получить значение из ячейки загрузки.мои проекты-это машина испытания прочности на растяжение,который будет постепенно увеличивать нагрузку и сломаться в своей максимальной мощности.поэтому мне нужно максимальное значение, при котором образец ломает.и использовать это значение в коде для калькуляции прочностью на растяжение образцов, используя формулу(прочность на растяжение=нагрузка/площадь поперечного сечения образца). Пожалуйста ,помогите мне с этим, и, если возможно, я буду очень признателен, если кто-нибудь тоже сможет помочь мне с кодом. Спасибо
@Roney Peter, 👍1
Обсуждение1 ответ
Мы не будем писать код для вас, так как мы не являемся бесплатной службой кодирования, но я постараюсь дать вам несколько советов, как вы можете это сделать.
Сроки проведения измерений: Сами измерения можно выполнить с помощью одной из библиотек HX711, доступных в Интернете, но вам может потребоваться время, чтобы проводить более регулярные измерения. Это может быть сделано в неблокирующем стиле кодирования, как в
примере BlinkWithoutDelay, который поставляется с Arduino IDE. Он включает функцию
millis()
для измерения времени, прошедшего с момента последнего измерения, и действует соответственно. Это объясняется много раз в Интернете и на этом сайте.Сохранение данных и нахождение максимума: это зависит от того, что еще вы хотите сделать с данными.
Сохранение всех данных для последующей обработки: Возможно, вам захочется сохранить все данные (кривую нагрузки) для последующего использования. В этом случае вам необходимо определить массив соответствующей длины (длина зависит от продолжительности и частоты измерения). Также определите переменную положения или указатель, который отмечает текущую позицию в этом массиве. Каждый раз, когда вы выполняете измерение, вы сохраняете результат в элементе массива в сохраненной позиции и после этого увеличиваете переменную позиции. После окончания измерения вы объявляете переменную значения со значением первого элемента массива. Затем вы перебираете все следующие элементы (
для(int i=1;i<длина массива;i++)
). Внутри цикла вы вычисляете и сохраняете максимум 2 числа: значение текущего элемента массива и сохраненную переменную. Это можно сделать спомощью saved_value = max(saved_value, массив[i]);
. Когда цикл завершится, у вас будет максимальное значение впеременной saved_value.
Нет сохранения данных: Вы также можете рассчитать максимальный полет без сохранения всех данных. Объявите переменную (
max_value
), которая будет содержать максимальное значение, и установите ее равной нулю. Затем каждый раз, когда вы выполняете измерение, вы выполняетеmax_value = max(current_value, max_value);
который вычисляет максимум из двух чисел (текущее измерение и ранее вычисленный максимум). В конце измерения у вас будет абсолютный максимум в переменнойmax_value
.
Определение конца измерения: Вам нужно почувствовать конец измерения (когда образец сломается) (хотя это можно сделать вручную, если хотите). Для этого я бы предложил рассчитать скорость, с которой изменяется нагрузка. Во время измерения нагрузка будет медленно увеличиваться. В момент разрыва нагрузка будет очень быстро уменьшаться. Скорость между двумя измерениями нагрузки рассчитывается по
формуле (значение(x) - значение(x-1))/measurement_interval
. Вы можете определить порог отрицательной скорости, чтобы каждая скорость ниже него (более быстрое отрицательное уменьшение нагрузки) воспринималась как разрушение образца. Вы можете проверить это при каждом измерении с помощью простогооператора if или рассчитать скорость более чем при 2 последовательных измерениях. Это зависит от фактической скорости изменения нагрузки и частоты измерений нагрузки.
Расчет прочности на растяжение: Это просто запись вашей формулы в код с использованием имен переменных, которые вы использовали в предыдущем коде. Обязательно используйте правильный тип переменной для ваших нужд. Скорее всего, вы захотите использовать
float
.Получение информации от пользователя: Это во многом зависит от запланированных вами способов взаимодействия с пользователем. Подключен ли Arduino к ПК, и вы используете программу последовательного терминала? Затем вы можете использовать это для ввода пользователем (возможно, вам захочется посмотреть
пример serialEvent в среде IDE Arduino, в котором показано, как работать с сообщениями и символами-разделителями). Вы хотите добавить клавиатуру и ЖК-дисплей? Для них также доступна библиотека, поэтому не должно быть очень сложно научиться использовать ее, чтобы получить пользовательский ввод.
Большое вам спасибо за помощь., @Roney Peter
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Пожалуйста, покажите нам код, который у вас уже есть. В чем ваша проблема с достижением цели? Каждый раз, когда нагрузка увеличивается, вы измеряете с помощью тензодатчика и сохраняете результат в переменной, но только в том случае, если он больше предыдущего значения. Ощутите разрыв образца, проверив, не уменьшилась ли большая нагрузка в вашем тензодатчике. Сохраненное значение в это время-это абсолютный максимум, который был достигнут., @chrisl
Спасибо, у меня нет никакого кода для проекта, я новичок в программировании arduino.я просто знаю основы.не могли бы вы помочь мне с кодом?, @Roney Peter
Спасибо, код должен взять максимальное значение из тензодатчика, при котором образец сломался, и использовать это значение для расчета прочности при растяжении по приведенной выше формуле, т. е. (максимальная нагрузка÷площадь поперечного сечения), где площадь поперечного сечения рассчитывается по формуле-((pi÷4)*(r^2)) и "r" вводится пользователем, который является радиусом образца., @Roney Peter