суббота, 28 мая 2016 г.

Метеостанция на 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 ");


}

1 комментарий:

  1. LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность
    почему не 20,4 ??

    ОтветитьУдалить