Определение хлора (ЛХОС) в нефти и нефтепродуктах – ООО НПФ Мета Хром

Определение хлора (ЛХОС) в нефти и нефтепродуктах - ООО НПФ Мета Хром Анемометр

Анализатор хлора спектроскан clsw | нпо спектрон

Прибор разработан на базе анализатора СПЕКТРОСКАН SW-D3, позволяет определять массовую долю хлорорганических соединений в нефти по

ГОСТ Р 52247-2004 (метод В) и ГОСТ 33342-2022 (метод В)

, содержание серы в автомобильном топливе, нефти и жидких нефтепродуктах в соответствии с ГОСТ Р 52660-2006 / ГОСТ ISO 20884-2022 и ГОСТ Р 53203-2008 / ГОСТ 33194-2022, а также определять массовую долю хлора и серы в любых жидких пробах в соответствии с со стандартизированными методиками (методами).

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

Анализатор успешно прошел межлабораторные испытания под руководством АО “ВНИИ НП” (ТК31). В результате испытаний установлено соответствие прецизионности метода определения массовой доли хлорорганических соединений с применением анализатора СПЕКТРОСКАН CLSW, требованиям ГОСТ Р 52247-2004, метод В, а также определены показатели прецизионности метода в диапазоне массовой доли хлорорганических соединений от 1 ppm до 50 ppm.

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

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

В результате межлабораторных испытаний анализатора под руководством АО “ВНИИНП” установлены показатели прецизионности анализатора, при определении массовой доли хлорорганических соединений от 1 ppm до 50 ppm:

предел повторяемости, r=0,6 ppm;

предел воспроизводимости, R =1,1 ppm.  

АНАЛИТИЧЕСКИЕ ХАРАКТЕРИСТИКИ

Определяемый элемент 

Cl (хлор)

S (сера)

Предел обнаружения 

0,1 мг/кг (ppm) за 600 с

0,2 мг/кг (ppm) за 300 с

Диапазон показаний массовой доли хлора и серы (вариативно)

от 0,1 мг/кг до 1,0 %

от 0,2 мг/кг до 5,0 %

Способ выделения линии

дифракция на кристалле

Рентгенооптическая схема

по Иоганну

Кристалл-анализатор

пиролитический углерод С(002)

Рентгеновская трубка

с хромовым или титановым анодом

Время измерения двух параллельных образцов (1 проба)

от 8 минут

ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ

Пробозагрузочное устройство

боковое, на три образца (автоматическое), установка образцов – вертикальная

Кюветы: диаметр, объем

∅32 мм, V 8 см3, вентилируемые

Мощность рентгеновской трубки

160 Вт

Интерфейс

встроенный дисплей и термопринтер, USB-интерфейс с PC

Габаритные размеры и масса (не более)

530х480х340 мм, 40 кг – спектрометрический блок

350х250х400 мм, 20 кг – вакуумный насос

Энергопотребление

220 В, ~ 50 Гц, 750 Вт

Гост 34060-2022 инженерные сети зданий и сооружений внутренние. испытание и наладка систем вентиляции и кондиционирования воздуха. правила проведения и контроль выполнения работ от 16 января 2022 –

ГОСТ 34060-2022

МЕЖГОСУДАРСТВЕННЫЙ СТАНДАРТ

МКС 91.140.30

Дата введения 2022-02-01

Цели, основные принципы и основной порядок проведения работ по межгосударственной стандартизации установлены в ГОСТ 1.0-2022 “Межгосударственная система стандартизации. Основные положения” и ГОСТ 1.2-2022 “Межгосударственная система стандартизации. Стандарты межгосударственные, правила и рекомендации по межгосударственной стандартизации. Правила разработки, принятия, обновления и отмены”

Сведения о стандарте

1 РАЗРАБОТАН Закрытым акционерным обществом “ИСЗС-Консалт” (ЗАО “ИСЗС-Консалт”), Техническим комитетом по стандартизации ТК 400 “Производство работ в строительстве, типовые технологические, организационные процессы”

2 ВНЕСЕН Федеральным агентством по техническому регулированию и метрологии (Росстандарт)

3 ПРИНЯТ Межгосударственным советом по стандартизации, метрологии и сертификации (протокол от 30 июня 2022 г. N 100-П)

За принятие проголосовали:

4 Приказом Федерального агентства по техническому регулированию и метрологии от 16 января 2022 г. N 4-ст межгосударственный стандарт ГОСТ 34060-2022 введен в действие в качестве национального стандарта Российской Федерации с 1 февраля 2022 г.

5 ВВЕДЕН ВПЕРВЫЕ

Информация об изменениях к настоящему стандарту публикуется в ежегодном информационном указателе “Национальные стандарты”, а текст изменений и поправок – в ежемесячном информационном указателе “Национальные стандарты”. В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ежемесячном информационном указателе “Национальные стандарты”. Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования – на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет (www.gost.ru)

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

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

В настоящем стандарте использованы нормативные ссылки на следующие межгосударственные стандарты:

ГОСТ 8.271-77 Государственная система обеспечения единства измерений. Средства измерения давления. Термины и определения

ГОСТ 12.1.005-88 Система стандартов безопасности труда. Общие санитарно-гигиенические требования к воздуху рабочей зоны

ГОСТ 12.1.007-76 Система стандартов безопасности труда. Вредные вещества. Классификация и общие требования безопасности

ГОСТ 12.1.012-2004 Система стандартов безопасности труда. Вибрационная безопасность. Общие требования

ГОСТ 12.3.018-79 Система стандартов безопасности труда. Системы вентиляционные. Методы аэродинамических испытаний

ГОСТ 21.602-2003 Система проектной документации для строительства. Правила выполнения рабочей документации отопления, вентиляции и кондиционирования

ГОСТ 2405-88 Манометры, вакуумметры, мановакуумметры, напоромеры, тягомеры и тягонапоромеры. Общие технические условия

ГОСТ 6376-74 Анемометры ручные со счетным механизмом. Технические условия

ГОСТ 7502-98 Рулетки измерительные металлические. Технические условия

ГОСТ ИСО 8041-2006 Вибрация. Воздействие вибрации на человека. Средства измерений

ГОСТ 15807-93 Манометры скважинные. Общие технические требования и методы испытаний

ГОСТ 16519-2006 (ИСО 20643:2005) Вибрация. Определение параметров вибрационной характеристики ручных машин и машин с ручным управлением. Общие требования

ГОСТ 16844-93 Вибрация. Требования к испытаниям механических молотков

ГОСТ 17168-82 Фильтры электронные октавные и третьоктавные. Общие технические требования и методы испытаний

ГОСТ 17187-2022 (IEC 61672-1:2002) Шумомеры. Часть 1. Технические требования

ГОСТ 18140-84 Манометры дифференциальные ГСП. Общие технические условия

ГОСТ 21339-82 Тахометры. Общие технические условия

ГОСТ 22270-76 Оборудование для кондиционирования воздуха, вентиляции и отопления. Термины и определения

ГОСТ 23337-2022 Шум. Методы измерения шума на селитебной территории и в помещениях жилых и общественных зданий

ГОСТ 28243-96 Пирометры. Общие технические требования

ГОСТ 28498-90 Термометры жидкостные стеклянные. Общие технические требования. Методы испытаний

ГОСТ 30494-2022 Здания жилые и общественные. Параметры микроклимата в помещениях

ГОСТ 32548-2022 Вентиляция зданий. Воздухораспределительные устройства. Общие технические условия

Примечание – При пользовании настоящим стандартом целесообразно проверить действие ссылочных стандартов в информационной системе общего пользования – на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет или по ежегодному информационному указателю “Национальные стандарты”, который опубликован по состоянию на 1 января текущего года, и по выпускам ежемесячного информационного указателя “Национальные стандарты” за текущий год. Если ссылочный стандарт заменен (изменен), то при пользовании настоящим стандартом следует руководствоваться заменяющим (измененным) стандартом. Если ссылочный стандарт отменен без замены, то положение, в котором дана ссылка на него, применяется в части, не затрагивающей эту ссылку.

В настоящем стандарте применены термины по ГОСТ 8.271, ГОСТ 22270, ГОСТ 32548, а также следующие термины с соответствующими определениями:

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

3.2 вентиляция вытяжная общеобменная: Вентиляция, осуществляющая удаление загрязненного воздуха из всего объема помещения.

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

3.4 вентиляция местная: Вентиляция, осуществляемая вытяжной или приточной механической системой, предотвращающая распространение вредных веществ по объему помещения.

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

3.6 вентиляция приточная общеобменная: Вентиляция, осуществляемая механической системой подачи воздуха в помещение.

Про анемометры:  ПКГ100-СО2 промышленный датчик (преобразователь) концентрации углекислого газа в воздухе - ТО «ОВЕН-ЭНЕРГО»

3.7 воздухораспределитель (воздухораздающее устройство): Устройство, предназначенное для формирования приточной струи с целью обеспечения требуемых параметров воздушной среды в рабочей зоне.

3.8 вредные вещества: Вещества, для которых гигиеническими нормативами установлена предельно допустимая концентрация (ПДК).

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

3.10 душирующее утройство*: Устройство, создающее организованный поток приточного воздуха, направленный на рабочее место.

________________

* Текст документа соответствует оригиналу. – Примечание изготовителя базы данных.

3.11 живое сечение: Свободная площадь проема вентиляционной решетки для прохода воздуха.

3.12 испытание: Определение фактических величин основных характеристик систем вентиляции и кондиционирования воздуха, оборудования или устройств в рабочем режиме.

3.13 комплексная наладка: Опробование всех систем вентиляции и кондиционирования воздуха здания при их одновременной работе с сопутствующими системами в автоматическом режиме с целью достижения соответствия фактических данных параметрам проектной документации.

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

3.15 кратность воздухообмена: Отношение часового объема удаляемого или подаваемого воздуха к строительному объему помещения.

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

3.17 наладка (испытание и регулировка): Комплекс работ, выполняемый с целью достижения работоспособности систем на соответствие параметрам проектной документации или технологическим требованиям в процессе эксплуатации систем.

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

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

3.20 подпор (разрежение): Избыточное (недостаточное) по сравнению с соседними помещениями или атмосферой давление воздуха в производственном помещении, создаваемое средствами вентиляции путем превышения объема притока над вытяжкой (превышения вытяжки над притоком).

3.21 подсос: Процесс поступления воздуха через неплотности на всасывающей части воздуховодов.

3.22 пусконаладочные работы (пусконаладка): Комплекс работ, выполняемый после завершения монтажа систем на этапе ввода в эксплуатацию с целью обеспечения соответствия работы оборудования и устройств систем параметрам, заданным в проектной и рабочей документации.

4.1 В настоящем стандарте используют следующие обозначения:

– теплоемкость воздуха, кДж/(кг·°С);

Гост р 52247, метод б: анализатор хлора nsx2100 для сырой нефти | метод микрокулонометрии

Для каких образцов подходитГОСТ Р 52247

ГОСТ 52247 позволяет определять содержание хлора, входящего в состав органических соединений, в нефти на уровне более 1 мкг/г. Метод Б описывает микрокулонометрическое титрование

Мешающие факторы

Наличие бром- и иодорганических соединений приводит к снижению чувствительности метода примерно в 2 раза.

Применение данного метода возможно в случае, если процентное содержание (% масс.) общей серы, не более чем в 10000 раз выше хлора.

Сущность метода микрокулонометрического титрования

Суть ГОСТ Р 52247, Метод Б заключается в получении из хлорорганических соединений хлоридов и гипохлоритов с последующим их кулонометрическим титрованием. Для этого из нефти с помощью перегонки получают легкокипящую фракцию с Tкип ≤ 204°С (нафту), которую последовательно промывают гидроксидом калия и водой для полного удаления сульфида водорода и неорганических хлоридов, соответственно. Затем очищенную нафту с помощью шприца вводят в кварцевую трубку для сжигания, где происходит пиролиз образца в атмосфере кислорода (80%) и газа-носителя (20%) при температуре 800°С с образованием продуктов окисления – углекислого газа, воды, хлоридов или гипохлоритов, если в образце присутствуют хлорсодержащие вещества. Затем хлорсодержащие продукты окисления переносятся инертным газом в ячейку для титрования, где они взаимодействуют с ионами серебра (Ag ) с образованием хлорида серебра. Ионы Ag , израсходованные в процессе реакции, восстанавливают кулонометрически. Концентрация хлорид-ионов пропорциональна суммарному току, затраченному на восстановление баланса ионов Ag в исходном растворе электролита. Вычисления количественного содержания хлорид ионов проводятся по калибровочным графикам, построенным с использованием стандартных образцов.

Комплектация анализатора хлора в соответствии c ГОСТ Р 52247-2004, Метод Б:

Аппаратура для перегонки нефти.

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

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

Установка для пиролиза по ГОСТ Р 52247 состоит из электрической печи, поддерживающая температуру 800°C, с трубкой из кварца для сжигания образца с входами для ввода газа-окислителя и газа-носителя и обеспечивающая прямой ввод образца шприцом. Система оборудована двухступенчатыми регуляторами подачи газов.

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

  • Измерительная часть включает измерительный электрод и электрод сравнения, изготовленные из серебра;

  • Генерирующая ток система состоит из серебряного анодного электрода и катодного электрода, сделанного из платиновой проволоки.

Также в комплектацию детектора входит микрокулонометр с усилителем для измерения разности потенциалов.
Пробу отбирают шприцом объемом 5-50 мкл и иглой длиной 7,62 или 15,24 мм из термостойкого материала, выдерживающего температуру 500°С.

Реактивы, используемые по ГОСТ 52247:

Перегонка нефти:

  • Ацетон (х.ч.);

  • Гидроксид калия (х.ч.);

  • Вода дистиллированная или деионизованная;

  • Метилбензол (х.ч.);

  • Бумага фильтровальная (Ватман №41) или аналог;

  • Смазка для запорного крана.

Сжигание образца и микрокулонометрическое титрование:

  • Газ-носитель – Ar, He (высокая чистота); N2 CO2 (практически не используются)

  • Газ-окислитель – O2 (высокая чистота);

  • Уксусная кислота безводная (х.ч.);

  • Фенил хлорид (х.ч.);

  • 2,2,4-триметилпентан (х.ч.);

  • Ацетат серебра (очищенный порошок)

Вспомогательное оборудование:

  • Мерные колбы объемом 10 и 500 мл.

  • Делительная воронка.

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

  • Шприцевой насос или ручной дозатор (скорость ввода 0,5 мкл/с)

  • Весы (точность взвешивания ± 0,01 мг).

Метеостанция (arduino pro mini, bme280, lcd1602)

Введение

Что можно вывести на двухстрочный экран, кроме «Hello world!»? Почему бы не отображать температуру влажность и давление?

Датчики предлагаемые как учебное пособие к arduino (DHT11, DHT22) показывают температуру и влажность воздуха. В учебных целях (для университета) понадобилось наблюдать так же и за давлением. Естественно на кафедре есть барометр, но почему бы не собрать свой? К тому же можно в дальнейшем накапливать показания в автоматическом режиме, и это неплохой опыт в изучении arduino.

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

Необходимые комплектующие

Arduino Pro Mini
I2C для LCD (можно было заказать сразу в сборе, но так вышло чуть чуть дешевле)
LCD 1602
BME280

Для отправки скетча в arduino был использован USB-UART. Так же можно было использовать Raspberry Pi или компьютер с COM портом.

Схема подключения для прошивки и код программы

Из Китая USB-UART пришёл с набором проводков:

image

Их вполне хватило. Перемычку оставил на 3.3 вольта, несмотря на то что моя версия arduino питается от 5 вольт.

UART — Arduino
5v — VCC
TXD — RXD
RXD — TXD
GND — GND
CTS — DTR (опционально, у меня не работал, возможно потому что напряжение сигналов осталось 3.3В)

Если не подключать DTR, то после отправки прошивки arduino нужно перезагрузить встроенной кнопкой, начнётся активный обмен данными в обе стороны (о чём свидетельствуют светодиоды на USB-UART), после успешной загрузки прошивки, она сама перезагрузится.

Необходимые сторонние библиотеки:

SparkFunBME280
LiquidCrystal I2C

Непосредственно код, с комментариями из примеров (на случай, если кому то понадобится что то менять).

Код
#include <stdint.h>
#include "SparkFunBME280.h"
#include "Wire.h"
#include "SPI.h"
#include <LiquidCrystal_I2C.h>

//Global sensor object
BME280 mySensor;
LiquidCrystal_I2C lcd(0x3F,16,2); //Адрес дисплея, в моём случае 0x3F

void setup()
{
  lcd.init();
  lcd.backlight();

	//***Driver settings********************************//
	//commInterface can be I2C_MODE or SPI_MODE
	//specify chipSelectPin using arduino pin names
	//specify I2C address.  Can be 0x77(default) or 0x76
	//For I2C, enable the following and disable the SPI section
  
  mySensor.settings.commInterface = I2C_MODE;
  mySensor.settings.I2CAddress = 0x76; //Адрес датчика, в моём случае не стандартный
	
	//For SPI enable the following and dissable the I2C section
	//mySensor.settings.commInterface = SPI_MODE;
	//mySensor.settings.chipSelectPin = 10;

	//***Operation settings*****************************//
	
	//renMode can be:
	//  0, Sleep mode
	//  1 or 2, Forced mode
	//  3, Normal mode
	mySensor.settings.runMode = 3; //В примере предлагают использовать Forced mode, но при обновлении раз в секунду достаточно Normal mode
	
	//tStandby can be:
	//  0, 0.5ms
	//  1, 62.5ms
	//  2, 125ms
	//  3, 250ms
	//  4, 500ms
	//  5, 1000ms
	//  6, 10ms
	//  7, 20ms
	mySensor.settings.tStandby = 5; //Очевидно чаще не нужно
	
	//filter can be off or number of FIR coefficients to use:
	//  0, filter off
	//  1, coefficients = 2
	//  2, coefficients = 4
	//  3, coefficients = 8
	//  4, coefficients = 16
	mySensor.settings.filter = 0;
	
	//tempOverSample can be:
	//  0, skipped
	//  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
	mySensor.settings.tempOverSample = 1;

	//pressOverSample can be:
	//  0, skipped
	//  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
    mySensor.settings.pressOverSample = 1;
	
	//humidOverSample can be:
	//  0, skipped
	//  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
	mySensor.settings.humidOverSample = 1;
  	
	//Calling .begin() causes the settings to be loaded
	mySensor.begin();
}

void loop()
{
  //Буквы можно вывести один раз, а далее менять показания, но показания при изменении количества значащих цифр могут сдвигать строку.
  lcd.setCursor(0,0);
  lcd.print("H=");
  lcd.print((uint8_t)mySensor.readFloatHumidity());
  lcd.print("%");
  lcd.print(" T=");
  lcd.print(mySensor.readTempC());
  lcd.setCursor(13,0);
  lcd.print(" P:");

  lcd.setCursor(0,1);
  int mmH=mySensor.readFloatPressure()/133;
  lcd.print(mmH);
  lcd.print("mmH ");
  lcd.print(mySensor.readFloatPressure());
  lcd.setCursor(14,1);
  lcd.print("Pa");

  delay(1000);

}

Про анемометры:  Одноконтурные настенные газовые котлы, купить котел газовый настенный одноконтурный в Москве

Адрес датчика можно угадать, их всего два.

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

В данном случае:

И адрес будет 0x3F т.к. A0 — A2 разомкнуты:

image

Светодиод который обведён в овал лучше можно выпаять.

Схема подключения

Резистор выбирался как половина от сопротивления датчика (между VVC и GND), чтобы падения напряжения на нём было 1.7 вольта. Так же схему можно запитать от входа RAW, другим напряжением (например от кроны).

image

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

image

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

Итог

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

Метеостанция на arduino от а до я. часть 3

Продолжение. Предыдущая часть.

Оглавление:

Наконец мы подошли к самой трудной части для любого программиста — описать по-человечески что он там наваял.

Исходный код для сервера составляет около 1300 строк, включая отступы, но это не должно вас пугать. Исходный текст снабжен подробными комментариями, в этом плане я не ошибусь, если скажу, что мои исходники описаны лучше чем любые другие которые вы только сможете найти. В комментариях прямо в исходном тексте вы найдете всю распиновку для подключения модулей и все необходимые ссылки на внешнюю документацию. Секрет прост — я писал комментарии для себя постоянно, «по ходу пьесы», поэтому никаких трудностей с документированием не испытал.

Как я уже писал вы можете начать и не имея всех модулей под рукой. Например, можно начать не имея радиомодуля или ESP8266. Датчик барометрического давления BMP180 также может отсутствовать. Добавите потом. Правда в этом случае вам (возможно) придется самостоятельно закомментировать в скетче те участки кода, которые отвечают за взаимодействие с отсутствующими блоками, но скорее всего этого не потребуется. Главное, чтобы хоть что-то собралось и заработало, тогда веселее продолжать.

Конкретно сейчас, в данном месте повествования, у нас пока ещё не собран заоконный (внешний) модуль и нет своего веб-сервера с базой данных, то нам пока не нужны (но если есть — подключите сразу, чтобы потом не копаться):

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

Как я уже писал стандартные AT-прошивки для него имеют ряд недостатков:

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

Исходный код для сервера (центрального модуля) server.ino вы можете найти и скачать здесь.

Рядом я положил прошивку для ESP8266 в файле firmware/AT23-SDK101-nocloud.bin и в том же каталоге находится документация для любознательных. Прошив указанную прошивку вы можете быть уверены, что мой скетч у вас заработает с WiFi так как было задумано. С другими AT прошивками я не экспериментировал. Дело в том, что мне удалось таки отыскать «продвинутую» не AT прошивку, и даже немного поучаствовать в её создании, которая как нельзя лучше подходит для наших целей (вот она esp-link). Однако, как это часто случается, всё произошло уже после завершения работы над текущей версии метеостанции, поэтому решено было оставить всё так как есть.

Итак, в самом начале вам придётся прошить указанную AT прошивку. Сложного тут ничего нет, но и простого тоже. Как это сделать описано много где в сети — ESP8266 — подключение и обновление прошивки.

Поскольку у моего USB-TTL конвертора не хватило мощности по току и USB порт постоянно отваливался (вот это поворот!), то электрически я подключил модуль для его прошивки способом «Arduino в качестве простого USB-to-Serial TTL конвертора».

Так как я работаю в Linux, то и прошивал с помощью esptool.py. Для удобства прошивки я «наколхозил» небольшую вспомогательную плату с переключателями (здесь не описана).

После прошивки нужно установить скорость порта 57600 (так как для SoftSerial скорость порта в 115200 является большой и не гарантирует стабильную работу) командой

AT UART_DEF=57600,8,1,0,0

Далее нужно слегка изменить стандартные библиотеки Arduino IDE, а именно в файле arduino/hardware/arduino/avr/libraries/SoftwareSerial/SoftwareSerial.h изменить соответствующую строку на

#define _SS_MAX_RX_BUFF 128 // RX buffer size

в файле arduino/hardware/arduino/avr/cores/arduino/HardwareSerial.h изменить соответствующие строки на

#define SERIAL_TX_BUFFER_SIZE 128
#define SERIAL_RX_BUFFER_SIZE 128

и в файле arduino/hardware/arduino/avr/cores/arduino/USBAPI.h изменить соответствующую строку на

#define SERIAL_BUFFER_SIZE 128

Строго говоря это неправильно, т.к. при обновлении Arduino SDK эти файлы скорее всего будут перезаписаны и придется повторить все исправления заново. По науке мы должны изобрести свою библиотеку, которая манипулирует указанными значениями (если получится), но это на любителя.

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

Теперь переходим непосредственно к коду центрального блока (серверу) server.ino

В первых же строках вы должны изменить настройки доступа к вашей точке WiFi

const String SSID = "...";
const String PASSWORD = "...";

работу с веб сервером подробно рассмотрим позже.

Далее идут (закомментированные) отладочные определения:

//#define DEBUG
//#define DEBUG_RF
//#define DEBUG_ESP
//#define DEBUG_LOG_SD

Если что-то пойдёт не так вы всегда можете их раскомментировать, перекомпилировать и перезалить скетч и получить больше отладочной информации в консоли или записать её в файл на SD карту. Причем вы можете раскомментировать только то, что вам нужно. Например, барахлит модуль nRF24L01 ? Тогда раскоментируем только DEBUG_RF, и т.д.

Далее идут обширные комментарии с распиновкой, инициализацией и подробным описанием всей периферии.

Здесь вы можете изменить номер радиоканала для nRF24L01

#define RF_CHANNEL  73

Далее идёт void setup(), что там делается понятно из подробных комментариев. Ну и затем void loop(), код работы с веб-сервером пока не рассматриваем.

После заливки скетча, ваш центральный блок оживёт и что-то вам покажет, но не сразу, а спустя 10 минут — значение DELAY_LOCAL_SENSOR. Можете его изменить конечно же.
На дисплее должны отобразиться: комнатная температура и влажность (данные поступят от датчика DHT11) и барометрическое давление (от BMP180).

За отображение на дисплее LCD 16×4 отвечают функции:

void lcdClearRow(int row)

// Печатает на экране показания удалённых, уличных датчиков
void lcdPrintOutdoor(int temperature, int humidity, float voltage)

// Печатает на экране показания внутренних, домашних датчиков
void lcdPrintHome(int temperature, int humidity, int pressure)

void lcdPrintInfo(char info[LCD_MAX_COLS])
void lcdPrintStatus()
void lcdPrintLastSensorTime()

Дизайн дисплея LCD1604 следующий.

Дизайн дисплея LCD1604

В первой (верхней) строке печатается стилизованная иконка (идущий человечек) призванная обозначить погоду на улице (вышел на улицу, идёт по улице). Иконку придумывал сам, поэтому, если у вас есть лучшая идея (умещающаяся в 5х8 пикселов), можете указать в комментариях (в виде byte-массива). Поупражняться в пиксель-арте можно здесь Custom Character Generator for HD44780 LCD Modules. В этой же строке печатается напряжение питания заоконного модуля.

Про анемометры:  Газовый котел BOSCH GAZ 6000 W WBN 6000-35 C (37,4 кВт) – характеристики, отзывы, плюсы-минусы, конкуренты и все цены в обзоре

Во второй строке печатается «погода в доме» и атмосферное давление. Иконка дома стандартная, всем понятная.

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

И в последней четвёртой строке экрана с помощью функции lcdPrintStatus() печатается статусная информация, где

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

Возвращаясь к вопросу выбора железа, поясню про преимущества выбора текстового LCD1604 дисплея перед графическим. Дело в том, что модули LCD1604 купленные у различных продавцов в большинстве случаев будут одинаковыми и предсказуемыми в подключении и просты в программировании. Чего нельзя сказать о графических дисплеях, хотя нарисовать и показать на них можно гораздо больше. Разборчивость изображения с расстояния в несколько метров опять же лучше у текстового дисплея, таки да, на графическом дисплее можно сделать шрифт побольше, но тогда много ли можно на нём уместить?

Далее. Как только вы зальете скетч и убедитесь, что все работает как надо, то можете переподключить «материнскую» плату Arduino Mega к внешнему источнику питания. Или оставить как есть, подключённым к USB компьютера, чтобы посматривать на всю эту красоту в отладочной консоли.

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

Например, вы ещё не приобрели датчик атмосферного давления BMP180. В скетче server.ino ищем строки, отвечающие за подключение соответствующих библиотек, в нашем случае это

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>

Комментируем этот блок.

Далее в Arduino IDE запускаем компиляцию кода (не прошивку) и смотрим на какие строки ругается компилятор. Комментируем эти строки. Операцию повторяем до тех пор, пока код не будет собираться нормально, без ошибок. Хорошей практикой будет перед редактированием создать копию скетча, чтобы, когда из солнечного Китая приедет нужный датчик, не повторять все операции обратно.

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

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

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

Скетч

Прошейте контроллер скетчем через Arduino IDE.

weather-station.ino
// библиотека для работы I²C#include <Wire.h>// библиотека для работы с метеосенсором#include <TroykaMeteoSensor.h>// Подключаем библиотеку для работы с дисплеем#include <QuadDisplay2.h>// библиотека для работы с модулями IMU#include <TroykaIMU.h>// библиотека для работы с протоколом 1-Wire#include <OneWire.h>// библиотека для работы с датчиком DS18B20#include <DallasTemperature.h>// библиотека для работы с SPI#include <SPI.h>// библиотека для работы с SD-картами#include <SD.h>
 
// сигнальный пин датчика DS18B20#define ONE_WIRE_BUS 5// даём разумное имя для CS пина microSD-карты#define SD_CS_PIN  8
 
// создаём объект для работы с метеосенсором
TroykaMeteoSensor meteoSensor;// создаём объект класса QuadDisplay, передаём номер пина CS, включаем режим работы с SPI
QuadDisplay qd(10,true);// создаём объект для работы с барометром
Barometer barometer;// создаём объект для работы с библиотекой OneWire
OneWire oneWire(ONE_WIRE_BUS);// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensor(&oneWire);
 
// перечисляем имена операций, которые мы будем выводить на дисплейenum{
SAVE_SD,// имя для операции, которая записывает на SD данные
IN,// имя для операции, которая выводит на дисплей надпись "In"
TEMP_IN,// имя для операции, которая выводит на дисплей температуру с метеосенсора
CEL,// имя для операции, которая выводит на дисплей символ °C
HUM_IN,// имя для операции, которая выводит на дисплей влажность с метеосенсора
PPM,// имя для операции, которая выводит на дисплей символ %
BAR_IN,// имя для операции, которая выводит на дисплей давление с барометра в миллиметрах ртутного столба
MER,// имя для операции, которая выводит на дисплей надпись "Hg"
EMPTY,// имя для операции, которая очищает дисплей
OUT,// имя для операции, которая выводит на дисплей надпись "Out"
TEMP_OUT    // имя для операции, которая выводит на дисплей температуру с датчика DS18B20};// создаем массив, в котором будем хранить последовательность операцийint chain[]={
IN,
TEMP_IN,
CEL,
HUM_IN,
PPM,
BAR_IN,
MER,
EMPTY,
OUT,
TEMP_OUT,
CEL,
EMPTY,
SAVE_SD
};
 
// создаем объект класса long для хранения счетчикаunsignedlong respite_Time =0;
 
// создаем объект для регулировки времени показа значений на экранеint slowdown_qd =1000;// создаем объект для хранения номера выполняемой операцииint number_qd =0;
 
// создаем объект для записи данных на SD строкой
String  dataString ="";
 
void setup(){// инициализация дисплея
qd.begin();// инициализируем метеосенсора
meteoSensor.begin();// инициализация барометра
barometer.begin();// инициализируем работу с датчиком DS18B20
sensor.begin();// устанавливаем разрешение датчика от 9 до 12 бит
sensor.setResolution(12);// инициализируем карту памяти
SD.begin(SD_CS_PIN);// собираем верхнюю строчку с наименованием данных
dataString ="TEMP_IN (ºC)tHUM_IN (%)tBAR_IN (mmHg)tTEMP_OUT (ºC)";// вызываем функцию сохранения данных на SD
saveSD(dataString);}
 
void loop(){// запускаем бесконечный счетчик. Его содержимое будет обрабатываться с периодом равным slowdown_qdif(millis()- respite_Time > slowdown_qd){// запускаем процесс, который будет выполнять операции согласно последовательности в chainswitch(chain[number_qd]){case IN:
qd.displayDigits(QD_I, QD_n, QD_NONE, QD_NONE);break;case TEMP_IN:
showData(meteoSensor.getTemperatureC());break;case CEL:
qd.displayDigits(QD_NONE, QD_NONE, QD_DEGREE, QD_C);break;case HUM_IN:
showData(meteoSensor.getHumidity());break;case PPM:
qd.displayDigits(QD_NONE, QD_NONE, QD_DEGREE, QD_UNDER_DEGREE);break;case BAR_IN:
qd.displayInt(barometer.readPressureMillimetersHg());break;case MER:
qd.displayDigits(QD_NONE, QD_NONE, QD_H, QD_9);break;case EMPTY:
qd.displayClear();break;case OUT:
qd.displayDigits(QD_O, QD_u, QD_t, QD_NONE);break;case TEMP_OUT:// переменная для хранения температурыfloat temperature;// отправляем запрос на измерение температуры
sensor.requestTemperatures();// выводим значение с датчика DS18B20 на экран
qd.displayFloat(sensor.getTempCByIndex(0),1);break;case SAVE_SD:// собираем в строку сначала температура с метеосенсора
dataString = String(meteoSensor.getTemperatureC()) "t";// потом влажность
dataString  = String(meteoSensor.getHumidity()) "t";// давление
dataString  = String(barometer.readPressureMillimetersHg()) "t";// и температура с датчика DS18B20
dataString  = String(sensor.getTempCByIndex(0)) "t";// вызываем функцию сохранения данных на SD
saveSD(dataString);break;}
number_qd  ;// проверяем не превысил ли номер операции количество операцийif(number_qd >sizeof(chain)/sizeof(int)-1)
number_qd =0;
respite_Time = millis();}}
 
// функция работы датчика температуры и влажностиvoid showData(float data){// считываем данные с датчикаint stateSensor = meteoSensor.read();switch(stateSensor){// выводим показания на дисплейcase SHT_OK:
qd.displayFloat(data,1);break;// выводим сообщение "Errd", если ошибка данных или сенсор не подключёнcase SHT_ERROR_DATA:
qd.displayDigits(QD_E, QD_r, QD_r, QD_d);// выводим сообщение "ErrC", если ошибка контрольной суммыcase SHT_ERROR_CHECKSUM:
qd.displayDigits(QD_E, QD_r, QD_r, QD_C);break;}}
 
// функция сохранения данных на карту памятиvoid saveSD(String data){// создаем файл для записи данных
File dataFile = SD.open("datalog.txt", FILE_WRITE);// если файл существует и открылсяif(dataFile){// сохраняем данные
dataFile.println(data);// закрываем файл
dataFile.close();}else{// если файл не доступен выводим ошибку на дисплей
qd.displayDigits(QD_E, QD_r, QD_r, QD_S);}}

Оцените статью
Анемометры
Добавить комментарий