Практическое использование термистора с Arduino

в 19:29, , рубрики: arduino, термометр, Электроника для начинающих, метки: ,

image

Здравствуй, читатели. После прочтения нескольких статей на хабе Arduino я загорелся заполучить эту игрушку. И вот недавно получил посылку с платой. Затем побаловался со светодиодами и захотел чего-нибудь посерьёзнее. Решил сделать простейший термометр, используя всего термистор, резистор на 10 кОм и LCD дисплей. Кому интересно что получилось — прошу под кат.

Начало

Термистор — это переменный резистор, меняющий своё сопротивление в зависимости от температуры окружающей среды.

Нам потребуются следующие детали:
Arduino Uno — 1 шт
Термистор — 1 шт
Резистор c сопротивлением 10 кОм — 1 шт
LCD дисплей HJ1602A — 1 шт
Соединительные перемычки — несколько штук

Всё это у меня было, поэтому я сразу начал проектирование на breadboard.

Ножки к экрану я еще припаял в день покупки.
image

Затем присоединяем экран к выходам Arduino. У моего экрана распиновка такая.

1 (GND) GND — Земля
2 (VDD) 5v — Питание(+)
3 (VO/Contrast) — Управление контрастностью (сюда я подключил переменный резистор)
4 (RS) — 12 — Канал данных
5 (RW) — 11 — Канал данных
6 (E) — 10 — Канал данных
11 (DB4) — 5 — Канал данных
12 (DB5) — 4 — Канал данных
13 (DB6) — 3 — Канал данных
14 (DB7) — 2 — Канал данных
15 (BL1/Backlight1) — 13 — Питание подсветки(+)
16 (BL2/Backlight2) — GND — Земля(-)

Получилась вот такая картина.
image

Далее подключим одну ногу термистора к аналоговому входу A4 и резистор на 10 кОм в землю, а вторую ногу термистора к 5V.
image

В общем то и всё. Аппаратная часть готова. Вот схема.
image

Программирование

С программированием тут всё понятно. Исходный код скетча:

// подключаем две библиотеки для работы с LCD и математических вычислений
#include <LiquidCrystal.h>
#include <math.h>


LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD

int backLight = 13;

void setup(void) {
  pinMode(backLight, OUTPUT);
  
  digitalWrite(backLight, HIGH); 
  lcd.begin(16, 2);             
  lcd.clear();                  
  lcd.setCursor(0,0);   
Serial.begin(9600);  
}

 // создаем метод для перевода показаний сенсора в градусы Цельсия 
double Getterm(int RawADC) {
  double temp;
  temp = log(((10240000/RawADC) - 10000));
  temp = 1 / (0.001129148 + (0.000234125 * temp) + (0.0000000876741 * temp * temp * temp));
  temp = temp - 273.15;
  return temp;
}

// создаем метод для вывода на экран показаний сенсора
void printTemp(void) { 
  double temp = Getterm(analogRead(4));  // считываем показания с сенсора
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temperature is:");
  lcd.setCursor(0,1);
  lcd.print(temp);
  lcd.print(" C");
  
  }


void loop(void) {
  printTemp(); // вызываем метод, созданный ранее
  delay(1000);
}

Результат работы программы.
image

Автор: hookenful

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js