Взаимодействие нескольких ds18b20, цифровых датчиков температуры, с arduino
Содержание:
- Другие полезные функции в библиотеке DallasTemperature.h
- Цифровой датчик температуры DS18B20
- Описание датчика DS18B20 для Arduino
- Шаг 2. Добавляем датчик температуры
- Описание
- Схема подключения DS18B20
- Датчики температуры для работы с Ардуино
- Подключение DS18B20 к Arduino
- Способ 2: чтение датчика DS18B20 по адресу
- Примеры работы для Raspberry Pi
- Дисплей 16×4 LCD1604
- Температура, влажность DHT11
- Барометр BMP180
- nRF24L01+
- ESP8266
- КДПВ
- Подключение датчика DS18B20 к Arduino
- Шаг 1. Проект
- Как работают современные датчики температуры
- Купить ATMEGA8A на Aliexpress
Другие полезные функции в библиотеке DallasTemperature.h
Есть еще несколько полезных функций, которые вы можете использовать с объектом . Несколько из них перечислены ниже:
- Функция устанавливает разрешение внутреннего аналого-цифрового преобразователя DS18B20 на значение 9, 10, 11 или 12 бит, что соответствует шагу температуры 0,5°C, 0,25°C, 0,125°C и 0,0625°C соответственно ,
- Функция возвращает значение флага . Это может быть полезно, когда вы хотите проверить, завершено ли преобразование температуры.
- Функции и устанавливают внутренние пороги тревоги высокой и низкой температуры для устройства в градусах Цельсия. Допустимый диапазон от -55°C до +125°C
- Функция возвращает , если устройство имеет состояние тревоги, когда температура выходит за пределы диапазона между верхним и нижним уровнями тревоги.
Цифровой датчик температуры DS18B20
DS18B20 цифровой датчик температуры (термометр) с программируемым разрешением, от 9 до 12–bit, которое может сохраняться в EEPROM памяти прибора. DS18B20 обменивается данными по 1-Wire шине и при этом может быть как единственным устройством на линии так и работать в группе. Все процессы на шине управляются центральным микропроцессором: AVR, PIC, Arduino, STM, Raspberry Pi и др..
Диапазон измерений от –55°C до +125°C и точностью 0.5°C в диапазоне от –10°C до +85°C. В дополнение, DS18B20 может питаться напряжением линии данных («parasite power»), при отсутствии внешнего источника напряжения.
Каждый DS18B20 имеет уникальный 64-битный последовательный код, который позволяет, общаться с множеством датчиков DS18B20 установленных на одной шине. Такой принцип позволяет использовать один микропроцессор, чтобы контролировать множество датчиков DS18B20, распределенных по большому участку.
Характеристики
Диапазон измеряемых температур | −55…+125 °C |
Точность | ±0,5°C (в пределах −10…+85 °C) |
Время получения данных | 750 мс при 12-битном разрешении; 94 мс при 9-битном разрешении |
Напряжение питания | 3–5.5 В |
Потребляемый ток при бездействии | 750 нА |
Потребляемый ток при опросе | 1 мА |
Подключение
Герметичный датчик на основе микросхемы DS18B20 можно подключить двумя способами:
- По трём проводам: питание (красный), земля (чёрный) и сигнал (белый).
- По двум проводам: земля и сигнал. В этом случае датчик изредка может давать неверные показания, которые легко исключить из конечного результата фильтрацией.
Независимо от способа подключения, сигнальный провод необходимо соединить с питанием через резистор 4,7 кОм. При подключении только одного датчика, подойдёт и резистор на 10 кОм.
Назначение выводов
SO* | SOP* | TO-92 | СИМВОЛ | ОПИСАНИЕ |
---|---|---|---|---|
5 | 4 | 1 | GND | Общий. |
4 | 1 | 2 | DQ | Вывод данных ввода/вывода (Input/Output pin). Open-drain 1-Wire interface pin. По этой линии подается питание в режиме работы с паразитным питанием. |
3 | 8 | 3 | VDD | VDD ножка питания. Для режима работы с паразитным питание VDD необходимо соединить с общим проводом. |
*Все остальные выводы должны оставаться не подключенными.
Описание датчика DS18B20 для Arduino
DS18B20 – это цифровой температурный датчик, обладающий множеством полезных функций. По сути, DS18B20 – это целый микроконтроллер, который может хранить значение измерений, сигнализировать о выходе температуры за установленные границы (сами границы мы можем устанавливать и менять), менять точность измерений, способ взаимодействия с контроллером и многое другое. Все это в очень небольшом корпусе, который, к тому же, доступен в водонепроницаемом исполнении.
Микросхема имеет три выхода, из которых для данных используется только один, два остальных – это земля и питание. Число проводов можно сократить до двух, если использовать схему с паразитным питанием и соединить Vdd с землей. К одному проводу с данными можно подключить сразу несколько датчиков DS18B20 и в плате Ардуино будет задействован всего один пин.
Особенности цифрового датчика DS18B20
Погрешность измерения не больше 0,5 С (для температур от -10С до +85С), что позволяет точно определить значение температуры. Не требуется дополнительная калибровка.
Температурный диапазон измерений лежит в пределах от -55 С до +125 С.
Датчик питается напряжением от 3,3В до 5В.
Можно программно задать максимальную разрешающую способность до 0,0625С, наибольшее разрешение 12 бит.
Присутствует функция тревожного сигнала.
Каждое устройство обладает своим уникальным серийным кодом.
Не требуются дополнительные внешние элементы.
Можно подключить сразу до 127 датчиков к одной линии связи.
Информация передается по протоколу 1-Wire.
Для присоединения к микроконтроллеру нужны только 3 провода.
Существует так называемый режим паразитного питания – в нем происходит питание напрямую от линии связи. Для подключения в этом случае нужны только 2 провода
Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.
Память датчика состоит из двух видов: оперативной и энергонезависимой – SRAM и EEPROM. В последнюю записываются регистры конфигурации и регистры TH, TL, которые могут использоваться как регистры общего назначения, если не используются для указания диапазона допустимых значений температуры.
Основной задачей DS18B20 является определение температуры и преобразование полученного результата в цифровой вид. Мы можем самостоятельно задать необходимое разрешение, установив количество бит точности – 9, 10, 11 и 12. В этих случаях разрешающие способности будут соответственно равны 0,5С, 0,25С, 0,125С и 0,0625С.
Во время включения питания датчик находится в состоянии покоя. Для начала измерения контроллер Ардуино выполняет команду «преобразование температуры». Полученный результат сохранится в 2 байтах регистра температуры, после чего датчик вернется в первоначальное состояние покоя. Если схема подключена в режиме внешнего питания, микроконтроллер регулирует состояние конвертации. Во время выполнения команды линия находится в низком состоянии, после окончания программы линия переходит в высокое состояние. Такой метод не допустим при питании от паразитной емкости, так как на шине постоянно должен сохраняться высокий уровень сигнала.
Полученные температурные измерения сохраняются в SRAM датчика. 1 и 2 байты сохраняют полученное значение температуры, 3 и 4 сохраняют пределы измерения, 5 и 6 зарезервированы, 7 и 8 используются для высокоточного определения температуры, последний 9 байт хранит устойчивый к помехам CRC код.
Шаг 2. Добавляем датчик температуры
Датчик температуры создает изменяющийся сигнал напряжения в зависимости от температуры, которую он определяет. Он имеет три контакта: один, который соединяется с землей, другой, который подключается к 5 вольтам, и третий, который выдает переменное напряжение на ваш Arduino, аналогичный аналоговому сигналу от потенциометра.
Существует несколько различных моделей датчиков температуры. Эта модель, TMP36, удобна, потому что ее выходное напряжение прямо пропорционально температуре в градусах Цельсия.
В редакторе схем найдите датчик температуры в компонентах.
Поместите датчик температуры (TMP36) на макет с закругленной частью, обращенной в сторону от Arduino, как показано на рисунке (это ориентация по умолчанию).
Поместите датчик температуры на макет в строку Е, как показано на рисунке.
Подключите датчик температуры так, чтобы левый контакт подключался к шине напряжения 5 В, центральный контакт соединяется с A0 на Arduino, а правый штырь соединяется с шиной GND.
Описание
В зависимости от конструкции микросхема-датчик температуры Dallas DS18B20 для контроля заданных параметров доступна в 3 формах:
- ТО-92;
- SO (150 mm);
- µSOP.
Расшифруем, где какой вывод микросхемы, и как правильно ее подключить.
Основные особенности и характеристики датчика температуры DS18B20:
- низкий уровень U питания от линии (3–5,5 В);
- высокоэффективная работа с помощью протокола 1-Wire;
- уникальный идентификационный 64-битный код, записываемый в независимую ROM-память устройства для работы большего количества устройств с помощью одной линии связи, что позволяет получать точное положение датчика, температурный режим которого находится выше или ниже запрограммированного уровня;
- широкий диапазон температурных измерений: –55°..+125°С с точностью 0,5°С в диапазоне –10°..+85°С;
- встроенный АЦП позволяет запрограммировать DS18B20 в диапазоне 9–12 разрядов, что позволяет снизить время измерений до 750 мс;
- удобное подключение микросхемы DS18B20 Raspberry Pi;
- для программирования термодатчика достаточно его подключить к любому устройству, работающему под управлением архитектур Arduino, ARM, PIC или AVR.
Схема подключения DS18B20
Что такое разрешение?
В технических характеристиках сообщается, что датчик DS18B20 может измерять температуру с различным разрешением. Разрешение — это как у линейки: миллиметры между сантиметрами. Так же и c разрешением у DS18B20 — это шаг между последовательными ступенями градусов Цельсия.
Разрешение выбирается с помощью количества бит. Диапазон выбора от 9 до 12 бит. Выбор разрешения влечет за собой определенные последствия. Чем выше разрешение, тем дольше придется ждать результат измерений.
Для 9 битного разрешения есть 2 шага между последовательными уровнями:
- 0,0 °C
- 0,5 °C
То есть, вы можете прочитать температуру с разрешением 0,5 °C. Для 9 битного разрешения время измерения составляет 93,75 мс. То есть, вы можете выполнять 10,6 измерений в секунду.
Для 10 битного разрешения есть 4 шага между последовательными уровнями:
- 0,0 °C
- 0,25 °C
- 0,5 °C
- 0,75 °C
В этом случае мы считываем температуру с разрешением 0,25 °C. Время измерения для 10 битного разрешения составляет 187,5 мс, что позволяет выполнить 5,3 измерений в секунду.
Для 11 битного разрешения есть 8 шагов между последовательными уровнями:
- 0,0 °C
- 0,125 °C
- 0,25 °C
- 0,375 °C
- 0,5 °C
- 0,625 °C
- 0,75 °C
- 0,875 °C
То есть разрешение составляет 0,125 °C. Время измерения для 11 битного разрешения составляет 375 мс. Это позволяет выполнить 2,6 измерения в секунду.
Для 12 битного разрешения есть 16 шагов между последовательными уровнями:
- 0,0 °C
- 0,0625 °C
- 0,125 °C
- 0,1875 °C
- 0,25 °C
- 0,3125 °C
- 0,375 °C
- 0,4375 °C
- 0,5 °C
- 0,5625 °C
- 0,625 °C
- 0,6875 °C
- 0,75 °C
- 0,8125 °C
- 0,875 °C
- 0,9375 °C
Следовательно, разрешение составляет 0,0625 °C. Время измерения для 12 битного разрешения в районе 750 мс. То есть вы можете сделать 1,3 измерений в секунду.
Что такое точность измерения?
Ничто в мире, и особенно в электронике, не является совершенным. Можно только приближаться к совершенству, тратя все больше и больше денег и сил. Так же и с этим датчиком. Он имеет некоторые неточности, о которых вы должны знать.
В технических характеристиках сказано, что в диапазоне измерения от -10 до 85 °C датчик DS18B20 имеет точность на уровне +/- 0,5 °C. Это значит, что, когда в комнате у нас температура 22,5 °C, то датчик может вернуть нам результат измерения от 22 до 23 °C. То есть, может показать на 0,5 °C больше или меньше. Все это зависит от индивидуальной характеристики датчика.
В диапазоне от -55 до 125 °C погрешность измерения может возрасти до +/- 2 °C. То есть, когда вы измеряете что-то с температурой 100 °C, то датчик может показать температуру от 98 до 102 °C.
Все эти отклонения могут несколько отличаться для каждой температуры, но при измерении одной и той же температуры, отклонение всегда будет одинаковым.
Что такое дрейф измерения?
Дрейф измерения — это наиболее худшая форма неточности. Суть дрейфа измерения заключается в том, что при измерении постоянной температуры — при одном измерении датчик может показывать одну температуру, а при последующем другую (на величину дрейфа).
Дрейф датчика температуры DS18B20 +/- 0.2 °C. Например, когда в комнате постоянная температура составляет 24 °C, датчик может выдавать результат в диапазоне от 23,8 °C до 24,2 °C.
Скачать datasheet DS18B20 (379,0 KiB, скачано: 1 185)
Датчики температуры для работы с Ардуино
При работе с микроконтроллером Ардуино наиболее часто используются следующие датчики температуры: DS18B20, DHT11, DHT22, LM35, TMP36.
Датчик температуры DS18B20
DS18B20 – цифровой 12-разрядный температурный датчик. Устройство доступно в 3 вариантах корпусов – 8-Pin SO (150 mils), 8-Pin µSOP, и 3-Pin TO-92, чаще всего используется именно последний. Он же изготавливается во влагозащитном корпусе с тремя выходами. Датчик прост и удобен в использовании, к плате Ардуино можно подключать сразу несколько таких приборов. А так как каждое устройство обладает своим уникальным серийным номером, они не перепутаются в результате измерения
Важной особенностью датчика является возможность сохранять данные при выключении прибора. Также DS18B20 может работать в режиме паразитного питания, то есть без внешнего питания через подтягивающий резистор
Подробная статья о ds18b20.
Датчики температуры DHT
DHT11 и DHT22 – две версии датчика DHT, обладающие одинаковой распиновкой. Разливаются по своим характеристикам. Для DHT11 характерно определение температуры в диапазоне от 0С до 50С, определение влажности в диапазоне 20-80% и частота измерений 1 раз в секунду. Датчик DHT22 обладает лучшими характеристиками, он определяет влажность 0-100%, температурный диапазон увеличен – от -40С до 125С, частота опроса 1 раз за 2 секунды. Соответственно, стоимость второго датчика дороже. Оба устройства состоят из 2 основных частей – это термистор и датчик влажности. Приборы имеют 4 выхода – питание, вывод сигнала, земля и один из каналов не используется. Датчик DHT11 обычно используется в учебных целях, так как он показывает невысокую точность измерений, но при этом он очень прост в использовании. Другие технические характеристики устройства: напряжение питания от 3В до 5В, наибольший ток 2,5мА. Для подключения к ардуино между выводами питания и выводами данных нужно установить резистор. Можно купить готовый модуль DHT11 или 22 с установленными резисторами.
Датчик температуры LM35
LM35 – интегральный температурный датчик. Обладает большим диапазоном температур (от -55С до 150С), высокой точностью (+-0,25С) и калиброванным выходом. Выводов всего 3 – земля, питание и выходной мигнал. Датчик стоит дешево, его удобно подключать к цепи, так как он откалиброван уже на этапе изготовления, обладает низким сопротивлением и линейной зависимостью выходного напряжения. Важным преимуществом датчика является его калибровка по шкале Цельсия. Особенности датчика: низкая стоимость, гарантированная точность 0,5С, широкий диапазон напряжений (от 4 до 30В) ток менее 60мА, малый уровень собственного разогрева (до 0,1С), выходное сопротивление 0,1 Ом при токе 1мА. Из недостатков можно выделить ухудшение параметров при удалении на значительное расстояние. В этом случае источниками помех могут стать радиопередатчики, реле, переключатели и другие устройства. Также существует проблема, когда температура измеряемой поверхности и температура окружающей среды сильно различаются. В этом случае датчик показывает среднее значение между двумя температурами. Чтобы избавиться от этой проблемы, можно покрыть поверхность, к которой подключается термодатчик, компаундом.
Схема подключения к микроконтроллеру Ардуино достаточно проста. Желательно датчик прижимать к контролируемой поверхности, чтобы увеличить точность измерения.
Примеры применения:
- Использование в схемах с развязкой по емкостной нагрузке.
- В схемах с RC цепочкой.
- Использование в качестве удаленного датчика температуры.
- Термометр со шкалой по Цельсию.
- Термометр со шкалой по Фаренгейту.
- Измеритель температуры с преобразованием напряжение-частота.
- Создание термостата.
TMP36 – аналоговый термодатчик
Датчик температуры Использует технологии твердотельной электроники для определения температуры. Устройства обладают высокой точностью, малым износом, не требуют дополнительной калибровки, просты в использовании и стоят недорого. Измеряет температуру в диапазоне от -40С до 150С. Параметры схожи с датчиком LM35, но TMP36 имеет больший диапазон чувствительности и не выдает отрицательное значение напряжения, если температура ниже нуля. Напряжение питания от 2,7В до 5,5В. Ток – 0.05мА. При использовании нескольких датчиков может возникнуть проблема, при которой полученные данные будут противоречивы. Причиной этого являются помехи от других термодатчиков. Чтобы исправить эту неполадку нужно увеличить задержку между записью измерений. Низкое выходное сопротивление и линейность результатов позволяют подключать датчик напрямую к схеме контроля температуры. TMP36 также, как и LM34 обладает малым нагревом прибора в нормальных условиях.
Подключение DS18B20 к Arduino
DS18B20 является цифровым датчиком. Цифровые датчики передают значение измеряемой температуры в виде определенного двоичного кода, который поступает на цифровые или аналоговые пины ардуино и затем декодируется. Коды могут быть самыми разными, ds18b20 работает по протоколу данных 1-Wire. Мы не будем вдаваться в подробности этого цифрового протокола, укажем лишь необходимый минимум для понимания принципов взаимодействия.
Обмен информацией в 1-Wire происходит благодаря следующим операциям:
- Инициализация – определение последовательности сигналов, с которых начинается измерение и другие операции. Ведущее устройство подает импульс сброса, после этого датчик должен подать импульс присутствия, сообщающий о готовности к выполнению операции.
- Запись данных – происходит передача байта данных в датчик.
- Чтение данных – происходит прием байта из датчика.
Для работы с датчиком нам понадобится программное обеспечение:
- Arduino IDE;
- Библиотека OneWire, если используется несколько датчиков на шине, можно использовать библиотеку DallasTemperature. Она будет работать поверх OneWire.
Из оборудования понадобятся:
- Один или несколько датчиков DS18B20;
- Микроконтроллер Ардуино;
- Коннекторы;
- Резистор на 4,7 кОм (в случае подключения одного датчика пойдет резистор номиналом от 4 до 10K);
- Монтажная плата;
- USB-кабель для подключения к компьютеру.
К плате Ардуино UNO датчик подключается просто: GND с термодатчика присоединяется к GND Ардуино, Vdd подключается к 5V, Data – к любому цифровому пину.
Простейшая схема подключения цифрового датчика DS18B20 представлена на рисунке.
В режиме паразитного питания контакт Vdd с датчика подключается к GND на Ардуино – в этом случае пригодятся только два провода. Работу в паразитном режиме лучше не использовать без необходимости, так как могут ухудшиться быстродействие и стабильность.
Способ 2: чтение датчика DS18B20 по адресу
Мы знаем, что каждому DS18B20 назначен уникальный 64-битный адрес, чтобы отличать их друг от друга. В этом методе мы найдем этот адрес для соответствующей маркировки каждого датчика. Затем этот адрес можно использовать для считывания каждого датчика в отдельности.
Поиск адресов датчиков DS18B20s на шине
Следующий скетч обнаруживает все DS18B20, присутствующие на шине, и печатает их адреса на 1-Wire в монитор последовательного порта.
Вы можете подключать только один датчик за раз, чтобы определить его адрес (или последовательно добавлять по одному новому датчику, чтобы вы могли идентифицировать каждый из них по его адресу). Затем вы можете пометить каждый датчик.
Теперь откройте монитор последовательного порта. Вы должны получить что-то подобное:
Рисунок 6 – Нахождение адресов 1-Wire всех датчиков DS18B20 на шине
Скопируйте все адреса, так как они нам понадобятся в следующем скетче.
Чтение показаний датчиков DS18B20 по адресу
Следующий скетч считывает температуру датчиков DS18B20 по их адресам. Прежде чем приступить к загрузке скетча, вам нужно изменить адреса датчиков DS18B20 на те, которые вы определили в предыдущем скетче.
Вывод вышеприведенного эскиза выглядит так
Рисунок 7 – Вывод показаний нескольких датчиков DS18B20 методом адреса
Объяснение кода
Как обычно, скетч начинается с включения библиотек, объявления вывода, к которому подключена шина датчиков, и создания объекта библиотеки .
Далее мы вводим адреса, которые были найдены ранее для каждого датчика температуры. В нашем случае имеем следующее.
Во фрагменте настройки мы инициализируем библиотеку путем вызова функции и инициализируем последовательную связь с ПК.
В цикле мы просто посылаем команду всем датчикам для преобразования температуры, используя функцию .
Затем, чтобы напечатать температуру датчика, мы вызываем пользовательскую функцию , для которой передается в качестве параметра.
Вышеприведенная функция просто вызывает библиотечные функции для отображения температуры в градусах Цельсия и для отображения температуры в градусах Фаренгейта.
Примеры работы для Raspberry Pi
Один датчик
Считаем данные с датчика одноплатником Raspberry Pi. Подключите сенсор к пину Raspberry через модуль подтяжки. Для избежания макеток и проводов используйте плату расширения Troyka Cap.
Код программы
- simpleSensor.py
-
# подключаем модуль времени import time # подключаем модуль для работы с датчиком DS18B20 from w1thermsensor import W1ThermSensor # создаём объект для работы с сенсором sensor = W1ThermSensor() while (True): # считываем данные с датчика temperature = sensor.get_temperature() # выводим значения в консоль каждую секунду print(temperature) time.sleep(1)
Считаем данные с датчика одноплатником Raspberry Pi. Подключите сенсор к пину Raspberry через модуль подтяжки. Для избежания макеток и проводов используйте плату расширения Troyka Cap.
Серия датчиков
Каждый сенсор DS18B20 хранит в своей памяти уникальный номер, такое решение позволяет подключить несколько датчиков к одному пину.
Код программы
- multipleSensors.py
-
# подключаем модуль времени import time # подключаем модуль w1thermsensor from w1thermsensor import W1ThermSensor while (True): # перебираем по очереди все датчики for i, sensor in enumerate(W1ThermSensor.get_available_sensors(), start = 1): # считываем данные с датчиков # и выводим значения в консоль каждую секунду print("Sensor %d Address %s has temp %.2f celcius" % (i,sensor.id, sensor.get_temperature())) print("\n") # ждём одну секунду time.sleep(1)
Дисплей 16×4 LCD1604
Подробнее о дисплее и работе с ним погуглите «Работа с символьными ЖКИ на базе HD44780». Отметим, что нужно внимательно отнестись к полярности подключения питания к ЖК-индикатору и чтобы напряжение питания было в диапазоне +4,5…5,5 В. Невнимательное отношение к этому может привести к выходу индикатора из строя!
Пин LCD 1604 | Arduino MEGA | Arduino UNO | Описание |
---|---|---|---|
VSS | GND | GND | GND |
VDD | 5 V | 5 V | 4,7 — 5,3V |
RS | 22 | 4 | Высокий уровень означает, что сигнал на выходах DB0—DB7 является данными, низкий — командой |
RW | GND | GND | Определяет направление данных (чтение/запись). Так как операция чтения данных из индикатора обычно бывает невостребованной, то можно установить постоянно на этом входе низкий уровень |
E | 23 | 5 | Импульс длительностью не менее 500 мс на этом выводе определяет сигнал для чтения/записи данных с выводов DB0-DB7, RS и WR |
DB4 | 24 | 8 | Входящие/исходящие данные |
DB5 | 25 | 9 | |
DB6 | 26 | 10 | |
DB7 | 27 | 11 | |
LED A+ | +5V или резистор 220 Ом → +5VLED-A | ||
LED B- | GND | ||
V0 | GND или подстроечник на 10кОм |
Программная инициализация будет выглядеть так:
Температура, влажность DHT11
Подключение датчика температуры и влажности DHT11 (SainSmart). Датчик расположите лицевой стороной вверх, выводы будут описаны слева направо.
DHT11 | Arduino Mega |
---|---|
DATA | Digital pin 2 (PWM) (см. ниже DHTPIN) |
VCC | 3,3—5 В (рекомендуется 5 В, лучше внешнее питание) |
GND | GND |
Программная инициализация
Барометр BMP180
Подключение датчика атмосферного давления BMP180 (барометр) + температура по интерфейсу I2C/TWI.
BMP180 | Arduino Mega |
---|---|
VCC | не подключен |
GND | GND |
SCL | 21 (SCL) |
SDA | 20 (SDA) |
3,3 | 3,3 В |
Для UNO: A4 (SDA), A5 (SCL).
nRF24L01+
Краткие характеристики:
- Диапазон частот 2,401 — 2,4835 Ггц
- 126 каналов. Нулевой канал начинается с 2400 Мгц и далее с шагом 1 Мгц, например 70 канал находится соответственно на 2470 Мгц. При установке скорости передачи 2Mbps занимается ширина канала в 2 Мгц
- Питание 1,9 — 3,6 В (рекомендуется 3,3 В)
Вот распиновка модуля.
Некоторые советуют сразу же припаять керамический конденсатор 100nF (можно 1µF, 10µF) на выводы питания RF для избежания электрических помех.
Распиновка nRF24L01+ (смотреть сверху платы там где чип, пины должны быть внизу) :
пин 2 3,3V | пин 4 CSN | пин 6 MOSI | пин 8 IRQ |
пин 1 GND | пин 3 CE | пин 5 SCK | пин 7 MISO |
Подключение для метеостанции:
Arduino Mega | nRF24L01+ |
---|---|
3,3 В | VCC пин 2 (лучше внешнее питание) |
пин D8 | CE пин 3 (chip enable in) |
SS пин D53 | CSN пин 4 (chip select in) |
SCK пин D52 | SCK пин 5 (SPI clock in) |
MOSI пин D51 | SDI пин 6 (SPI Data in) |
MISO пин D50 | SDO пин 7 (SPI data out) |
IRQ пин 8 (Interrupt output) не подсоединен | |
GND | GND пин 1 (ground in) |
Программирование радиомодуля будет подробно описано в программной части.
ESP8266
Распиновка ESP8266 (смотреть сверху платы там где чипы, пины должны быть внизу):
GND | GPIO2 | GPIO0 | RX |
TX | CH_PD | RESET | VCC |
Подключение ESP8266 для метеостанции:
ESP8266 | Arduino Mega |
---|---|
TX | 10 пин (SoftwareSerial RX) |
RX | 11 пин (SoftwareSerial TX) |
VCC | 3,3 В |
GND | GND |
CH_PD | Через резистор 10К к 3,3 В Arduino |
GPI0 | Необязательно. Через резистор 10К к 3,3 В Arduino |
GPI2 | Необязательно. Через резистор 10К к 3,3 В Arduino |
КДПВ
Центральный блок в сборе. «Материнскую плату» вырезал из картонной коробки из-под обуви и к ней винтиками на 3 прикрутил всё остальное.
Как видим в этом месте всё питание осуществляется от пинов Ардуино, т.е. к блоку питания напрямую ничего не идёт, и пока мощи хватает.
Вроде всё. Ничего не забыл.
Паяйте, соединяйте. В следующей части будет приведен рабочий скетч для центрального блока и наша метеостанция уже что-то покажет.
Подключение датчика DS18B20 к Arduino
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► Датчик температуры DS18b20+ x 2 шт.
► Резистор 4.7 кОм x 1 шт.
► Макетная плата MB-102 (Breadboard) x 1 шт.
Подключение:
Для подключения датчика DS18b20 к Arduino UNO, будем использовать макетную плату BreadBoard, принципиальную схему можно посмотреть на рисунке ниже. Установим датчик в макетную плату BreadBoard, как показано на рисунке, между ногой DQ и VDD необходимо установить резистор на 4,7 кОм, а ногу VDD подключить в выводам +5V (Arduino) и ногу GND к выводу GND (Arduino), ногу DQ необходимо подключить к выводу 2 (Arduino) (в этом примере использую pin 2), схема собрана.
Для этого эксперимента необходимо скачать и установить библиотеку «DallasTemperature v.3.4» и «OneWire v.2.2» (скачать их можно в конце статьи). Далее, запускаем среду программирования IDE Arduino, копируем пример кода в в окно программы и загружаем в контроллер.
/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 12.11.2016г.
*/
#include <OneWire.h> // Подключаем библиотеку OneWire
#include <DallasTemperature.h> // Подключаем библиотеку DallasTempature
#define ONE_WIRE_BUS 2 // Указываем, к какому выводу подключена DQ
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup(void)
{
Serial.begin(9600); // Задаем скорость передачи данных
sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит
}
void loop(void)
{
Serial.print(» Запрос температуры…»);
sensors.requestTemperatures(); // Запрос на считывание температуры
Serial.println(«Считано»);
Serial.print(» Температура датчика 1: «);
Serial.print(sensors.getTempCByIndex(0)); // Отображение температуры датчика 1
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/* */ OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); voidsetup(void) { Serial.begin(9600);// Задаем скорость передачи данных sensors.begin();// Запуск библиотеки, по умолчанию 9 бит } voidloop(void) { Serial.print(» Запрос температуры…»); sensors.requestTemperatures();// Запрос на считывание температуры Serial.println(«Считано»); Serial.print(» Температура датчика 1: «); Serial.print(sensors.getTempCByIndex());// Отображение температуры датчика 1 } |
Далее, открываем мониторинг порта, котором увидим показания температура с датчика.
Шаг 1. Проект
В наши дни датчики температуры являются обычным делом, но большинство из них чрезвычайно сложно сделать или очень дорого купить. Этот проект позволит нам сделать цифровой датчик температуры на основе Arduino, который не только дешев и очень прост в изготовлении, но и будет довольно точным.
Этот датчик показывает температуру в разных единицах и может использоваться в любых условиях. Когда мы включаем датчик, требуется несколько секунд для калибровки показаний, после чего оно дает результирующее значение. Датчик обнаруживает изменение температуры, создавая таким образом напряжение, которое обрабатывается Arduino, и дает нам точное считывание температуры.
Как работают современные датчики температуры
Блок-схема датчика температуры типа DS18B20 выглядит следующим образом:
Исходя из вышеприведенной структуры, рассматриваемый датчик состоит из:
- регистра конфигурации, программируемого пользователем (9–12 разрядов);
- датчика температуры;
- верхнего Th и нижнего Tl порога срабатывания сигнала тревоги;
- 64-битной памяти типа ROM и блока обработки протокола 1-Wire;
- внутреннего источника питания, способного работать как от внешнего источника, так и от «паразитных» импульсов.
Принцип работы
Основная функция микросхемы DS18B20 — трансформация показаний встроенного датчика температуры в цифровой код. Это преобразование зависит от разрешения преобразования, установленного пользователем, которое варьируется от 9 до 12 бит (0,5°–0,625°С). Если настройки не производились, то установка регистра конфигурации соответствует 12 битам.
В начальном состоянии DS18B20 находится в состоянии покоя или иными словами в низком энергетическом уровне. Для начала измерений микроконтроллер подает сигнал , после чего полученные данные сохраняются в регистр, а сам датчик переходит в режим «покоя».
При работе цифрового датчика температуры DS18B20 от независимого источника питания микроконтроллер способен контролировать процесс выполнения команды , которая осуществляет измерение температуры. Таким образом, датчик температуры DS18B20 сформирует логический «0» во время трансформации показаний температурного режима и логическую «1» в случае окончания процесса преобразования.
Если питание микросхемы осуществляется при помощи «паразитного метода», то контроль логических «0» и «1» невозможен, поскольку на шине будет постоянно дежурить высокий уровень напряжения питания.
После снятия и обработки сигнала с датчика температуры в микросхеме DS18B20 полученные данные в градусах Цельсия сохраняются в виде 16-битного числа с признаком (S), который отвечает за знак «+» или «-» температуры. Структура регистра температуры будет выглядеть так, как показано ниже.
Если показания температуры выше «0», то показатель S=0, если же значение температуры отрицательное, то S=1. Ниже представлена таблица соответствия данных и температуры.
Купить ATMEGA8A на Aliexpress
-
McIgIcM 5pcs ATMEGA8A-PU ATMEGA8A DIP-28 8-bit with 8K Bytes In-System Programmable Flash ATMEGA8 DIP Original free shipping
US $4.98 -
Free shipping TQFP32 QFP32 LQFP32 TO DIP28 adapter socket support ATMEGA8 ATMEGA8A ATMEGA328 AVR MCU TL866A TL866CS
US $12.30 -
ATMEGA8A-PU 8K 16MHZ 28-PDIP ATMEGA8A 8 ATMEGA8 8A ATMEGA 8A
US $1.43 -
10pcs/lot ATMEGA8A-AU ATMEGA8A ATMEL TQFP-32 100% NEW
US $4.75 -
ATMEGA8A-PU ATMEGA8A DIP-28 8-bit with 8K Bytes In-System Programmable Flash ATMEGA8 DIP Original
US $1.00 -
1PCS/LOT ATMEGA8A-AU ATMEGA8A ATMEL TQFP-32 Instead of (ATMEGA8L-8AU and ATMEGA8-16AU ) 100% NEW Original
US $1.25 -
Free Shipping 50pcs/lots ATMEGA8A-AU ATMEGA8A ATMEGA8 TQFP-32 New original IC In stock!
US $27.98 -
ATMEGA8L-8AU ATMEGA8A-AU ATMEGA8L ATMEGA8A ATMEGA8
US $0.64 -
5pcs ATMEGA8A-PU ATMEGA8A DIP-28 8-bit with 8K Bytes In-System Programmable Flash ATMEGA8 DIP Original
US $3.94 -
Free Shipping 50pcs/lot ATMEGA8A-AU ATMEGA8A ATMEL TQFP-32 100% NEW
US $25.73 -
ATMEGA8A-PU DIP-28 New home furnishings ATMEGA8A specializing in single-chip microcomputer—XJDZ2
US $74.00 -
Free Shipping 10pcs/lots ATMEGA8A-PU ATMEGA8A DIP-28 New original IC In stock!
US $8.39 -
New home furnishings ATMEGA8A-PU ATMEGA8A specializing in single-chip microcomputer—XJDZ2
US $75.00 -
10pcs/lot 100% original ATMEGA8A-AU ATMEGA8A ATMEGA8 IC MCU 8BIT 8KB FLASH 32TQFP
US $7.25 -
Free Shipping 20pcs/lot ATMEGA8A-AU ATMEGA8A ATMEL TQFP-32 100% NEW
US $10.76 -
10PCS/LOT ATMEGA8A-AU ATMEGA8A TQFP-32
US $7.50 -
ATMEGA8A-PU ATMEGA8A ATMEGA8 DIP28 Free Shipping
US $1.20 -
FREE SHIPPING 20 PCS/LOT ATMEGA8A-MU MEGA8A-MU ATMEGA8A MEGA8A QFN new&original electronics kit in stock ic
US $20.10 -
ATMEGA8A-PU DIP28 New home furnishings ATMEGA8A specializing in single-chip microcomputer—XJDZ2
US $17.00 -
ATmega8A — AU alternative ATmega8-16AU ATmega8 new original spot
US $0.87 -
5pcs/lot ATMEGA8A-AU ATMEGA8A ATMEL TQFP-32 100% NEW
US $4.55 -
Free Shipping 50pcs ATMEGA8A-AU ATMEGA8A TQFP32 NEW
US $28.00 -
5pcs ATMEGA8A-PU ATMEGA8A DIP-28 8-bit with 8K Bytes In-System Programmable Flash ATMEGA8 DIP Original
US $4.88 -
Free Shipping 50pcs/lots ATMEGA8A-PU ATMEGA8A ATMEGA8 DIP-28 New original IC In stock!
US $38.98 -
ATMEGA8A ATMEGA8A-AU
US $0.53 -
20Pcs ATMEGA8A-AU ATMEGA8A QFP32 new
US $13.68 -
McIgIcM New and original ATMEGA8A tqfp32 8-bit with Bytes In-System Programmable Flash ATMEGA8A-AU New original Free shipping
US $10.00 -
10PCS/LOT ATMEGA8A-PU MEGA8A-PU ATMEGA8 ATMEGA8A 8A-8 DIP28
US $17.10 -
20PCS/LOT ATMEGA8A-PU MEGA8A-PU ATMEGA8 ATMEGA8A 8A-8 DIP28
US $28.50 -
5PCS/LOT ATMEGA8A ATMEGA8A-PU DIP-28
US $5.89 -
5PCS/LOT ATMEGA8A ATMEGA8A-PU DIP-28
US $5.99 -
ATMEGA8A-PU ATMEGA8A
US $1.13 -
ATMEGA8A — AU ATM AVR microcontroller new original 100%—HYDZ2
US $81.20 -
ATMEGA8A — PU DIP28 imported—HYDZ2
US $121.70 -
5pcs ATMEGA8A-PU ATMEGA8A DIP-28 8-bit with 8K Bytes In-System Programmable Flash ATMEGA8 DIP Original
US $4.88 -
10pcs/lot ATMEGA8A-AU ATMEGA8A TQFP-32 100% NEW
US $5.00 -
5PCS/LOT ATMEGA8A-AU ATMEGA8A ATMEGA8 TQFP32 ATMEGA8A-AUR
US $3.61 -
5pcs ATMEGA8A-PU ATMEGA8A DIP-28 8-bit with 8K Bytes In-System Programmable Flash ATMEGA8 DIP Original
US $4.67 -
ATMEGA8A ATMEGA8A-AU microcontroller promotion ! New original !—ZYXP2
US $81.20 -
5pcs ATMEGA8A-PU ATMEGA8A DIP-28 8-bit with 8K Bytes In-System Programmable Flash ATMEGA8 DIP Original
US $7.59 -
5pcs/lot ATMEGA8A-AU ATMEGA8A ATMEGA8 TQFP32 MCU new original( diy chip )
US $3.38 -
5pcs ATMEGA8A-PU ATMEGA8A DIP-28 8-bit with 8K Bytes In-System Programmable Flash ATMEGA8 DIP Original
US $4.98 -
5PCS ATMEGA8A-AU QFP ATMEGA8A TQFP MEGA8A-AU new and original IC
US $7.06 -
ATMEGA8L-8AU ATMEGA8A-AU ATMEGA8L ATMEGA8A ATMEGA8 QFP32
US $0.75 -
Free shipping 100pcs New and original ATMEGA8A tqfp32 8-bit with Bytes In-System Programmable Flash ATMEGA8A-AU
US $65.90 -
ATMEGA8A-AU QFP32 ATMEGA8A AU microcontroller —WZSYSM
US $71.00 -
ATMEGA8A-AU QFP32 ATMEGA8A 8-bit microcontroller
US $15.60