fuccpuff

Untitled

Mar 23rd, 2023
11
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.65 KB | None | 0 0
  1. /* подключение библиотек */
  2. #include <MQ2.h> // подключение библиотеки для датчика газов
  3. #include <TroykaDHT.h> // подключение библиотеки для датчика температуры и влажности
  4. #include <Wire.h> // подключение библиотеки для обмена данными по i2c
  5. #include <LiquidCrystal_I2C.h> // подключение библиотеки для ЖК-экрана 20х4 i2c
  6.  
  7. /* объявление переменных */
  8. #define motionPin 12 // объявление переменной, где указано куда подключен датчик движения
  9. #define gasPin A0 // объявление переменной, где указано куда подключен датчик углекислого газа
  10. #define dhtPin 4 // объявление переменной, где указано куда подключен датчик температуры и влажности
  11. #define intervalGetData 2000 // объявление переменной, которая указывает интервал измерений в МС (1000 мс = 1 секунда)
  12. #define minimalValueGas 220 // объявление переменной, которое указывает минимальное значение газов
  13. #define maximumValueGas 900 // объявление переменной, которое указывает максимальное значение газов
  14. unsigned long millis_int = 0; // объявление переменной для интервала измерений
  15.  
  16. /* объявление классов */
  17. LiquidCrystal_I2C lcd(0x27, 20, 4); // объявление класса ЖК экрана
  18. DHT dht(dhtPin, DHT11); // объявление класса датчика температуры и влажности DHT11
  19. MQ2 mq2(gasPin); // объявление класса датчика углекислого газа
  20.  
  21. /* процедура настройки */
  22. void setup() {
  23. pinMode(motionPin, INPUT); // указываем, что будем считывать показания с датчика движения
  24. Serial.begin(9600); // открываем последовательный порт для мониторинга действий в программе
  25. dht.begin(); // запускаем датчик температуры и влажности
  26. mq2.begin(); // запускаем датчик углекислого газа
  27. lcd.init(); // инициализируем дисплей
  28. lcd.backlight(); // включаем подсветку на экране
  29. lcd.setCursor(0, 0); // устанавливаем курсор на дисплее на 0 строку и 0 столбец
  30. lcd.print("Temperature:"); // выводим в первую строку слово "Temperature"
  31. lcd.setCursor(0, 1); // устанавливаем курсор на дисплее на 1 строку и 0 столбец
  32. lcd.print("Humidity:"); // выводим во вторую строку слово "Humidity"
  33. lcd.setCursor(0, 2); // устанавливаем курсор на дисплее на 2 строку и 0 столбец
  34. lcd.print("Motion:"); // выводим в третью строку слово "Motion"
  35. lcd.setCursor(0, 3); // устанавливаем курсор на дисплее на 3 строку и 0 столбец
  36. lcd.print("Gas:"); // выводим в третью строку слово "Gas"
  37. }
  38.  
  39. /* цикл */
  40. void loop() {
  41. /* вывод температуры на экран */
  42. if (millis() - millis_int >= intervalGetData) {
  43. float temp = getDataTemperature(); // получение данных с датчика температуры
  44. lcd.setCursor(12, 0); // устанавливаем курсор на 12 столбец в 0 строке
  45. lcd.print(temp); // выводим температуру на дисплей
  46. millis_int = millis(); // старт интервала отсчета
  47. }
  48. /* вывод влажности на экран */
  49. if (millis() - millis_int >= intervalGetData) {
  50. float hum = getDataHumidity(); // получение данных с датчика влажности
  51. lcd.setCursor(9, 1); // устанавливаем курсор на 9 столбец в 2 строке
  52. lcd.print(hum); // выводим влажность на дисплей
  53. millis_int = millis(); // старт интервала отсчета
  54. }
  55. /* вывод данных с датчика движения на экран */
  56. if (millis() - millis_int >= intervalGetData) {
  57. float mot = getDataMotion(); // получение данных с датчика движения
  58. lcd.setCursor(7, 2); // устанавливаем курсор на 7 столбец в 3 строке
  59. lcd.print(mot); // выводим движение на дисплей
  60. millis_int = millis(); // старт интервала отсчета
  61. }
  62. /* вывод данных с датчика газов на экран */
  63. if (millis() - millis_int >= intervalGetData) {
  64. float gasV = getDataGas(); // получение данных с датчика движения
  65. lcd.setCursor(4, 3); // устанавливаем курсор на 4 столбец в 4 строке
  66. lcd.print(gasV); // выводим значение на дисплей
  67. millis_int = millis(); // старт интервала отсчета
  68. }
  69. }
  70.  
  71. /* функция для получения температуры */
  72. float getDataTemperature() {
  73. float temperature = dht.getTemperatureC(); // создание переменной для получения температуры
  74. return (float)temperature; // возврат значения в функцию
  75. }
  76. /* функция для получения влажности */
  77. float getDataHumidity() {
  78. float humidity = dht.getHumidity(); // создание переменной для получения влажности
  79. return (float)humidity; // возврат значения в функцию
  80. }
  81. /* функция для считывания данных с датчика движения */
  82. float getDataMotion() {
  83. float motion = digitalRead(motionPin); // создание переменной для получения данных с датчика движения
  84. return (int)motion; // возврат значения в функцию
  85. }
  86. /* функция для считывания данных с датчика углекислого газа и преобразования в проценты */
  87. float getDataGas() {
  88. int value = mq2.readCO(); // создание переменной для получения значения газов
  89. value = constrain(value, minimalValueGas, maximumValueGas); // масштабируем полученое значение в проценты
  90. int gasValue = map(value, minimalValueGas, maximumValueGas, 100, 0); // масштабируем полученое значение в проценты
  91. return (float)gasValue; // возврат значения в функцию
  92. }
Add Comment
Please, Sign In to add comment