- Весы Arduino работают
- Компоненты, необходимые для весов на базе Arduino
- Весы на базе Arduino - Принципиальная схема
- Создание схемы на перфорированной плите
- Создание корпуса для весов на базе Arduino
- Весы Arduino - Код
Цифровые весы - еще одно чудо современной инженерии и дизайна. Да, мы говорим о весах, которые мы часто видим в большинстве продуктовых магазинов и других местах, но вы когда-нибудь задумывались, как работают весы? Чтобы ответить на этот вопрос, в этом проекте мы собираемся взглянуть на тензодатчик и его работу. Наконец, мы создадим портативные весы на базе Arduino с датчиком веса HX711, который может измерять вес до 10 кг.
Эти весы идеально подходят для местных магазинов, где они фасуют товары оптом. Как и в коммерческих продуктах, наши весы имеют нулевую кнопку, которая обнуляет весы. Кроме того, у него есть возможность установить вес для измерения, когда измеряемый вес достигает установленного веса, зуммер издает быстрый звуковой сигнал и останавливается, когда установленный вес равен измеряемому весу. Таким образом, пользователь может упаковать его, просто услышав звук, и ему не придется смотреть на дисплей. Поскольку это очень простой проект, мы очень легко построим его, используя такие компоненты, как Arduino и тензодатчик. Итак, без дальнейших промедлений, давайте приступим к делу.
В предыдущей статье мы реализовали такие проекты, как датчик веса на основе Raspberry Pi и интеллектуальный контейнер IoT с оповещением по электронной почте и веб-мониторингом, используя популярный модуль усилителя датчика веса HX711. Так что проверьте это, если это ваше требование.
Весы Arduino работают
Основной компонент этого проекта является ячейкой нагрузки и HX711 нагрузки модуль усилителя ячейки. Как видите, на одной стороне нанесено десять килограммов. Кроме того, вы можете заметить какой-то белый защитный клей поверх тензодатчика и выходящие провода четырех разных цветов, которые раскроют секрет под белым защитным клеем и функцию этих четырехцветных проводов позже в статье.
Датчик нагрузки - это преобразователь, который преобразует силу или давление в электрическую мощность. У него две стороны, скажем, правая и левая стороны, и он сделан из алюминиевых блоков. Как видите, посередине материал истончают, проделав большую дырочку. Вот почему именно эта точка деформируется при приложении нагрузки со стороны крепления. Теперь представьте, что ячейка с правой стороны крепится к основанию, а на левой стороне размещается нагрузка. Эта конфигурация деформирует датчик нагрузки тензодатчика из-за гигантского отверстия в середине.
Когда нагрузка размещается на стороне нагрузки тензодатчика, верхняя часть испытывает растяжение, а нижняя часть испытывает сжатие. Поэтому алюминиевая планка сгибается вниз с левой стороны. Если мы измерим эту деформацию, мы сможем измерить силу, приложенную к алюминиевому блоку, и это именно то, что мы будем делать.
Теперь остается вопрос, что находится внутри белого защитного клея? Внутри этого защитного клея находится очень тонкий эластичный компонент, который называется тензодатчиком.. Тензодатчик - это компонент, который используется для измерения деформации. Если мы внимательно посмотрим на этот компонент, мы увидим две контактные площадки, а затем у нас будет проводящий рисунок проводов с повторяющимися отклонениями. Этот токопроводящий провод имеет определенное сопротивление. Когда мы его согнем, значение сопротивления изменится? Таким образом, одна сторона тензодатчика устанавливается и фиксируется в определенном месте, если мы поместим груз на другую сторону алюминиевого стержня, это заставит тензодатчик изгибаться, что приведет к изменению сопротивления. Как это происходит на самом деле? Электропроводящий рисунок тензодатчика сделан из меди, этот провод будет иметь определенную площадь и длину, поэтому эти два элемента будут давать сопротивление провода. Сопротивление провода препятствует прохождению тока. Теперь очевидно, что если площадь этого провода станет меньше,меньше электронов может пройти, что означает меньший ток. Теперь, если мы увеличим площадь, это увеличит сопротивление проводника. Если к этому проводу приложить некоторую силу, это приведет к растяжению области, и в то же время она уменьшится, сопротивление возрастет. Но это изменение сопротивления очень низкое. Если мы растянем тензодатчик, сопротивление увеличится, а если мы сжимаем его, сопротивление уменьшится. Чтобы измерить силу, нам нужно измерить сопротивление. Непосредственное измерение сопротивления не всегда практично, потому что изменение очень небольшое. Таким образом, вместо измерения сопротивления мы можем легко измерять напряжение. Итак, в этом случае нам нужно преобразовать выходной сигнал датчика из значений сопротивления в значения напряжения.Если к этому проводу приложить некоторую силу, это приведет к растяжению области, и в то же время она уменьшится, сопротивление возрастет. Но это изменение сопротивления очень низкое. Если мы растянем тензодатчик, сопротивление увеличится, а если мы сжимаем его, сопротивление уменьшится. Чтобы измерить силу, нам нужно измерить сопротивление. Непосредственное измерение сопротивления не всегда практично, потому что изменение очень небольшое. Таким образом, вместо измерения сопротивления мы можем легко измерять напряжение. Итак, в этом случае нам нужно преобразовать выходной сигнал датчика из значений сопротивления в значения напряжения.Если к этому проводу приложить некоторую силу, это приведет к растяжению области, и в то же время она уменьшится, сопротивление возрастет. Но это изменение сопротивления очень низкое. Если мы растянем тензодатчик, сопротивление увеличится, а если мы сжимаем его, сопротивление уменьшится. Чтобы измерить силу, нам нужно измерить сопротивление. Непосредственное измерение сопротивления не всегда практично, потому что изменение очень небольшое. Таким образом, вместо измерения сопротивления мы можем легко измерять напряжение. Итак, в этом случае нам нужно преобразовать выходной сигнал датчика из значений сопротивления в значения напряжения.сопротивление снизится. Чтобы измерить силу, нам нужно измерить сопротивление. Непосредственное измерение сопротивления не всегда практично, потому что изменение очень небольшое. Таким образом, вместо измерения сопротивления мы можем легко измерять напряжение. Итак, в этом случае нам нужно преобразовать выходной сигнал датчика из значений сопротивления в значения напряжения.сопротивление снизится. Чтобы измерить силу, нам нужно измерить сопротивление. Непосредственное измерение сопротивления не всегда практично, потому что изменение очень небольшое. Таким образом, вместо измерения сопротивления мы можем легко измерять напряжение. Итак, в этом случае нам нужно преобразовать выходной сигнал датчика из значений сопротивления в значения напряжения.
Мы можем сделать это с помощью моста Уитстона. Мы помещаем тензодатчик в мост Уитстона, если мост сбалансирован, напряжение в средней точке должно быть равно нулю (ранее мы создали проект, в котором мы описали, как работает мост Уитстона, вы можете проверить это, если хотите узнать больше по теме). Когда тензодатчик изменяет свое сопротивление, он разбалансирует мост, и напряжение также изменится. Итак, вот как мост Уитстона преобразует изменения сопротивления в значения напряжения.
Но это изменение напряжения все еще очень мало, поэтому для его увеличения нам нужно использовать модуль HX711. HX711 - это 24-битный дифференциальный АЦП, таким образом, мы можем измерять очень небольшие изменения напряжения. он даст значения от 0 до 2 по экспоненте 24.
Компоненты, необходимые для весов на базе Arduino
Чтобы сделать этот проект максимально простым, мы использовали очень общие компоненты, которые вы можете найти в любом местном магазине для хобби. Изображение ниже даст вам представление о компонентах. Кроме того, у нас есть ведомость материалов (BOM), указанная ниже.
- Датчик нагрузки (мы используем датчик нагрузки 10 кг)
- Модуль усилителя HX 711
- Ардуино Нано
- I2C LCD 16X2 - Совместимость с I2C
- Резистор 1к -2 шт.
- Светодиоды -2Nos
- Зуммер
- Обычная печатная плата
- Аккумулятор 7,4 В (если вы хотите его переносить)
- Регулятор напряжения LM7805
Весы на базе Arduino - Принципиальная схема
Датчик веса имеет четыре провода: красный, черный, зеленый и белый. Этот цвет может отличаться в зависимости от производителя, поэтому лучше обратиться к техническому описанию. Подключите красный к E + платы HX711, подключите черный к E-, подключите белый к A + и подключите зеленый к A-, Dout, а часы платы подключите к D4 и D5 соответственно. Подключите один конец кнопок к D3, D8, D9, а другой конец к земле. У нас есть ЖК-дисплей I2C, поэтому подключите SDA к A4 и SCL к A5. Подключите заземление ЖК-дисплея, HX711 и Arduino к земле, а также подключите VCC к 5Vpin Arduino. Все модули работают от 5В, поэтому мы добавили стабилизатор напряжения LM7805. Если вы не хотите, чтобы он был портативным, вы можете напрямую подключить Arduino с помощью USB-кабеля.
Создание схемы на перфорированной плите
Мы спаяли все компоненты на общую перфорированную плату. Мы использовали гнездовые разъемы для пайки Arduino и ADC с печатной платой, а также использовали провода для подключения всех кнопок и светодиодов. После того, как весь процесс пайки завершен, мы убедились, что из LM7805 выходит правильное напряжение 5 В. Наконец, мы установили переключатель для включения / выключения цепи. Когда мы все закончили, это выглядело как на изображении ниже.
Создание корпуса для весов на базе Arduino
Как вы можете видеть, тензодатчик имеет некоторую винтовую резьбу, так что мы могли бы установить его на опорную плиту. Мы будем использовать пластину из ПВХ в качестве основы нашей шкалы, для этого мы сначала вырезаем из нее квадрат 20 * 20 см и четыре прямоугольника 20 * 5. Затем с помощью твердого клея мы склеили каждую деталь и сделали небольшой корпус.
Помните, мы не исправляли одну сторону, потому что нам нужно разместить на ней кнопки, светодиоды и ЖК-дисплей. Затем мы использовали пластиковую доску для верхней части шкалы. Перед тем, как сделать эту установку постоянной, нам нужно убедиться, что у нас есть достаточно места от земли до датчика нагрузки, чтобы он мог изгибаться, поэтому мы поместили винт и гайки между датчиком нагрузки и основанием, а также добавили несколько пластиковых прокладок между датчиком нагрузки и верхней частью. мы использовали круглый пластиковый лист как верхний баланс.
Затем мы разместили ЖК-дисплей, светодиоды и кнопки на передней панели, и все, что связано с длинным изолированным проводом. После того, как мы закончили процесс подключения, мы приклеили переднюю панель к основному основанию с некоторым наклоном, так что мы можем очень легко прочитать значения с ЖК-дисплея. наконец, мы прикрепили главный выключатель сбоку весов и все. Вот как мы сделали тело для наших весов.
Вы можете разрабатывать свои идеи, но не забудьте разместить датчик нагрузки, как на изображении.
Весы Arduino - Код
Поскольку мы завершили процесс сборки цифровых весов, мы можем перейти к программированию. Для упрощения программирования мы будем использовать библиотеку HX711, библиотеку EEPROM и библиотеку LiquidCrystal. Вы можете загрузить библиотеку HX711 из официального репозитория GitHub или перейти в инструменты > включить библиотеку > управлять библиотекой, затем выполнить поиск в библиотеке по ключевому слову HX711, после загрузки библиотеки установить ее в Arduino ide.
Во-первых, нам нужно откалибровать датчик веса и сохранить это значение в EEPROM, для этого перейдите в файл> примеры> HX 711_ADC, затем выберите код калибровки. Перед загрузкой кода поместите весы на устойчивую ровную поверхность. Затем загрузите код в Arduino и откройте монитор последовательного порта. Затем измените скорость передачи на 572600. Теперь монитор попросит принять вес, для этого нам нужно нажать t и ввести.
Теперь нам нужно поставить на весы известный вес, в моем случае это 194 грамма. После установки известного веса введите вес на серийном мониторе и нажмите Enter.
Теперь монитор последовательного порта спрашивает вас, хотите ли вы сохранить значение в EEPROM или нет, поэтому введите Y, чтобы выбрать да. Теперь мы можем видеть вес на серийном мониторе.
Основной код этого проекта, который мы разработали из примера скетча библиотеки HX711. Вы можете скачать код этого проекта снизу.
В раздел кодирования мы сначала добавили все три библиотеки. Библиотека HX711 предназначена для измерения значений датчика веса. EEPROM - это встроенная библиотека Arduino ide, которая используется для хранения значений в EEPROM, а библиотека LiquidCrystal предназначена для ЖК-модуля l2C.
#включают
Затем определены целые числа для разных контактов и присвоены значения. Функция тензодатчика HX711_ADC предназначена для настройки вывода Dout и синхронизации.
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; длинный т; 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;
В разделе настройки сначала мы запустили последовательный монитор, это только для отладки. Затем мы определили режимы контактов, все кнопки определены как входные. С помощью функции Arduino PULL UP мы обычно устанавливаем контакты на логический максимум. Поэтому мы не хотим использовать для этого какие-либо внешние резисторы.
pinMode (tpin, INPUT_PULLUP); pinMode (6, ВЫХОД); pinMode (12, ВЫХОД); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Следующие строки кода предназначены для настройки ЖК-дисплея I2C. Сначала мы отобразили приветственный текст с помощью функции LCD.print () , через две секунды мы очистили дисплей с помощью lcd.clear () . То есть вначале на дисплее отображается текст приветствия ARDUINO BALANCE, а через две секунды он очищается и отображает измерительные гири.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print («БАЛАНС АРДУИНО»); lcd.setCursor (0, 1); lcd.print («измеряем»); задержка (2000); lcd.clear ();
Затем мы начали читать значения из loadcell с помощью функции loadCell.begin () , после этого мы читаем EEPROM для калиброванных значений, мы делаем это с помощью функции EEPROM.get () . То есть мы уже сохранили значение с помощью калибровочного эскиза в адресе EEPROM, мы просто переснимаем это значение.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, CalibrationValue);
В разделе цикла сначала мы проверяем, доступны ли какие-либо данные из тензодатчика, используя LoadCell.update (), если они доступны, мы читаем и сохраняем эти данные, для этого мы используем LoadCell.getData () . Далее нам нужно отобразить сохраненное значение на ЖК-дисплее. Для этого мы использовали функцию LCD.print () . также печатаем установленный вес. Установленный вес выставляется с помощью счетчика Pushbutton. Это объяснялось в последнем разделе.
если (LoadCell.update ()) newDataReady = true; если (newDataReady) { если (millis ()> t + serialPrintInterval) { float я = LoadCell.getData (); lcd.setCursor (0, 0); lcd.print ("набор wei:"); lcd.setCursor (9, 0); lcd.print (buttonPushCounter); lcd.setCursor (14, 0); lcd.print («GM»); lcd.setCursor (0, 1); lcd.print ("вес:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print («GM»);
Затем мы устанавливаем значение тары, для этого сначала мы считываем состояние кнопки тарирования с помощью функции digitalRead () , если состояние низкое, мы тарируем этот вес до нуля. Функция тарирования этих весов - обнуление показаний. Например, если у нас есть чаша, в которую загружены вещи, то вес нетто будет равен весу чаши + весу вещей. Если мы нажмем кнопку тары с чашей на датчике нагрузки перед загрузкой вещей, вес корзины будет отменен, и мы сможем измерить вес вещей самостоятельно.
если (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Теперь нам нужно установить условия для различных индикаций, таких как установка задержки зуммера и состояния светодиода. Мы сделали это с помощью условий if , у нас всего три условия. Сначала мы вычисляем разницу между установленным весом и измеряемым весом, а затем сохраняем это значение в переменной k.
float k = buttonPushCounter-i;
1. Если разница между установленным весом и измеренным весом больше или равна 50 г, зуммер издает звуковой сигнал с задержкой в 200 миллисекунд (медленно).
если (k> = 50) { digitalWrite (6, HIGH); задержка (200); digitalWrite (6, LOW); задержка (200); }
2. Если разница между установленным весом и измеренным весом меньше 50 и больше 1 грамма, зуммер издает звуковой сигнал с задержкой в 50 миллисекунд (быстрее).
если (k <50 && k> 1) { digitalWrite (6, HIGH); задержка (50); digitalWrite (6, LOW); задержка (50); }
3. Когда измеряемый вес будет равен или больше установленного значения, загорится зеленый светодиод и выключится зуммер и красный светодиод.
если (я> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, ВЫСОКИЙ); }
У нас есть еще две функции void () для установки установленного веса (для подсчета нажатий кнопки).
Функция увеличения заданного значения на 10 г при каждом нажатии. Это делается с помощью функции digitalRead Arduino, если на выводе низкий уровень, это означает, что кнопка нажата, и это увеличивает значение на 10 гс.
up_buttonState = digitalRead (Up_buttonPin); если (up_buttonState! = up_lastButtonState) { если (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
Так же, Проверка предназначена для уменьшения установленного значения на 10 г при каждом нажатии.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { если (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
Это знаменует конец программной части.
Эти электронные весы на базе Arduino идеально подходят для измерения веса до 10 кг (мы можем увеличить этот предел, используя датчик нагрузки с более высоким номиналом). Это 99% точности исходных измерений.
Если у вас есть какие-либо вопросы относительно этой схемы балансировочного станка с ЖК-экраном на базе Arduino, опубликуйте их в разделе комментариев, спасибо!