Для реализации данного проекта нам понадобится:
Arduino uno: http://ali.pub/1th4sk
Датчик температуры ds18b20: http://ali.pub/2c3kv3
Аналоговый вольтметр 0-5v: http://ali.pub/2c3l66
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Для начала давайте ознакомимся или освежим память о датчике ds18b20.
DS18B20 это интегральный датчик температуры с цифровым последовательным интерфейсом 1-Wire. Датчик с уникальными параметрами и функциональными возможностями. Датчику DS18B20 свойственны:
- Высокая точностью измерения, погрешность не превышает 0,5 °C. Датчик откалиброван при изготовлении, дополнительной калибровки не требует.
- Разрешающая способность задается программно и достигает 0,0625 °C при максимальном разрешении 12 бит.
- Широкий диапазон измерения температуры -55 … + 125 °C.
- Датчик осуществляет преобразование температуры в цифровой код, т.е. дополнительного АЦП не требует.
- Передача информации осуществляется по последовательному протоколу 1-Wire, требуется только три провода для подключения термодатчика к микроконтроллеру.
Схема подключения датчика :
Из данной схемы видим, что обязательно нужно подтягивать резистором на 4.7кОм к +5В питания, иначе датчик работать будет неправильно.
Теперь давайте поговорим о Аналоговом вольтметре:
Данный вольтметр имеет низкую стоимость. Он измеряет постоянное напряжение в диапазоне от 0 до 5 В. Он очень прост в использовании, достаточно просто подключить контакты к + и – источника напряжения, и данные будут отображены стрелкой на вольтметре.
Данный вольтметр очень хорошо подходит для работы с arduino. Так как в ардуино осуществлена 5 вольтовая логика. Мы с ардуино можем легко вывести любое напряжение от 0-5В используя ШИМ (PWM) сигнал Ардуино. Таким образом мы можем контролировать положение стрелки на циферблате по желанию. За счет этого мы можем строить различные примеры. Например показания, температуры как в данном случае, влажности, отображение времени, и тому подобное.
Для того чтобы управлять вольтметром, как я уже описал ранее мы будем использовать шим (PWM) сигнал Arduino. Для передачи данных вольтметру мы используем команду analogWrite и записываем значение от 0 до 255. И так если мы подадим значение 0 то и вольтметр покажет 0В, а если напишем 255 то вольтметр покажет +5В . В итоге если мы хотим чтоб вольтметр показывал стрелкой +2,5В нам нужно подать команду analogWrite(9,128). Где 9 это номер пина, а 128 это размер ШИМ сигнала, тоесть половина 255.
Ну вроде разобрались как это все работает, теперь давайте перейдем к переделки вольтметра в термометр.
Для этого подключим все по данной схеме:
Если будете повторять все также как делал я, то здесь я предоставлю нарисованный диапазон температуры под вольтметр.
Данный размер циферблата нужно будет подогнать в редакторе под размер вольтметра. Размер можно узнать померив циферблат вольтметра линейкой.
После того как установили циферблат и все подключили как по схеме, давайте зальем скетч:
#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); int MIN_TEMP = 16; int MAX_TEMP = 28; void setup() { pinMode(9,OUTPUT); Serial.begin(9600); sensors.begin(); } void loop() { float temperature = getTemperature(); int voltage = temperatureToPWM(temperature); analogWrite(9,voltage); delay(500); } float getTemperature() { float temperature =0; sensors.requestTemperatures(); temperature = sensors.getTempCByIndex(0); Serial.println(temperature); return temperature; } int temperatureToPWM(float temperature) { float temp=0; float voltage = 0; temp = temperature*10; voltage = map(temp,MIN_TEMP*10,MAX_TEMP*10,0,250); return voltage; }
Ссылка на скачивание скетча: https://yadi.sk/d/6MuCYwC53T9h3C
Еще нам понадобится библиотеки для работы с датчиком.
Библиотеку OneWire можно скачать в стандартном репозитории.
А вот библиотеку Arduino-Temperature-Control-Library-master моно будет скачать с github https://github.com/milesburton/Arduino-Temperature-Control-Library
Код очень прост. Сначала мы считываем тепературу с датчика ds18b20. Далее мы передаем значение температуры в функцию temperatureToPWM. Эта функция преобразует температуру в значения ШИМ (PWM) от 0 до 255 с помощью функции map ( иными словами маштабирует). Далее все что нам нужно это записать эти значения ШИМ в вольтметр.
Если хотите поставить другой диапазон измеряемой температуры, нужно всего лишь поменять значения в переменных MIN_TEMP и MAX_TEMP.
Ну думаю на этом все. Визуальная демонстрация работы будет в видео: