Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Управление температурой #48

Open
wants to merge 6 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 112 additions & 0 deletions Arduino_scripts/FOR_REGULIROVANIE/FOR_REGULIROVANIE.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
#include <ArduinoJson.h>
#include "DHT.h"

#define DHTPIN 4 // Пин для DHT датчика
#define RELAY_PIN_HEAT 2 // Пин реле для нагрева
#define RELAY_PIN_COOL 3 // Пин реле для охлаждения
#define DHTTYPE DHT11 // Тип датчика DHT

float targetTemperature, currentTemperature;
unsigned long last_time, last_time_Heat, last_time_Cool, last_data_sent; // Добавлена переменная last_data_sent для отслеживания времени последней отправки данных
bool Work_Heat, Work_Cool;
bool relaysOn = false; // Новая булевая переменная для включения/выключения реле

DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);
dht.begin();

pinMode(RELAY_PIN_HEAT, OUTPUT);
pinMode(RELAY_PIN_COOL, OUTPUT);

digitalWrite(RELAY_PIN_HEAT, LOW); // Нагрев выключен
digitalWrite(RELAY_PIN_COOL, LOW); // Охлаждение выключено

last_data_sent = 0; // Инициализируем время последней отправки данных
}

void loop() {
// Считывание данных с датчика
currentTemperature = dht.readTemperature(); // Считываем температуру
float humidity = dht.readHumidity(); // Считываем влажность

// Проверка на корректность считанных данных
if (isnan(humidity) || isnan(currentTemperature)) {
Serial.println("Ошибка считывания данных с датчика DHT11");
return;
}

// Отправка данных через UART раз в 30 секунд
if (millis() - last_data_sent >= 2000) { // Проверяем, прошло ли 10 секунд с момента последней отправки
Serial.print(currentTemperature); // Отправляем температуру
Serial.print(" "); // Отделяем температуру и влажность пробелом
Serial.println(humidity); // Отправляем влажность

last_data_sent = millis(); // Обновляем время последней отправки данных
}

// Прием целевой температуры через Serial
if (Serial.available() > 0) {
String incomingData = Serial.readStringUntil('\n');
Serial.print(incomingData);
incomingData.trim();
Serial.print(incomingData);

// Добавленная обработка ошибок
if (incomingData.length() > 0) { // Проверка на пустую строку
targetTemperature = incomingData.toFloat();

if (!isnan(targetTemperature)) { // Проверка на успешное преобразование
Serial.print("Получена целевая температура: ");
Serial.println(targetTemperature);
relaysOn = true; // Включаем реле после получения целевой температуры
} else {
Serial.println("Ошибка: не удалось преобразовать данные в число.");
}
} else {
Serial.println("Ошибка: получена пустая строка.");
}
}

// Логика управления реле нагрева/охлаждения
//_____________________________________________________________________________________________
if (millis() - last_time >= 500) {
last_time = millis();
// currentTemperature = dht.readTemperature(); // Температура уже считана выше
}
//_____________________________________________________________________________________________
if (currentTemperature <= targetTemperature && !Work_Cool && relaysOn) {
Work_Heat = true;
} else {
Work_Heat = false;
}
//_____________________________________________________________________________________________
if (millis() - last_time_Heat >= 1000 && Work_Heat) {
last_time_Heat = millis();
digitalWrite(RELAY_PIN_HEAT, HIGH);
}
//_____________________________________________________________________________________________
if (millis() - last_time_Heat >= 1000 && !Work_Heat) {
last_time_Heat = millis();
digitalWrite(RELAY_PIN_HEAT, LOW);
}
//_____________________________________________________________________________________________
if (currentTemperature >= targetTemperature + 3 && !Work_Heat && relaysOn) {
Work_Cool = true;
} else {
Work_Cool = false;
}
//_____________________________________________________________________________________________
if (millis() - last_time_Cool >= 1000 && Work_Cool) {
last_time_Cool = millis();
digitalWrite(RELAY_PIN_COOL, HIGH);
}
//_____________________________________________________________________________________________
if (millis() - last_time_Cool >= 1000 && !Work_Cool) {
last_time_Cool = millis();
digitalWrite(RELAY_PIN_COOL, LOW);
}
//_____________________________________________________________________________________________
delay(100); // Задержка для стабильности
}
101 changes: 101 additions & 0 deletions Arduino_scripts/for_temperature/for_temperature.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
#include <ArduinoJson.h>
#include "DHT.h"

#define DHTPIN 4 // Пин для DHT датчика
#define RELAY_PIN_HEAT 2 // Пин реле для нагрева
#define RELAY_PIN_COOL 3 // Пин реле для охлаждения
#define DHTTYPE DHT11 // Тип датчика DHT
float targetTemperature, currentTemperature;
unsigned long last_time, last_time_Heat, last_time_Cool;
bool Work_Heat, Work_Cool;

DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);
dht.begin();

pinMode(RELAY_PIN_HEAT, OUTPUT);
pinMode(RELAY_PIN_COOL, OUTPUT);

digitalWrite(RELAY_PIN_HEAT, LOW); // Нагрев выключен
digitalWrite(RELAY_PIN_COOL, LOW); // Охлаждение выключено
}
void loop ()
{
/*_____________________________________________________________________________________________*/
if (millis() - last_time >= 500)
{
last_time = millis();
currentTemperature = dht.readTemperature();
} //Считываем температуру
/*_____________________________________________________________________________________________*/
if(currentTemperature <= targetTemperature - 5 && !Work_Cool)
{
Work_Heat = true;

} else Work_Heat = false; //Ошибка нагрева
/*_____________________________________________________________________________________________*/

if (millis() - last_time_Heat >= 1000 && Work_Heat)
{
last_time_Heat = millis();
digitalWrite(RELAY_PIN_HEAT, HIGH);
} //Включаем нагреватель
/*_____________________________________________________________________________________________*/

if (millis() - last_time_Heat >= 1000 && !Work_Heat)
{
last_time_Heat = millis();
digitalWrite(RELAY_PIN_HEAT, LOW);
} //Выключаем нагреватель
/*_____________________________________________________________________________________________*/

if(currentTemperature >= targetTemperature + 5 && !Work_Heat)
{
Work_Cool = true;

} else Work_Cool = false; //Ошибка охлаждения
/*_____________________________________________________________________________________________*/

if (millis() - last_time_Cool >= 1000 && Work_Cool)
{
last_time_Cool = millis();
digitalWrite(RELAY_PIN_COOL, HIGH);
} //Включаем охлаждение
/*_____________________________________________________________________________________________*/

if (millis() - last_time_Cool >= 1000 && !Work_Cool)
{
last_time_Cool = millis();
digitalWrite(RELAY_PIN_COOL, LOW);
} //Выключаем охлаждение
if (Serial.available() > 0){targetTemperature = Serial.read() - '0'; currentTemperature = 5; }

/*_____________________________________________________________________________________________*/
}

void loop() {
if (Serial.available() > 0) {
String incomingData = Serial.readStringUntil('\n');
incomingData.trim();

// Добавленная обработка ошибок
if (incomingData.length() > 0) { // Проверка на пустую строку
float targetTemperature = incomingData.toFloat();

if (!isnan(targetTemperature)) { // Проверка на успешное преобразование
Serial.print("Получена целевая температура: ");
Serial.println(targetTemperature);

processTemperature(targetTemperature);
} else {
Serial.println("Ошибка: не удалось преобразовать данные в число.");
}
} else {
Serial.println("Ошибка: получена пустая строка.");
}
}
delay(2000);

}
24 changes: 24 additions & 0 deletions Arduino_scripts/send_hello.ino/send_hello.ino.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#define LED_PIN 13 // Встроенный светодиод на Arduino Nano

bool ledState = false; // Переменная для хранения текущего состояния светодиода

void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // Изначально светодиод выключен
}

void loop() {
if (Serial.available() > 0) {
String data = Serial.readStringUntil('\n');
float value = data.toFloat(); // Преобразуем строку в число с плавающей точкой
if (value == 25.6) { // Сравниваем с 25.6
toggleLED();
}
}
}

void toggleLED() {
ledState = !ledState; // Инвертируем состояние светодиода
digitalWrite(LED_PIN, ledState); // Устанавливаем новое состояние
}
31 changes: 31 additions & 0 deletions Arduino_scripts/zapis_v_bazy/zapis_v_bazy.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#include "DHT.h"

#define DHTPIN 4 // Пин, к которому подключен датчик DHT11
#define DHTTYPE DHT11 // Указываем тип датчика

DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600); // Настройка скорости передачи данных через UART
dht.begin(); // Инициализация датчика
}

void loop() {
// Задержка для стабилизации датчика
delay(10000);

// Считывание данных с датчика
float humidity = dht.readHumidity(); // Считываем влажность
float temperature = dht.readTemperature(); // Считываем температуру в градусах Цельсия

// Проверка на корректность считанных данных
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Ошибка считывания данных с датчика DHT11");
return;
}

// Отправка данных через UART
Serial.print(temperature); // Отправляем температуру
Serial.print(" "); // Отделяем температуру и влажность пробелом
Serial.println(humidity); // Отправляем влажность
}
Loading