Как подключить max31865 и термодатчик pt100 к arduino

Код Arduino. Использование DHT11 и DHT22/AM2302 с LCD дисплеем

Иногда может возникнуть идея, контролировать температуру и влажность в инкубаторе. Тогда для отображения условий в инкубаторе вам, вероятно, понадобится символьный LCD дисплей 16×2 вместо монитора последовательного порта. Итак, в этом примере вместе с датчиком DHT11 или DHT22/AM2302 мы подключим к Arduino LCD дисплей.

Если вы не знакомы с LCD дисплеями на 16×2 символов, взгляните на статью «Взаимодействие Arduino с символьным LCD дисплеем».

Далее нам нужно подключиться к LCD дисплею, как показано ниже.

Рисунок 9 – Подключение к Arduino символьного LCD дисплея 16×2 и DHT11Рисунок 10 – Подключение к Arduino символьного LCD дисплея 16×2 и DHT22

Следующий скетч будет выводить значения температуры и относительной влажности на символьном LCD дисплее 16×2. Он использует тот же код, за исключением того, что мы печатаем значения на LCD дисплее.

Рисунок 11 – Показания температуры и влажности на LCD дисплее

Примеры работы для Arduino

Один датчик

Рассмотрим простой пример — подключения одного датчика.

Сенсор подключается к управляющей плате через один сигнальный пин.
При подключении к Arduino в компактном формфакторе, например Arduino Micro или Iskra Nano Pro, воспользуйтесь макетной платой и парочкой нажимных клеммников.

Между сигнальным проводом и питанием установите сопротивление 4,7 кОм.


При коммуникации сенсора со стандартными платами Arduino формата Rev3, Arduino Uno или Iskra Neo, используйте Troyka Slot Shield совместно с модулем подтяжки.

Код программы

Выведем температуру сенсора в Serial-порт.

simple.ino
// библиотека для работы с протоколом 1-Wire
#include <OneWire.h>
// библиотека для работы с датчиком DS18B20
#include <DallasTemperature.h>
 
// сигнальный провод датчика
#define ONE_WIRE_BUS 5
 
// создаём объект для работы с библиотекой OneWire
OneWire oneWire(ONE_WIRE_BUS);
 
// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensor(&oneWire);
 
void setup(){
  // инициализируем работу Serial-порта
  Serial.begin(9600);
  // начинаем работу с датчиком
  sensor.begin();
  // устанавливаем разрешение датчика от 9 до 12 бит
  sensor.setResolution(12);
}
 
void loop(){
  // переменная для хранения температуры
  float temperature;
  // отправляем запрос на измерение температуры
  sensor.requestTemperatures();
  // считываем данные из регистра датчика
  temperature = sensor.getTempCByIndex();
  // выводим температуру в Serial-порт
  Serial.print("Temp C: ");
  Serial.println(temperature);
  // ждём одну секунду
  delay(1000);
}

Серия датчиков

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

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

Код программы

Просканируем все устройства на шине и выведем температуру каждого сенсора отдельно в Serial-порт.

multipleSensors.ino
// библиотека для работы с протоколом 1-Wire
#include <OneWire.h>
// библиотека для работы с датчиком DS18B20
#include <DallasTemperature.h>
 
// сигнальный провод датчика
#define ONE_WIRE_BUS 5
 
// создаём объект для работы с библиотекой OneWire
OneWire oneWire(ONE_WIRE_BUS);
// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensors(&oneWire);
// создаём указатель массив для хранения адресов датчиков
DeviceAddress *sensorsUnique;
// количество датчиков на шине
int countSensors;
 
// функция вывода адреса датчика
void printAddress(DeviceAddress deviceAddress){
  for (uint8_t i = ; i < 8; i++){
    if (deviceAddressi < 16) Serial.print("0");
    Serial.print(deviceAddressi, HEX);
  }
}
 
