цифровая электроника
вычислительная техника
встраиваемые системы

 

Весы на основе Arduino и HX711 своими руками

Автор: Mike(admin) от 16-01-2018, 14:55

Микроконтроллерная платформа Arduino позволяет сделать множество несложных, но в то же время полезных в быту вещей. Одной из таких вещей можно назвать весы.


Весы на основе Arduino и HX711 своими руками

В данном примере будет показано, как самостоятельно собрать весы на основе Arduino, модуля с микросхемой HX711 и четырех весоизмерительных ячеек.


Микросхема HX711 специально предназначенf для усиления сигналов от весоизмерительных ячеек и передачи их в другой микроконтроллер. Весоизмерительные ячейки подключаются к плате с HX711, и эта плата сообщает Arduino, что именно измеряют весоизмерительные ячейки. Весоизмерительные ячейки (на 50 кг в данном случае) представляют собой металлические элементы специальной формы, к которым прикреплены тензодатчики (тензорезисторы). Тензорезисторы – это резисторы, которые меняют свое сопротивление при изгибе. Когда металлическая часть изгибается, сопротивление тензодатчика изменяется (HX711 точно измеряет это небольшое изменение сопротивления).


Весоизмерительные ячейки

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


Весоизмерительные ячейки

Весоизмерительные ячейки

Убедитесь, что два терминала на весоизмерительных ячейках имеют наивысшее сопротивление между ними (например, черным и белым), соедините их в петлю в соответствии со цветами, например, черный-черный белый-белый черный-черный белый-белый. Затем можно подавать напряжение возбуждения на два противоположных центральных ответвления и снимать показания с другой пары центральных ответвлений. Таким образом, получим некоторое подобие моста Уитстона. Схема подключения весоизмерительных ячеек к модулю HX711 и затем к Arduino показана ниже.


Весы на основе Arduino и HX711 своими руками

Далее приведен код (скетч) для Arduino, позволяющий реализовать измерение веса. В нем используется библиотека HX711, которую можно взять на https://github.com/bogde/HX711. Перед началом полноценного использования весов, их необходимо откалибровать. Код калибровки выглядит следующим образом.



include "HX711.h"

#define DOUT  3
#define CLK  2

HX711 scale(DOUT, CLK);

float calibration_factor = -7050; // коэффициент калибровки, можно варьировать

void setup() {
  Serial.begin(9600);
  Serial.println("HX711 calibration sketch");
  Serial.println("Remove all weight from scale"); // уберите посторонние предметы с весов
  Serial.println("After readings begin, place known weight on scale"); // после начала считывания поместите на весы предмет известной массы
  Serial.println("Press + or a to increase calibration factor"); // нажмите плюс для увеличения коэффициента калибровки
  Serial.println("Press - or z to decrease calibration factor"); // нажмите минус для уменьшения коэффициента калибровки

  scale.set_scale();
  scale.tare(); // сброс весов в 0

  long zero_factor = scale.read_average(); // Получить базовое считывание
  Serial.print("Zero factor: "); // Это можно использовать, чтобы устранить необходимость тарирования шкалы. Полезно в проектах постоянного масштаба.
  Serial.println(zero_factor);
}

void loop() {

  scale.set_scale(calibration_factor); // Регулирование калибровочного коэффициента

  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 1);
  Serial.print(" kg"); 
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.println();

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 10;
  }
}

Код работы весов на основе Arduino и HX711.



#include "HX711.h"

#define calibration_factor -7050.0 // коэффициент калибровки, определяется во время процесса калибровки

#define DOUT  3
#define CLK  2

HX711 scale(DOUT, CLK);

void setup() {
  Serial.begin(9600);
  Serial.println("HX711 scale demo");

  scale.set_scale(calibration_factor);
  scale.tare(); // Предполагается, что при запуске весов на шкале нет предметов с массой, сброс весов в 0

  Serial.println("Readings:");
}

void loop() {
  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 1); //scale.get_units() возвращает float
  Serial.print(" kg");
  Serial.println();
}



© digitrode.ru


Теги: Arduino, весы




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий