Arduino и термистор

Содержание:

Что измеряет сенсор

Давление — некая физическая величина численно равная перпендикулярно направленной силе действующей на единицу площади поверхности. Сам датчик можно представить своеобразными очень чувствительными весами. Последнее замечание сделано по причине того, что и вода, и газы тоже имеют свою массу, которая влияет на поверхность под ними. На практике, за счет указанного фактора, можно определить глубину погружения (чем ниже, тем больше вес слоя воды) или высоту подъема в атмосферу (чем выше — тем меньше плотность, а значит и слабее воздействие). Кроме того, в отношении давления воздуха не стоит забывать о погодных колебаниях. Резкое падение названой характеристики атмосферы — к дождю или буре.

Опять же, насчет газов и частично жидкостей. Их можно сжимать. Но, уплотненные вещества будут стремиться вернуться в первоначальное состояние. И чем сильнее компрессия, тем мощнее будет конечное давление газа или жидкости внутри сосуда их содержащего.

Собственно, детектор Ардуино о котором идет речь, и измеряет силу воздействия на единицу площади сенсорного элемента прибора. Правда, в большинстве выпускаемых моделей, описанное — не все их функциональные возможности. Бонусом, у многих идет замер температуры окружающей среды, а у некоторых еще и влажности или ускорения.

Программный код термостата Arduino

Аналогично, как и в схеме подключения, код каждого термостата Arduino будет немного отличаться. Его нужно адаптировать к потребностям тепловой сети.

Эту схему можно модернизировать, например, добавить такие функции:

  1. Датчик движения для включения и выключения источника нагрева, в зависимости от присутствия жителей.
  2. Режим «АВТО», автоматическое ведение тепловым процессом.
  3. Внешние датчики для измерения температуры в помещении в разных местах.
  4. LED-экран для контроля температуры.

Таким образом, функциональные возможности терморегулятора с Arduino огромны. Они могут учесть, практически все, внутридомовые системы отопления. Современная промышленность наладила выпуск комплектующих изделий для такой схемы управления, а используя возможности Arduino и фреймворка MySensors, домашняя «умная» автоматики может быть реализована в каждом доме своими руками.

Исходный код программы

Полный код программы представлен в конце статьи, здесь же сначала рассмотрим его наиболее важные фрагменты.

Для выполнения математических операций в программе мы должны подключить заголовочный файл библиотеки “#include <math.h>”, а для работы с ЖК дисплеем – подключить библиотеку “#include <LiquidCrystal.h>». Далее в функции setup() мы должны инициализировать ЖК дисплей.

Arduino

Void setup(){
lcd.begin(16,2);
lcd.clear();
}

1
2
3
4

Voidsetup(){

lcd.begin(16,2);

lcd.clear();

}

Значение температуры мы будем рассчитывать в программе с помощью рассмотренного выше уравнения Стейнхарта-Харта.

Arduino

float a = 1.009249522e-03, b = 2.378405444e-04, c = 2.019202697e-07;
float T,logRt,Tf,Tc;
float Thermistor(int Vo) {
logRt = log(10000.0*((1024.0/Vo-1)));
T = (1.0 / (A + B*logRt + C*logRt*logRt*logRt));// рассчитываем значение температуры в кельвинах по формуле Stein-Hart
Tc = T — 273.15; // переводим температуру из кельвинов в градусы Цельсия
Tf = (Tc * 1.8) + 32.0; // переводим температуру в шкалу Фаренгейта
return T;
}

1
2
3
4
5
6
7
8
9

floata=1.009249522e-03,b=2.378405444e-04,c=2.019202697e-07;

floatT,logRt,Tf,Tc;

floatThermistor(intVo){

logRt=log(10000.0*((1024.0Vo-1)));

T=(1.0(A+B*logRt+C*logRt*logRt*logRt));// рассчитываем значение температуры в кельвинах по формуле Stein-Hart

Tc=T-273.15;// переводим температуру из кельвинов в градусы Цельсия

Tf=(Tc*1.8)+32.0;// переводим температуру в шкалу Фаренгейта

returnT;

}

Также в программе мы считываем значение с аналогового входа платы Arduino.

Arduino

lcd.print((Thermistor(analogRead(0))));

1 lcd.print((Thermistor(analogRead())));

Внешний вид работы нашего проекта показан на следующем рисунке – на ЖК дисплее выводятся значения температуры в кельвинах, градусах Цельсия и по шкале Фаренгейта.

Схему можно запитать по кабелю USB или использовать адаптер на 12 В.

Далее представлен полный текст программы.

Arduino

#include <math.h>
#include «LiquidCrystal.h»
LiquidCrystal lcd(44,46,40,52,50,48);
float A = 1.009249522e-03, B = 2.378405444e-04, C = 2.019202697e-07;
float T,logRt,Tf,Tc;
float Thermistor(int Vo) { // функция для расчета значения температуры
logRt = log(10000.0*((1024.0/Vo-1)));
T = (1.0 / (A + B*logRt + C*logRt*logRt*logRt)); // рассчитываем значение температуры в кельвинах по формуле Стейнхарта-Харта
Tc = T — 273.15; // переводим температуру из кельвинов в градусы
Tf = (Tc * 1.8) + 32.0; // переводим температуру в шкалу Фаренгейта
return T;
}
void setup(){
lcd.begin(16,2);
lcd.clear();
}
void loop()
{
lcd.setCursor(0,0);
lcd.print(«Temp:»);
lcd.print((Thermistor(analogRead(0))));
lcd.print(«k «);

lcd.setCursor(0,1);
lcd.print((Tc));
lcd.print(» C ;»);
lcd.setCursor(9,1);
lcd.print((Tf));
lcd.print(» F»);
delay(800);
}

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
29
30
31

#include <math.h>
#include «LiquidCrystal.h»

LiquidCrystallcd(44,46,40,52,50,48);

floatA=1.009249522e-03,B=2.378405444e-04,C=2.019202697e-07;

floatT,logRt,Tf,Tc;

floatThermistor(intVo){// функция для расчета значения температуры

logRt=log(10000.0*((1024.0Vo-1)));

T=(1.0(A+B*logRt+C*logRt*logRt*logRt));// рассчитываем значение температуры в кельвинах по формуле Стейнхарта-Харта

Tc=T-273.15;// переводим температуру из кельвинов в градусы

Tf=(Tc*1.8)+32.0;// переводим температуру в шкалу Фаренгейта

returnT;

}

voidsetup(){

lcd.begin(16,2);

lcd.clear();

}

voidloop()

{

lcd.setCursor(,);

lcd.print(«Temp:»);

lcd.print((Thermistor(analogRead())));

lcd.print(«k «);

lcd.setCursor(,1);

lcd.print((Tc));

lcd.print(» C ;»);

lcd.setCursor(9,1);

lcd.print((Tf));

lcd.print(» F»);

delay(800);

}

Программа

Программа приведена в таблице 1.

Таблица 1.

Первое отличие в том, что заданы порты для управления нагревателями. Это порты D9-D12, заданы они здесь:

pinMode(12, OUTPUT);

pinMode(11, OUTPUT);

pinMode(10, OUTPUT);

pinMode(9, OUTPUT);

Можно выбрать другие свободные цифровые порты, после подключения индикатора остались еще D8 и D13. Но автор выбрал именно эти: D9, D10, D11, D12. Второе отличие в том, что для управления нагревателями используется компараторная функция if. В строках:

if(temp < -15)digitalWrite(12, HIGH);

if(temp > -15)digitalWrite(12, LOW);

if(tempi < 1)digitalWrite(11, HIGH);

if(tempi > 1)digitalWrite(11, LOW);

if(temp2 < 20)digitalWrite(10, HIGH);

if(temp2 > 20)digitalWrite(10, LOW);

if(temp3 < 10)digitalWrite(9, HIGH);

if(temp3 > 10)digitalWrite(9, LOW);

В этих строках указывается при какой температуре, какой логический уровень должен быть на соответствующем порту. Например, при температуре первого датчика (Т1) ниже -15°С на порту D12 будет логическая единица. При температуре второго датчика (Т2) ниже 1°С на порту D11 будет логическая единица.

При температуре третьего датчика (ТЗ) ниже 20°С на порту D10 будет логическая единица. При температуре четвертого датчика (Т4) ниже 10°С на порту D9 будет логическая единица. Конечно, температуры можно задать и совсем другие, — любые, которые нужны для конкретного применения данного прибора.

Более того, уже в готовом устройстве, при необходимости их легко изменить. Для этого нужно подключить персональный компьютер к USB-порту платы ARDUINO UNO и загрузить программу с другими данными по температурным порогам. В принципе, для этого можно предусмотреть на корпусе готового прибора разъем USB.

Обычно, в «типовом» терморегуляторе есть петля гистерезиса, то есть, цепь, которая создает разницу между тепера-турой включения нагревателя и температурой его выключения. Это нужно для того чтобы нагреватель включался / выключался не очень часто

Особенно это важно, если нагревателем управляет электромагнитное реле

Потому что контакты реле не рассчитаны на такой режим работы, и могут быстро выйти из строя от подгорания из-за искрения. Но гистерезис вносит погрешность в работу термостата. Здесь было решено не создавать гистерезис, а для того чтобы контакты реле переключались не слишком часто просто замедлить работу прибора. Для этого в строке:

delay(3000);

время индикации увеличено до трех секунд. В результате, измерения повторяются с периодом в три секунды, и в любом случае, реле не может переключаться чаще, чем один раз в три секунды.

Датчики DS18B20

  • Диапазон измеряемых температур: -55 … + 125° C
  • Разрешение: 0,1° C
  • Калибровка не требуется, датчики калибруются в процессе производства, точность ± 0,5° C (в диапазоне от -10 до 85° C)
  • Частота измерения примерно каждые 3 секунды
  • Датчики подключаются трехжильным кабелем (внешнее питание)
  • Выводы (на рис. ниже) GND — синий, линия данных 1-Wire — зеленый, VDD — оранжевый

Также возможно подключение датчиков двумя проводами (паразитное питание)

Обратите внимание, что температура выше 100° C не может быть измерена с помощью паразитного питания

Программа микроконтроллера позволяет комбинировать оба варианта питания датчиков.

Подберите сопротивление резистора PULLUP (от 4K7 до 1K) в соответствии с длиной кабеля. Экранированный телефонный кабель (длиной 45 м), как на рисунке выше, с резисторами PULLUP сопротивлением 1 кОм работает надежно.

Общие принципы работы датчика температуры DS18B20

DS18B20 представляет собой однопроводный цифровой датчик температуры от компании Maxim IC. Выдает значение температуры в градусах Цельсия, способен измерять температуру с 9-12 битной точностью в диапазоне от -55 до 125 градусов Цельсия с точностью +/-0.5 градуса. Каждый датчик DS18B20 имеет 64-битный уникальный номер (Serial number), вытравленный на корпусе датчика, что позволяет подключать огромное число подобных датчиков к одной шине данных. С помощью данного датчика можно измерять температуру воздуха, жидкостей и земли. В некоторых магазинах датчик продается в комплекте с резистором сопротивлением 4,7 кОм.

Особенности датчика DS18B20:

  • однопроводный интерфейс (1-Wire interface), что позволяет использовать для подключения датчика только один контакт микроконтроллера (в нашем случае платы Arduino Uno);
  • каждый датчик имеет 64-битный уникальный последовательный код (номер), хранящийся в ПЗУ (ROM) датчика;
  • способность подключения к одной шине множества датчиков позволяет создавать на его основе приложения для распределенного (в пространстве) измерения температуры;
  • не требует никаких внешних компонентов;
  • может быть запитан от линии данных;
  • поддерживает напряжение питания от 3.0V до 5.5V;
  • способен измерять температуру в диапазоне от –55°C до +125°C (–67°F до +257°F) с точностью ±0.5°C (в диапазоне от –10°C до +85°C);
  • можно выбрать разрешающую способность (разрешение) датчика: от 9 до 12 бит;
  • преобразует значение температуры в 12-битное цифровое слово длительностью 750 мс (max.);
  • можно настраивать энергонезависимую (nonvolatile, NV) сигнализацию (сигнал тревоги);
  • опции сигнала тревоги позволяют идентифицировать и определить адрес датчика, чья температура не соответствует запрограммированным границам;
  • может применяться в устройствах термоконтроля, промышленных системах, потребительских продуктах, термометрах и в любых других системах, где требуется измерение температуры.

Более подробную информацию о принципах работы датчика DS18B20 вы можете посмотреть в следующей статье на нашем сайте.

Подключение потенциометра к платам Ардуино

Схема подключения

Подключение потенциометра к ардуино выполняется в соответствии со схемой, представленной на рисунке:

Для этого три вывода потенциометра необходимо соединить с указанными выводами платы:

  • Черный – GND;
  • Красный – питание 5В;
  • Средний – от центрального вывода к аналоговому входу А0.

Изменяя положение вала подключенного потенциометра, происходит изменение параметра сопротивления, которое вызывает изменение показателя на нулевом пине платы ардуино. Считывание полученного значения напряжения аналогового импульса происходит в скетче с помощью команды analogRead ().

В плату Ардуино встроен аналого-цифровой преобразователь, способный  считывать напряжение и переводить его в цифровые показатели со значением от нуля до 1023. При повороте указателя до конечного значения в одном из двух возможных направлений, напряжение на пине равно нулю, и, следовательно, напряжение, которое будет генерироваться составляет 0 В. При повороте вала до конца в противоположном направлении на пин поступает напряжение величиной 5В, а значит числовое значение будет составлять 1023.

Пример проекта

Примером реализации схемы подключения потенциометра может стать макетная плата с подключенным переменным резистором и светодиодом. При помощи потенциометра будет выполняться управление уровнем яркости свечения.

Для проведения работ следует подготовить такие детали:

  • 1 плату Arduino Uno
  • 1 беспаячную макетную плату
  • 1 светодиод
  • 1 резистор с сопротивлением 220 Ом
  • 6 проводов «папа-папа»
  • 1 потенциометр.

Для использования меньшего количества проводов от макетной платы к контроллеру следует подключить светодиод и потенциометр проводом земли к длинному рельсу минуса.

Пример скетча

В этом примере важно понимать, что яркость свечения светодиода управляется не напряжением подаваемым с потенциометра, а кодом

  #define PIN_LED     11  #define PIN_POT     A0     void setup()  {    // Пин, к которому подсоединяется светодиод определяем как выход    pinMode(PIN_LED, OUTPUT);       // Пин с переменным резистором является входом    pinMode(PIN_POT, INPUT);  }     void loop(){    // Определяем 2 переменные типа int    int rotat, brightn;         // Считывание в переменную rotat напряжения с переменного резистора:    // микроконтроллер будет выдавать числа от 0 до 1023    // пропорциональны положению поворота вала    rotat = analogRead(PIN_POT);       // Преобразуем значение в яркость. Для этого делим rotat на 4, что с учетом округления даст нам число от 0 до 255. Именно это число мы подадим на шим-выход, с помощью которого можно управлять яркостью.      brightn = rotat / 4;       // Запись шим значения яркости на светодиод    analogWrite(PIN_LED, brightn);  }  
  • https://meanders.ru/chto-takoe-potenciometr-princip-raboty-shema-i-tipy.shtml
  • https://instrument.guru/elektronika/tipy-potentsiometrov-i-shema-podklyucheniya-datchika.html
  • https://arduinomaster.ru/datchiki-arduino/potentsiometr-arduino/

Схема на датчике DHT11

Выбор этого средства измерения температуры/влажности обусловлен его популярностью, дешевизной и надежностью — такой набор характеристик делает датчик отличным вариантом для домашнего проекта. DHT11 состоит из:

  • определяющего влажность резистора;
  • измеряющего температуру термистора.

Информация с выходов датчика идет на контроллер, в нашем случае это Ардуино.

Сенсор имеет следующие характеристики:

  • рабочее напряжение — 3–5 В;
  • питание — от источника в 2.5 мА;
  • диапазон измерения влажности окружающей среды — 20–80% с погрешностью в 5%;
  • диапазон измеряемых температур — 0–50 °С с погрешностью в 2%;
  • частота измерений — раз в секунду;
  • габариты — 15 на 15.15 на 5.5 мм.

На корпусе имеются четыре выхода, благодаря чему можно подключать сенсор к различным измерительным приборам. В домашней схеме будут использоваться лишь три:

  • DATA;
  • VCC;
  • GND.

В продаже встречаются и датчики DHT11 по отдельности, и в составе готового модуля. Рекомендуется найти последний вариант — он удобнее

В разных модулях внешний вид и конфигурация выходов могут различаться, но принцип везде одинаков, следует лишь обращать внимание на распиновку

Методика взаимодействия

Датчик транслирует цифровой сигнал с закодированными в нем значениями влажности и температуры. Оба параметра передаются одновременно.

Связь происходит по следующему принципу:

  • микроконтроллер отправляет сенсору запрос проверки состояния;
  • DHT11 меняет битовую кодировку и отдает на Arduino результат;
  • если формат запроса-ответа согласован с обеих сторон, на управляющую плату поступает пятибайтовый отчет о влажности и температуре.

Состав отчета:

  • первые два байта — уровень температуры;
  • вторые два — влажность;
  • пятый байт — нужная для предотвращения ошибки измерений и передачи контрольная сумма.

Программная часть

Чтобы собранная метеостанция на базе Ардуино заработала, понадобится подходящий скетч.

Скетч можно скачать здесь: https://cloud.mail.ru/public/JDX7/HJ94PKwoe

Принципиальная схема

Так будет выглядеть схема сборки станции:

После сборки, прошивки и запуска на экране станет отображаться влажность и температура. Дисплей покажет:

  • тепловой индекс — HiX;
  • температуру воздуха — Т (temperature, в градусах);
  • влажность — H (Humidity, в процентах).

Используется I2C-дисплей 1602.

Недостатки

Приведенная конструкция имеет один минус — при взаимодействии с экраном цифры округляются до целых. Для домашних вычислений это некритично, но при необходимости получить более точные величины придется заменить датчик на более продвинутый DHT22. Его поддержка в скетче есть по умолчанию.

Теперь рассмотрим образец метеостанции под Ардуино на основе DHT22 и с дополнительной функцией — измерением давления.

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема содержит такие элементы как плата Arduino, ЖК дисплей, реле (Relay) и терморезистор (термистор). При повышении температуры реле будет включаться, а при понижении температуры ниже заданного порога – выключаться. Реле управляет цепью электрической лампочки – оно выполняет роль домашнего устройства, управляемого в зависимости от температуры. Весь процесс измерения температуры и включения/выключения лампочки выполняется платой Arduino. Также плата Arduino выводит информацию о температуре и статусе системы на экран ЖК дисплея.

Настройка пределов

Каждый датчик имеет свои собственные регулируемые пределы, верхний и нижний . Верхний и нижний пределы определяют гистерезис (Hi — Lo = гистерезис). Прокрутите меню до выбора необходимого предела и нажмите TlS примерно на 2 секунды. Как только значение начнет мигать, его можно будет изменить: TlP (+), TlM (-).

Удерживание кнопки ускоряет увеличение / уменьшение значения. Диапазон пределов и разрешения такой же, как и для температуры, такое же ограничение действует и при отображении ниже -9,9 или выше 99,9 ° C (без десятичных знаков). Используйте кнопку TLS, чтобы сохранить значение (в EEPROM) и завершить настройку.

Как подключить фоторезистор к Ардуино

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • 1 фоторезистор;
  • 1 светодиод;
  • 2 резистора 220 Ом;
  • провода «папа-папа».

На этом занятии мы соберем электрическую схему «умного» светильника. Если на предыдущем занятии мы с помощью потенциометра включали и изменяли яркость светодиода, то сегодня мы будем использовать фоторезистор в схеме для автоматического включения светодиода. Фоторезистор будет играть роль переменного сопротивления, которое изменяет напряжение на аналоговом входе A0.

Схема сборки светильника с фоторезистором на Ардуино

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

Скетч. Светильник с автоматическим включением

// Присваиваем имя для аналогового входа A0 с фоторезистором
#define SENSOR A0
// Присваиваем имя для порта 9 со светодиодом
#define LED 9

// Присваиваем имя для цифрового значения аналогового входа A0
// unsigned int округляет значения и принимает только положительные числа
unsigned int value = 0;
 
void setup() {
  // Пин 9 со светодиодом будет выходом (англ. «output»)
  pinMode(LED, OUTPUT);
  // Пин A0 с фоторезистором будет входом (англ. «input»)
  pinMode(SENSOR, INPUT);
}
 
void loop() {
  // Считываем значение с фоторезистора на аналоговом входе A0
  value = analogRead(SENSOR);
  
  // Если значение value на входе A0 меньше 500, включаем светодиод
  if (value<500) digitalWrite(LED, HIGH);

  // В противном случае (если value>500), выключаем светодиод 
  if (value>500) digitalWrite(LED, LOW);
}

Пояснения к коду:

  1. для удобства, в первой строчке программы мы присвоили имя для аналогового входа A0 с помощью функции ;
  2. оператор указывает, что значение может принимать только положительное целое число, а начальное значение равно нулю;
  3. условный оператор позволяет определить действие при истинном условии. Оператор позволяет определить действие, когда истинное условие ложно.

Скетч. Умный светильник на Ардуино

// Присваиваем имя для аналогового входа A0 с фоторезистором
#define SENSOR A0
// Присваиваем имя для порта 9 со светодиодом
#define LED 9

// Присваиваем имя для цифрового значения аналогового входа A0
// unsigned int округляет значения и принимает только положительные числа
unsigned int value = 0;

// Назначаем переменную data, которую будем использовать в скетче
int data;
 
void setup() {
  // Пин 9 со светодиодом будет выходом (англ. «output»)
  pinMode(LED, OUTPUT);
  // Пин A0 с фоторезистором будет входом (англ. «input»)
  pinMode(SENSOR, INPUT);
}
 
void loop() {
  // Считываем значение с фоторезистора на аналоговом входе A0
  value = analogRead(SENSOR);
  
  // Полученные значения на аналоговом входе A0 делим на 4
  data = value / 4;
  
  // Включаем светодиод с полученной ранее мощностью - от 0 до 255
  analogWrite(LED, data);
}

Пояснения к коду:

  1. в этом скетче мы добавили переменную , которая равна деленная на 4;
  2. пин 9 мы использовали, как аналоговый выход, который плавно изменяет яркость свечение светодиода в зависимости от значения .

Подключение фоторезистора к ардуино

В проектах arduino фоторезистор используется как датчик освещения. Получая от него информацию, плата может включать или выключать реле, запускать двигатели, отсылать сообщения. Естественно, при этом мы должны правильно подключить датчик.

Схема подключения датчика освещенности к ардуино довольна проста. Если мы используем фоторезистор, то в схеме подключения датчик реализован как делитель напряжения. Одно плечо меняется от уровня освещённости, второе –  подаёт напряжение на аналоговый вход. В микросхеме контроллера это напряжение преобразуется в цифровые данные через АЦП. Т.к. сопротивление датчика при попадании на него света уменьшается, то и значение падающего на нем напряжения будет уменьшаться.

В зависимости от того, в каком плече делителя мы поставили фоторезистор, на аналоговый вход будет подаваться или повышенное или уменьшенное напряжение. В том случае, если одна нога фоторезистора подключена к земле, то максимальное значение напряжения будет соответствовать темноте (сопротивление фоторезистора максимальное, почти все напряжение падает на нем), а минимальное – хорошему освещению (сопротивление близко к нулю, напряжение минимальное). Если мы подключим плечо фоторезистора к питанию, то поведение будет противоположным.

Сам монтаж платы не должен вызывать трудностей. Так как фоторезистор не имеет полярности, подключить можно любой стороной, к плате его можно припаять, подсоединить проводами с помощью монтажной платы или использовать обычные клипсы (крокодилы) для соединения. Источником питания в схеме является сам ардуино. Фоторезистор подсоединяется одной ногой к земле, другая подключается к АЦП платы (в нашем примере – АО). К этой же ноге подключаем резистор 10 кОм. Естественно, подключать фоторезистор можно не только на аналоговый пин A0, но и на любой другой.

Несколько слов относительно дополнительного резистора на 10 К. У него в нашей схеме две функции: ограничивать ток в цепи и формировать нужное напряжение в схеме с делителем. Ограничение тока нужно в ситуации, когда полностью освещенный фоторезистор резко уменьшает свое сопротивление. А формирование напряжения – для предсказуемых значений на аналоговом порту. На самом деле для нормальной работы с нашими фоторезисторами хватит и сопротивления 1К.

Меняя значение резистора мы можем “сдвигать” уровень чувствительности в “темную” и “светлую” сторону.  Так, 10 К даст быстрое переключение наступления света. В случае 1К датчик света будет более точно определять высокий уровень освещенности.

Если вы используете готовый модуль датчика света, то подключение будет еще более простым. Соединяем выход модуля VCC с разъемом 5В на плате, GND – c землей. Оставшиеся выводы соединяем с разъемами ардуино.

Если на плате представлен цифровой выход, то отправляем его на цифровые пины. Если аналоговый – то на аналоговые. В первом случае мы получим сигнал срабатывания – превышения уровня освещенности (порог срабатывания может быть настроен с помощью резистора подстройки). С аналоговых же пинов мы сможем получать величину напряжения, пропорциональную реальному уровню освещенности.

Дисплей, управление, меню

Термостат работает во всем температурном диапазоне датчиков: от -55 до 125° C с разрешением до одного десятичного знака. Однако отображение на 3-х значном дисплее имеет некоторые ограничения. Температуры ниже -9,9 и выше 99,9° C отображаются без десятичных знаков.

Если датчик выходит из строя (нарушение связи, CRC не соответствует), вместо температуры будет отображаться ошибка , а выход A3 будет иметь высокий уровень. Количество пунктов меню определяется количеством найденных датчиков (при поиске).

Режим анимация всегда запускается при включении термостата. Температура каждого датчика отображаются одна за другой. Перед показом каждой температурой сначала отображается номер датчика, примерно 1,5 сек, а затем 5 сек температура.

Номера датчиков от 10 до 15 отображаются в формате HEX, то есть латинскими буквами от A до F. Если подключен только один датчик, то анимация отсутствует и отображается только его температура и пределы.

Нажмите любую кнопку, чтобы переключиться в ручной режим просмотра. Что касается датчика, то это 3 пункта меню: температура, верхний предел, нижний предел. Используйте кнопки TIP / TIM для прокрутки (вперед / назад) в круговом меню.

Используйте кнопку TIP или TIM для перемещения пункта меню. Пока кнопка нажата, отображается заголовок, пока она не будет отпущена, далее отображается соответствующее значение. Постоянное удерживание TIP / TIM приведет к прокрутке заголовков.

Если нам нужно посмотреть заголовок текущего отображаемого значения, то удерживайте кнопку TlS.
Если при отображении предела удерживать кнопку S в течение некоторого времени, то начнется его изменение.

И когда на дисплее отображается температура, удерживание кнопки TlS в течение более длительного времени вернет анимацию.

Датчик на Arduino Uno и плате расширения Troyka Shield

Рассмотрим еще одну погодную станцию. Ее особенности:

  • использование цифрового метеосенсора troyka;
  • термометр DS18B20;
  • барометр Troyka V2.
  • хранение данных на карточке MicroSD — для удобства их последующего анализа на любом устройстве.

Компоненты

Для проекта требуются:

  • контроллер Arduino Uno;
  • плата расширения Troyka Shield;
  • метеодатчик;
  • четырехразрядный цифровой дисплей-индикатор;
  • барометр с troyka-блоком подтяжки;
  • картридер и карточка micro-SD.

Порядок сборки

Система собирается по шагам.

  1. Установить плату расширения на Ардуино.
  2. Подключить к пинам шины I2C метеодатчик.
  3. Подсоединить дисплей в разъемы e-f на схеме. Пин CS идет на пин 10 микрокомпьютера Ардуино.
  4. Барометр вставляется в слот B, пины шины I2C.
  5. Термометр подключается в слот C, пин 4. Для его работы потребуется дополнительный модуль подтяжки.
  6. И, наконец, к слоту D и на пин 8 подключается картридер.

Описание пинов Arduino Mega 2560

Цифровые пины платы Mega

Пины с номерами от 0 до 53 являются цифровыми. Это означает, что вы можете считывать и подавать на них только два вида сигналов: HIGH и LOW. С помощью ШИМ также можно использовать цифровые порты для управления мощностью подключенных устройств.

Пин Адресация Специальное назначение ШИМ
RX (Serial)
1 1 TX (Serial)
2 2 Вход для прерываний 0 ШИМ
3 3 Вход для прерываний 1 ШИМ
4 4 ШИМ
5 5 ШИМ
6 6 ШИМ
7 7 ШИМ
8 8 ШИМ
9 9 ШИМ
10 10 ШИМ
11 11 ШИМ
12 12 ШИМ
13 13 Встроенный светодиод ШИМ
14 14 TX (Serial3)
15 15 RX (Serial3)
16 16 TX (Serial2)
17 17 RX (Serial2)
18 18 TX (Serial1)
Вход для прерываний 5
19 19 RX(Serial1)
Вход для прерываний 4
20 20 I2C SDA
Вход для прерываний 3
21 21 I2C SCL
Вход для прерываний 2
22-43 22-43
44 44 ШИМ
45 45 ШИМ
46 46 ШИМ
47 47
48 48
49 49
50 50 MISO
51 51 MOSI
52 52 SCK
53 53 SCL

Аналоговые пины платы

На платформе Mega2560 имеется 16 аналоговых входов, каждый разрешением 10 бит (т.е. может принимать 1024 различных значения). Стандартно выводы имеют диапазон измерения до 5 В относительно земли, тем не менее имеется возможность изменить верхний предел посредством вывода AREF и функции .

Пин Адресация Специальное назначение
A0 A0 или 54
A1 A1 или 55
A2 A2 или 56
A3 A3 или 57
A4 A4 или 58 TCK
A5 A5 или 59 TMS
A6 A6 или 60 TDO
A7 A7 или 61 TDI
A8 A8 или 62 PCINT16
A9 A9 или 63 PCINT17
A10 A10 или 64 PCINT18
A11 A11 или 65 PCINT19
A12 A12 или 66 PCINT20
A13 A13 или 67 PCINT21
A14 A14 или 68 PCINT22
A15 A15 или 69 PCINT23

