1

Topic: Умный аквариум

Здравствуйте Вот решил сделать управление аквариумами более удобным и наглядным получилось почти все, кроме одного момента. http://remotexy.com/ru/editor/f71a5a1fb … b3dd9b9c9/ это ссылка на проект, а вот скетч:

// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__SOFTSERIAL
#include <SoftwareSerial.h>

#include <RemoteXY.h>
#include "DHT.h"
#define DHTPIN 5 // номер пина, к которому подсоединен датчик
DHT dht(DHTPIN, DHT11);

#include "OneWire.h"
#include "DallasTemperature.h"

#define ONE_WIRE_BUS 7
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1 = { 0x28, 0xFF, 0x7C, 0x5B, 0xB2, 0x17, 0x1, 0x67 };
DeviceAddress sensor2 = { 0x28, 0xAA, 0x7F, 0xA0, 0x53, 0x14, 0x1, 0x30 };

#define DHTPIN 2 // номер пина, к которому подсоединен датчик
// настройки соединения
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 9600


// конфигурация интерфейса 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,13,0,44,0,190,1,10,207,1,
  130,1,2,61,59,37,179,130,1,2,
  27,59,32,179,130,1,2,2,59,23,
  137,67,5,4,13,22,8,2,26,11,
  67,5,4,33,22,8,2,26,11,129,
  0,23,3,16,4,25,208,186,208,190,
  208,188,208,189,208,176,209,130,208,176,
  0,129,0,10,29,38,4,25,208,145,
  208,190,208,187,209,140,209,136,208,190,
  208,185,32,208,176,208,186,208,178,208,
  176,209,128,208,184,209,131,208,188,0,
  67,5,32,13,22,8,2,26,11,129,
  0,4,7,50,4,25,209,130,208,181,
  208,188,208,191,208,181,209,128,208,176,
  209,130,209,131,209,128,208,176,32,32,
  32,208,178,208,187,208,176,208,182,208,
  189,208,190,209,129,209,130,209,140,0,
  67,5,4,67,22,8,2,26,11,129,
  0,10,63,38,4,25,208,156,208,176,
  208,187,208,181,208,189,209,140,208,186,
  208,184,208,185,32,208,176,208,186,208,
  178,208,176,209,128,208,184,209,131,208,
  188,0,2,0,4,51,18,6,2,26,
  31,31,79,78,0,79,70,70,0,129,
  0,7,45,9,4,25,208,161,208,178,
  208,181,209,130,0,2,0,4,80,18,
  6,2,26,31,31,79,78,0,79,70,
  70,0,2,0,4,90,18,6,2,26,
  31,31,79,78,0,79,70,70,0,129,
  0,4,76,22,4,25,209,129,208,178,
  208,181,209,130,32,208,177,208,181,208,
  187,209,139,208,185,0,129,0,4,86,
  22,4,25,209,129,208,178,208,181,209,
  130,32,209,129,208,184,208,189,208,184,
  208,185,0,2,0,37,51,18,6,2,
  26,31,31,79,78,0,79,70,70,0,
  129,0,35,46,23,4,25,208,146,208,
  181,208,189,209,130,208,184,208,187,209,
  143,209,130,208,190,209,128,0,2,0,
  38,90,18,6,2,26,31,31,79,78,
  0,79,70,70,0,129,0,35,85,23,
  4,25,208,146,208,181,208,189,209,130,
  208,184,208,187,209,143,209,130,208,190,
  209,128,0,7,45,32,34,24,6,2,
  26,2,3,7,45,33,68,24,6,2,
  26,2,3 };
 
// структура определяет все переменные и события вашего интерфейса управления
struct {

    // input variables
uint8_t light1; // =1 если переключатель включен и =0 если отключен
  uint8_t light2; // =1 если переключатель включен и =0 если отключен
  uint8_t light3; // =1 если переключатель включен и =0 если отключен
  uint8_t cool1; // =1 если переключатель включен и =0 если отключен
  uint8_t cool2; // =1 если переключатель включен и =0 если отключен
  float edit_1;
  float edit_2;
 
    // output variables
  char outtemp[11];  // =строка UTF8 оканчивающаяся нулем
  char intemp1[11];  // =строка UTF8 оканчивающаяся нулем
  char hum[11];  // =строка UTF8 оканчивающаяся нулем
  char intemp2[11];  // =строка UTF8 оканчивающаяся нулем

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////

#define PIN_LIGHT1 A0
#define PIN_LIGHT2 A2
#define PIN_LIGHT3 A4
#define PIN_COOL1 A1
#define PIN_COOL2 A3

void setup()
{
  RemoteXY_Init ();
 
  pinMode (PIN_LIGHT1, OUTPUT);
  pinMode (PIN_LIGHT2, OUTPUT);
  pinMode (PIN_LIGHT3, OUTPUT);
  pinMode (PIN_COOL1, OUTPUT);
  pinMode (PIN_COOL2, OUTPUT);
 
  // TODO you setup code
  dht.begin();
  sensors.begin();
}

void loop()
{
  RemoteXY_Handler ();
 
  digitalWrite(PIN_LIGHT1, (RemoteXY.light1==0)?LOW:HIGH);
  digitalWrite(PIN_LIGHT2, (RemoteXY.light2==0)?LOW:HIGH);
  digitalWrite(PIN_LIGHT3, (RemoteXY.light3==0)?LOW:HIGH);
  digitalWrite(PIN_COOL1, (RemoteXY.cool1==0)?LOW:HIGH);
  digitalWrite(PIN_COOL2, (RemoteXY.cool2==0)?LOW:HIGH);

  // используйте структуру RemoteXY для передачи данных
  // не используйте функцию delay()
float hum  =  dht.readHumidity();
    dtostrf(hum, 0, 1, RemoteXY.hum);
    float t = dht.readTemperature();
    dtostrf(t, 0, 1, RemoteXY.outtemp);
sensors.requestTemperatures();
dtostrf(sensors.getTempC(sensor1), 0, 1, RemoteXY.intemp1);
dtostrf(sensors.getTempC(sensor2), 0, 1, RemoteXY.intemp2);



все хорошо и удобно, но не могу допилить один момент, изначально проект был без полей ввода, сейчас хочу сделать вот что: 1) вводим в поле ввода значение например 25, и вентилятор 1 при достижении 25 градусов включается, при 24 выключается, можно даже без возможности менять значение гестерезиса.
2) как то нужно сделать так, чтоб датчики sensor1 и sensor2 опрашивались 1 раз в минуту, но не знаю как это сделать без функции delay...
Нужно чтоб температура в аквариумах поддерживалась при помощи вентиляторов, а то прихожу вечером с работы, а там почти уха))) на улице жарища, даже рыбам плохо, помогите создать рыбкам комфортные условия)))
я не опытный программист и С++ не изучал, помогите допилить скетч, всю голову сломал как это правильно сделать, и интернет ковырял... безуспешно...
если получится доделать проект, обещаю выложить окончательную версию проекта с фото как все реализовано...

2

Re: Умный аквариум

и если кто вдруг решит помочь, то переключатели включения вентиляторов можно убрать)))

3

Re: Умный аквариум

2) как то нужно сделать так, чтоб датчики sensor1 и sensor2 опрашивались 1 раз в минуту, но не знаю как это сделать без функции delay...


Тож не программист, но если еще актуально, можно delay заменить на millis

4 (edited by umc 2021-01-28 13:40:48)

Re: Умный аквариум

1) вводим в поле ввода значение например 25, и вентилятор 1 при достижении 25 градусов включается, при 24 выключается, можно даже без возможности менять значение гестерезиса.

if (temp>25){trig=true;}
if (trig==true && temp>24){vent = true;} else {trig=false;vent = false;}

2) как то нужно сделать так, чтоб датчики sensor1 и sensor2 опрашивались 1 раз в минуту, но не знаю как это сделать без функции delay...

if (millis()-tm>1000){    //проверяем прошли ли 1000мс,т.е. 1сек
tm=millis();
// выполняем свой код
}

5

Re: Умный аквариум

https://flprog.ru/

попробуйте