Всем привет, давайте сегодня поработаем с еще одним элементом, который входит в комплект 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, получим температуру в градусах по Цельсию и по Фаренгейту




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

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok