В ходе этой статьи я покажу как сделать комнатный термометр на Arduino, от подключения приборов и до кода.

Нам понадобится:

Для начала стоит отметить, что все LCD1602 идут без ножек с ходом в 2.54мм, так что стоит взять 16 таких ножек и припаять их к отверстиям на вашем LCD. Сделать это не сложно и справится с этим любой советский паяльник.
Нужно распределить все компоненты по макетной плате и подключить соединительные провода. Для начала воткнем LCD в макетную плату и подключим ножки «Vss» к -, а «Vdd» к +5В, тоже проделаем и с предпоследней и последней ножной — «А» к плюсу, а «К» к минусу.
Теперь нужно включить потенциометр — крайние ножки соединяем с + и — (полярность не важна), а центральную ножку подключим к «Vo» на дисплее. Теперь крутя ручку потенциометра можно регулировать контрастность.
Продолжим подключать дисплей — «RW» к минусу, «RS» — к 12 пину ардуино, а «E» — к 11.
От «D0» до «D3» не трогаем, а вот ножки от «D4» до «D7» соединяем с 5-2 пином соответственно.
Остается подключить DS18B20 или схожую модель — между ножками + и data ставим резистор на 4.7кОм, плюс и минус подключаем к плюсу и минусу Arduino, а вот data к 8 пину
Готово! Выглядит это так:

(на фото я загрузил в Arduino «hello, world!» из примеров к библиотеке LiquidCrystal.h)
Перед написанием кода скачайте библиотеку OneWire, она нам понадобится.
Перейдем к коду:
Остается загрузить код в Arduino, и мы увидим такое:


Нам понадобится:
- Arduino (в моем случае — Leonardo, но может быть и любая другая)
- LCD-дисплей совместимый с HD44780 (16 символов, две строки)
- Макетная плата
- Потенциометр на 10кОм
- Датчик DS18B20, DS18S20 или же DS1822
- Резистор на 4.7кОм
- Соединительные провода

Для начала стоит отметить, что все LCD1602 идут без ножек с ходом в 2.54мм, так что стоит взять 16 таких ножек и припаять их к отверстиям на вашем LCD. Сделать это не сложно и справится с этим любой советский паяльник.
Нужно распределить все компоненты по макетной плате и подключить соединительные провода. Для начала воткнем LCD в макетную плату и подключим ножки «Vss» к -, а «Vdd» к +5В, тоже проделаем и с предпоследней и последней ножной — «А» к плюсу, а «К» к минусу.
Теперь нужно включить потенциометр — крайние ножки соединяем с + и — (полярность не важна), а центральную ножку подключим к «Vo» на дисплее. Теперь крутя ручку потенциометра можно регулировать контрастность.
Продолжим подключать дисплей — «RW» к минусу, «RS» — к 12 пину ардуино, а «E» — к 11.
От «D0» до «D3» не трогаем, а вот ножки от «D4» до «D7» соединяем с 5-2 пином соответственно.
Остается подключить DS18B20 или схожую модель — между ножками + и data ставим резистор на 4.7кОм, плюс и минус подключаем к плюсу и минусу Arduino, а вот data к 8 пину
Готово! Выглядит это так:

(на фото я загрузил в Arduino «hello, world!» из примеров к библиотеке LiquidCrystal.h)
Перед написанием кода скачайте библиотеку OneWire, она нам понадобится.
Перейдем к коду:
#include <LiquidCrystal.h>
#include <OneWire.h>
OneWire ds(8); // Подключаем датчик к 8 цифровому пину
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Подключаем LCD
void setup(void)
{
Serial.begin(9600);// Связь с ПК
lcd.begin(16, 2); //16 знаков, 2 строки
lcd.print("Temperature:"); //Печатаем верхнюю строку LCD
}
void loop(void)
{
byte i;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
// Ищем алрес датчика
if ( !ds.search(addr))
{
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
// Проверяем не было ли помех при передаче
if (OneWire::crc8(addr, 7) != addr[7])
{
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// Определяем серию датчика
switch (addr[0])
{
case 0x10:
Serial.println(" Chip = DS18S20");
type_s = 1;
break;
case 0x28:
Serial.println(" Chip = DS18B20");
type_s = 0;
break;
case 0x22:
Serial.println(" Chip = DS1822");
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr); // Выбираем адрес
ds.write(0x44, 1); // Производим замер, в режиме паразитного питания
delay(1000);
ds.reset();
ds.select(addr);
ds.write(0xBE); // Считываем оперативную память датчика
for ( i = 0; i < 9; i++)
{
data[i] = ds.read(); // Заполняем массив считанными данными
} // Данные о температуре содержатся в первых двух байтах, переведем их в одно значение и преобразуем в шестнадцатиразрядное число
int16_t raw = (data[1] << 8) | data[0]; // Переводим температуру в шкалы по Цельсию и Фаренгейту
if (type_s)
{
raw = raw << 3;
}
if (data[7] == 0x10)
{
raw = (raw & 0xFFF0) + 12 - data[6];
} else {
byte cfg = (data[4] & 0x60);
if (cfg == 0x00)
raw = raw << 3;
else if (cfg == 0x20)
raw = raw << 2;
else if (cfg == 0x40) \
raw = raw << 1;
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
Serial.print("Temp = "); //Пишем в ПК информацию
Serial.print(celsius);
Serial.print(" C, ");
Serial.print(fahrenheit);
Serial.println(" F");
lcd.setCursor(0, 1); //Пишем в LCD на 2 строке
lcd.print("C:");
lcd.setCursor(2, 1);
lcd.print(celsius); //Цельсии
lcd.setCursor(8, 1);
lcd.print("F:");
lcd.setCursor(10, 1);
lcd.print(fahrenheit); //Фаренгейты
}
Остается загрузить код в Arduino, и мы увидим такое:
