Рассмотрим пример простого термометра на датчике DS18B20.
Требуемые детали
-
-
- Arduino Uno V3 (можно заменить на любой совместимый клон, а также на Nano)
- Arduino Uno V3 (можно заменить на любой совместимый клон, а также на Nano)
- Датчик DS18B20 типа TO92
- Резистор 4.7K ( Если нет под рукой именно такого номинала, то возьмите что-то близкое из того что есть)
- Макетная плата на 400 контактов
- Набор цветных проводов папа-папа (Для проводов питания старайтесь использовать красный и черный, чтобы не путать их с сигнальными линиями)
-
Фото 1.1
Как вы можете видеть на Фото 1.2 схема соединений крайне проста. На макетной плате создается короткий отрезок 3-х проводной шины GND — DQ — VCC. После чего на эту шину устанавливается резистор, который соединяет DQ и VCC, затем устанавливается датчик DS18B20. ( средний контакт информационный, крайние контакты — питание, + питания крайний правый, если смотреть на лицевую сторону). Подключите плату Arduino.
-
-
- Красный — Arduino Uno 5V -> VCC DS18B20
- Белый — Arduino Uno IO12 -> DQ DS18B20*
- Черный — Arduino Uno GND -> GND DS18B20
- Красный — Arduino Uno 5V -> VCC DS18B20
-
* Можно использовать другой IO на Arduino, но тогда внесите изменение в программу тоже
Фото 1.2
После того как макет собран откройте среду разработки Arduino IDE и загрузите в Arduino Uno следующую программу.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <OneWire.h> #include <DallasTemperature.h> OneWire oneWire(12); DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); sensors.begin(); } void loop(void) { sensors.requestTemperatures(); Serial.print("Temperature is : "); Serial.println(sensors.getTempCByIndex(0)); delay(3000); } |
Если загрузка программы прошла успешно, то откройте Serial Monitor на закладке Tools в Arduino IDE. Надеюсь вы увидите что-то похожее.
В окошко Serial Monitor каждые 3сек выводится текущая температура. Можете поменять задержку чтобы делать это чаще или наоборот реже.
Вернемся к программе и подробно ее разберем.
Первым делом подключаются требуемые библиотеки. Добавьте их в вашей Arduino IDE, если там их еще нет.
1 2 |
#include <OneWire.h> #include <DallasTemperature.h> |
Далее создается объект oneWire для взаимодействия со всеми устройствами OneWire, подключенными к пину IO12 на Arduino.
1 |
OneWire oneWire(12); |
Создается объект sensors для связи датчиков температуры и объекта oneWire
1 |
DallasTemperature sensors(&oneWire); |
Далее в Setup происходит инициализация Serial Monitor (на скорости 9600) и инициализация температурных датчиков. При инициализации датчиков по умолчанию выбирается максимальное 12-бит разрешение. Если требуется меньше, то это можно изменить с помощью метода setResolution()
1 2 3 4 |
void setup() { Serial.begin(9600); sensors.begin(); } |
Затем в основном рабочем цикле используется библиотечный метод requestTemperatures (), который запрашивает температуру от всех датчиков на шине.
1 |
sensors.requestTemperatures(); |
После чего функции Serial.print () обеспечивают вывод результатов. Метод getTempCByIndex() получает температуру в градусах Цельсия от датчика с индексом 0. В нашем случае датчик единственный и поэтому он имеет индекс 0.
1 2 |
Serial.print("Temperature is : "); Serial.println(sensors.getTempCByIndex(0)); |
В завершение функцией delay() устанавливается пауза в 3с, перед тем как делать следующее измерение.
1 |
delay(3000); |
Таким образом программа разобрана, но вы можете поэкспериментировать с ней, добавляя туда какие-то дополнительные функции или библиотечные методы на свое усмотрение.
На последок сделаем один короткий эксперимент. Разобранная выше программа крайне проста и не включает никаких проверок на наличие датчика на шине. Между тем плохой контакт — это очень распространенное явление в электронике. Проверьте что получится, если в процессе работы удалить датчик. Через некоторое время опять верните его назад.
На этом завершаемся.