Здравствуй, читатели. После прочтения нескольких статей на хабе Arduino я загорелся заполучить эту игрушку. И вот недавно получил посылку с платой. Затем побаловался со светодиодами и захотел чего-нибудь посерьёзнее. Решил сделать простейший термометр, используя всего термистор, резистор на 10 кОм и LCD дисплей. Кому интересно что получилось — прошу под кат.
Начало
Термистор — это переменный резистор, меняющий своё сопротивление в зависимости от температуры окружающей среды.
Нам потребуются следующие детали:
Arduino Uno — 1 шт
Термистор — 1 шт
Резистор c сопротивлением 10 кОм — 1 шт
LCD дисплей HJ1602A — 1 шт
Соединительные перемычки — несколько штук
Всё это у меня было, поэтому я сразу начал проектирование на breadboard.
Ножки к экрану я еще припаял в день покупки.
Затем присоединяем экран к выходам 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 — Земля(-)
Получилась вот такая картина.
Далее подключим одну ногу термистора к аналоговому входу A4 и резистор на 10 кОм в землю, а вторую ногу термистора к 5V.
В общем то и всё. Аппаратная часть готова. Вот схема.
Программирование
С программированием тут всё понятно. Исходный код скетча:
// подключаем две библиотеки для работы с 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);
}
Результат работы программы.
Автор: hookenful