Обзор
В этом уроке вы будете использовать LCD дисплей для отображения температуры.
Необходимые компоненты:
Описание компонентов
Thermistor:
Термистор - это терморезистор, который изменяет свое сопротивление с
температурой. Технически все резисторы являются термисторами - их
сопротивление изменяется незначительно с температурой, но это изменение обычно
очень мало и его трудно измерить. Термисторы сделаны так, что сопротивление
резко меняется с температурой, так что оно может быть 100 Ом или более
изменения на градус! Существует два вида термисторов: NTC (отрицательный
температурный коэффициент) и PTC (положительный температурный коэффициент).
В общем, вы увидите датчики NTC, используемые для измерение температуры.
PTC часто используются в качестве переустанавливаемых предохранителей -
повышение температуры увеличивает сопротивление, а это означает, что по мере
прохождения через них большего количества тока они нагреваются и "подавляют"
ток, что очень удобно для защиты цепей!
Принципиальная схема:
Монтажная схема:
Макет основан на макете из урока 22, поэтому он упроститвсе, если у вас все еще
есть это на макете. Рядом с потенциометром есть несколько перемычек, которые
были слегка сдвинуты на этом макете. Резистор 10 кОм и термистор - все это
новые дополнения к плате.
Код:
#include
int tempPin = 0;
// BS E D4 D5 D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup()
{
lcd.begin(16, 2);
}
void loop()
{
int tempReading = analogRead(tempPin);
// This is OK
double tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK )) * tempK ); // Temp Kelvin
float tempC = tempK - 273.15; // Convert Kelvin to Celcius
float tempF = (tempC * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit
/* replaced
float tempVolts = tempReading * 5.0 / 1024.0;
float tempC = (tempVolts - 0.5) * 10.0;
float tempF = tempC * 9.0 / 5.0 + 32.0;
*/
// Display Temperature in C
lcd.setCursor(0, 0);
lcd.print("Temp C ");
// Display Temperature in F
//lcd.print("Temp F ");
lcd.setCursor(6, 0);
// Display Temperature in C
lcd.print(tempC);
// Display Temperature in F
//lcd.print(tempF);
delay(500);
}
После подключения, пожалуйста, откройте программу в папке с кодом -
Урок 23 Thermometer и нажмите кнопку ЗАГРУЗИТЬ,
чтобы загрузить программу. См. Урок 2 для
получения подробной информации о загрузке программы при наличии ошибок.
Прежде чем вы сможете запустить эту программу, убедитесь, что вы установили
библиотеку "LiquidCrystal" или переустановите ее, если надо.
В противном случае ваш код не будет работать. Дополнительные сведения о
загрузке файла библиотеки см. Урок 1.
Скетч основан на уроке 22.
Загрузите его в свою плату Arduino, и вы обнаружите, что нагрев датчика
температуры, например если положить на него палец, увеличит показания
температуры. Я считаю полезным поместить строку комментария над командой "lcd"
// BS E D4 D5 D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
Это облегчает задачу, если вы решите изменить используемые вами пины.
В функции "цикл" теперь происходят две интересные вещи. Во-первых,
мы должны преобразовать аналог из датчика температуры в реальную температуру,
а во-вторых, мы должны решить, как их отображать. Прежде всего, давайте
рассмотрим расчет температуры.
int tempReading = analogRead(tempPin);
double tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK *
tempK )) * tempK );
float tempC = tempK - 273.15;
float tempF = (tempC * 9.0)/ 5.0 + 32.0;
Отображение изменяющихся показаний на жидкокристаллическом дисплее может быть
сложным. Основная проблема заключается в том, что считывание не всегда может
быть c одинаковым количеством цифр. Таким образом, если температура изменилась
с 101.50 до 99.00, то лишняя цифра от старого показания может остаться на
дисплее. Чтобы избежать этого, напишите всю строку ЖК - дисплея каждый раз.
lcd.setCursor(0, 0);
lcd.print("Temp C ");
lcd.setCursor(6, 0);
lcd.print(tempF);
Довольно странный комментарий служит для того, чтобы напомнить вам о 16
столбцах дисплея. Затем вы можете распечатать строку этой длины с пробелами,
где будет происходить фактическое чтение. Чтобы заполнить пробелы, установите
положение курсора в том месте, где должно появиться показание температуры.
Пример:
Тема форума:
http://msevm.com/forum/index.php?topic=9893
|