Самодельные весы своими руками: как сделать? Советы +Видео

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

Как сделать весы в домашних условиях

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

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

Предлагаем ознакомиться Чем отмыть кафельную плитку в ванной: народные средства

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

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

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

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

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

От точки подвеса в обе стороны отмеряйте равные расстояния, нумеруя их по мере удаления. В местах отметок можно сделать насечки, чтобы чаши весов не скользили по планке во время взвешивания. Чаши делаются также, как и у равноплечих весов, только они не крепятся к краям планки, а подвешиваются. При взвешивании используется обратная пропорциональность: L1/L2 = M2/M1.

Рычажные весы также просты в исполнении. Для того чтобы их сделать, вам понадобится какая-либо платформа, штатив. Рычаг и чашечка для грузика. На штатив при помощи винтов крепится рычаг, к одной стороне которого приделана чашечка для взвешивания. Другая сторона рычага – это стрелка весов. Опытным путем вы устанавливаете деления веса.

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

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

Весы своими руками для сюжетно-ролевой игры «Магазин»

Весы своими руками для сюжетно-ролевой игры «Магазин»

Добрый день, уважаемые коллеги! Представляю вашему вниманию мастер класс по изготовлению весов для игры в магазин.

Случайно дома наткнулась на коробочку с гирями времён СССР.

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

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

Потом я сделала шаблон верхней части весов. Обвела шаблон на картоне, вырезала, оклеила бумагой синего цвета.

Далее занялась оформлять внутреннюю часть весов.

Распечатала цифры, вырезала из чёрного картона стрелочку.

Приклеила верхнюю часть весов к картонной крышке коробки.

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

Дома нашлись муляжи овощей и фруктов.

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

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

Благодарю вас, уважаемые коллеги, за просмотр! Буду рада, если кому-нибудь из вас пригодится мой мастер-класс.

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

Атрибуты своими руками к сюжетно-ролевой игре «Магазин» Для приобретения игрового опыта и умения развивать игровой сюжет необходимо обучать детей игре. В игре ребенок проявляет инициативу и творческую.

Конспект сюжетно-ролевой игры для первой младшей группы «Овощной магазин» Цель: Формировать начальные навыки ролевого поведения. Материалы и оборудование: весы, касса, муляжи овощей и фруктов, сумка, кошелек, костюм.

Равноплечие весы

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

Равноплечие домашние весы

Равноплечие самодельные весы для измерения граммов похожи на качели, для их выполнения нужна ровная планка (линейка, спица, ровная палка и т.п.). На края планки крепятся «чашки» (маленькие пластиковые мисочки или крышки от бутылок).

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

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

ВАЖНО!

Карандаш должен быть расположен точно по центру линейки. Это называется определить центр тяжести.

На один конец линейки кладут предмет определённого веса, а с другой стороны – измеряемый груз. таким способом можно взвесить негабаритные объекты, вес которых не более 50 г. Из-за того, что существует опасность, что линейка переломится. Также имеется опасность, что она перевернётся, исследуемые сыпучие материалы рассыплются.

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

Рычажные весы

Способ 1

Необходимо взять длинную прямую палку, линейку, не короче 30 — 35 см. В данной схеме она играет роль коромысла.

ВАЖНО!

Чем длиннее плечо коромысла, тем точнее будут результаты.

Далее на этом «коромысле» нужно найти центр, в обе стороны от отмеченного центра замерить равные отрезки, чтобы установить чаши. В этих точках просверлить дырочки. В середине закрепить прочную синтетическую нить. Для чаш подойдут опять же крышки от бутылок, или обрезанные пластиковые стаканчики. Соединить узлом нити от чаш к рейке. По верхнему периметру у чашек на равных расстояниях друг от друга просверлить 3-4 дырочки, через них провести прочные нити и завязать.

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

ВАЖНО!

Чтобы верхушка стрелки-треугольника в подвешенном состоянии четко совпала с натянутой ниткой, на дно соответственно более лёгкой чаши можно прилепить кусочек пластилина.

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

Способ 2

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

Настройка рычажных весов:

Для настройки рычажных весов вам понадобится набор грузиков, или что-то со строго определённым и заранее известным точным весом. Положение стрелки без грузика будет вашим нулевым отсчётом. Далее просто положите грузик на чашку и посмотрите, насколько отклонится стрелка весов – это и будет ваш максимальный предел измерения. Лавировать пределами измерения можно при помощи изменения силы противовеса (использовать большие или меньшие противовесы)

P.S.: Я постарался наглядно показать и описать не хитрые советы. Надеюсь, что хоть что-то вам пригодятся. Но это далеко не всё что возможно выдумать, так что дерзайте, и штудируйте сайт

Плечевые устройства для взвешивания

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

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

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

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

Плечевые весы

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

ВАЖНО!

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

Далее нужно установить стрелку, например из иголки или чего-нибудь подобного для фиксации отклонения весов. Следующим этапом отмеряются одинаковые отрезочки в обе стороны от центра — точки подвеса, и производится калибровка. разумнее нанести там насечки, так как в процессе измерения веса чаши могут соскальзывать.

ВАЖНО!

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

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

Порой и на природе возникает необходимость что-то взвесить. И задача эта реализуема. Ведь сделать весы своими руками можно практически из любых подручных материалов. Достаточно лишь приложить немного фантазии.

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

Понятно, что при помощи такого приспособления невозможно узнать массу что-то тяжелого. Но ведь можно применить этот принцип, используя более габаритные вещи.

Можно сделать весы своими руками из толстой палки, которую за середину привязывают к дереву или перекладине. Она должна висеть идеально ровно. Затем к концам этой палки привязывают с одной стороны взвешиваемый предмет, с другой – груз. Единственная трудность в лесу может возникнуть с поиском груза известной массы. Для этих целей прекрасно подойдут бутылки с водой, пакет с крупой, столовые приборы. Вряд ли на природе вам потребуется что-то взвесить с точностью до грамма. Примерный вес с такими весами узнать достаточно легко. А точность при удачно подобранном грузе может достигать погрешности всего в 50-100 г на несколько килограммов.

Простые равноплечные весы

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

Основная задача заключается в том, чтобы расположить карандаш четко в центре линейки. Когда линейка будет лежать идеально ровно на карандаше, значит вы нашли центр тяжести. Теперь вам нужно положить на один край линейки предмет, а на другой – груз с заранее известным весом. На линейке взвешивают небольшие предметы и сыпучие материалы. Их вес не должен превышать 50 г. Иначе линейка поломается.

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

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

Самодельные весы для достаточно габаритных предметов

Можно в домашних, либо походных условиях выполнить весы и для предметов до 100 кг.

Для их выполнения понадобятся:

  • безмен,
  • два очень крепких бруска 1,5 и 1 м длиной
  • прочный шпагат
  • крючок для груза

Сама схема конструкции представлена на нижеследующей схеме.

По схеме понятно, величины 10 и 100 см выбраны не спроста. Данные с безмена нужно будет увеличивать в 10 раз. Необходимо точно расположить отверстие на бруске 1. Для подвешивания предмета можно применить хомут (а). Двигая хомут с известного веса грузом по бруску 1, следует определить его правильное месторасположение, закрепить в этом месте гвоздём. Если понадобятся весы для грузов свыше 100 кг, то бруски для конструкции нужно взять длиннее. Но всегда второй больше первого в 10 раз (например, 15 и 150 см, тогда груз предположительно должен весить до 150 кг), а показатели безмена умножать на размер длины первого (в примере соответственно на 15).

Один комментарий

Хорошая идея. Хотя я купил себе за 100 грн. и не парюсь. На электронных можно взвесить на много быстрее. Но как это не странно на рычажных весах можно получить большую точность именно в широком диапазоне. Т.к. к примеру те что у меня взвешивают только до 200 грамм. А кухонные могут взвесить до 5-20 кг. но у них погрешность уже будет не 0,01 а 1-2 грамма. Т.е. чем больше вес тем больше погрешность, В принципе и на рычажных так, но все же предел взвешивания при той же точности у них больше.

Источник

Как изготовить весы в походных условиях

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

К её концам на нитках привязывают либо взвешиваемый предмет и груз известной массы, либо две пробки от бутылок. В одну кладут измеряемый предмет, в другую – противовес. Логично, что данное устройство позволит взвесить лишь лёгкие предметы. Но сам принцип прекрасно применим и в случае с габаритными предметами.

Для этого находят толстую прочную палку, подвешивают её за середину к прочному сучку, либо к перекладине.

ВАЖНО!

Палка должна висеть очень ровно.

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

Примеры самодельных рычажных весов, как сделать рычажные весы:

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

Рисунок №1 – Конструкция рычажных весов

На рисунке №1 видно что в платформе имеются установочные винты – необходимы для того чтобы ровно выставить весы (путём их закручивания или откручивания) – это немаловажно для проведения взвешивания. Весы должны стоять ровно, вы даже можете прикрепить к вашей конструкции водяной уровень. Еще хочу обратить ваше внимание на так называемый «стопор» рисунок №2.

Рисунок №2 – Эскиз некоторых элементов конструкции

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

Конечто также, при желании можно обойтись и без стопора и противовеса – также удобно, использовать конструкцию с резинкой или простой пружинкой рисунок №3.

Рисунок №3 – Рычажные весы с резинкой вместо противовеса

Но учтите! Есть одна сложность – подобрать подходящую по силе резинку.

Как самостоятельно сделать электронные весы

Изготовить электронные весы своими руками — не самая простая задача. Прежде необходимо тщательно изучить составные части и принцип работы.

Внешние составляющие — это:

  • Весопроцессор, он представляет собой отдельный блок с экраном, клавишами, микросхемами.
  • Клавиатура, на которой должны быть рабочие кнопки «0» — «9».
  • Экран.
  • Платформа.
  • Корпус, скрывающий все внутренние части.
  • Регулируемые ножки. Для точности измерения необходимо, прибор располагать по уровню.

Измеряемый груз осуществляет давление на неё за счет своей силы тяжести. В зависимости от веса, сила давления измеряемого объекта на платформу пропорционально изменится. На экране выведутся числовые значения.

Преобразованию данных по давлению способствуют:

  • Тензометрический датчик
  • Аналого-цифровой преобразователь АЦП
  • Микроконтроллер или процессор.

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

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

На тензодатчик идёт напряжение, на выходе принимающее измененное значение, взаимодействуя с тензорезистором.

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

Тензодатчиков существует несколько видов:

  1. Одноточечный встраивается под платформу по центру. Используется в торговых, напольных, фасовочных, технических и балочных весах.
  2. Балочный тензодатчик. Предназначается, например, для платформенных электронных весов.
  3. Стержневой тензометрический датчик необходим в особо габаритных весах – автомобильных, вагонных, бункерных. Используется при взвешивании грузов от 20 тонн.
  4. S-образный датчик веса предназначен для подвесных и крановых весов.
  5. Сдвоенная балка применяется при взвешивании грузов от 10000 кг при транспортных взвешиваниях.

ВАЖНО!

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

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

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

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

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

Как я сделал Wi-Fi весы, ниоткуда не уволился, а про жизнь вообще молчу


Из заголовка нетрудно видеть, что на это приключение меня сподвигло банальное стремление сплагиатить заголовок парней из Madrobots. А это ведь действительно было приключение: одна только история с затянувшейся покупкой INA125U настолько занудна, что может свести с ума кого угодно, кроме меня. Впрочем, возможно, я кое-чего о себе до сих пор не знаю.
Итак, весы. Я, как обычно, сделал все неправильно. А именно — не стал даже смотреть на то, что умеют делать типичные на текущий момент развития интернета вещей представители этого отряда, так сказать, скалярных. Поэтому мои весы умеют раздельно взвешивать трех разных особей человека (меня, жену и сферического гостя в вакууме), а также — пятерых кошачьих. Результаты озвучиваются близлежащим смартфоном и публикуются в табличке Google.

Ну а теперь — о том, как это сделать, имея на руках весы из ИКЕА, операционный усилитель TI INA125, Arduino Pro Mini, преобразователь Serial — Wi-Fi HiLink HLK-RM04, немного прочей рассыпухи и здоровенное шило в заднице.

Есть контакт!

Собственно, когда я покупал на DX.com преобразователь Serial — Wi-Fi, то был не столько очарован его возможностями (я о них тогда имел крайне туманное понятие), сколько ценой — по сравнению с тем же Wi-Fi-шилдом для Arduino. Разумеется, вскоре выяснилось, что различие в цене не просто так: из коробки преобразователь этот мало чем напоминает шилд. И, да, понимаю — это для вас очевидно, а для меня было откровением, что никаких GET/POST просто так не будет.
Тем не менее я почти сразу после покупки попробовал HLK-RM04 в деле. Сначала — и вовсе без микроконтроллера. Достаточно лишь подключить питание (5В) и пойти по дефолтному адресу, который указан в руководстве. Там же, после некоторых сомнений (как бы чего не запороть) вбил свои настройки Wi-Fi и выдал преобразователю статический IP, чтобы потом не искать его по всей сети.

Вот такие получились настройки. Забегая вперед — это полный комплект настроек для весов (IP и SSID подставите свои, а вот скорость порта довольно важна — на этой скорости HLK-RM04 будет общаться с контроллером):

На втором этапе подключил к контроллеру и посмотрел, что можно сделать без библиотеки и без усилий. Оказалось, что если переключить его в режим сервера, подключить к последовательному порту Arduino, и написать код, который что-то периодически печатает в этот самый порт, то потом в браузере можно посмотреть печатаемое. Тоже, в принципе, неплохо, но не слишком вдохновляло. Тем не менее, я это запомнил на самый крайний случай.

В общем, так бы и валялся HLK-RM04 в пыльной коробке, если бы не Madrobots. Я рассматривал любые варианты: и заставить преобразователь работать веб-клиентом, и, если не получится, то хотя бы забирать с него данные через Tasker на смартфоне, и тем же Tasker публиковать, куда мне надо. По счастью для первого варианта нашлась подходящая библиотека WiFiRM04 , которая в конечном итоге ведет себя практически как библиотека Wi-Fi для Arduino.

Есть, конечно, и специфика. Библиотека эта собрана в расчете на Arduino Mega, у которой и оперативной памяти много, и последовательных портов — выше крыши. Поэтому автор библиотеки по дефолту широким жестом использовал два порта Arduino Mega для общения с HLK-RM04, и в остатке имел подключение к десктопу через USB для одновременной отладки.

И, кстати, с учетом также по умолчанию включенного модуля отладки, даже крошечная программа с участием библиотеки WiFiRM04 компиллируется в чуть меньше 30КБ, так что перспективы миграции на Arduino Pro Mini казались немного сомнительными. Однако есть и хорошие новости: автор все же предусмотрел и работу с одним портом, и выключение отладочного модуля.

О первом написано на GitHub, а о втором я узнал из форума Arduino.cc.

И все же, если честно, отлаживался я на Mega, потому что показалось очень уж муторно постоянно отключать-подключать HLK-RM04 — ведь на Pro Mini он занимает единственный порт, поэтому даже для банальной загрузки новой версии программы преобразователь нужно отключать. Но есть и хитрость: если после загрузки программы в Pro Mini подключить и HLK-RM04, и одновременно десктоп с монитором порта, то видно, что именно контроллер отправляет преобразователю. А это позволяет понять, в каком вообще состоянии тот находится.

В сухом остатке для адаптации WiFiRM04 под Arduino Pro Mini потребовалось:

1) В at_drv.cpp сделать так:

#define DEFAULT_BAUD1 9600 #define DEFAULT_BAUD2 9600

2) Там же — вот так:

// use Serial1 as default serial port to communicate with WiFi module #define AT_DRV_SERIAL Serial // use Serial2 to communicate the uart2 of our WiFi module #define AT_DRV_SERIAL1 Serial

3) Там же — закомментировать #define _DEBUG_

// #define _DEBUG_

4) Там же — не забыть поставить свой любимый цифровой пин в #define ESCAPE_PIN

#define ESCAPE_PIN 4

3) В wl_definitions.h изменить MAX_SOCK_NUM на 1

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

Своя ноша то тянет, то не тянет

На следующем этапе я занялся изучением вопроса о получении данных с весов. Теория гласила, что в зависимости от типа весы комплектуются одним, двумя или четырьмя тензодатчиками. Открыв обычные икеевские весы я осознал, что здесь, в общем, классическая схема: каждой пятке — по датчику, то есть всего четыре датчика. Смущало только количество проводов.
. оригинальная плата весов

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

. тензодатчик

Вдумчивое изучение Aliexpress показало следующее: хитрые китайцы выпускают датчики в виде половинки довольно популярного измерительного моста (мост Витстоуна).

Сам мост выглядит вот так (картинка из Википедии, ссылка на которую рядом):

И, в принципе, все было понятно. Но я никак не мог взять в толк, как четыре полумоста соединяются в один мост и зачем это нужно. Ответ на первую часть задачи дала родная плата весов. Те же китайцы, чтобы не тратить зря медь, подключили готовые общие точки куда надо: к источнику тока и к приемнику потенциала. А все остальное соединили так, чтобы получить мост. В итоге каждое фабричное полуплечо стало четвертью плеча:

Ну и ладно.

Принцип измерения веса довольно прост: нагрузка изменяет сопротивление тензодатчиков, что закономерным образом выливается в изменение напряжения на выходе моста. Причем напряжение меняется линейно в зависимости от веса. В общем, все хорошо, если бы не одно но: выходное напряжение моста слишком мало, чтобы измерять его напрямую АЦП Arduino. Всемогущий интернет говорит нам, что для успеха необходим подходящий усилитель — с достаточно большим коэффициентом усиления, с достаточно малым шумом.

Тот же самый интернет советует использовать инструментальный операционный усилитель INA125 производства всем известной Texas Instruments. Множество соответствующих схемотехнических решений повторяют друг друга как под копирку и практически не отходят от классической схемы в даташите. И все же я решил быть оригинальным и выбрал для повторения вот такую схему:

Здесь R1: 39 Ом, R2: 1 кОм, C1: 100 нФ, C2: 100 мкФ. К площадкам 1, 2, 3 и 4 подключается измерительный мост, причем если я хоть что-то понимаю, то при подключении к мосту особо выбирать точки не нужно, главное, чтобы V+, V-, Vref и GND шли через один, т.е., к примеру: Vref, V+, GND, V-. С другой стороны, я впоследствии не стал рисковать, а просто посмотрел обозначения на родной плате весов, там было: E+, E-, S+ и S-, и соответствующим образом подключил все это к усилителю (E+ = Vref, E- = GND, S+ = V+, S- = V-).

Казалось бы, все ясно: купил деталей — и сиди паяй усилитель. Однако даже в ДС оказалось как-то адски сложно приобрести 1 (Один) усилитель TI INA125, а особенно — в DIP. Цены лежат диапазоне от 100 до 800 рублей, срок поставки — от завтра до через месяц, расположение контор и магазинов таково, что даже у депрессии начинается депрессия.

С силами я собирался примерно месяц. Потом плюнул на все и заказал в бутике Чип-и-Дип, но через их сайт. Таким образом сэкономил на семечках: если не ошибаюсь, то минимальная партия из 20 резистров стоила едва ли не меньше, чем один этот несчастный резистор в офлайновом магазине. Заодно выяснил, что SOL16 — это гораздо, нет ГОРАЗДО меньше, чем я думал. И просто так в навес его не распаять.

Я почти огорчился, но решил все же поискать какое-то решение проблемы. Нашлось в том же бутике. Это готовые платки-переходники, где таракан SOL16 внезапно растопыривается на площадки с вполне вменяемым 2.5 мм шагом. На радостях купил штуки три. Зачем они мне — ума не приложу, все жаба.

. таракан на плате

Остальные детали, тем не менее, распаял внавес. И еще сдуру распаял вилки, как на Arduino. Думал, что буду подключать через розетки, для простоты. Однако реальность оказалась более сурова, и в итоге пришлось замотать вилки, да и всю плату вообще изолентой. Тут еще один архитектурный косяк: изолента — белая.

. к HLK-RM04 подключился через вилки (шаг 2 мм). Оказалось — правильно, иначе бы замучился паять-отпаивать: ведь на время отладки нужно отключаться от модуля, чтобы освободить порт контроллера

Удивительно (я всегда удивляюсь, когда что-то, вышедшее из-под моих рук работает), но готовая плата, подключенная и к весам, и к Arduino, стала выдавать адекватные результаты. Так что теперь у меня на руках были все компоненты весов: весы с преобразователем напряжения и контроллер с блоком связи. Поэтому я отбросил пафос и обозвал первую версию программы альфой. Как оказалось — не зря.

. почти бета: альфа использовала светодиод на плате контроллера

В принципе, альфа неплохо работала, пока контроллер был подключен к компьютеру (на это время я пользовался или Mega, или Pro Mini, но — без HLK-RM04, по означенной выше причине нехватки последовательных портов). Однако при переходе на автономное питание возникло ощущение, что вся конструкция сошла с ума. Небольшое расследование показало, что я снова столкнулся с проблемой, знакомой по Автомату света и музыки АСИМ-АУ-2-6. А именно — постоянные флуктуации значений при чтении аналогового пина контроллера, которые я связываю с импульсной природой блока питания.
Можете полюбоваться на эти самые флуктуации в состоянии покоя
17.05.2014 23:55:51 user 28 17.05.2014 23:56:03 user 21 17.05.2014 23:56:28 user 11 17.05.2014 23:56:41 user 58 17.05.2014 23:56:53 user 10 17.05.2014 23:57:05 user 22 17.05.2014 23:57:18 user 30 17.05.2014 23:57:30 user 26 17.05.2014 23:57:42 user 9 17.05.2014 23:57:55 user 22 17.05.2014 23:58:07 user 28 17.05.2014 23:58:20 user 22 17.05.2014 23:58:32 user 29 17.05.2014 23:58:45 user 13 17.05.2014 23:58:57 user 26 17.05.2014 23:59:10 user 22 17.05.2014 23:59:22 user 44 17.05.2014 23:59:34 user 22 17.05.2014 23:59:47 user 58 17.05.2014 23:59:59 user 13 18.05.2014 0:00:11 user 29 18.05.2014 0:00:24 user 14 18.05.2014 0:00:36 user 51 18.05.2014 0:00:49 user 22 18.05.2014 0:01:01 user 11 18.05.2014 0:01:14 user 30 18.05.2014 0:01:26 user 27 18.05.2014 0:01:38 user 9 18.05.2014 0:01:51 user 29 18.05.2014 0:02:03 user 28 18.05.2014 0:02:16 user 9 18.05.2014 0:02:41 user 22 18.05.2014 0:02:53 user 8 18.05.2014 0:03:06 user 28 18.05.2014 0:03:18 user 27 18.05.2014 0:03:30 user 22 18.05.2014 0:03:43 user 27 18.05.2014 0:03:55 user 31 18.05.2014 0:04:07 user 22 18.05.2014 0:04:20 user 28 18.05.2014 0:04:32 user 22 18.05.2014 0:04:45 user 10 18.05.2014 0:04:57 user 24 18.05.2014 0:05:09 user 27 18.05.2014 0:05:22 user 22 18.05.2014 0:05:34 user 27 18.05.2014 0:05:47 user 23 18.05.2014 0:05:59 user 22 18.05.2014 0:06:12 user 14 18.05.2014 0:06:24 user 28 18.05.2014 0:06:36 user 59 18.05.2014 0:06:49 user 55 18.05.2014 0:07:01 user 27 18.05.2014 0:07:14 user 58 18.05.2014 0:07:26 user 27 18.05.2014 0:07:38 user 22 18.05.2014 0:07:51 user 24 18.05.2014 0:08:03 user 28 18.05.2014 0:08:16 user 57 18.05.2014 0:08:28 user 28 18.05.2014 0:08:53 user 28 18.05.2014 0:09:05 user 28 18.05.2014 0:09:18 user 24 18.05.2014 0:09:30 user 23 18.05.2014 0:09:43 user 8 18.05.2014 0:09:55 user 28 18.05.2014 0:10:07 user 13 18.05.2014 0:10:20 user 22 18.05.2014 0:10:32 user 36 18.05.2014 0:10:45 user 30 18.05.2014 0:10:57 user 26 18.05.2014 0:11:10 user 59 18.05.2014 0:11:22 user 57 18.05.2014 0:11:34 user 29 18.05.2014 0:11:47 user 27 18.05.2014 0:11:59 user 27 18.05.2014 0:12:11 user 28 18.05.2014 0:12:24 user 27 18.05.2014 0:12:36 user 17 18.05.2014 0:12:49 user 11 18.05.2014 0:13:01 user 21 18.05.2014 0:13:14 user 53 18.05.2014 0:13:26 user 54 18.05.2014 0:13:38 user 56

