Метеостанция на 4 строчном ЖК дисплее…
Вот наконец получил и держу в руках четырех строчный LCD дисплей с I2C модулем. Дисплей выглядит
впечатляющее: довольно больших размеров, и при этом на нем в каждой из четырех
строк может поместиться 20 символов. Как раз более чем достаточно для нашего
нового проекта. В новом проекте будем собирать многоцелевое устройство, которое
может измерять атмосферное давление, температуру и влажность. Все это будет
выводится на экран.
Первым делом просто подключаю дисплей к плате с нашего
прошлого проекта «метео-1». Даже скетч не стал переписывать, для первого
тестирования дисплея сойдет и старый. Вот подключаю четыре провода от I2C модуля, и можно приступать к тесту.
Подключаю к ардуино повербанк и на экране появилась информация о температуре,
давлении и влажности…
Теперь самое время заняться улучшениями. Первое что нужно
сделать, так это давление выводить отдельной строкой. Добавляю в скетч пару
строчек кода, тестирую… Работает! Следующим шагом нужно настроить правильный
вывод размерности величин: после цифры дальше должно идти или проценты, или
значок С, или мм РТ ст…
Снова работаем с программой. Скетч пришлось пару раз
переделывать, так как пришлось «выловить» и исправить пару ошибок, и один
недочет. Зато теперь все получилось как у настоящей метеостанции. Как
говориться для начала хватит! Главное что все работает теперь как и
планировалось.
Скетч:
#include <Wire.h>
#include <Adafruit_BMP085.h>
float t;
float p;
Adafruit_BMP085 bmp;
#include <Wire.h> // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN A0 // к какому пину будет подключен сигнальный
//выход датчика
//выбор используемого датчика
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//инициализация датчика
DHT dht(DHTPIN, DHTTYPE);
byte degree[8] = // кодируем символ градуса
{
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
};
LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность
void setup()
{
lcd.init(); // Инициализация lcd
lcd.backlight(); // Включаем подсветку
lcd.createChar(1, degree); // Создаем символ под номером 1
Serial.begin(9600);
dht.begin();
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
void loop() {
// Добавляем паузы в несколько секунд между измерениями
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
t=bmp.readTemperature();
p=bmp.readPressure();
p=p/133.33;
p=p+8.8; // поправка
// Выводим показания влажности и температуры
lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
lcd.print("Hum = "); // Выводим текст
lcd.setCursor(7, 0); // Устанавливаем курсор на 7 символ
lcd.print(h, 0); // Выводим на экран значение влажности
lcd.setCursor(12,0);
lcd.print("%");
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Tem = "); // Выводим текст, \1 - значок градуса
lcd.setCursor(7, 1); // Устанавливаем курсор на 7 символ
lcd.print(t,1); // Выводим значение температуры
lcd.setCursor(12,1);
lcd.print("C");
//delay(2500);
lcd.setCursor(0, 2); // Устанавливаем курсор в начало 1 строки
lcd.print("P = "); // Выводим текст
lcd.setCursor(4, 2); // Устанавливаем курсор на 7 символ
lcd.print(p, 1); // Выводим на экран значение давления
lcd.setCursor(10,2);
lcd.print("mm Hg ");
}
#include <Wire.h>
#include <Adafruit_BMP085.h>
float t;
float p;
Adafruit_BMP085 bmp;
#include <Wire.h> // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN A0 // к какому пину будет подключен сигнальный
//выход датчика
//выбор используемого датчика
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//инициализация датчика
DHT dht(DHTPIN, DHTTYPE);
byte degree[8] = // кодируем символ градуса
{
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
};
LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность
void setup()
{
lcd.init(); // Инициализация lcd
lcd.backlight(); // Включаем подсветку
lcd.createChar(1, degree); // Создаем символ под номером 1
Serial.begin(9600);
dht.begin();
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
void loop() {
// Добавляем паузы в несколько секунд между измерениями
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
t=bmp.readTemperature();
p=bmp.readPressure();
p=p/133.33;
p=p+8.8; // поправка
// Выводим показания влажности и температуры
lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
lcd.print("Hum = "); // Выводим текст
lcd.setCursor(7, 0); // Устанавливаем курсор на 7 символ
lcd.print(h, 0); // Выводим на экран значение влажности
lcd.setCursor(12,0);
lcd.print("%");
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Tem = "); // Выводим текст, \1 - значок градуса
lcd.setCursor(7, 1); // Устанавливаем курсор на 7 символ
lcd.print(t,1); // Выводим значение температуры
lcd.setCursor(12,1);
lcd.print("C");
//delay(2500);
lcd.setCursor(0, 2); // Устанавливаем курсор в начало 1 строки
lcd.print("P = "); // Выводим текст
lcd.setCursor(4, 2); // Устанавливаем курсор на 7 символ
lcd.print(p, 1); // Выводим на экран значение давления
lcd.setCursor(10,2);
lcd.print("mm Hg ");
}