void setup(){
  // инициализируем работу Serial-порта
  Serial.begin(9600);
  // ожидаем открытия Serial-порта
  while(!Serial);
  // начинаем работу с датчиком
  sensors.begin();
  // выполняем поиск устройств на шине
  countSensors = sensors.getDeviceCount();
  Serial.print("Found sensors: ");
  Serial.println(countSensors);
  // выделяем память в динамическом массиве под количество обнаруженных сенсоров
  sensorsUnique = new DeviceAddresscountSensors;
 
  // определяем в каком режиме питания подключены сенсоры
  if (sensors.isParasitePowerMode()) {
    Serial.println("Mode power is Parasite");
  } else {
    Serial.println("Mode power is Normal");
  }
 
  // делаем запрос на получение адресов датчиков
  for (int i = ; i < countSensors; i++) {
    sensors.getAddress(sensorsUniquei, i);
  }
  // выводим полученные адреса
  for (int i = ; i < countSensors; i++) {
    Serial.print("Device ");
    Serial.print(i);
    Serial.print(" Address: ");
    printAddress(sensorsUniquei);
    Serial.println();
  }
  Serial.println();
  // устанавливаем разрешение всех датчиков в 12 бит
  for (int i = ; i < countSensors; i++) {
    sensors.setResolution(sensorsUniquei, 12);
  }
}
 
void loop(){
  // переменная для хранения температуры
  float temperature10;
  // отправляем запрос на измерение температуры всех сенсоров
  sensors.requestTemperatures();
  // считываем данные из регистра каждого датчика по очереди
  for (int i = ; i < countSensors; i++) {
    temperaturei = sensors.getTempCByIndex(i);
  }
  // выводим температуру в Serial-порт по каждому датчику
  for (int i = ; i < countSensors; i++) {
    Serial.print("Device ");
    Serial.print(i);
    Serial.print(" Temp C: ");
    Serial.print(temperaturei);
    Serial.println();
  }
  Serial.println();
  // ждём одну секунду
  delay(1000);
}

Применение термопары с микроконтроллером

Одной из популярных схем для Ардуино стали «умные» измерители нагрева, способные не только демонстрировать температуру, но и производить различные действия в зависимости от ее текущих значений. Измерения в пределах от −50 до 150 ℃ проводятся достаточно несложным датчиком соединяемым с микроконтроллером. Другое дело, если речь идет об очень высоких или сверхнизких значениях характеристики от −273 до 400 ℃ или выше. Здесь потребуется подключить термопару к Ардуино.

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

Способ 2: чтение датчика DS18B20 по адресу

Мы знаем, что каждому DS18B20 назначен уникальный 64-битный адрес, чтобы отличать их друг от друга. В этом методе мы найдем этот адрес для соответствующей маркировки каждого датчика. Затем этот адрес можно использовать для считывания каждого датчика в отдельности.

Поиск адресов датчиков DS18B20s на шине

Следующий скетч обнаруживает все DS18B20, присутствующие на шине, и печатает их адреса на 1-Wire в монитор последовательного порта.

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

Теперь откройте монитор последовательного порта. Вы должны получить что-то подобное:

Рисунок 6 – Нахождение адресов 1-Wire всех датчиков DS18B20 на шине

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

Чтение показаний датчиков DS18B20 по адресу

Следующий скетч считывает температуру датчиков DS18B20 по их адресам. Прежде чем приступить к загрузке скетча, вам нужно изменить адреса датчиков DS18B20 на те, которые вы определили в предыдущем скетче.

Вывод вышеприведенного эскиза выглядит так

Рисунок 7 – Вывод показаний нескольких датчиков DS18B20 методом адреса

Объяснение кода

Как обычно, скетч начинается с включения библиотек, объявления вывода, к которому подключена шина датчиков, и создания объекта библиотеки .

Далее мы вводим адреса, которые были найдены ранее для каждого датчика температуры. В нашем случае имеем следующее.

Во фрагменте настройки мы инициализируем библиотеку путем вызова функции и инициализируем последовательную связь с ПК.

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

Затем, чтобы напечатать температуру датчика, мы вызываем пользовательскую функцию , для которой передается в качестве параметра.

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

Использование термопары

Если вы используете интерфейсный чип AD595, можно просто подключить выходное напряжение к аналоговому входу на вашем Arduino (или другом микроконтроллере) и произвести дополнительную математическую операцию, чтобы преобразовать ваши 10 мВ/°C в числовое значение на выходе.

Если вы планируете использовать MAX6675/MAX31855 или их аналоги, подключение будет чуть сложнее. Первое: Vin и GND надо подключить к источнику питания 3-5 В. Оставшиеся три пина (data пины) подключаются к цифровым контактам Arduino:

  • CLK (clock — часы) — входа на MAX6675/MAX31855 (и выход на Arduino), который сигнализирует, когда надо передавать новый бит данных;
  • DO (data out — вывод данных) выход с MAX6675/MAX31855 (входа на Arduino), через который передается каждый бит данных;
  • CS (chip select — выбор чипа) вход на MAX6675/MAX31855 (выход с Arduino), который сообщает, когда настало время считать показания термопары и вывести больше данных.

