Термометр на ардуино нано

Осваиваю микроконтроллеры, но по сколько времени много нету свободного, то делаю это ленивым путем, с помощью Arduino.

"…Arduino — это электронный конструктор и удобная платформа быстрой разработки электронных устройств для новичков и профессионалов. Платформа пользуется огромной популярностью во всем мире благодаря удобству и простоте языка программирования, а также открытой архитектуре и программному коду. Устройство программируется через USB без использования программаторов." Ну так, для справки )))

В общем мои подходы к микроконтроллерам начались еще года 4 назад. Тогда я, абсолютно не понимая что это такое, на радио рынке купил, так называемый Freeduino (клон Arduino), поскольку на оригинал для эксперимента денег зажал:

Тогда же был приобретен LCD WH1602B 16×2 экран. В общем 4 года назад все проекты закончились на вольтметре…

Не так давно зашел в радио магазин "1000 и 1 радиодеталь" в котором мой взгляд приковала витрина с Arduino, контроллер и модули… А точнее приковала их нынешняя цена, 4 года назад оно все стоило гораздо дороже! А что, 300 рублей за контроллер Arduino nano v3.0 с atmega328 на борту (на ебее еще дешевле) помоему не так уж и дорого.

Взял я этот контроллер и стал рассматривать модули. Среди всех модулей лежавших на витрине, руководствуясь принципом: "любопытство-цена" я остановился на модуле DHT11 — цифровой датчик влажности и температуры — 150р. Бэру!

DHT11:
— Питание и I/O 3-5 В
— Определение влажности 20-80% с 5% точностью
— Определение температуры 0-50 град. с 2% точностью
— Частота опроса не более 1 Гц (не более раза в 1 сек.)
— Размеры 15.5мм x 12мм x 5.5мм

Откопав в закромах тот самый 2-х строчный дисплей, собрал это все на монтажке. Установил саму программку для написания скетчей Arduino IDE (благо под линуксом работает без проблем). Сначала накидал скетч под чтение инфы с датчика через "монитор порта" на компе в среде разработки, потом прилепил и сам экран:
"
#include "DHT.h" //Библиотека для работы с датчиками DHT
#include
//Подключаем библиотеку для работы с LCD
#define DHTPIN 8 // указание пина подключения data от датчика dht11
#define DHTTYPE DHT11 //указываем тип датчика DHT 11
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // инициализируем LCD, указывая управляющие контакты
DHT dht(DHTPIN, DHTTYPE);

void setup() <
lcd.begin(16,2);
Serial.begin(9600);
Serial.println("connect…");
dht.begin();
>
void loop() <
float h = dht.readHumidity();
float t = dht.readTemperature()-2; //поправил погрешность датчика температуры

if (isnan(t) || isnan(h)) <
Serial.println("Failed to read from DHT");
> else <
Serial.print("Vlajnost: ");
Serial.print(h);
Serial.print(" % ");
lcd.print("Vlajnost: ");
lcd.print(h);
lcd.print("% ");
lcd.setCursor(0,1);
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" *C");
lcd.print("Temp: ");
lcd.print(t);
lcd.print("*C");
lcd.setCursor(0,0);
>
>
"

В общем эта заба работает. Подключил к 3 пальчиковым батарейкам и пошел мерить ))) Произвел замер температуры устройством и старым, добрым, безотказным, красным термометром и поправил в программе показания температуры. Мой DHT11 брехал на 2 градуса в плюс. Теперь буду искать чем "откалибровать" датчик влажности. Но учитывая даже тот факт, что производитель обещает вранье по показаниям влажности на 5% мои 34% процента влажности в доме меня заставили задуматься о приобретение увлажнителя воздуха… Ведь по некоторым стандартам и рекомендация комфортная влажность должна быть в пределах 45%-60%, в идеале в пределах 50%-55%… Как пишет ГОСТ влажность ниже 40% вызывает сонливость… Вот! Не я ленивая, сонная сволочь, всему вина влажность ! )))

В этом уроке мы будем использовать датчик температуры DS18B20 с Arduino UNO для создания термометра. Датчик DS18B20 является хорошим вариантом, когда в проекте с высокой точностью требуется хорошая реакция. Мы покажем как подключить DS18B20 к вашему Arduino UNO и отобразить данные температуры на ЖК-дисплее 16×2.

Обзор датчика DS18B20

Датчик DS18B20 взаимодействует с Arduino через 1-проводную шину. По определению для связи с Arduino требуется только одна линия данных (и земля).

Рабочая температура датчика колеблется от -55° C до + 125° C с точностью ± 0,5° C в диапазоне от -10° C до + 85° C. Кроме того, DS18B20 может получать питание непосредственно от линии передачи данных («паразитный источник питания») без необходимости внешнего источника питания.

Каждый DS18B20 имеет уникальный 64-битный последовательный код или адрес, который позволяет нескольким DS18B20s работать на той же однопроводной шине. Поэтому использование микропроцессора упрощает управление несколькими DS18B20, распределенными по большой площади. Приложения для этой функции включают в себя экологический контроль, системы контроля температуры в зданиях и механическом оборудовании.

Особенности DS18B20

  • Необходим только один однопроводный интерфейс для связи между микроконтроллером и датчиком.
  • Требуется только один внешний компонент: резистор 4,7 кОм.
  • Может питаться от линии передачи данных напрямую, требуя напряжения от 3,0 до 5,5 В.
  • Каждое устройство имеет уникальный 64-битный последовательный код, хранящийся на встроенном ПЗУ.
  • Может измерять температуру в диапазоне от -55° C до + 125° C (от -67° F до + 257° F).
  • Точность ± 0,5° C в диапазоне от -10° C до + 85° C.

В этом проекте используется DS18B20, который поставляется в форме температурного зонда, который является водонепроницаемым. Использование водонепроницаемого датчика расширяет возможности — датчик температуры сможет измерить температуру жидкостей, таких как вода, химикаты, чай и кофе.

Требования к комплектующим

Требования к оборудованию для вашего термометра достаточно стандартные, нам пригодятся:

  • Arduino UNO
  • ЖК-дисплей 16х2
  • Датчик температуры DS18B20
  • Провода для перемычек
  • Резистор 1K
  • Макетная плата

Схема соединения

Сделайте соединения согласно приведенной ниже схеме.

Соединяем датчик и Ардуино

  • VCC -> Arduino 5V, плюс резистор 4,7K, идущий от VCC к Data
  • Data -> Пин 7 Arduino
  • GND -> GND Arduino

Соединения для ЖК-дисплея и Arduino UNO

  • Пин 1 -> GND
  • Пин 2 -> VCC
  • Пин 3 -> Arduino Пин 3
  • Пин 4 -> Arduino Пин 33
  • Пин 5 -> GND
  • Пин 6 -> Arduino Пин 31
  • Пин 7-10 -> GND
  • Пин 11 -> Arduino Пин 22
  • Пин 12 -> Arduino Пин 24
  • Пин 13 -> Arduino Пин 26
  • Пин 14 -> Arduino Пин 28
  • Пин 15 -> VCC через резистор 220 Ом
  • Пин 16 -> GND

Подключите потенциометр, как показано выше, к контакту 3 на ЖК-дисплее, для управления контрастностью.

Этот проект работает на температурах до 125° C. В случае наличия некоторого диссонанса в значении показанной температуры дважды проверьте соединения с резистором, подключенным к DS18B20. После соединения всего, что описано выше, мы можем перейти к программированию.

Исходный код для термометра

Перед загрузкой исходного кода вам нужно настроить две библиотеки, необходимые для запуска этого кода в среде Arduino.

  • Первая библиотека называется — OneWire (скачать).
  • Вторая библиотека называется — DallasTemperature (перейти на GitHub).

После скачивания обеих библиотек переместите файлы в папку библиотек Arduino по умолчанию. Затем скопируйте код в IDE Arduino и загрузите его после двойной проверки правильности подключения вашего датчика.

Примерно это выглядит так:

Мы смогли измерить температуру до 100°C с помощью этого датчика! Он очень отзывчив.

После того, как вы создали проект, потестируйте устройство, погрузив датчик в горячую и холодную воду.

#include «DHT.h»
#define DHTPIN 2
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
unsigned long a;
void setup() <
Serial.begin(9600);
Serial.setTimeout(4);
dht.begin();
>

void loop() <
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) <
Serial.println(«Failed to read from DHT sensor!»);
return;
>
if (Serial.available())
< a = Serial.parseInt();
if (a==1) <
float hi = dht.computeHeatIndex(f, h);

Serial.print(«Humidity: „);
Serial.print(h);
Serial.print(“ % »);
Serial.print(«Temperature: „);
Serial.print(t);
Serial.print(“ *C „);
>
>
>


С “железной» частью разобрались, теперь можно приступать к написанию android-приложения. Проще всего его сделать используя среду визуальной разработки android-приложений App Inventor 2. Работает она из браузера, устанавливать ничего не нужно. Разберется любой ардуинщик. На скриншоте список элементов, используемых в приложении, их рассположение и некоторые характеристики.

Само приложение тоже довольно простое и выглядит так:

Состоит приложение всего из 5 блоков, два из которых (Listpicker) отвечают за подключение к одному из сопряженных bluetooth устройств. Screen1 выполняется только при запуске программы, доставая из памяти телефона мак-адрес последнего подключенного устройства, а также запуская определение адреса местоположения смартфона. Clock1 отвечает за смену показаний секундомера и проверяет, поступилп ли новая информация о температуре. Button1 отправляет запрос на ардуино для обновления информации, если понадобится.
Ну и в заключении про внешний вид bluetooth/instagram термометра. Работает этот девайс у меня на балконе, поэтому воздейстрию природных явлений не подвержен, а следовательно и корпус ему не к чему.Возможно, если найдется какое-то простое решение для корпуса, когда-нибудь установлю его за окном, А пока выглядит bluetooth/instagram термометр так:

Ну а андроид-приложение получилось таким:

P.S. Для тех, кто вообще никогда не сталкивался с созданием приложений в App Inventor 2, я сделал видео с чуть более подробным описанием процесса создания этого приложения (для просмотра нужно перейти на ютуб).

Оцените статью
Topsamoe.ru
Добавить комментарий