В этом уроке вы будете использовать LCD дисплей для отображения температуры.
Необходимые компоненты:
Термистор - это терморезистор, который изменяет свое сопротивление с
температурой. Технически все резисторы являются термисторами - их
сопротивление изменяется незначительно с температурой, но это изменение обычно
очень мало и его трудно измерить. Термисторы сделаны так, что сопротивление
резко меняется с температурой, так что оно может быть 100 Ом или более
изменения на градус! Существует два вида термисторов: NTC (отрицательный
температурный коэффициент) и PTC (положительный температурный коэффициент).
В общем, вы увидите датчики NTC, используемые для измерение температуры.
PTC часто используются в качестве переустанавливаемых предохранителей -
повышение температуры увеличивает сопротивление, а это означает, что по мере
прохождения через них большего количества тока они нагреваются и "подавляют"
ток, что очень удобно для защиты цепей!
Принципиальная схема:
#includeint 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
столбцах дисплея. Затем вы можете распечатать строку этой длины с пробелами,
где будет происходить фактическое чтение. Чтобы заполнить пробелы, установите
положение курсора в том месте, где должно появиться показание температуры.
Пример: