Электронные весы стали привычным предметом в современном мире, постепенно все больше вытесняя привычные старшему поколению механические весы. Мы практически каждый день видим электронные весы в различных магазинах и супермаркетах, но задумывались вы когда-нибудь о том, как они работают? Чтобы ответить на данный вопрос в этой статье мы рассмотрим создание электронных весов на основе платы Arduino, и датчике веса, который может взвешивать предметы массой до 10 кг.
Данные весы отлично подойдут для магазинов, в которых осуществляется упаковка каких-нибудь сыпучих материалов в пакеты для их последующей продажи. Наши весы будут иметь кнопку сброса, которая будет обнулять их показания. Также в них будет опция установки заранее определенного веса – как только вес измеряемой субстанции достигнет этой величины будет раздаваться сигнал зуммера. Таким образом, можно будет быстро упаковывать различные сыпучие материалы в пакеты одинакового веса даже не глядя на показания на ЖК дисплее, просто по звуку зуммера.
Ранее на нашем сайте мы уже рассматривали подключение датчика веса с модулем усиления HX711 к плате Arduino, но рассматриваемый в данной статье проект весов является более функциональным и пригодным для коммерческого использования.
Принцип работы электронных весов на основе Arduino
Основным компонентом нашего проекта является датчик веса и модуль усиления HX711 для него. Внешний вид датчика веса показан на рисунке ниже. Как вы можете видеть, на его торце стоит отметка 10 кг. Также вы можете заметить слой защитного клея сверху датчика и 4 выходящих из датчика провода различного цвета. Более подробно назначение этих компонентов датчика будет рассмотрено далее в статье.
Датчик веса представляет собой устройство, которое преобразует приложенные к нему силу или давление в электрический сигнал. Он состоит условно из двух сторон, назовем их правой и левой стороной. Они сделаны из алюминиевых блоков. Как вы видите из представленной картинки, в центре датчика просверлено достаточно большое отверстие. Это и есть та часть датчика, которая испытывает деформацию при приложении к датчику усилия (груза). Теперь представьте, что правая сторона датчика закреплена на основании, а к левой стороне приложено усилие (груз) – эта ситуация приводит к деформации датчика нагрузки вследствие наличия огромного отверстия в его центре.
Когда груз помещается на левую сторону датчика, то на верхнюю сторону датчика действует сила растяжения, а на его нижнюю сторону – сила сжатия. Поэтому брусок алюминия, из которого сделан датчик, начинает сгибаться вниз на левой стороне. Если мы измерим эту деформацию, мы сможем определить силу, приложенную к алюминиевому блоку и, следовательно, исходя из ее значения, и вес груза, находящегося на датчике.
Мы можем сделать это с помощью так называемого моста Уитстона (Wheatstone bridge). Мы соединяем измерители деформации (strain gauge) в моста Уитстона, если мост сбалансирован, то напряжение в его средней точке будет равно нулю. Когда сопротивление одного из измерителей деформации изменяется, это приводит к дисбалансу моста, и напряжение в нем также изменяется. Таким образом, мост Уитстона позволяет преобразовывать изменения сопротивления в значения напряжения.
Но эти изменения напряжения слишком малы чтобы непосредственно подавать их на плату Arduino, поэтому мы сначала подаем их на модуль усиления HX711. Модуль HX711 содержит в своем составе 24-битный дифференциальный АЦП (аналого-цифровой преобразователь), что позволяет ему измерять очень малые изменения напряжения. Диапазон значений на выходе подобного АЦП составляет от 0 до 224.
Необходимые компоненты
Для данного проекта мы подобрали по возможности простые и недорогие компоненты, которые можно приобрести в любом магазине электронных компонентов.
- Плата Arduino Nano (купить на AliExpress).
- Датчик веса/нагрузки (Load cell) с допустимой нагрузкой до 10 кг (купить на AliExpress).
- Модуль усиления HX711 (купить на AliExpress).
- ЖК дисплей 16х2 с модулем интерфейса I2C (купить на AliExpress).
- Резистор 1 кОм – 2 шт. (купить на AliExpress).
- Светодиод – 2 шт. (купить на AliExpress).
- Зуммер (Buzzer) (купить на AliExpress).
- Батарея на 7.4V (если вы хотите сделать весы портативными/переносными) (купить на AliExpress).
- Регулятор напряжения LM7805 (купить на AliExpress).
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Внешний вид используемых в проекте компонентов показан на следующем рисунке.
Схема проекта
Схема электронных весов на основе платы Arduino и датчике веса представлена на следующем рисунке.
Датчик веса (load cell) имеет 4 провода: красный, черный, зеленый и белый. Цвета этих проводов могут изменяться в зависимости от производителя датчика, поэтому не стоит всецело доверять цвету проводов – лучше доверяйте даташиту на купленный вами датчик. Подключите красный провод датчика веса к контакту E+ модуля HX711, черный провод – к E-, белый – к A+, а зеленый – к A-. Выходной контакт модуля (Dout) HX711 и его контакт синхронизации подключите к контактам D4 и D5 платы Arduino. Одни концы кнопок подключите к контактам D3, D8, D9 платы Arduino, а другие их концы – к общему проводу схемы (ground). Мы используем ЖК дисплей 16х2 с модулем интерфейса I2C, поэтому подключите его контакты SDA и SCL к контактам A4 и A5 платы Arduino соответственно. Подключите общий провод (ground) ЖК дисплея и модуля HX711 к "земле" платы Arduino, а их контакты питания подключите к контакту 5V платы Arduino. Все компоненты нашей схемы работают от напряжения 5V, поэтому в схему мы добавили регулятор напряжения LM7805. Но если вы не хотите делать весы портативными, то вы можете просто запитать плату Arduino от компьютера с помощью USB кабеля.
Изготовление конструкции проекта
Мы спаяли все компоненты проекта с помощью перфорированной платы. Для подключения платы Arduino и модуля HX711 мы использовали соединители типа "мама" (female headers). Для подключения кнопок и светодиодов мы использовали соединительные провода. После того, как процесс пайки был закончен, мы убедились, что на выходе регулятора LM7805 напряжение равно 5V. И, наконец, мы добавили в схему выключатель питания. Когда все было закончено, электронная часть конструкции нашего проекта выглядела следующим образом:
Изготовление корпуса для весов
Корпус весов мы решили сделать из ПВХ, для этого мы нарезали из ПВХ четыре прямоугольника размером 20х5 см (боковые стенки), и основание весов размером 20х20 см. Эти части мы скрепили между собой с помощью клея.
Но не спешите фиксировать (закреплять) одну из боковых сторон поскольку на ней вам необходимо еще разместить кнопки, светодиоды и ЖК дисплей. Сверху корпуса весов мы использовали пластмассовую чашу – в нее мы будем класть взвешиваемые предметы. Также необходимо убедиться в том, что между датчиком веса и верхней частью корпуса весов есть достаточное пространство поскольку датчик веса будет изгибаться в процессе взвешивания грузов – для этого мы использовали болты с гайками как показано на следующем рисунке.
Затем мы разместили ЖК дисплей, светодиоды и кнопки в передней панели весов и соединили их с остальными компонентами схему длинными изолированными соединительными проводами. Затем мы приклеили переднюю панель к основному корпусу весов под небольшим наклоном, чтобы можно было легко считывать показания с ЖК дисплея, не наклоняясь. После этого мы установили основной выключатель питания и на этом сборку весов закончили.
Разумеется, вы можете изготовить корпус весов по своему желанию, исходя из доступных вам материалов.
Объяснение программы Arduino для создания электронных весов
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Для упрощения программы мы будем использовать в ней библиотеки для работы с модулем HX711, с EEPROM (энергонезависимой памяти) и ЖК дисплеем. Библиотеку для ЖК дисплеем вы можете скачать по следующей ссылке. Библиотеку для работы с модулем HX711 вы можете скачать с GitHub, или вы можете сделать это в Arduino IDE, открыв там пункт меню include library > manage library, и запустив в нем поиск HX711, после ее нахождения запускаете процесс ее установки.
Первым делом нам необходимо откалибровать датчик веса и сохранить полученное калибровочное значение в EEPROM, для этого откройте пример в Arduino IDE по адресу file > examples > HX 711_ADC, затем выберите calibration code. Перед загрузкой кода программы в плату поместите весы на ровную устойчивую поверхность. После этого загрузите код программы в плату Arduino и откройте окно монитора последовательной связи (serial monitor). Затем измените бодовую скорость на 572600. После этого в окне монитора последовательной связи программа попросит вас нажать букву "t" и затем enter.
Затем необходимо поместить на весы груз с известным весом, в нашем случае мы поместили груз массой 194 грамма. После помещения этого груза на весы напечатайте значение веса этого груза в окне монитора последовательной связи и нажмите enter.
После этого окно монитора последовательной связи спросит вас хотите ли вы сохранить это значение в EEPROM или нет, нажмите Y чтобы выбрать вариант сохранить. После этого вы увидите значение веса в окне монитора последовательной связи.
Код программы для этого проекта (он приведен в конце данной статьи) мы написали на основе примера скетча из библиотеки для работы с модулем HX711.
Далее в коде программы мы подключили заголовочные файлы всех используемых нами библиотек. Библиотека HX711 будет использоваться для считывания значений с датчика нагрузки. EEPROM является встроенной в Arduino IDE библиотекой, которая будет использоваться нами для работы с памятью EEPROM, библиотека LiquidCrystal_I2C будет использоваться для работы с ЖК дисплеем по интерфейсу l2C.
1 2 3 |
#include <HX711_ADC.h> #include <EEPROM.h> #include <LiquidCrystal_I2C.h> |
После этого объявим в программе необходимые переменные и контакты. Функция HX711_ADC LoadCell будет использоваться для установки значений на контакте Dout и контакте синхронизации модуля HX711.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
const int HX711_dout = 4; const int HX711_sck = 5; int tpin = 3; HX711_ADC LoadCell(HX711_dout, HX711_sck); const int calVal_eepromAdress = 0; long t; const int Up_buttonPin = 9; const int Down_buttonPin = 8; float buttonPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; float down_buttonState = 0; float down_lastButtonState = 0; |
В функции setup мы инициализируем последовательный монитор (он у нас в проекте используется для целей отладки) и зададим режимы работы используемых контактов (на ввод или вывод данных). С помощью параметра INPUT_PULLUP мы будем использовать на контактах режим ввода данных с внутренними подтягивающими резисторами (благодаря чему отпадает необходимость использования внешних резисторов), что означает что в обычном состоянии (по умолчанию) на них будет уровень логической 1.
1 2 3 4 5 |
pinMode(tpin, INPUT_PULLUP); pinMode(6, OUTPUT); pinMode(12, OUTPUT); pinMode( Up_buttonPin , INPUT_PULLUP); pinMode( Down_buttonPin , INPUT_PULLUP); |
Далее мы инициализируем ЖК дисплей и покажем на нем приветственное сообщение с помощью функции LCD.print(). Через 2 секунды после этого мы очистим экран дисплея с помощью функции lcd.clear().
1 2 3 4 5 6 7 8 |
lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("ARDUINO BALANCE"); lcd.setCursor(0, 1); lcd.print("let's measure"); delay(2000); lcd.clear(); |
Затем мы начнем процесс считывания данных с датчика нагрузки (loadcell) с помощью функции loadCell.begin(). После этого мы считаем из EEPROM калибровочные значения с помощью функции EEPROM.get(). Ранее мы сохранили эти значения в EEPROM с помощью калибровочного скетча, теперь же нам необходимо просто их считать.
1 2 |
LoadCell.begin(); EEPROM.get(calVal_eepromAdress, calibrationValue); |
В функции loop мы первым делом будем проверять поступают ли какие либо данные от датчика веса с помощью функции LoadCell.update(), если поступают, то мы считываем их с помощью функции LoadCell.getData() и сохраняем их в переменной. Далее мы отображаем эти данные на экране ЖК дисплея с помощью функции LCD.print(), также на экране ЖК дисплея мы отображаем установленное значение веса, которое устанавливается далее в программе.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
if (LoadCell.update()) newDataReady = true; if (newDataReady) { if (millis() > t + serialPrintInterval) { float i = LoadCell.getData(); lcd.setCursor(0, 0); lcd.print("set wei:"); lcd.setCursor(9, 0); lcd.print(buttonPushCounter); lcd.setCursor(14, 0); lcd.print("GM"); lcd.setCursor(0, 1); lcd.print("weight :"); lcd.setCursor(9, 1); lcd.print(i); lcd.setCursor(14, 1); lcd.print("GM"); |
Далее мы устанавливаем вес тары (упаковки) измеряемого груза, для этого мы считываем состояние кнопки tare pushbutton с помощью функции digitalRead(). Если ее состояние low, то вес тары (упаковки) мы устанавливаем равным нулю. Функция установки веса тары необходима для приведения шкалы отсчета измерения веса к нулю. К примеру, если мы измеряем вес каких либо сыпучих веществ в какой-нибудь чашке, то измеряемый вес будет суммой веса чашки и сыпучего вещества. Если же мы перед взвешиванием нажмем tare button и поставим пустую чашку на весы, то потом вес этой чашки будет отниматься от общего измеренного веса и, таким образом, мы получим возможность измерения веса только сыпучего вещества.
1 2 |
if (digitalRead(tpin) == LOW) { LoadCell.tareNoDelay(); |
Теперь нам необходимо запрограммировать условия для различных индикаций – зуммера и светодиодов. Всего мы запрограммируем 3 таких условия. Первым делом мы будем измерять разницу между установленным и измеренными значениями веса, мы будем сохранять эту разницу в переменной k.
1 |
float k = buttonPushCounter-i ; |
1. Если разница между установленным и измеренными значениями веса больше или равна 50 грамм, то зуммер будет издавать звуковой сигнал с задержкой 200 мс (то есть звучать медленно).
1 2 3 4 5 6 7 |
if ( k >= 50 ) { digitalWrite (6, HIGH); delay(200); digitalWrite (6, LOW); delay(200); } |
2. Если разница между установленным и измеренными значениями веса меньше 50 и больше 1 грамма, то зуммер будет издавать звуковой сигнал с задержкой 50 мс (звучать более быстро).
1 2 3 4 5 6 7 |
if ( k < 50 && k > 1 ) { digitalWrite (6, HIGH); delay(50); digitalWrite (6, LOW); delay(50); } |
3. Если измеренное значение веса больше или равно установленного значения веса, то мы будем включать светодиод зеленого цвета и выключать зуммер и светодиод красного цвета.
1 2 3 4 5 |
if(i>=buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HIGH); } |
Для установки установленного значения веса мы будем использовать две функции. В первой из них мы будем увеличивать значение установленного значения веса на 10 грамм при каждом нажатии кнопки. Состояние кнопки мы будем считывать при помощи функции digitalRead, если оно low, это значит что кнопка нажата и мы будем увеличивать значение на 10 грамм.
1 2 3 4 5 6 |
up_buttonState = digitalRead(Up_buttonPin); if (up_buttonState != up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; } |
Аналогичным образом мы будем поступать и для уменьшения установленного значения веса на 10 грамм.
1 2 3 4 5 6 |
down_buttonState = digitalRead(Down_buttonPin); if (down_buttonState != down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; } |
Спроектированные нами электронные весы способны измерять вес до 10 кг (это значение можно увеличить при помощи использования другого датчика веса) и обеспечивают точность измерений 99%.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
#include <HX711_ADC.h> #include <EEPROM.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 2, 16); HX711_ADC LoadCell(HX711_dout, HX711_sck); const int HX711_dout = 4; //mcu > HX711 dout pin (контакт данных модуля HX711) const int HX711_sck = 5; //mcu > HX711 sck pin (контакт синхронизации модуля HX711 int tpin = 3; const int calVal_eepromAdress = 0; long t; const int Up_buttonPin = 9; // the pin that the pushbutton is attached to const int Down_buttonPin = 8; float buttonPushCounter = 0; // счетчик количества нажатий кнопок float up_buttonState = 0; // текущее состояние кнопки up button float up_lastButtonState = 0; // предыдущее состояние кнопки up button float down_buttonState = 0; // текущее состояние кнопки down button float down_lastButtonState = 0; // предыдущее состояние кнопки down button bool bPress = false; void setup() { Serial.begin(57600); delay(10); Serial.println(); Serial.println("Starting..."); pinMode(tpin, INPUT_PULLUP); pinMode(6, OUTPUT); pinMode(12, OUTPUT); pinMode( Up_buttonPin , INPUT_PULLUP); pinMode( Down_buttonPin , INPUT_PULLUP); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("ARDUINO BALANCE"); lcd.setCursor(0, 1); lcd.print("let's measure"); delay(2000); lcd.clear(); LoadCell.begin(); float calibrationValue; // калибровочное значение (смотрите пример в файле "Calibration.ino") calibrationValue = 696.0; // раскомментируйте эту строку если вы хотите установить калибровочное значение в скетче #if defined(ESP8266)|| defined(ESP32) //EEPROM.begin(512); // раскомментируйте это если вы используете ESP8266/ESP32 и хотите получить калибровочное значение из eeprom #endif EEPROM.get(calVal_eepromAdress, calibrationValue); // раскомментируйте это если вы хотите получить калибровочное значение из eeprom long stabilizingtime = 2000; // можно повысить точность измерений если добавить несколько секунд времени стабилизации после подачи питания на весы boolean _tare = true; //установите это значение в false если вы не будете использовать тару (упаковку) LoadCell.start(stabilizingtime, _tare); if (LoadCell.getTareTimeoutFlag()) { Serial.println("Timeout, check MCU>HX711 wiring and pin designations"); while (1); } else { LoadCell.setCalFactor(calibrationValue); // устанавливаем калибровочное значение (float) Serial.println("Startup is complete"); } } void loop() { static boolean newDataReady = 0; const int serialPrintInterval = 0; //increase value to slow down serial print activity // проверяем новые данные/начинаем новое преобразование: if (LoadCell.update()) newDataReady = true; // получаем сглаженное значение из набора данных: if (newDataReady) { if (millis() > t + serialPrintInterval) { float i = LoadCell.getData(); Serial.print("Load_cell output val: "); Serial.println(i); newDataReady = 0; t = millis(); lcd.setCursor(0, 0); lcd.print("set wei:"); lcd.setCursor(9, 0); lcd.print(buttonPushCounter); lcd.setCursor(14, 0); lcd.print("GM"); lcd.setCursor(0, 1); lcd.print("weight :"); lcd.setCursor(9, 1); lcd.print(i); lcd.setCursor(14, 1); lcd.print("GM"); } } checkUp(); checkDown(); if (digitalRead(tpin) == LOW) { LoadCell.tareNoDelay(); } //проверяем закончена ли последняя операция с тарой (упаковкой): if (LoadCell.getTareStatus() == true) { lcd.clear(); lcd.print("Tare complete"); delay(1000); lcd.clear(); } float i = LoadCell.getData(); float k = buttonPushCounter - i; if ( k < 50 && k > 1 ) { digitalWrite (6, HIGH); delay(50); digitalWrite (6, LOW); delay(50); } if ( k >= 50 ) { digitalWrite (6, HIGH); delay(200); digitalWrite (6, LOW); delay(200); } if (i >= buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HIGH); } else { digitalWrite(12, LOW); } } void checkUp() { up_buttonState = digitalRead(Up_buttonPin); // сравниваем состояние кнопки (buttonState) с его предыдущим состоянием if (up_buttonState != up_lastButtonState) { // если состояние изменилось, инкрементируем счетчик if (up_buttonState == LOW) { bPress = true; // if the current state is HIGH then the button went from off to on: buttonPushCounter = buttonPushCounter + 10; } } // сохраняем текущее состояние (current state) в качестве последнего состояния (last state), оно будет использоваться далее в цикле (loop) up_lastButtonState = up_buttonState; } void checkDown() { down_buttonState = digitalRead(Down_buttonPin); // сравниваем состояние кнопки (buttonState) с его предыдущим состоянием if (down_buttonState != down_lastButtonState) { // если состояние изменилось, инкрементируем счетчик if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; } } // save the current state as the last state, for next time through the loop down_lastButtonState = down_buttonState; } |
Здравствуйте. Очень полезный проект. Собрал, подключил все прекрасно. Хотелось бы узнать, можно ли подключить несколько тензодатчиков параллельно. Текущий вес отображать не важно, главное чтоб при достижении установленного веса загорался светодиод соответствующий тензометру.
Добрый день. Да, в описании библиотеки для работы с модулем HX711 (https://github.com/olkal/HX711_ADC/blob/master/README.md) указано что она может работать с несколькими подобными модулями одновременно, на что указывает следующая строчка в ее описании: Data retrieval from the HX711 is done without blocking the mcu, also on the 10SPS rate setting and with Multiple HX711's performing conversions simultaneously.
Здравствуйте подскажите пожалуйста почему микроконтроллер выбран ардуино нано? У меня в дипломной работе(электронные весы) стоит вопрос выбора мк. То есть у меня ардуино, но перед комиссией надо будет доказать что он лучше других, но чем?
Так он ничем особо не лучше, просто с ним очень просто работать поскольку значительно упрощает схему проекта и программы для него очень просто писать потому что для него написано очень много различных библиотек.
Добрый день! Хотел спросить, есть ли у вас структурная и принципиальная схема. Если есть, это было бы просто великолепно:)
Добрый день, так принципиальная схема есть же в тексте статьи
Загружаю скетч для калибровки.Включаю монитор. Появляется надпись
Starting...
Timeout,chek MCU>HX711 wiring and pin designations
Заменил плату HX711.Но ничего не изменилось.4 провода невозможно перепутать.
А в скетче для калибровки какие контакты платы используются для работы с модулем HX711? Проверьте плз, они могут не совпадать с теми контактами, которые используются в основной программе.
Контакты на обоих скетчах совпадают: dout=4 , sck=5.И еще,в скетче указано 56200, а в мониторе надо указывать 115200.
Сложно так сразу сказать, попробуйте более простой проект с датчиком веса, может в нем у вас модуль к плате Ардуино нормально законнектится
У меня возникла проблема при подключения 16х2 LCD (с I2C модулем) и подаче питания светодиод на модуле горит а сам дисплей нет
Подключение 16х2 дисплея (с I2C модулем) к плате Ардуино вы можете посмотреть в этой статье.
Просто вставьте строку:
HX711_ADC LoadCell (HX711_dout, HX711_sck);
ниже (а не раньше)
линии:
const int HX711_dout = 4; //mcu > HX711 doout pin
const int HX711_sck = 5; //mcu > контакт HX711 sck
Итак, это должен быть правильный порядок:
const int HX711_dout = 4; //mcu > выходной контакт HX711
const int HX711_sck = 5; //mcu > контакт HX711 sck
HX711_ADC LoadCell (HX711_dout, HX711_sck);
Спасибо вам за конструктивный комментарий для нашего проекта
Здравствуйте. А можете помочь немного изменить скетч? Мне нужно чтобы при появлении на весах груза, срабатывало реле, а при достижении установленного веса отключалось. Или подскажите как это сделать.
Добрый день. Напишите через 2-3 дня, постараюсь подсказать
добрый день. пишу через 2дня. мне нужно добавить в схему модуль реле и в скетч включение реле при появлении груза на весах и отключение когда груз убрали с весов.
Добрый вечер. Подключите модуль реле к одному из свободных цифровых контактов. В коде программы задайте константу MIN - присвойте ей значение минимального веса, при превышении которого должно срабатывать реле. В программе добавьте условие что если считанное значение веса больше MIN, то подаем высокий уровень на контакт, к которому подключено реле, иначе на этот контакт подаем низкий уровень.
почему не получается загрузить скетч, выдает ошибку по библиотеке HX711. скачивал по ссылке и другие пробовал, все равно ошибку выдает
А какой текст ошибки? А другие скетчи нормально загружает?
diyengineers.com/2022/05/19/load-cell-with-hx711-how-to-use-with-examples/
вот ссылка на рабочий скетч!
А почему вы считаете что приведенный в статье скетч нерабочий
Почему на схеме к усилителю HX711 к выводу VCC подключена земля?
Не обратил внимание при переводе. Скорее всего его нужно подключить к контакту 5 В Ардуино
Здравствуйте не могу понять как вы подвязали вывод информации на дисплей
Добрый вечер. ЖК дисплей здесь подключен с помощью модуля I2C