Урок №5 Герметичный датчик температуры
Герметичный датчик температуры
Описание
Протокол OneWire

1-Wire — (перев. Один Провод) это так называемый однопроводный интерфейс. Примечателен он тем, что для обмена данными с устройствами по этому интерфейсу требуется всего один сигнальный провод и один провод «земли». Что еще более примечательно, устройства спроектированы таким образом, что по этому же сигнальному проводу они и «кормятся» (то есть для питания устройства используется все тот же сигнальный провод), такой режим называется «паразитным питанием». Для реализации такого способа питания в устройствах ставят достаточно емкий конденсатор.

Обмен информацией в 1-Wire происходит благодаря следующим операциям:

  • Инициализация – определение последовательности сигналов, с которых начинается измерение и другие операции. Ведущее устройство подает импульс сброса, после этого датчик должен подать импульс присутствия, сообщающий о готовности к выполнению операции.
  • Запись данных – происходит передача байта данных в датчик.
  • Чтение данных – происходит прием байта из датчика

Герметичный датчик температуры.

Этот датчик поможет вам измерить температуру воды в аквариуме или в чайнике. Можно использовать его для измерения температуры на улице и при этом не бояться, что датчик зальёт дождём. Дачники оценят возможность измерять температуру почвы в теплице и на участке. А при отсутствии медицинского термометра этот датчик способен выручить если есть необходимости оценить температуру собственного тела.

Характеристики

  • Диапазон измеряемых температур: −55…+125 °C
  • Точность: ±0,5°C (в пределах −10…+85 °C)
  • Время получения данных: 750 мс при 12-битном разрешении; 94 мс при 9-битном разрешении
  • Напряжение питания: 3–5,5 В
  • Потребляемый ток при бездействии: 750 нА
  • Потребляемый ток при опросе: 1 м
Этот датчик температуры основан на популярной микросхеме DS18B20. Он позволяет определить температуру окружающей среды в диапазоне от -55°C до +125°C и получать данные в виде цифрового сигнала с 12-битным разрешением по 1-Wire протоколу. Для подключения 1-Wire устройств к Arduino существует готовая библиотека. Вы установили ее в первом уроке, если нет – проверьте наличие библиотеки "Onewire" по адресу C:\Users\User\Documents\Arduino\libraries

Эта библиотека позволит подключить огромное количество таких датчиков.
Герметичный датчик на основе микросхемы DS18B20 можно подключить следующим способом :

  • По трём проводам: питание (красный), земля (чёрный) и сигнал (белый\желтый)
Подключение датчика:
Красный: на + 5 Вольт (питание)
Черный: GND пинов­­­ Arduino (земля)
Белый\Желтый: на любый цифровой вход Arduino (в нашем коде 12 порт).

Независимо от способа подключения, сигнальный провод необходимо соединить с питанием через резистор 4,7 кОм. При подключении только одного датчика, подойдёт и резистор на 10 кОм.
Схема сборки
Что нам понадобится?
Достаньте и подготовьте необходимые детали из коробки.
Arduino Uno
Мозг нашей схемы
Популярный микроконтроллер, его мощности достаточно пока нам для начальных экспериментов
Светодиод
Любого цвета
Длинная ножка на положительно заряженный, короткая на отрицательно
Макетная плата
на 400 точек
Соединения идут параллельно, плата разделена на 2 части горизонтальной линией
Резистор
На 10 кОм
О резисторах подробно мы подробно поговорим чуть ниже в разделе "Базовые знания"
Подключение
Скетч
#include <OneWire.h> // говорим программе использовать библиотеку OneWire
OneWire ds(12);//порт датчика температуры ds18b20. Датчик температуры для почвы.
float temperature; //Переменная для хранения значения температуры
void setup() {
   Serial.begin(9600);
}
void loop() {
// Определяем температуру от датчика DS18b20
  byte data[2]; // Место для значения температуры   
  ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
  ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устройство 
  ds.write(0x44); // Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память
  delay(1000); // Микросхема измеряет температуру, а мы ждем.  
  ds.reset(); // Теперь готовимся получить значение измеренной температуры
  ds.write(0xCC); 
  ds.write(0xBE); // Просим передать нам значение регистров со значением температур
  // Получаем и считываем ответ
  data[0] = ds.read(); // Читаем младший байт значения температуры
  data[1] = ds.read(); // А теперь старший байт значения температуры
  // Формируем итоговое значение: 
  //    - сперва "склеиваем" значение, 
  temperature =  ((data[1] << 8) | data[0]) * 0.0625;
 //    - затем умножаем его на коэффициент, соответсвующий разрешающей способности (для 12 бит по умолчанию - это 0,0625)
  Serial.println(temperature);
}
Программирование
Мы измерили температуру – посмотрим на последовательность действий:

ds.reset() - Инициализация. Выполняет сброс шины, готовит ее для выполнения новой операции.

ds.write(0xCC) – Команда пропуск ROM. У нас только один датчик на шине. Поэтому нет необходимости в поиске устройства с нужным адресом. Мы эту операцию пропускаем.

ds.write(0x44) - Команда инициирует измерение температуры.

Пауза 1 сек. Ожидание на время, необходимое для выполнения датчиком преобразования температуры

ds. reset() - Инициализация. Мы собираемся выполнить новую операцию на шине 1-Wire.

ds.write(0xCC) – Команда пропуск ROM.

ds.write(0xBE) – Команда чтения памяти датчика. Команда используется для чтения всех 9ти байтов памяти DS18B20. Команда датчику, чтобы он начал отдавать данные.

data[0] = ds.read() \ data[1] = ds.read() - Данные о температуре хранят первые 2 байта, поэтому нам не нужно считывать остальные

Write позволяет передать команду на термодатчик. Основные команды, подаваемые в виде битов:

0x44 – измерить температуру, записать полученное значение в SRAM.

0xBE – последовательное считывание 9 байт SRAM.
Вопросы и задания
  1. Напишите 3 применения влагозащищенного датчика температуры
  2. Сожмите датчик – найдите у кого в классе самые горячие руки
  3. Можете проверить температуру своего тела – правда ли она 36,6?