Дополнительные пины на плате

  • AREF — Опорное напряжение для аналоговых входов. Используется с функцией .
  • Reset — Низкий уровень сигнала на выводе перезагружает микроконтроллер. Обычно применяется для подключения кнопки перезагрузки на плате расширения, закрывающей доступ к кнопке на самой плате Arduino.

Выводы питания

  • Vin: Входное напряжение платы Arduino при использовании внешнего источника (если отсутствует напряжение 5 вольт на USB-соединении или от другого источника питания). Можно подавать питание на этот вывод, или же, если питание подается на 2.1 мм разъем, то можно с этого вывода получить к питающему входному напряжению.
  • 5V: Напряжение на этих выводах регулируется встроенным в плату регулятором напряжения. Плата может быть запитана либо через 2.1 мм разъем питания (7-12 В), через USB-подключение (5 В), или же через вывод VIN (7-12 В) на плате. Подача питания через выводы 5 В или 3.3 В обходит регулятор и может привести к выходу платы из строя. Так делать не рекомендуется.
  • 3.3V: Напряжение 3.3 вольта формируется при помощи встроенного в плату регулятора. Максимальный ток потребления не должен превышать 50 мА.
  • GND: Выводы земли.
  • IOREF: Этот вывод обеспечивает опорное напряжение, с которым работает микроконтроллер. Для правильной конфигурации внешних плат, можно считывать напряжение с этого вывода и выбирать соответсвующий источник питания или включать преобразователи напряжений для работы с 5 В или 3.3 В.

Схема датчика освещения на фоторезисторе и реле

Примеры скетча для работы с реле приведены в статье, посвященной программированию реле в ардуино. В данном случае, нам не нужно делать сложных телодвижений: после определения «темноты» мы просто включаем реле, подавай на его пин соответствующее значение.

#define PIN_RELAY 10
#define PIN_PHOTO_SENSOR A0

void setup() {
  pinMode(PIN_RELAY, OUTPUT);
  digitalWrite(PIN_RELAY, HIGH);
}

void loop() {
  int val = analogRead(PIN_PHOTO_SENSOR);
  if (val < 300) {
    // Светло, выключаем реле
    digitalWrite(PIN_RELAY, HIGH);
  } else {
    // Темновато, включаем лампочку
    digitalWrite(PIN_RELAY,  LOW);
  }
}

4Описание датчика тока,напряжения и мощности INA219

Датчик INA219 – цифровой датчик тока, напряжения и мощности. Он позволяет измерять напряжения от 0 до 26 вольт и ток от 0 до 3,2 ампер. Питается датчик напряжением от 3 до 5,5 В. Существуют модули, полностью готовые к подключению к Arduino. Один из таких модулей GY-219:

Модуль GY-219 с датчиком тока INA219: назначение выводов и частей

Датчик INA219 выполняется в двух разновидностях: A и B. Последняя отличается повышенной точностью и меньшей погрешностью. На фото ниже как раз модификация INA219B.

Модуль GY-219 с датчиком тока INA219

Датчик INA219 имеет 12-разрядный АЦП, соответственно при максимуме измерений ±3,2 А получается разрешающая способность 0,8 мА. Однако можно настроить датчик таким образом, чтобы уменьшить диапазон измеряемой силы тока до ±400 мА; при этом разрешающая способность датчика увеличится до 0,1 мА. При этом можно откалибровать датчик, записав калибровачные данные в специальный регистр. Измеренные данные силы тока, напряжения и можности хранятся в трёх соответствующих регистрах. Кстати, датчик INA219 позволяет осуществлять аппаратную фильтрацию по 128 отсчётам, если измеряемый ток имеет сильные наводки.

Для конфигурирования датчика INA219 и для считывания показаний с него используется последовательный интерфейс I2C. Причём адрес на шине можно задать с помощью перемычек A0 и A1 на модуле. Допустимые адреса:

  • 0x40 (без перемычек);
  • 0x41 (с перемычкой A0);
  • 0x44 (с перемычкой A1);
  • 0x45 (установлены обе перемычки).

Соответственно, на одной шине IIC можно иметь до 4-х таких датчиков, подключённых одновременно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector