Анализ стандартного кода для датчиков HC-SR501, DS18B20

21 мая 6:47

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

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

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

Анализ кода датчика присутствия HC-SR501

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

Формальное описание алгоритма:

Пироэлектрический датчик работает по принципу есть движение, нет движения. Он разбивает участок на две прямоугольные зоны, объект проходя через первую зону, датчик генерирует единицу, а пройдя и вторую, датчик генерирует ноль. Цель алгоритма – в цикличной функции выводить информацию, есть движение или нет, и по мере того, когда есть движение, выполнять какую-то запрограммированную ситуацию.

Рисунок 3. Блок-схема алгоритма кода PIR датчика

Создание кода будет, описываться, ниже.

Анализ кода датчика температуры DS18B20

Для датчика температуры DS18B20, производители и почти все радиолюбители предлагают библиотеку «OneWire». Создатели библиотеки, так же, как и «NewPing», в «отказе об ответственности», говорят о том: что их код «может» работать неправильно; что они не предоставляют технической поддержки, а за помощью обращаться на форумы, МК-ов которые использованы с данным датчиком; что данная библиотека находится в открытом доступе, и может дорабатываться на усмотрение пользователя; что приведенный email предназначен исключительно, для связи с предложение в помощи модернизации библиотеки.

Библиотека «OneWire» состоит из, 1 конструктора и 9 методов.

КОНСТРУКТОР:

OneWire my (pin) – название может быть любое, где pin номер ноги к которой подключен датчик.

МЕТОДЫ:

  • my.search (addrArray) – запускает поиск подключенный датчиков. addrArray – 8-ми байтовый массив, заполняющийся при нахождении устройства и возвращает 1 или true, если устройств больше нету то возвращает 0 или false.
  • my.search_reset () – осуществляет перезапуск поиска или начало нового поиска, оба действия начинаются с первого устройства.
  • my.reset () – сбрасывает 1-Wire шину, необходимо каждый раз при общении с датчиком или несколькими датчиками.
  • my.select (addrArray) – осуществляет выбор определенного датчика по его адресу, для общения, общение будет происходить до тех пор пока не будет выполнен сброс.
  • my.skip () – осуществляет пропуск поиска и обращается ко всем подключенным датчикам, рекомендуют использовать с 1 датчиком.
  • write (num) – Ввод байт.
  • my.write (num, 1) – ввод байт при «паразитном питании».
  • my.read () – чтение байт.
  • my.crc8 (dataArray, length) – осуществляет проверку CRC на массиве полученных данных.

Пример кода приведенный в библиотеке «OneWire» приведен в листинге 5.3

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

Формальное описание алгоритма:

МК должен проверить есть ли подключенные датчики, выполнив инициализацию, после чего нужно подключится к датчику(ам). После подключения МК отсылает команду о начале измерения и преобразования температуры датчиком, после чего ожидает 1 секунду, она нужна датчику для выполнения преобразования. Снова производим инициализацию и подключения к датчику(ам), считываем показания. После чего проверяем их на достоверность:

а) если верны, то пересчитываем в Цельсии и выводим на экран, по циклу повторяем далее.

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

Рисунок 4. Блок-схема алгоритма кода DS18B20

В следующей статье будет произведён анализ стандартного кода для датчиков YL-63, HC-SR04

Список литературы

  1. Датчик присутствия HC-SR501 [сайт]. URL: http://arduino-kit.ru/userfiles/image/HC-SR501.pdf(28.11.2019) 
  2. Пироэлектрический инфракрасный (PIR) датчик движения и Arduino [сайт]. URL: http://arduino-diy.com/arduino-piroelektricheskiy-inf..(4.12.2019) 
  3. Чернов Геннадий. DS18B20 русское описание работы с датчиком температуры MEGETEX [сайт]. URL: http://www.ugolok-mastera.ru/ds18b20-rus_pic_v2.pdf(09.12.2019) 
  4. HC-SR501 PIR MOTION DETECTOR [сайт]. URL: http://www.mpja.com/download/31227sc.pdf(10.12.2019) 
  5. PIR SENSOR RE 200B [сайт]. URL: https://cdn-learn.adafruit.com/assets/assets/000/010/..(11.12.2019)