Информационный портал MSEVM






Главная > Arduino > Учебник для MEGA2560 > Урок 23. Thermometer.

Обзор

В этом уроке вы будете использовать 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





e-mail рассылки
Радиолюбитель
Подписаться письмом

















afb44aa5




Яндекс цитирования Rambler's Top100