Андрей Смирнов
Время чтения: ~22 мин.
Просмотров: 0

Температурный индикатор на печатной плате и ардуино нано

Скетч для Arduino и сенсора DS18B20

Установливаем библиотеку OneWire Library

После того как вы скачали архив с библиотекой, ее надо импортировать. Для этого в Arduino IDE выберите пункт “Sketch” — “Import Library” — “Add Library” и выберите архив, который вы скачали. Если у вас возникли проблемы, с установкой библиотеки, ознакомьтесь с инструкцией по установке библиотек в Arduino.

Загружаем скетч на Arduino

Скетч, который представлен ниже, есть в библиотеке OneWire, в категории examples. Перейдите в “File” — “Examples” — “OneWire” и выберите пример “DS18x20_Temperature”. Код программы представлен ниже.

Данный пример использует библиотеку OneWire Library, для того, чтобы собрать данные со всех подключенных датчиков температуры DS28B20 (как подключить несколько сенсоров описано в конце статьи) и отобразить их в окне серийного монитора Arduino IDE.

В окне серийного монитора вы увидите примерно следующее:

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

Обычное или паразитное питание?

DS18B20 может работать в обычном или в так называемом «паразитном» режиме. В обычном режиме для подключения используется 3 коннектора, в «паразитном» режиме — в его лишь 2.

Вам надо настроить правильный режим в скетче, чтобы снять достоверные показания с датчика:

  • Для «паразитного» режима в строке 65 надо указать: ds.write(0x44, 1);
  • Для обычного режима в строке 65 указывается: ds.write(0x44);

Убедитесь, что вы указали корректные пины!

В строке 10, где указано “OneWire ds(2);” устанавливается пин, к которому подключен контакт data с сенсора.

В этом примере использован пин 2, но значения пина по умолчанию в примере OneWire стоит на 10. Можно использовать и его.

#include &ltOneWire.h&gt

// пример использования библиотеки OneWire DS18S20, DS18B20, DS1822

OneWire ds(2); // на пине 10 (нужен резистор 4.7 КОм)

void setup(void) {

Serial.begin(9600);

}

void loop(void) {

byte i;

byte present = 0;

byte type_s;

byte data;

byte addr;

float celsius, fahrenheit;

if ( !ds.search(addr)) {

Serial.println(«No more addresses.»);

Serial.println();

ds.reset_search();

delay(250);

return;

}

Serial.print(«ROM =»);

for( i = 0; i

Serial.write(‘ ‘);

Serial.print(addr, HEX);

}

if (OneWire::crc8(addr, 7) != addr) {

Serial.println(«CRC is not valid!»);

return;

}

Serial.println();

// первый байт определяет чип

switch (addr) {

case 0x10:

Serial.println(» Chip = DS18S20″); // или более старый DS1820

type_s = 1;

break;

case 0x28:

Serial.println(» Chip = DS18B20″);

type_s = 0;

break;

case 0x22:

Serial.println(» Chip = DS1822″);

type_s = 0;

break;

default:

Serial.println(«Device is not a DS18x20 family device.»);

return;

}

ds.reset();

ds.select(addr);

ds.write(0x44); // начинаем преобразование, используя ds.write(0x44,1) с «паразитным» питанием

delay(1000); // 750 может быть достаточно, а может быть и не хватит

// мы могли бы использовать тут ds.depower(), но reset позаботится об этом

present = ds.reset();

ds.select(addr);

ds.write(0xBE);

Serial.print(» Data = «);

Serial.print(present, HEX);

Serial.print(» «);

for ( i = 0; i

data = ds.read();

Serial.print(data, HEX);

Serial.print(» «);

}

Serial.print(» CRC=»);

Serial.print(OneWire::crc8(data, 8), HEX);

Serial.println();

// конвертируем данный в фактическую температуру

// так как результат является 16 битным целым, его надо хранить в

// переменной с типом данных «int16_t», которая всегда равна 16 битам,

// даже если мы проводим компиляцию на 32-х битном процессоре

int16_t raw = (data

if (type_s) {

raw = raw

if (data == 0x10) {

raw = (raw & 0xFFF0) + 12 — data;

}

} else {

byte cfg = (data & 0x60);

// при маленьких значениях, малые биты не определены, давайте их обнулим

if (cfg == 0x00) raw = raw & ~7; // разрешение 9 бит, 93.75 мс

else if (cfg == 0x20) raw = raw & ~3; // разрешение 10 бит, 187.5 мс

else if (cfg == 0x40) raw = raw & ~1; // разрешение 11 бит, 375 мс

//// разрешение по умолчанию равно 12 бит, время преобразования — 750 мс

}

celsius = (float)raw / 16.0;

fahrenheit = celsius * 1.8 + 32.0;

Serial.print(» Temperature = «);

Serial.print(celsius);

Serial.print(» Celsius, «);

Serial.print(fahrenheit);

Serial.println(» Fahrenheit»);

}

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

Сначала мы произведем подключение библиотек для работы с ЖК дисплеем и датчиком температуры (dht), а затем инициализируем контакты для подключения ЖК дисплея, датчика температуры и вентилятора.

Затем инициализируем все остальные нужные нам вещи в секции setup. А затем в секции loop мы будем использовать dht-функции для считывания значений с датчика температуры, извлекать из этих значений температуру, переводить ее в температуру по шкале Цельсия и отображать ее значение на ЖК дисплее.

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

Для генерации ШИМ мы будем использовать функцию analogWrite(pin, PWM value). Мы будем использовать все 8 бит. Значение ШИМ будет эквивалентно аналоговому значения напряжения. То есть, к примеру, если мы хотим сгенерировать ШИМ с коэффициентом заполнения 20%, то мы в эту функцию (analogWrite) должны передать значение 255/5.

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

Arduino

#include<dht.h> // подключаем библиотеку для работы с датчиком
#include<LiquidCrystal.h> // подключаем библиотеку для работы с ЖК дисплеем

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
#define dht_dpin 12
dht DHT;
#define pwm 9
byte degree = // символ градуса для отображения на ЖК дисплее
{
0b00011,
0b00011,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
void setup()
{
lcd.begin(16, 2);
lcd.createChar(1, degree);
lcd.clear();
lcd.print(» Fan Speed «);
lcd.setCursor(0,1);
lcd.print(» Controlling «);
delay(2000);
analogWrite(pwm, 255);
lcd.clear();
lcd.print(«Circuit Digest «);
delay(2000);
}
void loop()
{
DHT.read11(dht_dpin); // считываем значение с выхода датчика температуры
int temp=DHT.temperature; // извлекаем из него температуру
lcd.setCursor(0,0);
lcd.print(«Temperature:»);
lcd.print(temp); // показываем значение температуры на ЖК дисплее
lcd.write(1);
lcd.print(«C»);
lcd.setCursor(0,1);
if(temp <26 )
{
analogWrite(9,0);
lcd.print(«Fan OFF «);
delay(100);
}

else if(temp==26)
{
analogWrite(pwm, 51);
lcd.print(«Fan Speed: 20% «); // скорость вращения 20%
delay(100);
}

else if(temp==27)
{
analogWrite(pwm, 102);
lcd.print(«Fan Speed: 40% «); // скорость вращения 40%
delay(100);
}

else if(temp==28)
{
analogWrite(pwm, 153);
lcd.print(«Fan Speed: 60% «); // скорость вращения 60%
delay(100);
}

else if(temp==29)
{
analogWrite(pwm, 204);
lcd.print(«Fan Speed: 80% «); // скорость вращения 80%
delay(100);
}
else if(temp>29)
{
analogWrite(pwm, 255);
lcd.print(«Fan Speed: 100% «); // скорость вращения 100%
delay(100);
}
delay(3000);
}

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

#include<dht.h>      // подключаем библиотеку для работы с датчиком
#include<LiquidCrystal.h> // подключаем библиотеку для работы с ЖК дисплеем
 

LiquidCrystallcd(7,6,5,4,3,2);

#define dht_dpin 12

dhtDHT;

#define pwm 9

bytedegree8=// символ градуса для отображения на ЖК дисплее

{

0b00011,

0b00011,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000

};

voidsetup()

{

lcd.begin(16,2);

lcd.createChar(1,degree);

lcd.clear();

lcd.print(»   Fan Speed  «);

lcd.setCursor(,1);

lcd.print(»  Controlling «);

delay(2000);

analogWrite(pwm,255);

lcd.clear();

lcd.print(«Circuit Digest «);

delay(2000);

}

voidloop()

{

DHT.read11(dht_dpin);// считываем значение с выхода датчика температуры

inttemp=DHT.temperature;// извлекаем из него температуру

lcd.setCursor(,);

lcd.print(«Temperature:»);

lcd.print(temp);// показываем значение температуры на ЖК дисплее

lcd.write(1);

lcd.print(«C»);

lcd.setCursor(,1);

if(temp<26)

{

analogWrite(9,);

lcd.print(«Fan OFF            «);

delay(100);

}

elseif(temp==26)

{

analogWrite(pwm,51);

lcd.print(«Fan Speed: 20%   «);// скорость вращения 20%

delay(100);

}

elseif(temp==27)

{

analogWrite(pwm,102);

lcd.print(«Fan Speed: 40%   «);// скорость вращения 40%

delay(100);

}

elseif(temp==28)

{

analogWrite(pwm,153);

lcd.print(«Fan Speed: 60%   «);// скорость вращения 60%

delay(100);

}

elseif(temp==29)

{

analogWrite(pwm,204);

lcd.print(«Fan Speed: 80%    «);// скорость вращения 80%

delay(100);

}

elseif(temp>29)

{

analogWrite(pwm,255);

lcd.print(«Fan Speed: 100%   «);// скорость вращения 100%

delay(100);

}

delay(3000);

}

Что такое DS18B20?

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

DS18B20 обменивается данными по шине, которая по определению требует только одну линию передачи данных (и землю) для связи с центральным микропроцессором.

Вакансии

Программирование аппаратно-программных средств arduino, разработка чертежей в SolidWorks.

Кроме того, DS18B20 может получать питание непосредственно из линии передачи данных (применим термин «питание паразита»), устраняя потребность во внешнем источнике питания.

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

Что касается сочетания технологий с жизнью, использование цветных индикаторов очень привлекательно. Замена светодиодов RGB на дисплеи для отправки сообщения или подачи сигнала может сделать проекты более красивыми.

В качестве термопары мы будем использовать DS18B20, который закрепим на дне кружки. Датчик может посылать температуру жидкости в кружке к контроллеру в цифровых данных.

Arduino Nano — выбор в качестве контроллера из-за его небольшого размера и мини-разъема USB на плате. Поэтому Nano можно запрограммировать, а аккумулятор можно будет заряжать через USB-порт.

Чтобы показать температуру, мы используем 2 простых 4-контактных светодиода RGB и подключаем их для разделения блоков PWM в Arduino Nano. Теперь нам нужны только батарея, кружка и пластиковая оболочка, куда мы вставим компоненты.

Рекомендации по использованию отопительного агрегата

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

Больше интересной и познавательной информации представлено в видеоролике:

Средняя оценка

оценок более 0

Поделиться ссылкой

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

Подключение термистора к Ардуино мы разберем на примере подключения к Arduino UNO. Схема подключения термистора к Ардуино точно такая же, как и схема подключения фоторезистора к Ардуино, которую мы разбирали в статье ««. Нам снова понадобятся три провода, сам фоторезистор и сопротивление на10 кОм, которое подключено к той же ножке термистора, что и провод, идущий к аналоговому пину A0 Ардуино.

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

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

Важное условие — скетч подходит только для NTC-термисторов, номиналом 10 кОм, при условии использования в схеме сопротивления на 10 кОм. Но, т.к

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

Если открыть Монитор порта в Arduino IDE, то мы увидим следующую картину:

Вывод значений температуры в монитор порта Arduino IDE

Повышение температуры вызвано тем, что я зажал термистор пальцами.

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

_________________________________________________________

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

Оглавление

Инструменты и материалы Время: 1 час • Сложность: 3/10

  • ткань разной расцветки;
  • наполнитель;
  • погремушка;
  • плотная бумага.
  • нитки, ножницы.

Определение типа термистора и его номинального сопротивления

Существует два типа термисторов:

1. С положительным температурным коэффициентом (PTC), когда сопротивление возрастает с повышением температуры.

2. С отрицательным температурным коэффициентом (NTC), когда сопротивление уменьшается при повышении температуры.

Определить тип термистора очень просто. Достаточно взять мультиметр, выбрать на нем режим измерения сопротивления и соединить зажимы мультиметра с ножками термистора.

Значение сопротивление термистора при комнатной температуре около 24 градусов

Далее зажимаем пальцами сам термистор, и если сопротивление падает, то наш термистор с отрицательным температурным коэффициентом, а если растет, то с положительным температурным коэффициентом.

Термистор меняет свое сопротивление от тепла руки

Таким же образом мы можем определить номинальное значение сопротивление термистора. Это будет значение сопротивления при температуре 25 ºC.

В нашем случае, один из наиболее распространенных типов термисторов, с отрицательным температурным коэффициентом (NTC), номиналом 10 кОм.

Analog Voltage Reading Method

To measure the temperature, we need to measure the resistance. However, a microcontroller does not have a resistance-meter built in. Instead, it only has a voltage reader known as a analog-digital-converter. So what we have to do is convert the resistance into a voltage, and we’ll do that by adding another resistor and connecting them in series. Now you just measure the voltage in the middle, as the resistance changes, the voltage changes too, according to the simple voltage-divider equation. We just need to keep one resistor fixed

Say the fixed resistor is 10K and the variable resistor is called R — the voltage output (Vo) is:

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

Where Vcc is the power supply voltage (3.3V or 5V)

Now we want to connect it up to a microcontroller. Remember that when you measure a voltage (Vi) into an Arduino ADC, you’ll get a number.

ADC value = Vi * 1023 / Varef

So now we combine the two (Vo = Vi) and get:

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

What is nice is that if you notice, if Vcc (logic voltage) is the same as the ARef, analog reference voltage, the values cancel out!

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

It doesn’t matter what voltage you’re running under. Handy!

Finally, what we really want to do is get that R (the unknown resistance). So we do a little math to move the R to one side:

R = 10K / (1023/ADC — 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.

↑ Обмениваемся данными

Передаем «0».

  1. МК удерживает шину в 0 состоянии в течении 60 микросекунд.
  2. МК отпускает шину давая резистору подтяжки делать свое дело.

Передаем «1».

  1. МК удерживает шину в 0 состоянии в течении 15 микросекунд.
  2. МК отпускает шину.

Чтение данных немного сложнее.

  1. МК удерживает шину в 0 состоянии в течении 1 микросекунд.
  2. МК отпускает шину.
  3. ждем завершения переходных процессов 14 микросекунд.
  4. МК считывает состояние шины.
  5. Ждем еще 45 микросекунд до конца тайм слота.

Функция чтения:

Исключён фрагмент. Полный вариант статьи доступен меценатам и полноправным членам сообщества. Читай условия доступа.

Связанные материалы

Программная реализация протокола SPI на AVR в CodeVisionAVR…
Всем коллегам и согражданам привет! Увлёкся я изучением протоколов. Про реализацию протокола I2C у…

Несколько функций для програмной реализации протокола I2C на AVR…
Добрый день, дорогие друзья! Решил поделиться с вами несколькими функция для работы по протоколу…

Визуализация для микроконтроллера. Часть 4. Android…
Вообще то я планировал рассказать сегодня про дисплей на базе ILI9481. Однако, он настолько похож…

USB адаптер для чтения и программирования цифровых термостатов MAXIM/DALLAS DS1821…
В статье описано, как за час сделать простой USB-адаптер для чтения/записи цифровых термометров…

Работа с датчиком DHT11. Строим термометр-гигрометр на ATMEGA8…
Привет любителям электроники! Сегодня я решил познакомиться с датчиком влажности DHT11, который…

Универсальный контроллер управления 7-сегментными LED индикаторами по двум проводам (Atmega16)…
Занялся я конструированием нового устройства и встал вопрос — на чем отображать данные….

Простой цифровой термометр на ATmega8535 + DS18B20…
Доброго времени суток! Представляю простой, цифровой термометр на индикаторе ИЖЦ21-4/7,…

Программная реализация протокола I2C на AVR в CodeVisionAVR…
Пару лет назад, изучая Atmega8, я захотел программно реализовать работу с устройствами на шине i2c,…

Arduino shield: акселерометр на LIS302DL…
Собрал недавно arduino на atmega8, поморгал диодом, захотелось большего. Начал изучать различные…

Texas Instruments. Руководство по выбору компонентов для аналоговых схем…
Операционные усилители, компараторы, буфферы, ЦАП/АЦП преобразователи данных, интерфейсы, схемы…

10 практических устройств на AVR-микроконтроллерах. Книга 1. А.В. Кравченко…
10 практических устройств на AVR-микроконтроллерах. Книга 1. А.В. Кравченко Издательство: Москва,…

Грызем микроконтроллеры. Урок 4….
Мигалки – это хорошо, по новогоднему… Но ведь нельзя останавливаться на достигнутом! Пора сделать…

Работа с библиотекой DallasTemperature

Библиотека для Arduino DallasTemperature Sensors OneWire значительно облегчает и упрощает работу с сенсором DS18B20. Описание библиотеки DallasTemperature.h на русском говорит, что датчик управляется несколькими простыми функциями, которые представлены в следующем скетче. Схема подключения датчика не меняется, а скачать библиотеку DallasTemperature.h для Ардуино можно на нашем сайте здесь.

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

#include <OneWire.h>
#include <DallasTemperature.h>
 
OneWire oneWire(15);  // порт подключения датчика (A1)
DallasTemperature ds(&oneWire);

void setup() {
  Serial.begin(9600);   // инициализация монитора порта
  ds.begin();                 // инициализация датчика ds18b20
}

void loop() {
  ds.requestTemperatures();                       // считываем температуру с датчика
  
  Serial.print(ds.getTempCByIndex(0));   // выводим температуру на монитор
  Serial.println("C");
}

Скетч для нескольких датчиков на одной шине

Подключите несколько термодатчиков DS18B20 к микроконтроллеру согласно схеме, и загрузите скетч для датчика температуры ds18b20 к Arduino UNO.

#include <OneWire.h>
#include <DallasTemperature.h>
 
OneWire oneWire(15);  // порт подключения датчиков (A1)
DallasTemperature ds(&oneWire);

byte num;              // количество подключенных датчиков

void setup() {
  Serial.begin(9600);   // инициализация монитора порта
  ds.begin();                 // инициализация датчика ds18b20

  num = ds.getDeviceCount();   // узнаем количество датчиков 
  Serial.print("Number: ");           // выводим полученное количество
  Serial.println(num);
}

void loop() {
// выполняем цикл столько, сколько найдено датчиков на шине
 for (byte i = 0; i < num; i++){
    Serial.print("Sensor ");
    Serial.print(i);
    Serial.print(": ");
    ds.requestTemperatures();                       // считываем температуру с датчика
    Serial.print(ds.getTempCByIndex(i));
    Serial.println("C");
  } 
Serial.println(""); 
}

A Basic Thermistor Circuit

Let’s build a basic thermistor circuit to see how it works, so you can apply it to other projects later.

Since the thermistor is a variable resistor, we’ll need to measure the resistance before we can calculate the temperature. However, the Arduino can’t measure resistance directly, it can only measure voltage.

The Arduino will measure the voltage at a point between the thermistor and a known resistor. This is known as a voltage divider. The equation for a voltage divider is:

In terms of the voltage divider in a thermistor circuit, the variables in the equation above are:

This equation can be rearranged and simplified to solve for R2, the resistance of the thermistor:

Finally, the Steinhart-Hart equation is used to convert the resistance of the thermistor to a temperature reading.

Connect the Circuit

Connect the thermistor and resistor to your Arduino like this:

The value of the resistor should be roughly equal to the resistance of your thermistor. In this case, the resistance of my thermistor is 100K Ohms, so my resistor is also 100K Ohms.

The manufacturer of the thermistor might tell you it’s resistance, but if not, you can use a multimeter to find out. If you don’t have a multimeter, you can make an Ohm meter with your Arduino by following our Arduino Ohm Meter tutorial. You only need to know the magnitude of your thermistor. For example, if your thermistor resistance is 34,000 Ohms, it is a 10K thermistor. If it’s 340,000 Ohms, it’s a 100K thermsitor.

Шаг 3. Подключение

Подключение нескольких датчиков температуры DS18B20 к Ардуино

Все датчики DS18B20 подключаются параллельно, для них всех достаточно одного резистора.  При помощи библиотеки OneWire можно одновременно считать все данные со всех датчиков. Если количество подключаемых датчиков более 10, нужно подобрать резистор с сопротивлением не более 1,6 кОм. Также для более точного измерения температуры нужно поставить дополнительный резистор на 100…120 Ом между выходом data на плате Ардуино и data на каждом датчике. Узнать, с какого датчика получено то или иное значение, можно с помощью уникального серийного 64-битного кода, который будет выдан в результате выполнения программы.

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

В режиме паразитного питания схема выглядит иначе. Контакт Vdd практически не задействован, питание идет через выход data.

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

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • потенциометр (переменный резистор);
  • беспаечная макетная плата;
  • один светодиод и резистор;
  • сервопривод;
  • провода «папа-папа», «папа-мама».

Скетч. Подключение потенциометра к аналоговому входу

Крайние ножки переменного резистора подключаются к портам питания (5V и GND). Средний контакт имеет подвижный контакт, на котором меняется напряжение вследствие изменения сопротивления при вращении ручки. Полярность подключения «+» и «-» роли не играет, при этом будет происходить только инверсия сигнала потенциометра. Соберите следующую схему и загрузите приведенный код в плату.


Схема подключения потенциометра к Arduino Uno

void setup() {
   Serial.begin(9600);     // запускаем монитор порта
   pinMode(A1, INPUT); // к входу A1 подключаем потенциометр
}

void loop() {
   int val = analogRead(A1); // считываем данные с порта A1
   Serial.println(val);             // выводим данные на монитор порта
   delay(500);                       // ставим задержку для удобства
}
  1. при необходимости подключения нескольких потенциометров к Arduino Nano, следует их подключать к другим аналоговым входам;.

Скетч. Подключение потенциометра и светодиода

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


Схема подключения потенциометра и светодиода к Ардуино

void setup() {
   pinMode(10, OUTPUT); // подключаем светодиод к пин 10
   pinMode(A1, INPUT);     // к входу A1 подключаем потенциометр
}

void loop() {
   int val = analogRead(A1); // считываем данные с порта A1
   val = val / 4;                      // делим значения на 4
   analogWrite(10, val);        // меняем яркость светодиода
}
  1. светодиод подключается к аналоговому выходу с ШИМ сигналом;
  2. данные с порта A1, которые находятся в диапазоне 0…1023, мы делим на 4 и получаем диапазон от 0 до 255 для изменения яркости светодиода.

Скетч. Подключение потенциометра и сервопривода

Сервомотор подключается к аналоговым выходам Arduino Nano. В скетче использована функция map, которая пропорционально переносит значение переменной из текущего диапазона значений в новый диапазон. Таким образом, значения с потенциометра в диапазоне 0…1023, мы переводим их в новый диапазон от 0 до 180 (угол поворота сервомотора). Соберите схему и загрузите следующий скетч.


Схема подключения потенциометра и сервомотора к Ардуино

#include <Servo.h> // подключаем библиотеку для сервопривода
Servo servo;            // объявляем переменную servo типа "servo"

void setup() {
   servo.attach(10);        // привязываем сервопривод к порту 10
   pinMode(A1, INPUT); // к входу A1 подключаем потенциометр
}

void loop() {
   int val = analogRead(A1);          // считываем данные с порта A1
   val = map(val, 0, 1023, 0, 180); // переводим val в новый диапазон
   servo.write(val);                         // передаем значения для сервопривода
}

Шаг 3. Наблюдение за аналоговым входом

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

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

Аналоговые контакты от A0 до A5 могут интерпретировать напряжения от 0 до 5 В и переводить это напряжение в значения от 0 до 1023 для использования в скетче Arduino. Аналоговые контакты в основном используются для считывания информации с датчиков (они также могут быть использованы как цифровые выходы 14-19, несвязанные).

Ардуино. Метеостанция на LCD 1602 и DHT11

Ардуино. Метеостанция с дисплеем LCD 1602 и DHT22

После сборки схемы, загрузите в микроконтроллер следующий скетч (здесь ссылка на скачивание архива со скетчем для метеостанции и необходимыми библиотеками). Информация с датчика DHT22 выводиться будет на монитор порта Arduino IDE и на жидкокристаллический дисплей 1602a, для отображения информации использован русский шрифт для LCD и символы (в скетче есть подробные комментарии).

Скетч для метеостанции с DHT11 на Ардуино

#include <Wire.h>                 // библиотека для протокола IIC 
#include <LiquidCrystal_I2C.h>    // подключаем библиотеку LCD IIC
LiquidCrystal_I2C lcd(0x27,20,2); // присваиваем имя lcd для дисплея

#include "DHT.h"   // подключаем библиотеку для DHT11
DHT dht(2, DHT11); // к какому порту подключаем датчик

// создаем символ градуса и присваиваем имя "gradus"
byte gradus = {
0b01100,0b10010,0b10010,0b01100,0b00000,0b00000,0b00000,0b00000
};

// создаем русскую букву "П"
byte P = {
0b11111,0b10001,0b10001,0b10001,0b10001,0b10001,0b10001,0b00000
};

// создаем русскую букву "У"
byte Y = {
0b10001,0b10001,0b10001,0b01111,0b00001,0b00001,0b01110,0b00000
};

// создаем русскую букву "Л"
byte L = {
0b00111,0b01001,0b10001,0b10001,0b10001,0b10001,0b10001,0b00000
};

// создаем русскую букву "Ж"
byte ZH = {
0b10101,0b10101,0b10101,0b01110,0b10101,0b10101,0b10101,0b00000
};

// создаем русскую букву "Ь"
byte znak = {
0b10000,0b10000,0b10000,0b11110,0b10001,0b10001,0b11110,0b00000
};

void setup() {
  Serial.begin(9600); // запуск последовательного порта
  lcd.init();         // инициализация LCD дисплея
  lcd.backlight();    // включение подсветки дисплея

  lcd.createChar(1, gradus);
  lcd.createChar(2, P);
  lcd.createChar(3, Y);
  lcd.createChar(4, L);
  lcd.createChar(5, ZH);
  lcd.createChar(6, znak);
}

void loop() {
  // если нужны точные значение, то используйте float, вместо byte
  byte h = dht.readHumidity();    // считываем значение температуры
  byte t = dht.readTemperature(); // считываем значение влажности

  Serial.print("Temperature: ");
  Serial.println(t);   // отправляем значение температуры на монитор

  Serial.print("Humidity: ");
  Serial.println(h);   // отправляем значение температуры на монитор

  Serial.println(" "); // пустая строка

  lcd.setCursor(0,0);  // ставим курсор на 1 символ первой строки
  lcd.print("TEM");    // используем латинские буквы
  lcd.print(char(2));  // выводим русскую букву "П"
  lcd.print("EPAT");   // используем латинские буквы
  lcd.print(char(3));  // выводим русскую букву "У"
  lcd.print("PA: ");   // используем латинские буквы
  lcd.print(t);        // выводим значение температуры на LCD
  lcd.print(char(1));  // выводим знак градуса

  lcd.setCursor(2,1);  // ставим курсор на 3 символ второй строки
  lcd.print("B");      // используем латинские буквы
  lcd.print(char(4));  // выводим русскую букву "Л"
  lcd.print("A");      // используем латинские буквы
  lcd.print(char(5));  // выводим русскую букву "Ж"
  lcd.print("HOCT");   // используем латинские буквы
  lcd.print(char(6));  // выводим русскую букву "Ь"
  lcd.print(": ");     // используем латинские буквы
  lcd.print(h);        // выводим значение влажности на LCD
  lcd.print("%");      // выводим знак процент
  
  delay(1000);
}

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

  1. в скетче можно использовать до 8 русских букв и символов, при необходимости заменяйте буквы из кириллицы — латинскими буквами;
  2. скорость обновления данных замените на необходимое значение.

Доступная мини-печь из прочного кирпича

Основание модели имеет форму прямоугольника, размером 0,89 х 0,51 метра. Это позволяет расположить ее в углу или в центре помещения, площадь которого находится в пределах 40 м2. Мини-печь состоит из поддувала, дымовых каналов, топки, вывода для дымохода.

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

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

Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации