Как сделать весы на ардуино?

Весы на ардуино

Сегодня поговорим об одном интересном проекте на платформе ардуино. Прибор для измерения веса или по простому — весы. 

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

Для подобных проектов нам понадобится собственно сама плата ардуино, тензодатчик для определения веса и модуль внешнего АЦП HX711. Данный модуль как раз таки и был разработан для работы с тензодатчиками.

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

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

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

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

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

Мостовая схема подключения тензодатчика
Рисунок 1. Подключение тензодатчика

Конструкция датчика на основе упругого резистора имеет вид представленный на рисунке ниже.

Как выглядит тензодатчик
Рисунок 2. Внешний вид резистивного тензодатчика

Модуль АЦП HX711

Модуль внешнего  АЦП HX711 представляет собой микросхему внешнего АЦП с разрядностью 24.  2 дифференциальных канала и программируемым коэффициентом усиления 32, 64, 128. Ниже представлена схема внутреннего строения модуля HX711.

Функциональная схема модуля АЦП HX711
Рисунок 3. Функциональная схема модуля АЦП HX711

Как устроен модуль АЦП HX711 подробнее можно прочитать в нашей статье.

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

Как подключать тензодатчик к модулю HX711,  изображено на рисунке ниже:

Подключение тензодатчика к модулю АЦП HX711
Рисунок 4. Подключение тензодатчика к модулю АЦП HX711

Так как резисторы в тензодатчике подключены по мостовой схеме, датчик имеет четыре провода. По двум на датчик поступает опорное напряжение  и по двум замеряется напряжение, которое в свою очередь поступает на вход ОУ (операционного усилителя) модуля НХ711. Полная схема подключения представлена на рисунке ниже.

Рисунок 5. Подключение тензодатчика к ардуино через внешний АЦП HX711

Для  чтения данных с модуля необходимо использовать контакты  DT и SCK.

  • Когда идет преобразование на контакте DT устанавливается 1,  а на SCK в этот момент должен быть 0.
  • После того как модуль закончит преобразование, на выводе DT установиться 0. После этого можно считывать дынные, подав на вход SCK тактовую частоту.
  • После окончания чтения на контакте DT вновь установиться 1.

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

Рисунок 6. Таблица выбора канала и коэффициента усиления

ВНИМАНИЕ!


Выбор коэффициента усиления и канала устанавливается для следующего измерения. Это значит, что если читая текущее измерение мы на вход SCK подадим 25 импульсов, то следующее измерение будет, согласно таблице, с канала А с усилением 128.

Так же с коэффициентом усиление автоматически задается диапазон измерений напряжений:

  • коэффициент усиления 128: диапазон напряжений ±20mV;
  • коэффициент усиления 64:  диапазон напряжений ±40mV;
  • коэффициент усиления 32:  диапазон напряжений ±80mV.

Это справедливо при аналоговом питании +5V. Если произойдет выход по питанию за верхнюю границу, АЦП выдаст на выходе код 7FFFFFh, если выход будет за нижнюю границу АЦП выдаст код  800000h.

Пример скетча для весов

Для написания данного скетча использовалась библиотека «HX711 by Rob Tillaart». На самом деле для работы с данным модулем разработано много библиотек какую выбрать, выбор за вами. Все они работают по одному и тому же принципу.

#include "HX711.h"            // Подключаем библиотеку HX711
HX711 scale;                       // Создаём объект scale 

#define DT  2                      // Указываем номер вывода, к которому подключен вывод DT  датчика HX711
#define SCK 3                      // Указываем номер вывода, к которому подключен вывод SCK датчика HX711

float calibration_factor = -0.89;  // Вводим калибровочный коэффициент
float units;                       // Задаём переменную для измерений в граммах
float ounces;                      // Задаём переменную для измерений в унциях

void setup()
{
  Serial.begin(57600);             // Инициируем работу последовательного порта на скорости 9600 бод
  scale.begin(DT, SCK);            // Инициируем работу с датчиком
  scale.set_scale();               // Выполняем измерение значения без калибровочного коэффициента
  scale.tare();                    // Сбрасываем значения веса на датчике в 0
  scale.set_scale(calibration_factor); // Устанавливаем калибровочный коэффициент
}

void loop() {
  Serial.print("Reading: ");         // Выводим текст в монитор последовательного порта
  for (int i = 0; i < 10; i ++) {    // Усредняем показания, считав значения датчика 10 раз
    units = + scale.get_units(), 10; // Суммируем показания 10 замеров
  }
  units = units / 10;                // Усредняем показания, разделив сумму значений на 10
  ounces = (units * 0.035274)*10;    // Переводим вес из унций в граммы
  Serial.print(ounces);              // Выводим в монитор последовательного порта вес в граммах
  Serial.println(" grams");          // Выводим текст в монитор последовательного порта
}
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Ваче Бабаджанян
Ваче Бабаджанян
3 месяцев назад

Лучше использовать микросхему от Analog Device AD7799. Относительно высокая точность и отсутствие плавания у нее , по сравнению с HX711. При подключении 2-х тензодатчиков по 50 кг по мостовой схеме точность 10 грамм. Использую библиотеку AD779x.h и пример программы, который появляется в меню файл-примеры в ардуино, после установки библиотеки. При подключении hx-711 к этим-же датчикам у меня точность составила 30 грамм, измерял точность у обеих АЦП в течение 10 минут. Заказывал AD7799 на али за 250 руб. Брать нужно вместе с переходником для микросхемы ssop16 c расстоянием между выводами переходника 0,65 мм. Также нужно брать «паяльная паста с припоем», т.к. выводы слишком мелкие и близкие. Конденсаторы брал SMD с испорченной матплаты, измеряя их емкость тестером. При прогреве тензодатчика феном , данные сильно изменяются. Возможно нужно ставить на тезодатчик на термоскотч термодатчик цифровой ds18b20. При даже кратковременном прикосновении к тензодатчику пальцем показания также сильно изменяются из-за прогрева датчика от тепла тела. Если прикасаться через несколько слоев сложенной бумаги, датчик не прогревается и показания не меняются. Те, кто будут тестировать тензодатчики, нажимая на них пальцем, должны помнить, что через несколько секунд, после прикосновения пальца к тензодатчику, тепло достигнет чувствительного элемента датчика по его металлическому корпусу и значения поплывут наверх или вниз на десятки грамм, в зависимости от схемы подключения, типа датчика, длительности прикосновения. Нажимайте на датчики какими либо предметами, а не рукой напрямую. L индуктивность возможно можно и не ставить. Возможно можно подключить и без источника опорного напряжения TL431, а напрямую от ардуино 5в с фильтром из 2-х конденсаторов (что на схеме). Источник питания использовал от Hi-link.

схема ad7799 тензодатчик-1200.jpg