Другие полезные функции в библиотеке DallasTemperature.h
Есть еще несколько полезных функций, которые вы можете использовать с объектом . Несколько из них перечислены ниже:
- Функция устанавливает разрешение внутреннего аналого-цифрового преобразователя DS18B20 на значение 9, 10, 11 или 12 бит, что соответствует шагу температуры 0,5°C, 0,25°C, 0,125°C и 0,0625°C соответственно ,
- Функция возвращает значение флага . Это может быть полезно, когда вы хотите проверить, завершено ли преобразование температуры.
- Функции и устанавливают внутренние пороги тревоги высокой и низкой температуры для устройства в градусах Цельсия. Допустимый диапазон от -55°C до +125°C
- Функция возвращает , если устройство имеет состояние тревоги, когда температура выходит за пределы диапазона между верхним и нижним уровнями тревоги.
Применение 1-wire
Наибольшее применение устройства 1-wire нашли в виде круглых контактных площадок-«таблеток», называемых iButton, многим они знакомы в виде ключей от домофонов (впрочем, некоторые производители домофонов, например «Цифрал», используют иные, отличные от 1-wire, схемы, но выполненные в таком же корпусе). В наиболее простом случае микросхема, спрятанная внутри такой «таблетки», содержит лишь уникальный код и ничего более. Хотя этот код уникальный, такой ключ несложно подделать.
В некоторых более сложных системах безопасности используются чипы со встроенной энергонезависимой памятью, с возможностью шифрования.
Другой пример использования – это различные датчики, например, датчики температуры из серии DS18B20, DS18S20, DS18S22 и им подобные. Использование всего двух проводов делает достаточно удобным подключение серии датчиков, вместе с тем, в отличие от аналоговых датчиков, показания не зависят от длины провода.
В качестве примера ниже будут рассмотрены как раз такие термодатчики.
Интерфейс Touch Memory (1-Wire, iButton)
Интерфейс для связи между считывателем и контроллером СКУД Touch Memory – это разработанная корпорацией Dallas Semiconductor (с 2001 года — Maxim Integrated) двунаправленная шина 1-Wire, где используются всего два провода для питания и передачи данных.
Второй по популярности интерфейс для систем контроля доступа после интерфейса Wiegand.
Принцип работы интерфейса Touch Memory в СКУД
В случае использования интерфейса iButton для связи между контроллером и считывателем, последний эмулирует поведение ключа и контактора. Таким образом осуществляется возможность использовать простую схему передачи данных и, одновременно, идентификатор лучше защищенный от считывания, чем ключ Touch Memory.
Для обмена данными между считывателем и контроллером интерфейс 1-Wire использует всего одну двунаправленную сигнальную линию (второй провод — заземление), по времени отсутствия напряжения на которой определяется содержимое бита данных.
Преимущества и недостатки использования интерфейса iButton
Говоря о преимуществах интерфейса Touch Memory отмечают, в первую очередь, минимальное количество жил для передачи сигнала.
В качестве преимущества для решения определенных групп задач можно назвать возможность контроля удержания карты перед считывателем.
Некоторые производители реализуют двустороннюю связь считывателя и контроллера СКУД на базе протокола iButton.
Недостатками интерфейса 1-Wire являются:
- из-за низкой помехоустойчивости протокол Touch Memory эффективен лишь при небольшом расстоянии между считывателем и контроллером, которое может быть увеличено только с усложнением монтажа и с увеличением обшей стоимости системы контроля доступа;
- проблемы совместимости оборудования различных производителей, за счет отсутствия стандартизации процессов передачи сигнала;
- отсутствие шифрования передаваемых данных;
- отсутствие контроля целостности линии.
Материал спецпроекта «Без ключа»
Спецпроект «Без ключа» представляет собой аккумулятор информации о СКУД, конвергентном доступе и персонализации карт
Настройка и инициализация периферии.
С электрической частью покончили, переходим к созданию проекта и настройке необходимой периферии в STM32CubeMx. Активируем базово-необходимые вещи, такие как внешний кварцевый резонатор и интерфейс SWD для отладки:
Тактовые частоты зададим так:
Но опять же, в данном конкретном проекте это все не слишком существенно. Больше внимания уделим непосредственно USART’у. Я взял USART1, соответственно, обмен данными будет осуществляться через PA9. Настраиваем следующим образом:
Касаемо скорости передачи данных еще поговорим, по умолчанию ставим 115200 Бит/с. На этом заканчиваем с частью, посвященной периферии, и перемещаемся к программной реализации.
Пример использования
Устройства 1-Wire доступны в различных корпусах: интегральные схемы , транзистор в стиле TO-92 и портативная форма, называемая iButton или Dallas key, которая представляет собой небольшой корпус из нержавеющей стали, напоминающий батарейку для часов . Производители также производят устройства более сложные, чем отдельный компонент, которые используют шину 1-Wire для связи.
Устройства 1-Wire могут размещаться в разных местах системы. Это может быть один из многих компонентов на печатной плате продукта. Это также может быть отдельный компонент в устройстве, таком как датчик температуры. Он может быть подключен к контролируемому устройству. Некоторые лабораторные системы подключаются к устройствам 1-Wire с помощью кабелей с модульными разъемами или кабеля CAT-5 . В таких системах популярны ( модульные разъемы 6P2C или 6P4C , обычно используемые для телефонов).
Системы датчиков и исполнительных механизмов могут быть построены путем соединения множества компонентов 1-Wire. Каждый компонент 1-Wire содержит всю логику, необходимую для работы на шине 1-Wire. Примеры включают регистраторы температуры , таймеры, датчики напряжения и тока, мониторы батарей и память . Их можно подключить к ПК с помощью преобразователя шины. Интерфейсы последовательного порта USB , RS-232 и параллельного порта являются популярными решениями для подключения MicroLan к главному компьютеру. Устройства 1-Wire также могут напрямую подключаться к микроконтроллерам различных производителей.
iButton подключаются к системам шины 1-Wire с помощью розеток с контактами, которые касаются «крышки» и «дна» контейнера. В качестве альтернативы соединение может быть полупостоянным с помощью гнезда, в которое защелкивается iButton, но из которого он легко извлекается.
Каждая микросхема 1-Wire имеет уникальный идентификационный код. Эта особенность делает микросхемы, особенно iButton, подходящими электронными ключами. Некоторые виды использования включают в себя замки, охранную сигнализацию, компьютерные системы, одобренные производителем аксессуары и часы. iButtons использовались в качестве смарт-билетов Akbil для общественного транспорта в Стамбуле .
Источники питания
Блоки питания, дисплеи и ноутбуки Mac с разъемом Apple MagSafe и MagSafe 2 используют протокол 1-Wire для отправки и получения данных с подключенного ноутбука Mac через средний контакт разъема. Данные включают модель источника питания, мощность и серийный номер; и команды ноутбука для передачи полной мощности и включения красных или зеленых светодиодов в разъеме.
Подлинные блоки питания Dell для портативных компьютеров используют протокол 1-Wire для передачи данных по третьему проводу на портативный компьютер о номинальной мощности, токе и напряжении. Ноутбук откажется от зарядки, если адаптер не соответствует требованиям.
Принцип работы 1-Wire.
Сразу же структурируем проект подобающий образом, создав файлы для работы с шиной (onewire.c/onewire.h). В них инкапсулируем всю низкоуровневую часть для обмена данными, на базе которой впоследствии надстроим работу конкретно с датчиком DS18B20:
И начнем с разбора того, как мы собственно будем взаимодействовать с 1-Wire. И все процессы будут заключены всего лишь в 4-х возможных операциях:
- Команда сброса
- Передача бита 1.
- Передача бита 0.
- Чтение бита.
Так что планомерно и систематично добавим поддержку перечисленного, и на этом можно будет переходить к следующему этапу. Итак, команда сброса… Официальная документация говорит нам следующее:
То есть команда сброса представляет из себя не что иное, как низкий уровень на линии на протяжении обозначенного времени. Вспоминаем, что мы решили использовать USART и производим необходимые расчеты. Классический метод заключается в том, что при отправке команды сброса, USART переконфигурируется на скорость передачи данных 9600 бит/с. При данной скорости время передачи одного бита составляет:
T_{bit} = \frac{1000000 \medspace мкс}{9600 } = 104 \medspace мкс
Итого — для генерации Reset’а отправим в USART байт 0xF0 (0b11110000). Что это нам даст? Тут все просто — биты будут передаваться, начиная с младшего, значит первой будет выдана последовательность из четырех нулей. Приплюсовываем к этому нулевой старт-бит USART’а и получаем 5 бит, что эквивалентно низкому уровню на шине на протяжении 5 * 104 мкс = 520 мкс:
Это в свою очередь полностью соответствует внешнему виду команды Reset После отправки 0xF0 встаем на прием, и в том случае, если на шине присутствуют другие устройства, мы примем значение, не равное тому, что мы отправили. Если же устройств на шине нет, то примем ровно то, что отправили, а именно 0xF0, поскольку фактически Tx и Rx USART’а у нас замкнуты (одна линия для передачи данных по шине). Таким вот способом будет осуществляться обнаружение подключенных датчиков.
На этом с первым пунктом интерфейсной части успешно прощаемся. Переходим к передачи информационных битов. Передача единицы:
Как видите, механизм при работе с 1-Wire един и неизменен — по умолчанию линия подтянута к питанию, устройства же взаимодействуют выдачей на линию нуля. Вся разница только в длительностях. В данном случае для передачи единицы необходимо подать ноль на время, соответствующее интервалу 1-15 мкс. Да, кстати, скорость 9600 бит/с будет использоваться только и исключительно для команды Reset. Для оставшихся трех пунктов переконфигурируем снова на 115200 бит/с. С этим наглядно разберемся на практическом примере.
На скорости 115200 бит/с передача одного бита это:
T_{bit} = \frac{1000000 \medspace мс}{115200} = 8.7 \medspace мс
Поэтому передавать будем байт 0xFF, что вкупе со старт-битом даст нам требуемое:
Сразу же рассмотрим и передачу нуля:
Все то же самое, разница, как мы уже обсудили, только во временных интервалах. Передаем в USART 0x00, имеем:
Все четко! Остается только один пункт — чтение информационного бита. И снова все завязано на физическом устройстве шины, при котором линия подтянута вверх, а устройства при возникновении такого желания опускают ее вниз принудительно. Для чтения осуществляем выдачу 0xFF в USART (по-прежнему на 115200) и встаем на прием данных. При приеме в ответ того же байта 0xFF делаем вывод, что приняли бит «1», при любом другом значении — приняли «0». Собираем все вышеобозначенное воедино в графической инсталляции )
1-Wire | USART baudrate | USART data |
---|---|---|
Reset | 9600 Кбит/с | 0xF0 |
Bit 1 | 115200 Кбит/с | 0xFF |
Bit 0 | 115200 Кбит/с | 0x00 |
То есть при обмене данными одному биту на шине 1-Wire соответствует один байт (8 бит), передаваемый/принимаемый по USART. С общей концепцией разобрались, если и остались какие-либо неявные моменты, то их мы без проблем развеем при помощи пресловутого практического примера, к которому и переходим.
Подключение к микроконтроллеру AVR
Подключение к микроконтроллеру AVR |
В некоторых источниках рассматривается вариант подключения через последовательный порт, путём замыкания Rx и Tx. В таком варианте при использовании UART работающего на скорости 115200 бод, формируются импульсы нужной формы. Однако такое подключение не лишено ряда недостатков:
— задействованы два вывода микроконтроллера, когда можно вполне обойтись одним;
— порт UART оказывается занятым, а он часто присутствует на микроконтроллере в единственном числе и требуется для иных нужд;
— накладываются схематические ограничения, т.к. шина 1-wire должна быть подключена на строго определённые ножки микроконтроллера.
Вариант, предложенный в этой статье, предполагает подключение шины 1-wire на произвольную ножку микроконтроллера, которой можно управлять как портом ввода-вывода общего назначения (GPIO). Поскольку протокол связи 1-wire оставляет предостаточный допуск на время проведения операций, то такое прямое управление портом не составит особой трудности.
Микроконтроллеры AVR способны выдавать ток до 40ма на свои порты. Для устройств, требующих подключения «сильного» подтягивающего резистора, можно использовать один из свободных портов, подключив его к шине через защитный резистор 200 Ом. Этот резистор требуется для того, чтобы ограничить ток в цепи, если в цепи произойдёт короткое замыкание, или «сильный» порт будет включен, когда одно из устройств пытается выдавать на линию сигнал. С риском для порта микроконтроллера, этот резистор можно исключить. В таком случае схему можно упростить, т.к. «сильное» подключение может обеспечиваться тем же портом, что используется для передачи данных (на схеме — PB0).
На уровне программы передача данных обеспечивается переключением значения соответствующего бита регистра, выбирающего направление порта (DDRx), пока соответствующий бит регистра, выбирающего значение на порту (PORTx) остаётся равным нулю.
Для порта «сильного» подтягивающего резистора требуется обеспечить переключение значений бит обоих регистров, чтобы в активном состоянии подключался сильный драйвер (соответствующие биты в регистрах DDRx и PORTx установлены в единицу) чтобы в неактивном состоянии он не влиял на шину (соответствующие биты в регистрах DDRx и PORTx сброшены в ноль). При переключении между этими двумя состояниями следует исключить возможность просаживания шины на «землю» (когда соответствующий бит в регистре DDRx равен единице, а в PORTx – нулю). Поэтому для включения «сильного» резистора требуется сначала установить значение (PORTx), что включит внутренний подтягивающий резистор и не изменит состояние шины, лишь затем – направление порта (DDRx). Отключение производить в обратной последовательности.
Код написан на языке C для компилятора avr-gcc с использованием библиотек из AVR-toolchain.
Примеры кода ниже будут использовать объявленные здесь макросы и функции, и вызванные подключения.
Интерфейс 1-Wire
В этой статье я попытаюсь рассказать о потрясающей вещи – интерфейсе 1-Wire. Что в нем потрясающего? В нем данные передаются всего по одному проводу! Только вдумайтесь, куча датчиков может быть подключена к однопроводной шине.
Интерфейс One-Wire (встречается и такая нотация) был разработан компанией Dallas Semiconductor и применен в виде огромного количества устройств изготовленной данной компанией. Думаю практически все знают температурные датчики c 1-Wire интерфейсом – DS18B20.
Каждое устройство 1-Wire имеет собственный уникальный идентификатор, что обуславливает применение данных устройств в качестве устройств идентификации личности, маркировки оборудования и пр.
Как же передаются данные по однопроводной шине в обе стороны?
Данный вопрос очень удобно (и практично) рассмотреть на примере работы с датчиком температуры DS18B20.Вот так выглядит схема его подключения:
Есть еще вариант с питанием датчика от линии данных, в таком случае вы получаете рабочий датчик температуры подключенный всего при помощи двух проводов!
Первым делом при работе с шиной 1-Wire необходимо её инициализировать, послать сигнал сброса.
Как видно из временной диаграммы (я позаимствовал её из даташита на датчик), мастер (т.е. контроллер устанавливает на шине нулевой потенциал на временя не менее 480 мкс, после чего устанавливает её в единичный потенциал.
После чего необходимо подождать 15-60мкс, чтобы датчик получил передний фронт и отправил импульс присутствия (presence pulse) длиной 60-240мкс.
Если данный импульс не получен, значит на шине нет датчиков готовых к обмену данными.
Теперь рассмотрим процедуру отправки и приема бита.
Операция чтения бита очень похожа на операцию записи. Мы также должны установить шину в низкий потенциал, по крайней мере на 1мкс.
После чего переводим ножку микроконтроллера в режим приема данных и ожидаем 14мкс. После этого можно считать состояние линии. Она будет в высоком состоянии если передается “1” и в никзом, если “0”.
Наконец мы должны подождать ещё 45мкс до окончания периода в 60мкс.
Операция отправки/приема байта производиться в цикле, путем отправки/приема бита и сдвигов операнда.
Также существует режим работы с шиной 1-Wire при помощи USART:
Такой режим намного удобнее для stm32 контроллеров. Там проблем с нехваткой USART’ов нет, да ножек хоть отбавляй.
Интерфейс Touch Memory (1-Wire, iButton)
Интерфейс для связи между считывателем и контроллером СКУД Touch Memory – это разработанная корпорацией Dallas Semiconductor (с 2001 года — Maxim Integrated) двунаправленная шина 1-Wire, где используются всего два провода для питания и передачи данных.
Второй по популярности интерфейс для систем контроля доступа после интерфейса Wiegand.
Принцип работы интерфейса Touch Memory в СКУД
В случае использования интерфейса iButton для связи между контроллером и считывателем, последний эмулирует поведение ключа и контактора. Таким образом осуществляется возможность использовать простую схему передачи данных и, одновременно, идентификатор лучше защищенный от считывания, чем ключ Touch Memory.
Для обмена данными между считывателем и контроллером интерфейс 1-Wire использует всего одну двунаправленную сигнальную линию (второй провод — заземление), по времени отсутствия напряжения на которой определяется содержимое бита данных.
Преимущества и недостатки использования интерфейса iButton
Говоря о преимуществах интерфейса Touch Memory отмечают, в первую очередь, минимальное количество жил для передачи сигнала.
В качестве преимущества для решения определенных групп задач можно назвать возможность контроля удержания карты перед считывателем.
Некоторые производители реализуют двустороннюю связь считывателя и контроллера СКУД на базе протокола iButton.
Недостатками интерфейса 1-Wire являются:
- из-за низкой помехоустойчивости протокол Touch Memory эффективен лишь при небольшом расстоянии между считывателем и контроллером, которое может быть увеличено только с усложнением монтажа и с увеличением обшей стоимости системы контроля доступа;
- проблемы совместимости оборудования различных производителей, за счет отсутствия стандартизации процессов передачи сигнала;
- отсутствие шифрования передаваемых данных;
- отсутствие контроля целостности линии.
Материал спецпроекта «Без ключа»
Спецпроект «Без ключа» представляет собой аккумулятор информации о СКУД, конвергентном доступе и персонализации карт
Опрос температурных датчиков DS18B20, DS18S20, DS1822
Одним из наиболее частых применений протокола 1-wire является взаимодействие с температурными датчиками DS18B20, DS18S20, DS18S22.
Как предписано стандартом 1-wire, все датчики содержат 8-байтовый код, состоящий из кода семейства, уникального 48-битного серийного номера и контрольной суммы.
Датчики выпускаются в разных корпусах — трёхвыводные to92, для поверхностного монтажа — soic, а также в разнообразных вариантах герметичного исполнения.
Все они обеспечивают измерение температуры в пределах от -55°С до 125°С с точностью до 1/16 градуса. Время замера зависит от разрядности и достигает 0,75с.
Датчики могут работать как от внешнего источника питания, так и в режиме «паразитного питания» от линии данных, используя всего 2 провода.
Во втором случае вход внешнего питания должен быть соединён с общим выводом, и, так как устройства потребляют до 1,5 мА, на время замера температуры, шина данных должна подтягиваться «сильным» резистором, обеспечивая напряжение питания датчиков не менее 3 Вольт.
Получение значений температуры с датчиков выполняется в два этапа:
1) Запрос на измерение температуры (команда 0x44). Для устройств с паразитным питанием в течение 10мкс после этого должен быть включен сильный подтягивающий резистор на всё время замера (до 750мс).
2) Запрос на вычитывание измеренных значений (команда 0xBE).
Любому запросу к устройству обязательно предшествует сигнал сброса и одна из команд выбора устройства, в соответствии с сетевым протоколом 1-wire.
Результаты измерений сохраняются в устройстве в буферной памяти размером 9 байт, называемой скратчпад (scratchpad). У всех трёх рассматриваемых моделей термодатчиков структура скратчпада схожа между собой:
Позиция | Значение |
младший байт значения температуры | |
1 | старший байт значения температуры |
2,3 | граничные контрольные значения, или пользовательские данные |
4 | регистр конфигурации (DS18B20, DS1822) /зарезервирован (принимает значение 0xFF для DS18S20) |
5 | зарезервирован (принимает значение 0xFF) |
6 | зарезервирован (DS18B20, DS1822)/остаток COUNT_REMAIN (DS18S20) |
7 | зарезервирован (принимает значение 0x10 для DS18B20, DS1822)/множитель = отсчётов на градус (всегда 0x10 = 16 для DS18S20) |
8 | контрольная сумма, рассчитывается для всего скратчпада по тем же правилам что и для адреса 1-wire |
Измеренное значение температуры сохраняется в виде знакового 16-битного целого в первых двух байтах скратчпада, сначала младший байт.
Датчики DS18B20 и DS1822 имеют программируемое разрешение от 9 до 12 бит, и сохраняют результат всегда в 1/16 градусах Цельсия. Таким образом значения 0x50 0x05 соответствуют +85°С, 0xA2 0x00 – +10,125°С, 0x6F 0xFE – -25,0625°С. По умолчанию разрешение датчиков задано 12 бит. При выборе меньшего разрешения (в этой статье не будет рассматриваться) сокращается время замера температуры, при этом недостающее число младших разрядов результата будет содержать неопределённые данные.
В отличие от них, DS18S20 сохраняет результат с разрешением в половину градуса. То есть 0xAA 0x00 соответствует +85°С, 0x32 0x00 – +25°С, 0xCE 0xFF – -25°С. Однако, можно вычислить значение с точностью до 1/16 градуса, используя значение COUNT_REMAIN, сохраняемое в позиции 6 скратчпада по следующей формуле:
ТЕМПЕРАТУРА = ПРОЧИТАННАЯ ТЕМПЕРАТУРА – 0,25°С + COUNT_REMAIN / 16,
Где 16 – это количество отсчётов на градус, значение, возвращаемое в позиции 7 скратчпада и всегда равное 16 для DS18S20.
Пример измерения температуры
Пример ниже собирает показания с датчиков DS18S20, DS18B20 и DS1822, подключенных к шине 1-wire с «сильным» подтягивающим резистором, как описано выше, и пересылает результаты измерений по UART. Используется процедуры и функции для работы с сетью 1-wire, описанные выше.
Электронный ключ Touch Memory
Принцип работы
Популярные ключи Dallas Touch Memory, они же таблетки iButton, функционируют следующим образом.
В качестве считывателя выступает контактор, при соприкосновении которого с идентификатором замыкается электросхема и происходит передача на контроллер уникального 48-битного номера (+8 бит — код семейства, + 8 бит CRC — проверка) и на основании полученных данных принятие решения о допуске или отказе в доступе.
При этом таблетка Touch Memory выступает в качестве пассивного идентификатора, поскольку и питание, и опрос осуществляются через контроллер СКУД.
Конструктивные особенности таблеток iButton
Основой электронного ключа Touch Memory является, выполненный в виде таблетки диаметром 16 мм, герметичный корпус из нержавеющей стали, верхняя крышка которого электрически изолирована от нижней части при помощи полипропиленовой втулки. Толщина стали корпуса составляет 5,8 мм (корпус F5) или 3,2 мм (корпус F3). При этом верхняя крышка является контактом данных, а нижняя — общим контактом. Внутри корпуса размещается кремниевый чип (микросхема).
Эта конструкция обеспечивает высокую устойчивость ключей iButton к внешним воздействиям и неблагоприятным условиям окружающей среды. Например, они способны выдержать 11-килограммовую нагрузку на корпус, механический удар 500 г, падение с высоты 1,5 метров на бетонный пол. А, кроме того, могут работать в условиях повышенной влажности, не чувствительны к загрязнениям, вибрации и действию магнитных и статических полей. Рабочий диапазон температур составляет -40ºС до +85ºС для DS1990 и от -20ºС до +85ºС для остальных приборов семейства.
Достоинства электронных ключей Dallas Touch Memory
- небольшой размер;
- возможность работы в агрессивных условиях окружающей среды;
- высокая скорость считывания (менее 5 мс);
- простой и быстрый обмен данными по протоколу 1-Wire;
- идентификация по касанию;
- удобство совмещения ключа с контактором, за счет чашевидной формы последнего;
- возможность простого закрепления таблетки iButton на различных поверхностях или в различных аксессуарах.
Сфера применения iButton
В силу невысокой стоимости, надежности, простоты считывающих устройств и открытому протоколу этот тип iButton (DS1990) получил массовое внедрение в качестве электронного ключа в системах охранной сигнализации, разграничения доступа к информации и физическим объектам, электронным проходным, электронным замкам и в системах безопасности для банков и офисов.
Также применяется для маркировки объектов и маршрутов в системах контроля патрульно-постовой службы, контроля передвижения транспорта, системах инвентарного и складского учёта и в качестве кредитных карт в локальных платежных системах. Но наиболее частым применением идентификаторов Touch Memory остаются домофонные системы.
Недостатки использования электронных идентификаторов
- недостаточная защищенность ключа от изготовления дубликата;
- недостаточная защищенность контактора.
Самый главный из них – это недостаточная вандалозащищенность самого считывателя: воздействие элекрошокером, пьезозажигалкой, да просто скачок напряжения могут вывести прибор из строя.
Особенно печальные последствия могут быть от воздействия электрошокера у проводной клавиатуры: электрический разряд может уничтожить ПКП, нарушив работу всей системы. Да и вообще, считыватель можно просто-напросто замазать краской или залепить жвачкой.
Многие клавиатуры со считывателями Touch Memory не защищены от воздействия ключа-вездехода, иногда называемого «ключом почтальона», а это не добавляет надежности в работе системы. Ну и, наконец, ключ можно потерять, или, что достаточно часто случается у меня лично, теряется сама «таблетка», а пластиковый корпус остается, — говорит Мария ЛИВЕНЦОВА специалист по ОПС, компании «Альтоника».
Испытания огнем
Конечно же, огонь применять никто не собирается, пожаров нам только не хватает. Но полевые испытания провести стоит. Так как датчик достаточно инертный, то я решил извлечь хоть какую-то пользу от выделяемого компьютером тепла и засунул термодатчик под поток воздуха от процессорного кулера. Ура, температура поползла вверх!
Как только значения температуры перешагнули пороговое значение, тут же в терминал пришло ругательное сообщение. Следующим шагом была проверка на возврат в нормальное состояние.
Проверка срабатывания аварии
Заключение
Вот мы и сделали еще один сложный шаг к защите содержимого твоего холодильника не только от врагов, но и от разморозки. Теперь в твоем арсенале есть термодатчик, а так как используется линия 1-Wire, то ты уже самостоятельно можешь навесить и два, и три, и более термодатчиков. Надеюсь, что материал этой статьи раскрыл для тебя новые и интересные возможности, казалось бы, игрушечного Arduino и подогрел интерес к программированию встраиваемых систем. Помни, что только написание кода даст тебе знание и умение. Тренируйся, больше практики, старайся воплощать самые свои сумасшедшие идеи, и знание придет. Пиши, пиши, пиши! Железный привет, RESET :).
Замена датчика
Чтобы начать ремонт датчика охлаждающей жидкости, нужно определить его расположение. Чаще всего он установлен возле термостата или радиатора, в некоторых случаях бортовой компьютер использует показания с обоих датчиков или одного из них, в зависимости от марки авто и его модели. Например, так датчик расположен в Рено, Шевроле, Ситроен, Шкода, Чери, КИА, Субару Импреза.
Есть несколько способов, которые помогут узнать, что датчик нужно поменять. Если у Вас рабочие все остальные системы в авто, то на приборной панели о неисправности сообщит при помощи светового сигнала. Если в автомобиле компьютерное управление, то определить проблему можно будет при помощи расшифровки комбинации на мониторе.
Фото — датчик температуры на приборной панели
Зависимо от года выпуска машины, а также её марки, многие автолюбители отмечают возрастание затрат топлива у двигателя. Но при этом нужно понимать, что дизель так не определишь (УАЗ, ПАЗ и прочие). Если у Вас механика, а не компьютерная система управления, то вот сигналы того, что нужно купить новый датчик температуры охлаждающей жидкости:
- Автомобиль стал потреблять топлива больше, чем обычно;
- Когда машина заводится, и двигатель достигает своей максимальной температуры, он глохнет;
- Появились проблемы с запуском;
- Из трубы глушителя выходит черный дым.
Рассмотрим, как осуществляется замена датчика температуры охлаждающей жидкости типа G62 на автомобиле Kia Sportage с двигателем объемом 2 литра. Аналогичная инструкция также пригодится при ремонте Acura, BMW, Buick, Chevrolet, Ford, Toyota, Volkswagen, Ваз 2110/2112 инжектор, Рено Гранд Сценик и прочих.
- Чтобы добраться к датчику, Вам нужно снять воздуховод, который охлаждает корпус воздушного фильтра и присоединяется к радиатору при помощи двух болтовых соединений и шланга подачи воздуха. Открутите болты и снимите хомут, аккуратно достаньте всю систему. Отключите от датчика электрические провода, чтобы корректно провести замеры сопротивления. Установите мультиметр на режим омметра и задайте значение в 1000 Ом. Подключите контакты устройства к положительному и отрицательному контактам. Нормальное сопротивление должно быть в пределах 2700 Ом при выключенном моторе. Для проверки датчика при включенном движке, нужно убрать тестер подальше от вращающихся частей авто;
Фото — проверка датчика мультиметром
- Убедившись, что датчику температуры необходим ремонт, нужно отсоединить его от двигателя. Чтобы продолжить снятие, Вы должны предварительно слить антифризную жидкость из радиатора при помощи сливного клапана. После проверить еще раз радиатор и контакты датчика и открутить регулирующий болт как на фото;
Фото — снятие датчика
- Сборка производится в обратной форме. Нужно помнить, что практически основная характеристика датчика температуры охлаждающей жидкости – это материал шайбы. Если шайба медная, то резьбу сигнализатора не нужно обрабатывать герметиком, в противном случае обязательно смажьте устройство.
Фото — медный температурный датчик
Совет от автолюбителей на форумах: если по какой-то причине Вы не можете сразу при поломке понять датчик температуры охлаждающей жидкости, то вместо него можно подключить дополнительный (такое подключение может по показателям температуры немного отличаться от основного).
Проверка датчика температуры является несложной процедурой, с которой может справиться даже начинающий автолюбитель. Датчик температуры охлаждающей жидкости (сокращенно — ДТОЖ) представляет собой термистор, то есть, резистор, изменяющий значение своего внутреннего сопротивления в соответствии с температурой, куда помещен его исполнительный элемент. Чаще всего для этого используют мультиметр (другое название — тестер, «цэшка»), который в состоянии измерять значение электрического сопротивления в цепи.
Выносим в отдельный поток
Собственно, теперь ты убедился, что библиотека работает, термодатчик тоже что-то измеряет (в данном случае комнатную температуру). Давай теперь подключим все это добро к нашей системе сигнализации. Для этого необходимо создать отдельный поток, в котором будет производиться периодический опрос термодатчика и при возникновении аварии отправляться сообщение.
Немного подумав, я решил, что лучше сделать целый класс — движок работы с термодатчиками, унаследовав его от класса process<>, чтобы все собрать в одну кучку: сделать имплементацию функции-потока, дать этой функции доступ к членам класса, выставить наружу основные функции работы с термодатчиками.
Однако тут я уткнулся в жадность. Мне хотелось оставить возможность опроса термодатчиков из консоли и иметь сигнализацию. Сразу же возникает необходимость разделять общие ресурсы, так как теперь два потока будут дергать один термодатчик (а точнее, шину 1-Wire). Лезь в класс OneWire и добавляй ему приватного мембера .
Здесь начинается интересное. Мьютекс мы завели, но пользоваться им внутри класса неразумно, так как библиотека работы с термодатчиком написана очень сильно интегрировано и на лету дергает функции байтовой, а не пакетной приема-передачи по 1-Wire. Для локализации массовых вызовов я создал два метода: и для шины 1-Wire.
Затем пришлось прошерстить всю библиотеку DallasTemperature и обернуть вызовы функций работы с шиной 1-Wire в оболочку -> .
Реализация функции потока обработки показаний термодатчика совсем проста. В цикле запрашивается температура, проверяется на вхождение ее в граничные диапазоны (которые сейчас захардкожены), при изменении состояния отправляется грязное ругательное сообщение. Напомню, что в прошлой реализации аварийного потока я заложил код источника сообщения , который сейчас и использую. Приведу кусочек кода, чтобы не мучить тебя словами.
Дополнительно я решил добавить аварийное состояние при обрыве термодатчика, то есть когда непрерывно не удается получиться данные от термодатчика на протяжении некоторого времени, в данном случае десяти опросов.
Тут-то я и наступил на грабли. Я забыл про функцию инициации процесса измерения . В ней стоят задержки для того, чтобы подождать, пока термодатчик производит измерение. Но я поставил перед этими задержками. В итоге я получил странную картину: при запросе из терминала начинали скакать показания термодатчика. А случалось вот что: поток движка термодатчиков запускал измерение, одновременно приходил я со своим запросом по терминалу, и в итоге мы оба читали какие-то неинициализированные значения.
Почесав затылок, я вынес отдельно функцию инициации процесса измерения и оставил ее вызов только внутри потока движка термодатчиков. Таким образом, при получении команды из терминала возвращается последняя измеренная температура. Работает даже быстрее, чем каждый раз дергать термодатчик и просить его померить вот прямо сейчас и прямо здесь.
Остается лишь добавить в поток обработки аварийных сообщений кейсы нового источника аварий.