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

Терморезистор и Arduino

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

Терморезистор и Arduino

Обратите внимание, черный это минус мы его берем с основной платы, где находится дисплей, красный у нас это плюс 5 вольт приходит на крайнюю ножку терморезистора, белый провод приходит в ардуино в разъем A0 – нулевой аналоговый разъем и здесь в средней точке подключается между сопротивлением на 10кОм и терморезистором.

Давайте теперь напишем скетч и посмотрим, какие данные будет давать терморезистор на LCD дисплей. Уберём из кода мусор, и пропишем некоторые переменные и константы. Как всегда, если мы работаем с дисплеем, надо подключать библиотеку liquidcrystal.

#include < LiquidCrystal.h>

Определим, какие контакты у нас используются в LCD, далее объявим константу analogPin для A0, объявим магическое число beta 4090, это величина, я так понимаю, снимаемая с терморезистора и объявим переменную Resistance – сопротивление, это величина 10 кОм которые мы используем.

LiquidCrystal lcd(4, 6, 10, 11, 12, 13);

#define analogPin  A0 
#define beta 4090 
#define resistance 10 

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

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

В цикле loop мы получим данные с аналогового разъёма путем analogRead из A0. Затем вставим такую длинную формулу для получения температуры в градусах Цельсия:

void loop()
{
  
  long a =analogRead(analogPin);
  
  float tempC = beta /(log((1025.0 * resistance / a - resistance) / resistance) + beta / 298.0) - 273.0;

...........

мы делим бета на выражение, вычисляем логарифм 1025 умноженное на сопротивление, делённое на значение analogPin минус сопротивление, за скобкой деленное на сопротивление, плюс бета деленное на 298 и минус 273.

Далее более простая формула - получим температуру в системе Фаренгейта, здесь мы умножаем на 1.8 полученную ранее температуру в градусах и прибавляем 32. Так мы получим Фаренгейт.

float tempF = 1.8*tempC + 32.0;

Теперь мы установим курсор в нулевую позицию на экране, выведем на печать методом print текст Temp, как вы помните из прошлых видео, кириллицу этот дисплей не поддерживает, напишем на английском. Далее выводим в этой же строке переменную tempС, которую получили ранее, весь текст будет в одном ряду, и мы выводим чуть дальше обозначение градусов Цельсия.

lcd.setCursor(0, 0); 
lcd.print("Temp: ");
lcd.print(tempC);
lcd.print("  C");

Обратите внимание, здесь раз-два-три пробела, чтобы текст отделялся от переменной. Затем мы устанавливаем курсор на вторую строку, для примечания напишу, что это вторая строка. Ну а это у нас первая строка. Установили курсор, вывели на второй строчке Fahr Фаренгейт и вывели переменную tempF.

lcd.setCursor(0, 1); 
lcd.print("Fahr: ");
lcd.print(tempF);

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

lcd.print(" F"); 
delay(200); 
}

И в конце делаем задержку в 200 миллисекунд. Форматируем наш скетч (ctrl+T), уберём лишние строки, всё у нас вроде как помещается. Давайте сохраним скетч на рабочий стол, подключим Arduino и теперь давайте его проверим и загрузим. Выполнили проверку, ошибок нет, зальём код в Arduino и посмотрим, что покажет терморезистор.

#include < LiquidCrystal.h>
LiquidCrystal lcd(4, 6, 10, 11, 12, 13);

#define analogPin  A0 
#define beta 4090 
#define resistance 10 

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

void loop()
{
  long a =analogRead(analogPin);
  
  float tempC = beta /(log((1025.0 * resistance / a - resistance) / resistance) + beta / 298.0) - 273.0;
  float tempF = 1.8*tempC + 32.0;
  lcd.setCursor(0, 0); 
  lcd.print("Temp: ");
  lcd.print(tempC);
  lcd.print("  C");
  
  lcd.setCursor(0, 1); 
  lcd.print("Fahr: ");
  lcd.print(tempF);
  lcd.print(" F"); 
  delay(200); 
}

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

Терморезистор и Arduino

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

Терморезистор и Arduino

Помимо простого наблюдения за температурой, немного доработав код скетча, можно выполнять действительно полезное дело. Например, добавив несколько строк кода с условием при температуре между 22 и 28 градусами, на 12 пин подадим напряжение, и включим реле, которое в свою очередь включит вентилятор.

if (tempC > 22 && tempC < 28) //оптимальный температурный режим для включения вентилятора
{
digitalWrite(12,HIGH); // подадим напряжение на 12 пин и включим реле
}

Реле, которые продаются на AliExpress и есть в комплекте к обучающему набору ардуино, вполне смогут коммутировать не только вентилятор, так как максимальный ток указан 10 ампер. Но работу с реле рассмотрим в следующий раз, так что впереди много чего интересного.

Смотрите видео: Подключаем терморезистор к arduino, получим температуру в градусах по Цельсию и по Фаренгейту


Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!




Cookies make it easier for us to provide you with our services. With the usage of our services you permit us to use cookies.
Ok