Arduino:Примеры/Термостат с отображением информации на LCD-дисплее
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Термостат с отображением информации на LCD-дисплее
Данный пример демонстрирует построение термостата с отображением информации на ЖК-дисплее. Arduino считывает температуру с I2C-датчика температуры TC74A0-5.0VAT и если текущее значение температуры больше или равно значению уставки, включает кратковременную сигнализацию и вентилятор. При понижении температуры ниже уставки срабатывания вентилятор отключается. На ЖК-дисплее отображается текущая температура и значение уставки срабатывания. Две кнопки используются для настройки уставки срабатывания(больше/меньше).
Необходимые компоненты
- Плата Arduino Uno, 1 шт.;
- 16x2-символьный ЖК-дисплей, 1 шт.;
- I2C-датчика температуры TC74A0-5.0VAT, 1 шт.;
- Резистор 150 Ом, 1 шт.;
- Резистор 4,7 кОм, 2 шт.;
- Резистор 10 кОм, 2 шт.;
- Потенциометр 10 кОм, 1 шт.;
- Кнопка, 2 шт.;
- Маломощный мотор или вентилятор, 1 шт.;
- Динамик, 1 шт.;
- Макетная плата;
- Провода перемычки;
Монтажная схема
Соберите схему согласно монтажной схеме.
Подключение дисплея:
Контакт ЖК-дисплея | Обозначение контакта ЖК-дисплея | Место подключения |
---|---|---|
1 | Vss | плата Arduino: Земля, GND |
2 | Vdd | плата Arduino: Питание, +5В, 5V |
3 | Vo | Средний контакт потенциометра |
4 | Rs | плата Arduino: 2ой цифровой контакт |
5 | RW | плата Arduino: Земля, GND |
6 | En | плата Arduino: 3ий цифровой контакт |
7 | D0 | Линия передачи данных 0 (не используется) |
8 | D1 | Линия передачи данных 1 (не используется) |
9 | D2 | Линия передачи данных 2 (не используется) |
10 | D3 | Линия передачи данных 3 (не используется) |
11 | D4 | плата Arduino: 4ый цифровой контакт |
12 | D5 | плата Arduino: 5ый цифровой контакт |
13 | D6 | плата Arduino: 6ой цифровой контакт |
14 | D7 | плата Arduino: 7ой цифровой контакт |
15 | A | плата Arduino: Питание, +5В, 5V |
16 | K | плата Arduino: Земля, GND |
Распиновка параллельного ЖК-дисплея
Контакт | Обозначение | Назначение |
---|---|---|
1 | Vss | Земля |
2 | Vdd | Питание, +5В |
3 | Vo | Настройка контрастности |
4 | Rs | Выбор режима(командный или отображение данных) |
5 | RW | Чтение/запись |
6 | En | Готовность данных |
7 | D0 | Линия передачи данных 0 (не используется) |
8 | D1 | Линия передачи данных 1 (не используется) |
9 | D2 | Линия передачи данных 2 (не используется) |
10 | D3 | Линия передачи данных 3 (не используется) |
11 | D4 | Линия передачи данных 4 |
12 | D5 | Линия передачи данных 5 |
13 | D6 | Линия передачи данных 6 |
14 | D7 | Линия передачи данных 7 |
15 | A | Анод подсветки |
16 | K | Катод подсветки |
Код
#include <Wire.h> // Подключаем библиотеку Wire для работы с I2C устройствами
#include <LiquidCrystal.h> // Подключаем библиотеку LiquidCrystal для работы с ЖК-дисплеем
#define TEMP_ADDR 72 // Адрес нашего I2C датчика температуры
#define SPEAKER 8 // Контакт к которому подключен динамик
#define DOWN_BUTTON 9 // Контакт к которому подключена кнопка уменьшения температуры срабатывания
#define UP_BUTTON 10 // Контакт к которому подключена кнопка увеличения температуры срабатывания
#define FAN 11 // Контакт к которому подключен моторчик(вентилятор)
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // Инициализация библиотеки LiquidCrystal с номерами контактов к которым подключен дисплей
// Определяем пользовательский символ градуса для отображения на ЖК-дисплее
byte degree[8] = {
B00110,
B01001,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000,
};
// Определяем пользовательский символ "вентилятор включен" для отображения на ЖК-дисплее
byte fan_on[8] = {
B00100,
B10101,
B01110,
B11111,
B01110,
B10101,
B00100,
B00000,
};
// Определяем пользовательский символ "вентилятор выключен" для отображения на ЖК-дисплее
byte fan_off[8] = {
B00100,
B00100,
B00100,
B11111,
B00100,
B00100,
B00100,
B00000,
};
// Переменная для устранения дребезга контакта кнопки
boolean lastDownTempButton = LOW;
boolean currentDownTempButton = LOW;
boolean lastUpTempButton = LOW;
boolean currentUpTempButton = LOW;
int set_temp = 23; // Температура срабатывания по умолчанию
boolean one_time = false; // переменная для единичного срабатывания динамика
void setup()
{
pinMode(FAN, OUTPUT);
Wire.begin(); // Создание объекта Wire для датчика температуры
lcd.begin(16, 2); // Настройка ЖК-дисплея (число столбцов и строк)
// Определяем пользовательские символы
lcd.createChar(0, degree);
lcd.createChar(1, fan_off);
lcd.createChar(2, fan_on);
// Выводим на ЖК-дисплей статичные надписи
lcd.setCursor(0,0);
lcd.print("Current:");
lcd.setCursor(10,0);
lcd.write((byte)0);
lcd.setCursor(11,0);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Set:");
lcd.setCursor(10,1);
lcd.write((byte)0);
lcd.setCursor(11,1);
lcd.print("C");
lcd.setCursor(15,1);
lcd.write(1);
}
/*
* Функция анти-дребезга, которая работает с несколькими контактами
*/
boolean debounce(boolean last, int pin)
{
boolean current = digitalRead(pin);
if (last != current)
{
delay(5);
current = digitalRead(pin);
}
return current;
}
void loop()
{
// Получаем температуру от I2C датчика температуры
// Отправка запроса
Wire.beginTransmission(TEMP_ADDR); // Выбор ведомого устройства отправкой его адреса
Wire.write(0); // Отправка 0, тем самым указывая что мы хотим прочитать данные из регистра температуры нашего датчика
Wire.endTransmission(); // Отправка стоп-бита, тем самым сообщаем об окончании записи на устройство
// Чтение температуры с датчика
Wire.requestFrom(TEMP_ADDR, 1); // Запрос 1 байта по адресу устройства
while(Wire.available() == 0); // Ожидаем ответа
int c = Wire.read(); // Чтение данных в переменную, значение температуры в градусах Цельсия
lcd.setCursor(8,0); // Перемещаем курсор на ЖК-дисплее
lcd.print(c); // Выводим значение температуры в заданной позиции
// Считывания состояний кнопок с использованием антидребезга
currentDownTempButton = debounce(lastDownTempButton, DOWN_BUTTON);
currentUpTempButton = debounce(lastUpTempButton, UP_BUTTON);
// Если нажата кнопка уменьшения уставки срабатывания, то уменьшаем значение уставки
if (lastDownTempButton== LOW && currentDownTempButton == HIGH)
{
set_temp--;
}
// Если нажата кнопка увеличения уставки срабатывания, то увеличиваем значение уставки
else if (lastUpTempButton== LOW && currentUpTempButton == HIGH)
{
set_temp++;
}
// Выводим значение уставки срабатывания на ЖК-дисплей
lcd.setCursor(8,1);
lcd.print(set_temp);
lastDownTempButton = currentDownTempButton;
lastUpTempButton = currentUpTempButton;
// Если текущая температура равна или больше значения уставки, то....
if (c >= set_temp)
{
// Запускаем звуковую сигнализацию...
if (!one_time)
{
tone(SPEAKER, 400);
delay(500);
one_time = true;
}
// отключаем звуковую сигнализацию...
else
{
noTone(SPEAKER);
}
// Включаем вентилятор и обновляем значок активности вентилятора на включен
digitalWrite(FAN, HIGH);
lcd.setCursor(15,1);
lcd.write(2);
}
// Если значение температуры ниже уставки срабатывания, то....
else
{
// Убеждаемся, что звуковая сигнализация выключена, сбрасываем значение переменной 'one_time'
// Отключаем вентилятор и обновляем значок активности вентилятора на выключен
noTone(SPEAKER);
one_time = false;
digitalWrite(FAN, LOW);
lcd.setCursor(15,1);
lcd.write(1);
}
}
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino