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

Как найти источник проблемы

Самостоятельно провести диагностические мероприятия крайне проблематично. Потребуется выполнить следующий алгоритм для того, чтобы найти проблему:

  1. Внимательно осмотреть весы на предмет деформаций.
  2. Снять защитные ножки с тензометрических датчиков. Осмотреть металлические пластины.
  3. Разобрать корпус. Проверить все внутренние элементы.

Для того, чтобы разобрать корпус потребуется отвернуть все болты

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

Для восстановления работоспособности устройства потребуется специальный инструмент. Необходимо заранее приготовить:

  • паяльник (может потребоваться, если имеется разрыв провода);
  • маленькие отвертки.

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

Что из себя представляют медицинские напольные весы и как их выбрать, .

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

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

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

/* 
 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;
  }
}

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

/*
 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();
}

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

Принцип работы тензодатчика

Работа датчика веса основана на изменении какого-либо физического параметра, пропорционально весу измеряемого предмета. Параметр зависит от того, какой элемент используется в датчике. Так при изменении нагрузки на пьезокерамическую пластину меняется напряжение, снимаемое с электродов на концах пьезодатчика. При использовании ёмкостного датчика меняется ёмкость переменного конденсатора. В данной конструкции используется датчик веса, выполненный на упругом резисторе и при изменении веса, меняется его сопротивление, а, следовательно, и напряжение, снимаемое с мостовой схемы.

 

Датчик представляет собой прямоугольный брусок из алюминиевого сплава, с отверстием в центре. На его боковые поверхности нанесены тонкоплёночные резисторы, соединённые по мостовой схеме, поэтому резистивный датчик имеет 4 гибких вывода. Все элементы датчика залиты эпоксидным компаундом. На бруске предусмотрены резьбовые отверстия для крепления его к основанию и для установки пластины под измеряемый груз. На торцевой стороне датчика нанесена маркировка, указывающая максимальный вес измеряемого груза. Для того чтобы резисторы изменяли своё сопротивление, тензометрический датчик должен одним концом фиксироваться на основании, а на другой его конец должен действовать груз так, чтобы возникла деформация бруска и, соответственно, плёночных резисторов. Для того чтобы преобразовать аналоговый сигнал с выхода тензорного датчика в двоичный код, применяется аналого-цифровой преобразователь (АЦП) НХ711.

Synopsis

Blocking mode

The library is usually used in blocking mode, i.e. it will wait for the
hardware becoming available before returning a reading.

#include "HX711.h"
HX711 loadcell;

// 1. HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;

// 2. Adjustment settings
const long LOADCELL_OFFSET = 50682624;
const long LOADCELL_DIVIDER = 5895655;

// 3. Initialize library
loadcell.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
loadcell.set_scale(LOADCELL_DIVIDER);
loadcell.set_offset(LOADCELL_OFFSET);

// 4. Acquire reading
Serial.print("Weight: ");
Serial.println(loadcell.get_units(10), 2);

Non-blocking mode

It is also possible to define a maximum timeout to wait for the hardware
to be initialized. This won’t send the program into a spinlock when the
scale is disconnected and will probably also account for hardware failures.

Features

  1. It provides a function, which «resets» the scale to 0. Many other
    implementations calculate the tare weight when the ADC is initialized only.
    I needed a way to be able to set the tare weight at any time.
    Use case: Place an empty container on the scale, call to reset
    the readings to 0, fill the container and get the weight of the content.

  2. It provides a function, to put the ADC into a low power mode.
    According to the datasheet,

    Use case: Battery-powered scales. Accordingly, there is a
    function to get the chip out of the low power mode.

  3. It has a function that allows you to set the gain factor
    and select the channel. According to the datasheet,

    The same function is used to select the channel A or channel B, by passing
    128 or 64 for channel A, or 32 for channel B as the parameter. The default
    value is 128, which means «channel A with a gain factor of 128», so one can
    simply call .

    This function is also called from the initializer method .

  4. The and functions can receive an extra parameter «times»,
    and they will return the average of multiple readings instead of a single reading.

Устройство электронных напольных весов

Изделие состоит из нескольких элементов. Как правило, специалисты выделяют следующие его части:

  • дисплей;
  • корпус;
  • печатную плату с различными микросхемами;
  • тензодатчики.

Классические напольные весы со стеклянным корпусом. Обладают дисплеем, схемой и 4 датчиками

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

Важнейшей частью весов являются тензодатчики. Они представляют собой металлические пластины, которые расположены на задней части изделия.

Открытая пластина тензодатчика. Датчик преобразует силу деформации в килограммы

Внутри изделия находится плата, которая считывает данные и отображает их на дисплее. От электронной платы зависит функциональность весов. К плате подключаются 4 датчика. Вся конструкция надежна защищена корпусом. Дисплей в большинстве устройств черно-белый. Он хорошо отображает всю необходимую информацию.

Питание устройства осуществляется от батарейки. Используется миниатюрный элемент питания (батарейка таблетка)

Описание модуля

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

Это могут быть как автоматизированные системы, теплица, так и полноценные электронные весы, которые можно сделать своими руками.

Давайте рассмотрим, что это вообще за покупной модуль и какие функции он выполняет в системе.

Под Ардуино существует десяток разнообразных модулей и чипов, способных расширить функционал МК. И условно их можно разделить на три группы:

  1. Датчики и подобные им модули. В этой группе находятся все чипы, которые предназначены для измерения любых параметров окружающей среды и трансформации их в электронный сигнал. Именно датчики позволяют измерять вес, засечь звуковые волны при хлопке или уловить удар о поверхность. Без них большая часть проектов и систем в современном мире просто не могли бы существовать. Так что на деле их можно сравнить с трансформаторами внешних сигналов, которые они переводят во внутренние.
  2. Чипы и микроконтроллеры, позволяющие расширить стандартные возможности Ардуино. Могут, например, добавить немного постоянной или оперативной памяти, позволить подключать различные источники питания параллельным соединением. В большей своей части влияют на программную часть системы, в то время, как датчики и переходники напрямую модифицируют аппаратную. Могут быть использованы в том случае, если нет желания спаивать несколько МК, но ресурсов для выполнения вычислений не хватает.
  3. Переходники и вспомогательные средства для усиления сигнала. Именно к ним относится hx711, который усиливает сигнал от датчика веса и переводит его в цифровой, который может воспринимать Ардуино. Между предыдущим и этим пунктом есть небольшая грань, которую зачастую стирают и совмещают их в один класс. Тем не менее, если «расширители» влияют именно на программную часть, то разнообразные переходники позволяют усовершенствовать аппаратную.

Встречаются и комбинированные разновидности, например, слот под флешку, для расширения постоянной памяти стандартным физическим носителем.

Итак, мы разобрались, что hx711 – это 24-х битный АЦП, необходимый для адаптации тензодатчиков и весов в Ардуино. Однако подходит он лишь для простых систем Ардуино, где необходимы точные показание с тех же тензодатчиков.

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

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

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

Далее чип подключается уже к тем самым датчикам через мостовую схему и к МК, являясь промежуточным звеном между ними. В данном случае мы рассматриваем подключение именно к Ардуино, но на деле подойдёт любой микроконтроллер, который вам будет удобнее программировать. Аппаратных ограничений в этом плане нет.

Подключение HX711 к Arduino

Поскольку резисторы тензорного датчика включены по мостовой схеме, от устройства отходят 4 проводника, имеющих разную цветовую маркировку. На два плеча моста подаётся опорное напряжение, а с двух других плеч снимается выходное напряжение, которое подаётся на вход операционного усилителя микросхемы НХ711. Подключение по цветам проводов осуществляется следующим образом:

  • Красный – Е +
  • Чёрный – Е –
  • Белый – А –
  • Зелёный – А +

Для дальнейшей обработки и передачи информации осуществляется подключение НХ711 к Ардуино UNO. Для этого контакты питания GND и VCC HX711 подключаются к точкам GND и 5V разъёма POWER модуля Arduino UNO, а контакты DT и SCK подключаются к точкам A1 и A0 разъёма ANALOG IN. Тензодатчик НХ711 через контроллер Arduino UNO можно подключить к жидкокристаллическому дисплею LCD 1602 или компьютеру, используя USB порт и стандартные библиотеки для Ардуино.

Поскольку на выходе измерительного моста изменяется напряжение, то именно оно преобразуется в бинарный код. Диапазон контролируемых напряжений зависит от выбранного коэффициента усиления. Если коэффициент равен 128, диапазон измеряемых напряжений варьируется от – 20 mV до + 20 mV, выбор коэффициента усиления 64 определяет пределы измерения от – 40 mV до + 40 mV и при коэффициенте равном 32 пределы измерения определяются величинами – 80 mV и + 80 mV. Эти данные будут корректными только при напряжении питания +5 V. Если входное напряжение выйдет за нижнюю границу диапазона, АЦП выдаст код 800000h, а если за верхнюю, то код будет 7FFFFFh. Для калибровки и измерений можно использовать следующие коды:

//код для калибровки //код для калибровки #include «HX711.h» HX711 scale(A1, A0); // DT, CLK float Calibration_Factor_Of_Load_cell = -3.7; // этот калибровочный коэффициент настраивается в соответствии с тензодатчиком float U; float O; 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_Of_Load_cell); //Отрегулируйте этот калибровочный коэффициент Serial.print(«Reading: «); U = scale.get_units(); if (U < 0) { U = 0.00; } O = U * 0.035274; Serial.print(O); Serial.print(» grams»); Serial.print(» Calibration_Factor_Of_Load_cell: «); Serial.print(Calibration_Factor_Of_Load_cell); Serial.println(); if (Serial.available()) { char temp = Serial.read(); if (temp == ‘+’ || temp == ‘a’) Calibration_Factor_Of_Load_cell += 1; else if (temp == ‘-‘ || temp == ‘z’) Calibration_Factor_Of_Load_cell -= 1; } }

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

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

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

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

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

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

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

Synopsis

Blocking mode

The library is usually used in blocking mode, i.e. it will wait for the
hardware becoming available before returning a reading.

#include "HX711.h"
HX711 loadcell;

// 1. HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;

// 2. Adjustment settings
const long LOADCELL_OFFSET = 50682624;
const long LOADCELL_DIVIDER = 5895655;

// 3. Initialize library
loadcell.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
loadcell.set_scale(LOADCELL_DIVIDER);
loadcell.set_offset(LOADCELL_OFFSET);

// 4. Acquire reading
Serial.print("Weight: ");
Serial.println(loadcell.get_units(10), 2);

Non-blocking mode

It is also possible to define a maximum timeout to wait for the hardware
to be initialized. This won’t send the program into a spinlock when the
scale is disconnected and will probably also account for hardware failures.

Пример реализации

Схема подключения датчика вибрации к ардуино

Вариантом использования вибрационного датчика может стать охранная сигнализация, в которой при ударе о поверхность, с закрепленным на ней устройством, происходит сработка (в данном примере загорится светодиод, присоединенный к пину 13). Для проекта следует подготовить такие детали:

  • плату Arduino Uno;
  • датчики вибрации 801S или Logo sensors v1.5;
  • макетную плату;
  • соединительные провода.

Сборка схемы производится согласно рисунку. Цифровой вывод DO соединяем с цифровым пином 2. При наличии вибраций значение сигнала многократно увеличивается и при достижении порогового значения, которое устанавливается потенциометром, на вывод DO подается логическая единица. Мы обрабатываем эту ситуацию, считывая значение функцией digitalRead, после чего подаем с помощью функции digitalWrite  5В на порт 13 и загорается встроенный в плату светодиод.

Пример скетча

#define PIN_LED 13
#define PIN_SENSOR 2 // Пин, ккотормоу присоединен датчик вибрации
void setup() {
  pinMode(PIN_LED, OUTPUT);
}

void loop() {
  int val = digitalRead(PIN_SENSOR); // Считваем значение с датчика

  if(val==1){ 
    digitalWrite(PIN_LED, HIGH); // Датчик сработад - включаем светодиод
  }else{
    digitalWrite(PIN_LED, LOW);
  }
}

Наиболее частые причины поломки

Существует список наиболее частых поломок. Выделяют следующие причины:

  • неисправность шлейфа;
  • уменьшение площади контактных концов;
  • выход из строя элементов электронной платы;
  • разрыв контактов;
  • проблемы с калибровкой.

Весы могут не работать из-за севшего аккумулятора. В таком случае потребуется лишь самостоятельно заменить батарейки.

Начинать диагностику устройства нужно с поиска простых неполадок.

Прибор из закаленного стекла, которое редко выходит из строя из-за высокой прочности корпуса

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

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

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

Для выбора умных напольных весов для дома ознакомьтесь с нашей статьей.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector