Влажность воздуха что при выращивании рассады , что летом в теплице , да и нам самим , в нашей среде обитания однозначно значимый параметр
Как правило ничего мы кардинально поменять не имеем возможности , так хоть быть в курсе ситуации уже если не хлеб , то сухарики
За последние 10-15 лет , как китайцы начали нас баловать своими творениями , много каких изделий от них перепробовал , но единственный датчик что устроил меня от и до это GXHT30 , в этой серии есть и другие варианты , но самый распространенный и весьма не дорогой именно он
Вариант первый :
Вывод влажности воздуха , ну и заодно температуры (коль ее датчик в тот же кристалл засандален) на жидкокристаллический дисплей
Этот датчик выдает значение и влажности , и температуры с дискретностью до сотых долей , такая скрупулезность не всегда и нужна , но всегда можно программно ограничить вывод данных до десятых долей , а то и до целых чисел
Комплектация :
Arduino nano
HD44780 1602 + модуль посл.интерфейса
GXHT30
Схема подключения :
Программа (скетч) :
#include <LiquidCrystal_I2C.h>//библиотека под LCD
#include <Wire.h>//библиотека под шину I2C
#include "Adafruit_SHT31.h"// библиотека под эту серию датчиков влажности
LiquidCrystal_I2C lcd(0x27,16,2);//прописываем свой LCD дисплей по адресу 27 или 3F и его знакоместам
Adafruit_SHT31 sht31 = Adafruit_SHT31();
void setup() {
lcd.init();// Инициализация lcd дисплея
lcd.backlight();// Включение подсветки дисплея
sht31.begin(0x44);//инициализация датчика GXHT30 44 адресу
}
void loop() {
float h = sht31.readHumidity();
float t = sht31.readTemperature();
lcd.setCursor(2, 0);
lcd.print(h);
lcd.setCursor(7, 0);
lcd.print("%");
lcd.setCursor(7, 1);
lcd.print(t,1);//0 или 1 после запятой выводит на экран целое значение или с десятыми долями
lcd.setCursor(11, 1);
lcd.print("C");
delay(1000);//период опроса 1сек.
}
Это я показал ленивый вариант программы , в работе это будет выглядеть так :
специально показал что можно выводить данные и с одним , и с двумя знаками после запятой
Но как видим место на экране еще завались , ничего полезного нам больше вывести нечего , так что можно забить пустое место шлаком , создать так сказать красоту
В сборке ничего не меняем , только перепишем программу :
#include <LiquidCrystal_I2C.h>//библиотека под LCD
#include <Wire.h>//библиотека под шину I2C
#include "Adafruit_SHT31.h"// библиотека под эту серию датчиков влажности
LiquidCrystal_I2C lcd(0x27,16,2);//прописываем свой LCD дисплей по адресу 27 или 3F и его знакоместам
Adafruit_SHT31 sht31 = Adafruit_SHT31();
byte X4[8] = {B10101,B10101,B10101,B11111,B10101,B10101,B10101,B00000,}; // Буква "Ж"
byte X8[8] = {B00011,B00111,B00101,B00101,B01101,B01001,B11001,B00000,}; // Буква "Л"
byte X9[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000,}; // Буква "П"
byte X10[8] = {B10001,B10001,B10001,B01010,B00100,B01000,B10000,B00000,}; // Буква "У"
byte X16[8] = {B10000,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Ь"
void setup() {
lcd.init();// Инициализация lcd дисплея
lcd.backlight();// Включение подсветки дисплея
sht31.begin(0x44);//инициализация датчика GXHT30 44 адресу
}
void loop() {
lcd.createChar(1,X4);
lcd.createChar(2,X8);
lcd.createChar(3,X9);
lcd.createChar(4,X10);
lcd.createChar(5,X16);
float h = sht31.readHumidity();
float t = sht31.readTemperature();
lcd.setCursor(0, 0);
lcd.print("B\2A\1HOCT\5");
lcd.setCursor(12, 0);
lcd.print(h,0);//0 или 1 после запятой выводит на экран целое значение или с десятыми долями
lcd.setCursor(14, 0);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("TEM\3EPAT\4PA");
lcd.setCursor(12, 1);
lcd.print(t,0);//0 или 1 после запятой выводит на экран целое значение или с десятыми долями
lcd.setCursor(14, 1);
lcd.print("C");
delay(1000);//период опроса 1сек.
}
Ну вот теперь совсем другой вид
, хотя информации ни на грош больше не стало :
Ну и , опять же для примера , убрал дробные части значений
Да заодно показал в коде как можно вывести на экран русские буквы , а то табло умеет только на латинице материться
Вариант второй :
Вывод на LCD дисплей данных с двух таких датчиков , к сожалению только с двух , чип что в датчике влажности стоит умеет лишь по двум адресам по шине I2C на связь выходить(44 и 45) , адрес переключается подачей разного уровня на вторую ногу чипа , но злые китайцы почти никогда не разводят эту ногу на плате , тупо сажают ее на массу
Ну два датчика на один процессорный мозг это уже лучше чем один , можно сравнить влажность в разных точках на одном экране , хотя у меня есть потребность к февралю снимать показания с трех гигрометров на один мозг и экран , в принципе есть идея как обходными путями это сделать , но это в перспективе
Комплектация :
Arduino nano
HD44780 1602 + модуль посл.интерфейса
GXHT30 - 2 штуки , но один из них с доступом к заветной второй ноге чипа
Схема подключения :
Программа (скетч) :
#include <LiquidCrystal_I2C.h>//библиотека под LCD
#include <Wire.h>//библиотека под шину I2C
#include "Adafruit_SHT31.h"// библиотека под эту серию датчиков влажности
LiquidCrystal_I2C lcd(0x27,16,2);//прописываем свой LCD дисплей по адресу 27 или 3F и его знакоместам
Adafruit_SHT31 W1 = Adafruit_SHT31();
Adafruit_SHT31 W2 = Adafruit_SHT31();
void setup() {
lcd.init();// Инициализация lcd дисплея
lcd.backlight();// Включение подсветки дисплея
W1.begin(0x44);//инициализация датчика GXHT30 44 адресу
W2.begin(0x45);//инициализация датчика GXHT30 45 адресу
}
void loop() {
float h1 = W1.readHumidity();//первый датчик , запрос влажности
float t1 = W1.readTemperature();//первый датчик , запрос температуры
lcd.setCursor(1, 0);
lcd.print(h1);
lcd.setCursor(6, 0);
lcd.print("%");
lcd.setCursor(1, 1);
lcd.print(t1);
lcd.setCursor(6, 1);
lcd.print("C");
float h2 = W2.readHumidity();//второй датчик , запрос влажности
float t2 = W2.readTemperature();//второй датчик , запрос температуры
lcd.setCursor(9, 0);
lcd.print(h2);
lcd.setCursor(14, 0);
lcd.print("%");
lcd.setCursor(9, 1);
lcd.print(t2);
lcd.setCursor(14, 1);
lcd.print("C");
delay(1000);//период опроса 1сек.
}
В работе это выглядит так :
тут уже нет место для надписей на заборе , только все по существу
Кстати приятно порадовала что разбежка с показаниях крайне не существенна
Вариант третий :
Вывод значений влажности воздуха на четырехразрядный светодиодный индикатор
Подчас ведь не надо ничего лишнего , только одно сначение и все
Комплектация :
Arduino nano
TM1637
GXHT30
Схема подключения :
Не совсем тот модуль TM1637 на схеме изображен , должен быть вариант на котором нет двоеточия , а только одни запятые стоят , дело в том что в модулях с двоеточием запятые стоят бутафорские , они не участвуют в работе
Можно и такой модуль конечно ставить , но разделительного знака у мас не будет
Нужный индикатор выглядит так :
на нем нет посередине двоеточия как в часовом варианте
Ну и скетч под светодиодный вариант :
#include <TM1637.h>// библиотека для подключение модуля семисегментного инд. TM1637
#include "Adafruit_SHT31.h"// библиотека под эту серию датчиков влажности
//#include <Wire.h>//библиотека для работы интерфейсом I2C
//случайно выяснил что эту библиотеку необязательно ставить , по крайней мере в этом скетче
Adafruit_SHT31 sht31 = Adafruit_SHT31();
TM1637 tm1637(3,2);
void setup() {
//Wire.begin();
//tm1637.init();// инициализация библиотеки «TM1637.h»
//и эта инициализация не нужна , можно и ниже под 4056 исключить , но тогда запятые погаснут , только и всего
tm1637.init(D4056A);//установка на работу второго дисплея с дробными числами
tm1637.set(4);//установка яркости , указанная константа равна 4 , диапазон установки 0-7
sht31.begin(0x44);//инициализация датчика GXHT30 44 адресу
}
void loop() {
float h = sht31.readHumidity();
tm1637.display(h);
delay(500);//период опроса 0.5сек.
}
В этом скетче вдруг усомнился в необходимости некоторых строк кода , и позволил себе их перевести в разряд комментария
Я конечно самоучка , мне с того програмиские догмы не святое писание , но вот все равно в толк не возьму почему тут к примеру библиотека под I2C нафиг не нужна , соответственно и ее активация
Библиотека под 1637 кристалл востребована , но ее акривация не нужна , tm1637.init() - полный балласт , tm1637.init(D4056A) - а без этой вариации все работает , только запятые умирают
Чудеса да и только , видно только диледант , то бишь спец без диплома , способен выкинуть из машины , самолета , танка лишние детали , а изделие и дальше поедит , полетит как ни в чем не бывало
- Читать далее...
- 0 комментариев
- 76 просмотров
Перейти к содержанию