Делаем простые весы с помощью Arduino

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

Делаем простые весы с помощью Arduino

Шаг 1: Что нам понадобится

Arduino - в нашем уроке мы используем стандартный Arduino Uno, другие версии Arduino или клоны должны также работать.

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

Датчик нагрузки на 5 кг. Датчик нагрузки представляют собой металлические детали специальной формы к которым приклеиваются тензодатчики. Тензорезисторы - это резисторы, которые меняют свое сопротивление, когда они изогнуты. Когда металлическая часть изгибается, сопротивление тензодатчика изменяется (HX711 точно измеряет это небольшое изменение сопротивления). Вы можете купить HX711 и весоизмерительную ячейку здесь, например, на Амазоне - https://www.amazon.com/Degraw-Load-Cell-HX711-Combo/dp/B075317R45/.

Прочная плоская монтажная поверхность (x2) - идеальная жесткая деталь из твердой древесины или металла.

Провода разных цветов для подключения всех частей.

Электропитание для Arduino.

Шаг 2: Устанавливаем датчик нагрузки

Устанавливаем датчик нагрузки

Сначала мы собираемся установить весоизмерительный датчик. Конечно, вы можете сделать по-своему, но вот рекомендации, которые вам желательно сделать:

1. Алюминиевый тензодатчик должен иметь 4 резьбовых отверстия и метки, показывающие направление силы. Установите сторону без метки на неподвижную поверхность и установите сторону с этикеткой на движущуюся поверхность. Стрелка на маркированной стороне должна указывать вниз в направлении движения платформы при приложении нагрузки.

2. Монтажная пластина (опора, поверхность) и подвижная пластина должны быть как можно более жесткими.

3. Удостоверьтесь, что между монтажными пластинами и тензодатчиком устанавливаются какие-то жесткие прокладки. Стойки или шайбы хорошо работают. Цель состоит в том, что любое усилие, прикладываемое к движущейся пластине, приводит к изгибу и скручиванию тензодатчика. Без прокладок загрузка будет передаваться непосредственно с подвижной пластины на неподвижную пластину, не затрагивая тензодатчик.

Шаг 3: Подключаем датчик нагрузки и HX711

Подключаем датчик нагрузки и HX711

См. схему подключения датчиков нагрузки, HX711 и Arduino выше на рисунке.

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

Шаг 4: Добавляем библиотеку HX711 в среду разработки Arduino

Библиотека HX711 доступна по ссылке https://github.com/bogde/HX711.

Чтобы посмотреть инструкцию о том, как добавить библиотеку в вашу Arduino IDE перейдите по ссылке на официальный сайт Arduino: https://www.arduino.cc/en/Guide/Libraries.

Шаг 5: Код, калибровка и взвешивание

Калибровка и взвешивание

У пользователя Sparkfun есть ряд классных программ для Ардуино для запуска процесса взвешивания. Самая актуальная версия размещена ниже, но также её можно скачать с репозитория - https://github.com/sparkfun/HX711-Load-Cell-Amplifier.

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

/* 
 Example using the SparkFun HX711 breakout board with a scale
 By: Nathan Seidle
 SparkFun Electronics
 Date: November 19th, 2014
 License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
 This is the calibration sketch. Use it to determine the calibration_factor that the main example uses. It also
 outputs the zero_factor useful for projects that have a permanent mass on the scale in between power cycles.
 Setup your scale and start the sketch WITHOUT a weight on the scale
 Once readings are displayed place the weight on the scale
 Press +/- or a/z to adjust the calibration_factor until the output readings match the known weight
 Use this calibration_factor on the example sketch
 This example assumes pounds (lbs). If you prefer kilograms, change the Serial.print(" lbs"); line to kg. The
 calibration factor will be significantly different but it will be linearly related to lbs (1 lbs = 0.453592 kg).
 Your calibration factor may be very positive or very negative. It all depends on the setup of your scale system
 and the direction the sensors deflect from zero state
 This example code uses bogde's excellent library: https://github.com/bogde/HX711
 bogde's library is released under a GNU GENERAL PUBLIC LICENSE
 Arduino pin 2 -> HX711 CLK
 3 -> DOUT
 5V -> VCC
 GND -> GND
 Most any pin on the Arduino Uno will be compatible with DOUT/CLK.
 The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.
*/

#include "HX711.h"
#define DOUT  3
#define CLK  2
HX711 scale(DOUT, CLK);
float calibration_factor = -7050; //-7050 worked for my 440lb max scale setup
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(); //Reset the scale to 0
  long zero_factor = scale.read_average(); //Get a baseline reading
  Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects.
  Serial.println(zero_factor);
}
void loop() {
  scale.set_scale(calibration_factor); //Adjust to this calibration factor
  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 1);
  Serial.print(" lbs"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
  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;
  }
}

После калибровки шкалы вы можете запустить эту пробную программу, а затем переделать ее для своих целей:

/*
 Example using the SparkFun HX711 breakout board with a scale
 By: Nathan Seidle
 SparkFun Electronics
 Date: November 19th, 2014
 License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
 This example demonstrates basic scale output. See the calibration sketch to get the calibration_factor for your
 specific load cell setup.
 This example code uses bogde's excellent library: https://github.com/bogde/HX711
 bogde's library is released under a GNU GENERAL PUBLIC LICENSE
 The HX711 does one thing well: read load cells. The breakout board is compatible with any wheat-stone bridge
 based load cell which should allow a user to measure everything from a few grams to tens of tons.
 Arduino pin 2 -> HX711 CLK
 3 -> DAT
 5V -> VCC
 GND -> GND
 The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.
*/
#include "HX711.h"
#define calibration_factor -7050.0 //This value is obtained using the SparkFun_HX711_Calibration sketch
#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); //This value is obtained by using the SparkFun_HX711_Calibration sketch
  scale.tare(); //Assuming there is no weight on the scale at start up, reset the scale to 0
  Serial.println("Readings:");
}
void loop() {
  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 1); //scale.get_units() returns a float
  Serial.print(" lbs"); //You can change this to kg but you'll need to refactor the calibration_factor
  Serial.println();
}

На этом пока всё. Хороших вам проектов и отличного настроения!

Ардуино+