Перейти к содержанию
Клуб помидороводов - tomat-pomidor.com

  • записи
    3
  • комментарий
    1
  • просмотра
    164

О блоге

Мальчишечьи забавы , но для хозяйства полезней что футбол по телевизору:cheesy:

Записи в этом блоге

feniсs

Гигрометры , 3 варианта на основе датчика GXHT30


Arduino GXHT30 HD44780 TM1637

Влажность воздуха что при выращивании рассады , что летом в теплице , да и нам самим , в нашей среде обитания однозначно значимый параметр

Как правило ничего мы кардинально поменять не имеем возможности , так хоть быть в курсе ситуации уже если не хлеб , то сухарики:cheesy:

За последние 10-15 лет , как китайцы начали нас баловать своими творениями , много каких изделий от них перепробовал , но единственный датчик что устроил меня от и до это GXHT30 , в этой серии есть и другие варианты , но самый распространенный и весьма не дорогой именно он

Вариант первый :

Вывод влажности воздуха , ну и заодно температуры (коль ее датчик в тот же кристалл засандален) на жидкокристаллический дисплей

Этот датчик выдает значение и влажности , и температуры с дискретностью до сотых долей  , такая скрупулезность не всегда и нужна , но всегда можно программно ограничить вывод данных до десятых долей , а то и до целых чисел

Комплектация :

Arduino nano

HD44780 1602 + модуль посл.интерфейса

GXHT30

Схема подключения :

1.thumb.JPG.81d3f0987925c0faf860672f1bc5c66b.JPG

Программа (скетч) :

#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сек.

}

Это я показал ленивый вариант программы , в работе это будет выглядеть так :

2.thumb.JPG.768fad3fa4a136202c274e7a19bf5a1e.JPG специально показал что можно выводить данные и с одним , и с двумя знаками после запятой

Но как видим место на экране еще завались , ничего полезного нам больше вывести нечего , так что можно забить пустое место шлаком , создать так сказать красоту:cheesy:

В сборке ничего не меняем , только перепишем программу :

#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сек.

}

 

 

Ну вот теперь совсем другой вид:hat: , хотя информации ни на грош больше не стало :

3.thumb.JPG.67ba68c5131ebd2bb2724050c9abad12.JPG

Ну и , опять же для примера , убрал дробные части значений

Да заодно показал в коде как можно вывести на экран русские буквы , а то табло умеет только на латинице материться

Вариант второй :

Вывод на LCD дисплей данных с двух таких датчиков , к сожалению только с двух , чип что в датчике влажности стоит умеет лишь по двум адресам по шине I2C на связь выходить(44 и 45) , адрес переключается подачей разного уровня на вторую ногу чипа , но злые китайцы почти никогда не разводят эту ногу на плате , тупо сажают ее на массу

Ну два датчика на один процессорный мозг это уже лучше чем один , можно сравнить влажность в разных точках на одном экране , хотя у меня есть потребность к февралю снимать показания с трех гигрометров на один мозг и экран , в принципе есть идея как обходными путями это сделать , но это в перспективе

Комплектация :

Arduino nano

HD44780 1602 + модуль посл.интерфейса

GXHT30 - 2 штуки , но один из них с доступом к заветной второй ноге чипа

Схема подключения :

4.thumb.JPG.8b58ab86cba55d7c0ced13e96b4e91bd.JPG

Программа (скетч) :

#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сек.

}

В работе это выглядит так :

5.thumb.JPG.f5fd637b5bb484c6a1dc3e823a590198.JPG тут уже нет место для надписей на заборе , только все по существу:01mail:

Кстати приятно порадовала что разбежка с показаниях крайне не существенна

Вариант третий :

Вывод значений влажности воздуха на четырехразрядный светодиодный индикатор

Подчас ведь не надо ничего лишнего , только одно сначение и все

Комплектация :

Arduino nano

TM1637

GXHT30

Схема подключения :

6.thumb.JPG.a4bc219899e74dc711be4ac1821b3ce5.JPG

Не совсем тот модуль TM1637 на схеме изображен , должен быть вариант на котором нет двоеточия , а только одни запятые стоят , дело в том что в модулях с двоеточием запятые стоят бутафорские , они не участвуют в работе

Можно и такой модуль конечно ставить , но разделительного знака у мас не будет

Нужный индикатор выглядит так :

7.thumb.JPG.c89d64bc4bf90504bf4d124ffdb08240.JPG на нем нет посередине двоеточия как в часовом варианте

Ну и скетч под светодиодный вариант :

#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) - а без этой вариации все работает , только запятые умирают

Чудеса да и только , видно только диледант , то бишь спец без диплома , способен выкинуть из машины , самолета , танка лишние детали , а изделие и дальше поедит , полетит как ни в чем не бывало:04laugh:

×
×
  • Создать...