Почти все производители датчиков предлагают стандартный код, либо библиотеки. Предлагаемый код, почти всегда не совершенен и не оптимален. При использовании предлагаемого кода без данной модификации и оптимизации, порой люди встречаются с проблемой скорости и наглядности работы того или иного робота или механотронной системы, собранных на основе датчиков.
Для того, чтобы правильно модифицировать, а в дальнейшем оптимизировать код производителя нужно провести анализ структуры кода и его скорости и наглядности работы.
Для этого потребуется знать в чем заключается специфика датчика и его основные характеристики. Так же потребуется знание языка программирования С++ на среднем уровне. Изучить язык 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
Список литературы
- Датчик присутствия HC-SR501 [сайт]. URL: http://arduino-kit.ru/userfiles/image/HC-SR501.pdf(28.11.2019)
- Пироэлектрический инфракрасный (PIR) датчик движения и Arduino [сайт]. URL: http://arduino-diy.com/arduino-piroelektricheskiy-inf..(4.12.2019)
- Чернов Геннадий. DS18B20 русское описание работы с датчиком температуры MEGETEX [сайт]. URL: http://www.ugolok-mastera.ru/ds18b20-rus_pic_v2.pdf(09.12.2019)
- HC-SR501 PIR MOTION DETECTOR [сайт]. URL: http://www.mpja.com/download/31227sc.pdf(10.12.2019)
- PIR SENSOR RE 200B [сайт]. URL: https://cdn-learn.adafruit.com/assets/assets/000/010/..(11.12.2019)