В начале скетчей для Arduino надо инициализировать эти пины. В нашем конкретном примере DO подключается к цифровому пину digital 3 на Arduino, CS — к цифровому пину digital 4, а CLK подключается к пину 5.

Если вы используете MAX31855 v1.0 в зашумленных условиях, рекомендуется добавить конденсатор на 0.01 мкФ между контактами термопары (смотрите на рисунке выше).

MAX31855 не поддерживает заземленные термопары. Если сенсор заземляется, чип вернет вам ошибку.

Полезные ссылки

  • Библиотка для работы с MAX6675K. Основна на коде более старой билиотеки от Adafruit.
  • Библиотека Adafruit для работы с MAX6675K.
  • Библиотека Adafruit для работы с MAX31855.
  • Библиотека для работы с MAX31855 поновее, чем Adafruit.
  • https://www.instructables.com/id/Power-and-Temperature-Data-Logger-With-ESP32-and-A/
  • http://www.esp8266learning.com/wemos-max6675-example.php
  • http://www.esp32learning.com/code/esp32-and-max6675-example.php
  • http://henrysbench.capnfatz.com/henrys-bench/arduino-temperature-measurements/max6675-temp-module-arduino-manual-and-tutorial/
  • http://www.electronoobs.com/eng_arduino_tut24.php
  • https://protosupplies.com/product/max6675-thermocouple-temperature-module/

Расчет температуры с помощью терморезистора

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

Напряжение на терморезисторе в этой схеме можно определить из известного напряжения:

Vout=(Vin*Rt)/(R+Rt).

Из этой формулы можно выразить значение сопротивления терморезистора Rt (R – известное сопротивление 10 кОм):

Rt=R(Vin/Vout)-1.

Значение Vout мы затем будем определять в коде программы с помощью считывания значения на выходе АЦП на контакте A0 платы Arduino.

Математически, сопротивление терморезистора можно вычислить с помощью известного уравнения Стейнхарта-Харта (Stein-Hart equation).

T = 1/(A + B*ln(Rt) + C*ln(Rt)3).

В этой формуле A, B и C — константы, Rt – сопротивление терморезистора, ln — натуральный логарифм.

Мы для проекта использовали терморезистор со следующими константами: A = 1.009249522×10−3, B = 2.378405444×10−4, C = 2.019202697×10−7. Эти константы можно определить с помощью данного калькулятора, введя в нем значения сопротивления терморезистора при трех значениях температуры или вы их можете непосредственно узнать из даташита на ваш терморезистор.

Таким образом, для определения значения температуры нам будет нужно только значение сопротивления терморезистора – после его определения мы просто подставляем его значение в уравнение Стейнхарта-Харта и с его помощью рассчитываем значением температуры в кельвинах.

Методика считывания аналогового напряжения

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

Скажем, мы используем резистор с постоянным номиналом 10K и переменный резистор, который называется R. При этом напряжение на выходе (Vo), которое мы будем передавать Arduino, будет равно:

Vo = R / (R + 10K) * Vcc,

где Vcc – это напряжение источника питания (3.3 В или 5 В)

Теперь мы хотим подключить все это к Arduino. Не забывайте, что когда вы измеряете напряжение (Vi) с использованием АЦП на Arduino, вы получите числовое значение.

ADC value = Vi * 1023 / Vcc

Теперь мы совмещаем два напряжения (Vo = Vi) и получаем:

ADC value = R / (R + 10K) * Vcc * 1023 / Vcc

Что самое прекрасное, Vcc сокращается!

ADC value = R / (R + 10K) * 1023

То есть вам неважно, какое напряжение питания вы используете!

В конце мы все же хотим получить R (сопротивление). Для этого надо использовать еще одно преобразование, в котором R переносятся в одну сторону:

R = 10K / (1023/ADC – 1)

Отлично. Давайте попробуем, что из этого всего выйдет. Подключите термистор к Arduino как это показано на рисунке ниже:

Подключите один контакт резистора на 10 КОм к контакту 5 В, второй контакт резистора 10 КОм 1% – к одному контакту термистора. Второй контакт термистора подключается к земле. ‘Центр’ двух резисторов подключите к контакту Analog 0 на Arduino.

Теперь запустите следующий скетч для Arduino:

// значение ‘другого’ резистора

#define SERIESRESISTOR 10000

// к какому пину подключается термистор

#define THERMISTORPIN A0

void setup(void) {

Serial.begin(9600);

}

void loop(void) {

float reading;

reading = analogRead(THERMISTORPIN);

Serial.print(“Analog reading “);

Serial.println(reading);

// преобразуем полученные значения в сопротивление

reading = (1023 / reading) – 1;

reading = SERIESRESISTOR / reading;

Serial.print(“Thermistor resistance “);

Serial.println(reading);

delay(1000);

}

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

Статьи

Главная

Новости

Ардуино: терморезистор NTC 100K

Опубликовано: 27.08.2018

Терморезистор (или термистор) — это такой резистор, который меняет свое электрическое сопротивление в зависимости от температуры.

Существует два вида термисторов: PTC — с положительным температурным коэффициентом, и NTC — с отрицательным. Положительный коэффициент означает, что с повышением температуры сопротивление термистора растёт. NTC-термистор ведет себя противоположным способом.

Также термисторы отличаются номинальным сопротивлением, которое соответствует комнатной температуре — 25 C°. Например, популярными являются термисторы с номиналом 100 кОм и 10 кОм. Такие термисторы часто используют в 3D-принтерах.

ТЕРМО РЕЗИСТОРЫ

В этом уроке мы будет использовать термистор NTC 100K в стеклянном корпусе. Вот такой:

Дальнейшее развитие идеи и замечания

  • Нелинейность датчика составляет приблизительно 3% от максимально измеряемого тока. То есть в случае 100A-ного датчика показания будут гулять в +-3A. . Для меньшего предельного тока выбирайте подходящий датчик, не покупайте «с запасом» по уровню тока.
  • У меня снятое напряжение с датчика отправляется на собственный сервер Blynk, что позволяет грубо отслеживать энергопотребление удаленного от меня дома.
  • Стоит отдельно сказать о том, что датчик показывает именно ток. При стабильном сетевом напряжении в 230 вольт этот ток можно перевести в ватты или киловатты, просто умножив ток на сетевое напряжение. Однако в сельской местности напряжение периодически проседает, и это необходимо учитывать.
  • При отладке я чуть мозг себе не сломал из-за херово работающего dupont-контакта на аналоговый порт. Убедитесь в качественном контакте, чтобы не терять зря целый вечер, как я.
  • Датчик ловит большом количество электромагнитных шумов даже при полном отсутствии какой бы то ни было нагрузки (особенно, около ртутных ламп-трубок, особенно, если он рассчитан на 100А), поэтому это тоже стоит учитывать и, возможно, ставить какой-от программный фильтр. В моем случае датчик обнаруживал в воздухе около 0,03-0,05А тока.
  • Подключить датчик SCT-013-000 к Raspberry не выйдет, так как он отдает аналоговый сигнал, а «голый», без обвеса шилдами raspberry не обладает АЦП. Либо надо покупать шилд АЦП для малинки, либо, что проще, использовать в качестве АЦП Arduino Nano и Arduino Micro, а на «малинку» отдавать уже готовые значения. Притом на Ардуино можно организовать даже примитивный программный фильтр.

ESP32 DevKit и MAX6675K

В качестве ESP32 платы используется эта плата.

MAX6675K ESP32 DevKit
Vcc 3.3v (я использовал БП)
Gnd Gnd (от БП и Wemos D1 mini)
SO 12 (IO12)
SS/CS 13 (IO13)
CSK 15 (IO15)

Код без изменений работает и на ESP32.

#include "MAX6675_Thermocouple.h" //https://github.com/YuriiSalimov/MAX6675_Thermocouple

#define SCK_PIN 15
#define CS_PIN 13
#define SO_PIN 12

/**
   How many readings are taken to determine a mean temperature.
   The more values, the longer a calibration is performed,
   but the readings will be more accurate.
*/
#define READINGS_NUMBER 20

/**
   Delay time between a temperature readings
   from the temperature sensor (ms).
*/
#define DELAY_TIME 20


MAX6675_Thermocouple* thermocouple = NULL;
 
void setup()
{
 Serial.begin(9600);

 thermocouple = new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN, READINGS_NUMBER, DELAY_TIME);
}
 
void loop()
{
  const double celsius = thermocouple->readCelsius();
  const double kelvin = thermocouple->readKelvin();
  const double fahrenheit = thermocouple->readFahrenheit();
  Serial.print("Temperature: ");
  Serial.print(String(celsius) + " C, ");
  Serial.print(String(kelvin) + " K, ");
  Serial.println(String(fahrenheit) + " F");
  delay(500);
}

Результат:

21:16:42.882 -> Temperature: 26.25 C, 299.40 K, 79.25 F
21:16:46.554 -> Temperature: 26.75 C, 299.90 K, 80.15 F
21:16:50.256 -> Temperature: 26.50 C, 299.65 K, 79.70 F
21:16:53.926 -> Temperature: 26.25 C, 299.40 K, 79.25 F
21:17:30.707 -> Temperature: 26.50 C, 299.65 K, 79.70 F

Странно, но ESP32 считывает более корректную температуру, чем ESP8266. Температура в комнате как раз где-то в районе 26,5 оС.

Термистор

Как следует из названия, термистор (т.е., терморезистор) представляет собой датчик температуры, сопротивление которого зависит от температуры.

Термисторы выпускаются двух типов: PTC (с положительным температурным коэффициентом) и NTC (с отрицательным температурным коэффициентом). Сопротивление PTC термистора с ростом температуры увеличивается. А сопротивление NTC термистора, наоборот, с увеличением температуры уменьшается, и этот тип, по-видимому, является наиболее часто используемым типом термисторов. Смотрите рисунок 1 ниже.

Рисунок 1 – Условные графические обозначения термисторов PTC и NTC

Важно понимать, что связь между сопротивлением термистора и его температурой очень нелинейна. Смотрите рисунок 2 ниже

Рисунок 2 – Зависимость сопротивления NTC термистора от температуры

Стандартная формула сопротивления NTC термистора в зависимости от температуры определяется следующим образом:

\[R_T=R_{25C}\cdot e^{\left\{\beta\left[\left(1/\left(T+273\right)\right)-\left(1/298\right)\right]\right\}}\]

где

  • R25C – номинальное сопротивление термистора при комнатной температуре (25°C). Данное значение, как правило, приводится в техническом описании;
  • β (бета) – постоянная материала термистора в Кельвинах. Это значение обычно указывается в техническом описании;
  • T – реальная температура термистора в Цельсиях.

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

Режим линеаризации сопротивления

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

Рисунок 3 – Режим линеаризации сопротивления

Режим линеаризации напряжения

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

Эта конфигурация приводите к созданию выходного напряжения, которое относительно линейно зависит от температуры. И, как и в режиме линеаризации температуры, если сопротивление резистора равно сопротивлению термистора при комнатной температуре, то область линеаризации будет симметрична относительно точки комнатной температуры. Смотрите рисунок 4 ниже.

Рисунок 4 – Режим линеаризации напряжения

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

Чтобы измерить сопротивление термистора, подключим его в качестве
нижнего плеча делителя напряжения. Среднюю же точку делителя подключим к
аналоговому входу Ардуино — A0.

Чтобы измерить сопротивление термистора, подключим его в качестве нижнего плеча делителя напряжения. Среднюю же точку делителя подключим к аналоговому входу Ардуино — A0. 

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

Внешний вид макета

Какое сопротивление должен иметь резистор в верхнем плече делителя?
Как правило, используют резистор с сопротивлением, совпадающим по
порядку с номиналом термистора. В нашем уроке мы используем резистор на
R1 = 102 кОм, его легко получить последовательным соединением двух
резисторов на 51 кОм.

Правильная реализация на МК

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

Нужно закинуть
ntc_table.c в папку Src, а ntc_table.h и pgmspace.h в Inc, а далее ПКМ в дереве проекта на эти папки и нажать Обновить (Refresh).

Всё то же самое, как и выше, но подключаем
ntc_table.h:

И в главном цикле получаем значение с АЦП и кладем его в соответствующую функцию calc_temperature. Для получение значения в градусах Цельсия умножаем возвращаемое число на 0.1 (особенность связана с выводом измерений на индикатор).

Этот код конечно же занимает намного меньше места и действительно предназначен для встраиваемых систем.

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

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

How Accurate is the Reading?

You may notice that above, the temperature reading is 28.16°C — does that mean we have 0.01°C accuracy? Unfortunately no! The thermistor has error and the analog reading circuitry has error.

