ARDUINO: Получение веса с весов МЕРА по протоколу ОКА
Исследуя просторы интернета при подготовке к написанию данной статьи, мной были обнаружены два устойчивых подхода в вопросе измерения веса в самоделках:
- Я ВСЕ СДЕЛАЮ САМ. На известном китайском сайте есть готовые тензодатчики, разные измерительные платформы и в интернете куча типовых реализаций.
- ОЙ, ТАМ ВСЕ НЕПРОСТО. Это в случае, если разрабатываемое устройство требует поверки как средство измерения веса и
(хотя бы, учитывая нынешние реалии)присутствовать в Государственном реестре средств измерения.
Как раз о втором случае и пойдет мое краткое повествование.
Для одного из проектов были использованы подходящие по параметрам готовые весы МЕРА ПВм-3/15-Т. Они входят в ГРСИ, и для них производителем давно решены все вопросы по поверке и калибровке через ЦТО. Задача стояла простая: с помощью Arduino получить с весов значение измереренного веса.
Согласно инструкции по ремонту и настройке, данные весы поддерживают несколько протоколов взаимодействия с внешними устройствами по последовательному интерфейсу: 9байт, Ока, Мера-Авто. Протокол 9байт выглядит весьма мудреным. Протокол Мера-Авто категорически отказался включаться. А протокол ОКА заработал, и нам удалось получить значение веса.
Надо отметить, что для обмена данными и обновления прошивки, в разных моделях весов МЕРА используются сходные типы подключения. В основе – это RS232. В качестве интерфейсного разъема на ПВм-3/15-Т используется розетка RJ-45. Для подключения к ПК производителем выпускаются два кабеля-переходника: один из них обычный USB-RS232 конвертор, а второй – преобразователь уровней RS232 для подключения к «старому» COM-порту.
Контакты розетки RJ-45:
- TxD
- RxD
- TxD-RS (контакт для прямого подключения к COM-порту ПК)
- RxD-RS (контакт для прямого подключения к COM-порту ПК)
- 3v (этим напряжением питается схема весов при отключенном штатном БП)
- GND
- КЗ (в нашем случае не используется)
- n/c (не подключен)
Т.к. в Arduino на пинах 0/1 (RX/TX) мы имеем RS232 низкого уровня, то можем смело подключать ее к соответствующим контактам интерфейсного разъема весов.
Для работы скетча была написана библиотека для работы по последовательному каналу по протоколу ОКА. Скетч, который по протоколу ОКА опрашивает весы 1 раз в секунду и выводит значение веса на ЖК индикатор:
#include <ScaleOKA.h>
#include <LiquidCrystal.h>
ScaleOKA oka;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
uint32_t w = 0;
void setup() {
oka.initialize();
oka.setPrice(10000);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Weight (grams) ");
}
void loop() {
w = oka.getWeight();
lcd.setCursor(0, 1);
lcd.print(w);
lcd.print(" ");
delay(1000);
}
Заключение
Данное решение по получению измеренного веса скорее всего будет работать со всеми весами МЕРА, поддерживающими обмен по протоколу ОКА.