Изучение форума Arduino.cc показало, что я не один такой счастливый. Один из рекомендуемых методов борьбы с этим эффектом — подтянуть аналоговый пин к земле, использовать провода минимальной длины. Но и провода у меня были не длиннее 10 сантиметров, да и аналоговый пин, как нетрудно видеть из схемы, уже подтянут к земле. Поэтому пришлось обратиться к проверенной методике: во-первых, добавил в программу некое пороговое значение веса, заведомо больше наблюдаемых флуктуаций. А, во-вторых, так как флуктуации были слишком заметными, рассчитывал вес как среднее достаточно большого, хотя и не бесконечно большого, количества измерений. Если точнее, то усредняю тысячу замеров, что более-менее приводит флуктуации (да и значения вообще) в более-менее разумные пределы.

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

Суть проблемы в том, что коэффициент усиления INA125 задается резистором R1 по формуле:

Таким образом, усиление по версии авторов схемы установлено на уровне 1500 (1542,5, если точнее). Видимо, оно подбиралось под конкретный экземпляр весов, о чем я не задумывался. Для моих весов, если судить по результатам, это оказалось слишком. Поэтому я добавил еще один резистор 39 Ом и получил немного другой результат: усиление в районе 773.

При этом следует помнить, что исходя из того же даташита INA125, напряжение на выходе усилителя не превышает 3.8В. Отсюда получаем максимальную величину чтения аналогового пина Arduino: (3,8*1024)/5 = 778. К этому моменту я также успел приложиться к весам, поэтому выяснил, что соотношение между весом и значением на аналоговом пине составляет примерно 7,25.

Резюме: при текущем усилении теоретический предел измерений весов составляет около 107 кг, что меня более чем устраивает. Но если будет что-то беспокоить, тогда, наверное, поменяю резистор и подберусь к эксплуатационной границе в 150 кг. И пост-резюме для любопытных. Весы я калибровал по другим напольным весам. Понятно, что точность там плюс-минус тапок, ну так и у оригинала она такая же.

Никаких эталонных весов не использовал. Просто три замера на одних, три замера на других. И среднее арифметическое каждого экземпляра делим друг на друга. Отсюда и коэффициент между тем, что получает Arduino и реальным весом.

Одни за всех

Итак, у меня были откалиброванные весы и железки, способные передавать показания… куда-нибудь, в общем, способные. Осталось совсем немного: написать рабочую программу с многопользовательским многовидовым режимом и, по возможности, более-менее удобным способом переключения видов и пользователей.
Объяснение простое. Я хотел получать идентифицируемые результаты взвешивания для себя, жены и дать поиграться гостям, не смешивая их результаты со своими. А еще иногда хотел бы взвешивать наших котов, причем с минимумом усилий. Вы же знаете, как взвешивают котов, да? Берешь кота на руки, встаешь на весы, запоминаешь вес, отпускаешь кота, снова встаешь на весы. Потом из большего вычитаешь меньшее.

В общем, слово за слово, а определилось два вида (люди и коты) и восемь пользователей. Поэтому, напоминаю, более-менее удобное управление было крайне желательным.

От идеи использования родного ЖК-дисплея я отказался практически сразу, как почитал про реверс-инжиниринг протокола общения с ним. А купленный по случаю 0.96-дюймовый OLED-экран я успел убить где-то в процессе экспериментов (наверное, он все же был на 3.3В, а не на 5В, как обещали китайцы). Да и по чести, я жутко облажался: на фото дисплей казался довольно крупным, а по факту оказался крошечным — с высоты роста все равно ничего не было бы видно. Кроме того, еще на этапе тестирования выяснил, что вместе библиотека дисплея и библиотека WiFiRM04 не уживаются. Очевидно, памяти у Pro Mini для них обеих слишком мало.

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

Что касается средств ввода, то мне хотелось обойтись абсолютным минимумом. Вот представьте: вы стоите на весах, а еще какие-то кнопочки, переключатели — к чему это? Одновременно не хотелось и быть прикованным к смартфону, если предположить, что нужная настройка активировалась бы смартфоном. То есть, в идеале управление по моей идее должно быть таким, что и среди ночи с закрытыми глазами можно было бы без вопросов взвеситься.

И тут я подумал: «Эй, чувак, у тебя же под ногами четыре прекрасных датчика веса (ну ок, один синтетический). Почему бы не использовать их как всемогущую кнопку?». Честно скажу: половина личности (деятельная) была в восторге от столь изящного решения проблемы; вторая половина (ленивая) — в глубокой тоске. Но идея увлекла, и через некоторое время проб и ошибок на свет появилась следующая концепция управления: переключение режимов и пользователей нажатиями на стол весов, а индикация текущего статуса — звуковыми сигналами.

В общем «меню» примерно такое:

1) Первое нажатие после взвешивания или сразу после включения сообщает текущий статус; 2) Последующие однократные нажатия переключают пользователей в пределах категории; 3) Двукратное нажатие переключает режимы (люди/коты); 4) Трехкратное нажатие выполняет сброс настроек в значения по умолчанию.

Звуковая индикация тоже довольно простая. Один длинный сигнал означает людей, два длинных — котов. Последующее количество коротких сигналов — номер пользователя в очереди. В этой версии азбуки морзе, например, тире-точка-точка означает, что взвешиваем человека номер два; а тире-тире-точка — кота номер один.

Разумеется, на стол весов достаточно нажимать носком стопы (и нечего на карачках ползать). И, разумеется, временные интервалы для нажатий и аудиосигналов подобраны так, чтобы это было комфортно для управления и восприятия. Т.е. есть и акустический фидбек нажатия, и достаточная пауза, чтобы успеть нажать несколько раз подряд за таймаут, отведенный на команду.

Осталась самая малость — как-то узнать собственный вес. А для этого я воспользовался хитрыми интернет-сервисами, и поэтому вес объявляет ближайший Android-девайс (планшет там или смартфон). В теории, можно скрестить и с iOS, но мне не на чем проверить. Задержка получается крайне небольшая, а с учетом того, что это вообще-то весы, которые без интернета и не должны работать, то концепция вполне жизнеспособная.

Есть ли жизнь после HTTPS или как заставить весы говорить

Результаты измерений я сразу планировал выкладывать в интернет. Точно так же, как это делаю с текущим климатом дома и рядом с ним. Но по ряду причин мой любимый Народный мониторинг для этой цели не подходил. Зато вполне подходили таблицы Google, но они требовали подключения через HTTPS, чего Arduino вытянуть никак не может — ни с родным сетевым шилдом, ни, тем более, с неродным.
Но оказалось, есть очень даже привлекательное решение — сервис Pushing Box, такая вся из себя специальная уведомлялка как раз для интернета вещей, если верить описанию. И она, умница, берет всю эту SSL-магию на себя. А изучение того же Google привело к рецепту скрещивания Arduino и таблиц Google и вот еще важно про кнопочку Submit.

В двух словах: делаете форму в Google, заводите эккаунт на Pushing Box. Потом в Pushing Box:

1) Добавляете форму Google как сервис CustomURL, где URL должен быть вида:

https://docs.google.com/forms/d/ID ВАШЕЙ ФОРМЫ/formResponse

2) Добавляете сценарий, который выглядит, например, так:

?entry.11234123=$status$&&submit=Submit

Здесь entry.11234123 — имя поля формы, которое можно посмотреть в ее исходном коде. множественные поля, как обычно, объединяются через &.

3) Из кода Arduino (или что там у вас) добавление данных производится HTTP POST/GET следующего вида:

https://api.pushingbox.com/pushingbox?devid=v0123456789ABCDE&status=open

Здесь devid — идентификатор, выданный Pushing Box, «open» — передаваемое значение.

Возвращаясь к объявлению результатов. Этим занимается связка Pushing Box и Newtifry, который существует в двух ипостасях: сервиса Pushing Box и аппа для Android (есть аналогичный сервис для iOS).

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

В итоге мой HTTP-запрос к Pushing Box выглядит примерно так:

https://api.pushingbox.com/pushingbox?devid=v0123456789ABCDE&name=имя&name1=username&weight=99.9

Строка выстрадана. Оказалось, что Newtifry отлично передает кириллицу TTS Android, но та же кириллица превращается в кракозябры в таблице Google. Поэтому я передаю в Pushing Box одно и то же имя дважды: кириллицей и латиницей. Первое через Newtifry озвучивается смартфоном, а второе через CustomURL отправляется в таблицу.

Кстати, отметку о времени Google проставляет автоматически, поэтому о ней у меня голова не болит:

А еще после некоторых размышлений и консультаций с автором Народного мониторинга я все же подключил его к весам. Что характерно, через тот же Pushing Box, который в итоге стал неким концентратором-ретранслятором данных.

Все оказалось очень просто. Предположим, что у вас уже есть учетки на Pushig Box и Народном мониторинге. Тогда сначала идем в Pushing Box и добавляем в сервисы еще один CustomURL:

https://narodmon.ru/post.php

Метод: GET

Потом идем в сценарии и создаем новый или добавляем в существующий новое действие — только что созданный CustomURL. А в строке Data добавляем оставшуюся часть запроса:

?ID=0123456789AB&AB9876543210=$weight$

Здесь в терминах Народного мониторинга ID — ваш идентификатор устройства, а следующий за ним номер — идентификатор датчика. Соответственно, датчиков можно понаделать на всех доступных пользователей. Однако в контексте моей реализации весов, один датчик эквивалентен одной группе пользователей, которых всего четыре: по одной на каждого человека и одна на всех котов (да, дискриминация, но вы можете исправить, если захотите).

Ну а $weight$ — это хорошо известный вам вес, который Pushing Box получает от весов и отправляет, куда скажут.

Конструкция

В моей конфигурации для сборки весов потребуется:
1) Весы с 4 тензодатчиками. Насколько я понял, это довольно популярная сейчас конструкция, но не могу гарантировать, что всякие сделаны именно так. Важный момент: клиренс весов должен быть таким, или у весов должен быть такой корпус, чтобы туда поместилась вся электроника. Иначе вам придется класть коробочку рядом.

2) Преобразователь Serial-Wi-Fi HLK-RM04. Вот, например.

3) Инструментальный усилитель INA125 в любом корпусе, с которым сумеете разобраться.

4) Обвес для усилителя (конденсатор 100 мкФ, 100 нф, резистор 1 кОм, резистор задачи коэффициента усиления).

5) Светодиод

6) Пищалка. У меня — пьезокерамическая, поэтому подключается к контроллеру напрямую (достаточно высокое сопротивление). Для динамиков вам придется сделать некоторое подобие усилителя, так что решайте сами, что вам больше нравится.

7) Arduino Pro Mini. Вот, например.

8) Провода, блок питания 5В и прочие паяльники.

Набросок схемы выглядит следующим образом:

Необходимые комментарии. Я взял первую попавшуюся рисовалку, но в ее базе была только Arduino nano. В наших целях разницы нет никакой, но имейте в виду, что в моей версии — Pro Mini.

Номинал резистора зависит от светодиода, который вам попадется.

Типовую схему включения INA125 вы имели счастье наблюдать выше. Там вам понадобится только подобрать резистор R1 под свои весы. Это, к сожалению, только опытным путем.

Пищалка — пьезокерамическая. НЕЛЬЗЯ подключать к контроллеру обычные динамики напрямую. Убьете, причем не динамик.

Удивительно, но факт — все, что мне было нужно, каким-то чудом поместилось в оригинальном корпусе весов. Разве что я варварским способом удалил оттуда даже малейший намек на батарейный отсек. А дисплей, пусть и нерабочий, оставил — он великолепно маскирует безобразие внутри.

Алгоритм

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

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

1) tare — «пустой» вес весов при включении 2) treshold — отклонение от пустого веса (если будет) 3) соотношение между значением на аналоговом входе Arduino и весом. Текущее — 7.25, задается в разделе процедуре sendWeight

Секретный код

#include // для PROGMEM #include // https://playground.arduino.cc//Code/SimpleTimer #include char ssid[] = «YOUR SSID»; // your network SSID (name) char pass[] = «YOUR NETWORK KEY»; // your network password (use for WPA, or use as key for WEP) int keyIndex = 0; // your network key Index number (needed only for WEP) int status = WL_IDLE_STATUS; char server[] = «api.pushingbox.com»; // name address for Google (using DNS) WiFiRM04Client client; #define ledPin 8 #define weightPin A0 #define tonePin 10 #define weightPowerPin 9 byte tare = 28; // idle weight byte treshold = 30; // weight sensor value treshold int i; int scaleTimeoutID; byte nameSelectorCount = 0; // counter for name selection byte stepCount = 0; byte human = 0; // default setting byte cat = 0; // default setting float wt; long weight, brutto, netto; long prevWeight = 0; boolean idleWeight = false; boolean clearToSend = false; boolean ishuman = true; boolean nameSelect = false; boolean stepCounting = false; boolean stepTimeout = false; boolean firstStep = true; // строки в PROGMEM prog_char statusString_0[] PROGMEM = «devid1&name=»; // User 1 prog_char statusString_1[] PROGMEM = «devid2&name=»; // User 2 prog_char statusString_2[] PROGMEM = «devid3&name=»; // User 3 prog_char statusString_3[] PROGMEM = «devid4&name=»; // Cats prog_char statusString_4[] PROGMEM = «Юзер 1»; // cyrillic names prog_char statusString_5[] PROGMEM = «Юзер 2»; prog_char statusString_6[] PROGMEM = «Юзер 3»; prog_char statusString_7[] PROGMEM = «Кот 1»; prog_char statusString_8[] PROGMEM = «Кот 2»; prog_char statusString_9[] PROGMEM = «Кот 3»; prog_char statusString_10[] PROGMEM = «Кот 4»; prog_char statusString_11[] PROGMEM = «Кот 5»; prog_char statusString_12[] PROGMEM = «&name1=User 1»; // latin names for Google Spreadsheet prog_char statusString_13[] PROGMEM = «&name1=User 2»; prog_char statusString_14[] PROGMEM = «&name1=User 3»; prog_char statusString_15[] PROGMEM = «&name1=Cat 1»; prog_char statusString_16[] PROGMEM = «&name1=Cat 2»; prog_char statusString_17[] PROGMEM = «&name1=Cat 3»; prog_char statusString_18[] PROGMEM = «&name1=Cat 4»; prog_char statusString_19[] PROGMEM = «&name1=Cat 5″; prog_char statusString_20[] PROGMEM = » HTTP/1.1″; prog_char statusString_21[] PROGMEM = «Host: api.pushingbox.com»; prog_char statusString_22[] PROGMEM = «User-Agent: Arduino»; // табличка указателей на строки PROGMEM const char *statusString[] = { statusString_0, statusString_1, statusString_2, statusString_3, statusString_4, statusString_5, statusString_6, statusString_7, statusString_8, statusString_9, statusString_10, statusString_11, statusString_12, statusString_13, statusString_14, statusString_15, statusString_16, statusString_17, statusString_18, statusString_19, statusString_20, statusString_21, statusString_22}; char statusStringBuf[40]; // буфер для чтения строк состояния SimpleTimer scaleTime; void setup() { Serial.begin(9600); pinMode(weightPowerPin, OUTPUT); digitalWrite(weightPowerPin, HIGH); pinMode(weightPin, INPUT); // weight sensor pinMode(ledPin, OUTPUT); // led Power pinMode(7, OUTPUT); digitalWrite(7, LOW); // led GND // check for the presence of the shield: if (WiFi.status() == WL_NO_SHIELD) { while(true) { } } // attempt to connect to Wifi network: while (status != WL_CONNECTED) { // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } } void loop() { scaleTime.run(); averageWeight(); // CHECK FOR IDLE WEIGHT if ((idleWeight == false) && (weight < (tare+treshold))) { // check if there is still somebody on table idleWeight = true; // set flag to enable measurements in case there is nobody on table digitalWrite(ledPin, HIGH); // turn on ready led } // DETECT STEP-ON if ((idleWeight == true) && (weight > (tare+treshold))) { // check if there is still somebody on table idleWeight = false; digitalWrite(ledPin, LOW); // turn on ready led tone(tonePin, 450, 100); // audio confirmation for step-on if (stepCounting == false) { scaleTime.setTimeout(250, stepDetector); stepCounting = true; } } // READY TO SEND if (clearToSend == true) { // check for upload permission sendWeight(); // upload } } // Detect step-on void stepDetector() { averageWeight(); if (weight < (tare+treshold)) { // step detected if (firstStep == false) { // do not count first step stepCount = stepCount + 1; // count step-ons: only announce current name after first step-on; switch names on consecutive step-ons. if (stepTimeout == false) { // set timeout to confirm last step: i.e. if no one steps on table for specified time, scales must switch to stby or weighing mode scaleTimeoutID = scaleTime.setTimeout(1500, stepTotal); stepTimeout = true; } // tone(tonePin, 450, 100); // audio confirmation for step-on if (stepTimeout == true) { scaleTime.restartTimer(scaleTimeoutID); } } else { statusNotify(); // announce current status stepCount = 0; } firstStep = false; } else { if (ishuman == true) { getWeight(); netto = weight; } else { getWeight(); if (clearToSend == true) { brutto = weight; tone(tonePin, 550, 800); delay(3000); getWeight(); if (brutto > weight) { netto = brutto — weight; } else { netto = weight — brutto; } netto = netto+29; } } } stepCounting = false; } void stepTotal() { // tone(tonePin, 550, 1000); if (stepCount == 1) { if (ishuman == true) { human = human+1; if (human > 2) { human = 0; } } else { cat = cat+1; if (cat > 4) { cat = 0; } } } if (stepCount == 2) { if (ishuman == true) { ishuman = false; } else { ishuman = true; } } if (stepCount > 2) { ishuman = true; human = 0; cat = 0; firstStep = true; } delay(1500); statusNotify(); stepTimeout = false; stepCount = 0; } void statusNotify() { if (ishuman == true) { tone (tonePin, 550, 600); delay(800); makeSound(human+1, 300); } else { tone (tonePin, 550, 600); delay(1000); tone (tonePin, 550, 600); delay(1000); makeSound(cat+1, 300); } } // MEASURE WEIGHT void getWeight() { averageWeight(); if (weight > (tare+treshold)) { // object on table still heavier than idle weight digitalWrite(ledPin, LOW); // turn off ready led delay(3000); // let everything settle averageWeight(); prevWeight = weight; // save initial weight for future reference averageWeight(); if ((((prevWeight — treshold) < weight) && (weight < (prevWeight + treshold))) && prevWeight > (tare)) { // check if measurement average consistent with initial load (ensure object is on table) clearToSend = true; // set flag for upload } else { makeSound(2, 300); // measurement error clearToSend = false; // prevent upload idleWeight = false; // set flag to grant subsequent measurements } } } // HTTP SENDER void sendWeight() { netto = netto — tare; wt = (float)netto / 7.25; if (client.connect(server, 80)) { client.print(«GET /pushingbox?devid=»); if (ishuman == true) { strcpy_P(statusStringBuf, (char*)pgm_read_word(&(statusString[human]))); // devid client.print(statusStringBuf); strcpy_P(statusStringBuf, (char*)pgm_read_word(&(statusString[human+4]))); // name — name for audio notificaion client.print(statusStringBuf); strcpy_P(statusStringBuf, (char*)pgm_read_word(&(statusString[human+12]))); // name1 — name for Google client.print(statusStringBuf); } else { strcpy_P(statusStringBuf, (char*)pgm_read_word(&(statusString[3]))); // devid client.print(statusStringBuf); strcpy_P(statusStringBuf, (char*)pgm_read_word(&(statusString[cat+7]))); // name — name for audio notificaion client.print(statusStringBuf); strcpy_P(statusStringBuf, (char*)pgm_read_word(&(statusString[cat+15]))); // name1 — name for Google client.print(statusStringBuf); } client.print(«&weight=»); client.print(wt); for (byte clientCounter=20; clientCounter<23; clientCounter++) { strcpy_P(statusStringBuf, (char*)pgm_read_word(&(statusString[clientCounter]))); client.println(statusStringBuf); } client.println(); client.stop(); makeSound(3, 300); // confirm upload } else { makeSound(2, 300); // upload error } clearToSend = false; // clear flag firstStep = true; } // BEEPER void makeSound(byte count, byte duration) { for (i = 0; i<999; i++) { weight = weight+analogRead(weightPin); // capture measurements } weight = (weight/1000); // measurement average }

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

Ах да, чуть не забыл. Почему с блоком питания, а не на батарейках. Во-первых, и это самое главное — я так и не научился работать с энергосбережением. А, во-вторых, так получается, что типовой код подключения к Wi-Fi с библиотекой WiFiRM04 выполняется до полуминуты, поэтому если каждый раз включать, то придется долго ждать. Разве кто будет пользоваться такими весами? И одновременно HLK-RM04 очень много кушает — 140 мА согласно даташиту по режиму Only Wi-Fi.

Поэтому самым разумным оказался стационарный источник питания.

P.S. Если где увидите компромат, будьте добры, скажите — я звездочками, что-ли, запикаю.

Гири для самодельных весов

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

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

Итак, что понадобится для работы: бутылка; деревянный шампур длиной 30 см; нитки; пара пробок от бутылок; спички; бумажный уголок.

Посмотрите на видео процесс изготовления весов

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

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]