We can approximate the expected error by first taking into account the thermistor resistance error. The thermistor is correct to 1%, which means that at 25°C it can read 10,100 to 9900 ohms. At around 25°C a difference of 450 ohms represents 1°C so 1% error means about +-0.25°C (you may be able to calibrate this away by determining the resistance of the thermistor in a 0°C ice bath and removing any offset). You can also spring for a 0.1% thermistor which will reduce the possible resistance error down to +-0.03°C

Then there is the error of the ADC, for every bit that it is wrong the resistance (around 25°C) can be off by about 50 ohms. This isn’t too bad, and is a smaller error than the thermistor error itself +-(0.1°C) but there is no way to calibrate it ‘away’ — a higher precision ADC (12-16 bits instead of 10) will give you more precise readings

In general, we think thermistors are higher precision than thermocouples, or most low cost digital sensors, but you will not get better than +-0.1°C accuracy on an Arduino with a 1% thermistor and we would suggest assuming no better than +-0.5°C.

Библиотека Arduino

Если более новая версия — MAX31855, скачать библиотеку можно здесь. После скачивания разархивируйте и переименуйте папку в Adafruit_MAX31855 и скопируйте в папку с вашими библиотеками.

Перезагрузите Arduino IDE, откройте скетч, который находится в File->Examples->MAX6675/Adafruit_MAX31855->serialthermocouple и загрузите его на ваш Arduino. После загрузки скетча на плату, откройте окно серийного монитора, в котором должен отображаться вектор-столбец текущей температуры в градусах по Цельсию и в градусах по Фаренгейту.

Как видите, пользоваться этой библиотекой очень просто. Для отображения температуры в градусах по Цельсию и по Фаренгейту используются функции readCelsius() и readFahrenheit() соответственно.

Подключение нескольких датчиковoв DS18B20+

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

Запускаем среду программирования 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(» Reading Temperature…»);
sensors.requestTemperatures(); // Запрос на считывание температуры
Serial.println(«Read»);
Serial.print(» Sensor Temperature 1: «);
Serial.print(sensors.getTempCByIndex(0)); // Отображение температуры датчика 1
Serial.print(» Reading Temperature…»);
Serial.println(«Read»);
Serial.print(» Sensor Temperature 2: «);
Serial.print(sensors.getTempCByIndex(1)); // Отображение температуры датчика 2
}

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
32

/*
Тестирование производилось на 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);

voidsetup(void)

{

Serial.begin(9600);// Задаем скорость передачи данных

sensors.begin();// Запуск библиотеки, по умолчанию 9 бит

}

voidloop(void)

{

Serial.print(» Reading Temperature…»);

sensors.requestTemperatures();// Запрос на считывание температуры

Serial.println(«Read»);

Serial.print(» Sensor Temperature 1: «);

Serial.print(sensors.getTempCByIndex());// Отображение температуры датчика 1

Serial.print(» Reading Temperature…»);

Serial.println(«Read»);

Serial.print(» Sensor Temperature 2: «);

Serial.print(sensors.getTempCByIndex(1));// Отображение температуры датчика 2

}

Ссылки  Документация к DS18B20+  Скачать библиотеку DallasTemperature  Скачать библиотеку OneWire v.2.2

Купить на Aliexpress  Контроллер Arduino UNO R3 на CH340G  Контроллер Arduino UNO R3 на Atmega16U2  Провода DuPont, 2,54 мм, 20 см  Датчик температуры DS18b20

Купить в Самаре и области  Контроллер Arduino UNO R3 на CH340G  Контроллер Arduino UNO R3 на Atmega16U2  Провода DuPont, 2,54 мм, 20 см  Датчик температуры DS18b20

Защита от помех AC

Момент выключения

Напряжение в сети является синусоидой, которая 100 раз в секунду пересекает значение 0. Если выключить нагрузку в тот момент, когда напряжение в сети равно нулю – это сильно уменьшит выброс. Для этих целей проще всего использовать твердотельные реле (SSR) с детектором нуля (Zero-Crossing Detector): такие реле сами отключают и включают нагрузку в нужный момент. Детектор нуля есть почти во всех моделях SSR, но лучше уточнить в документации. Для самодельных симисторных ключей, работающих в режиме вкл/выкл (без диммирования) рекомендуется ставить управляющую оптопару с детектором нуля: она тоже будет включать и выключать нагрузку в лучший для этого момент, то есть в ближайшем нуле.

Искрогасящие цепи AC

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

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

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

Adblock
detector