Беспроводной датчик протечки воды с дальнобойным радиомодулем на Ардуино

Приветствую всех читателей блога MYSKU! В сегодняшней статье хочу рассказать об одном из своих датчиков протечки воды. Данная версия датчика работает на модуле(YJ-17029) с микроконтроллером nRF52832, модуль оснащен усилителем RFX2401. Устройство питается от батарейки 1/2 AA (14250) 3.6V, рассчитано на длительный срок эксплуатации.

Как и все остальные мои проекты, этот тоже является Arduino проектом, код программы написан в Arduino IDE, дополнительные библиотеки не используются. Датчик сделан под проект Mysensors. Как обычно в статье немного затрону тему протокола Mysensors.

Mysensors это сообщество разработчиков програмного обеспечения с открытым исходным кодом. Данный протокол разработан сообществом для создания радио и проводных сетей. Первоначально проект разрабатывался для платформы Arduino. Стандартная Mysensors сеть состоит из гейта(шлюза), ретранстяторов и конечных устройств(ноды). В одной сети может быть до 254 устройств, каждое из устройств может быть оснащено до 254-мя сенсорами, датчиками, исполнительными узлами. Модуль Mysensors в Мажордомо (который выполняет роль контролера сети) поддерживает мультигейтовость, соответственно сетей может быть намного больше одной управляемых одним контролером.

Поддерживаемые аппаратные платформы: Linux / Raspberry Pi / Orange Pi | ATMega 328P | ESP8266 | ESP32 | nRF5x | Atmel SAMD, используемое в Arduino Zero (Cortex M0) | Teensy3(MK66FX1M0VMD18) | STM32F1.

Поддерживаемые радиопередатчики: NRF24L01 | RFM69 | RFM95 (LoRa) | nRF5x

Поддерживаемый проводной тип связи: RS485

Поддерживаемые типы связи между гейтом и контролером: MQTT | Serial USB | WiFi | Ethernet | GSM

Описываемая модификация датчика протечки с радиоусилителем и батарейкой 14250 была сделана из стандатной версии на радиомодуле без усилителя и батарейках cr2450, сr2477. Предпологается, что данная версия может быть применена в удаленых местах, местах с низкой проходимостью радиосигнала, если нет возможности разместить контролер протечки(управление перекрывающими редукторами) или репитер рядом с местом установки датчиков протечки. Идея данной версии была предложена одним из пользователей сообщества в телеграм чате Mysensors.



Основной элемент датчика это детектор жидкости. Детектор построен на основе логической микросхемы SN74LVC1G00. Один электрод датчика подключен к земле, второй электрод датчика подключен к выводам микросхемы A и В через резистор 100Oм, так же к этой линии подключен плюс через резистор 1М. Когда контакта с жидкостью нет на ножках микросхемы A и В логическая единица, соответственно на ножке Y подключенной к ножке МК (настроенной на детектирование прерывания через встроенный компоратор) логический ноль. Как только произойдет контакт с жидкостью и на ножках A и B будет низкий уровень и сигнал на ножке микросхемы SN74LVC1G00 так же инвертируется, что вызовет прерывание, которое в свою очередь выведет МК из сна.

Устройство так же имеет тактовую кнопку для реализации сервисных режимов, таких как привязка устройства, обнуление устройства и т.п. Кнопка заведена на ту же ножку МК что и детектор протечки. Обе линии разделены диодами Шотки.

В датчике установлен RGB LED, для индикации регистрации датчика в сети, для индикации сервисных режимов и для индикации детектирования протечки. Естественно светодиод может не использоватся вообще или использоватся частично.

Питание осуществляется напрямую от батарейки, контроль уровня заряда батарейки производится непосредственно с пина VDD, поэтому резисторный делитель напряжения и подключение линии делителя на ножку аналогового входа МК не требуется.

Плату устройства я разрабатывал в программе Диптрейс. Первый прототип изготавливался под ЛУТ. Из нюансов это увеличенная ширина трасс, увеличенные растояния между трассами, увеличенные площадки под межслойные переходы(для более удобного сверления отверстий), отсутствие заливки пустых областей.


Корпус устройства был разработан в редакторе СолидВоркс. Печать выполнялась на SLA 3D принтере ANICUBIC PHOTON. После печати была выполнена обработка наждачной бумагой 320 и 1000 для подгонки стыков крышки и дна корпуса.



Код основной программы:

bool button_flag;
bool send_flag;
bool detection;
bool nosleep;
byte timer;
bool AckG;
bool AckB;
bool AckL;
bool PRESENT_ACK;
bool flag_lq;
//unsigned long SLEEP_TIME = 86400000; //24 hours
unsigned long SLEEP_TIME = 3600000; //1 hours
unsigned long oldmillis;
unsigned long newmillis;
unsigned long interrupt_time;
unsigned long SLEEP_TIME_W;
uint16_t currentBatteryPercent;
uint16_t batteryVoltage = 0;
uint16_t battery_vcc_min = 2400;
uint16_t battery_vcc_max = 3600;

int16_t linkQuality;

#define MY_DISABLED_SERIAL
#define MY_RADIO_NRF5_ESB
#define MY_RF24_PA_LEVEL (NRF5_PA_MAX)
//#define MY_PASSIVE_NODE
#define MY_NODE_ID 87
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define INTR_PIN 6 //(PORT0,  gpio 30)
#include <MySensors.h>
// see https://www.mysensors.org/download/serial_api_20
#define W_L_SENS_CHILD_ID 0
#define LINK_QUALITY_CHILD_ID 253
MyMessage sensMsg(W_L_SENS_CHILD_ID, V_VAR1);
//MyMessage voltMsg(CHILD_ID_VOLT, V_VOLTAGE);


void preHwInit() {
  pinMode(POWER_PIN, OUTPUT);
  digitalWrite(POWER_PIN, HIGH);
  wait(3000);
  pinMode(RED_LED, OUTPUT);
  digitalWrite(RED_LED, HIGH);
  pinMode(GREEN_LED, OUTPUT);
  digitalWrite(GREEN_LED, HIGH);
  pinMode(BLUE_LED, OUTPUT);
  digitalWrite(BLUE_LED, HIGH);
  pinMode(PIN_BUTTON, INPUT);
  pinMode(W_L_SENS, INPUT);

  pinMode(TXEN_PIN, OUTPUT);
  pinMode(RXEN_PIN, OUTPUT);
}

void before()
{
  NRF_POWER->DCDCEN = 1;
  NRF_UART0->ENABLE = 0;
  sleep(100);
  digitalWrite(BLUE_LED, LOW);
  sleep(150);
  digitalWrite(BLUE_LED, HIGH);
  sleep(150);

  digitalWrite(TXEN_PIN, HIGH);
  digitalWrite(RXEN_PIN, HIGH);
}

void presentation() {
  digitalWrite(TXEN_PIN, LOW);
  digitalWrite(RXEN_PIN, LOW);
  wait(100);
  digitalWrite(TXEN_PIN, HIGH);
  digitalWrite(RXEN_PIN, HIGH);
  sendSketchInfo("EFEKTA PRO WL Sensor", "1.1");
  digitalWrite(TXEN_PIN, LOW);
  digitalWrite(RXEN_PIN, LOW);
  wait(300);
  digitalWrite(TXEN_PIN, HIGH);
  digitalWrite(RXEN_PIN, HIGH);
  present(W_L_SENS_CHILD_ID, S_CUSTOM, "SWITCH STATUS");
  digitalWrite(TXEN_PIN, LOW);
  digitalWrite(RXEN_PIN, LOW);
  wait(300);
  /*
    wait(3000, 0, S_CUSTOM);
    //CORE_DEBUG(PSTR("MyS: TEST WAIT AFTER PRESENT SENSOR\n"));
    if (PRESENT_ACK == 0) {
      sleep(2000);
      wait(100);
      present(W_L_SENS_CHILD_ID, S_CUSTOM, "SWITCH STATUS", 1);
      wait(3000, 0, S_CUSTOM);
      //CORE_DEBUG(PSTR("MyS: TEST WAIT AFTER PRESENT SENSOR\n"));
    } else {
      PRESENT_ACK = 0;
    }
  */
  digitalWrite(TXEN_PIN, HIGH);
  digitalWrite(RXEN_PIN, HIGH);
  present(LINK_QUALITY_CHILD_ID, S_CUSTOM, "LINK_QUALITY");
  digitalWrite(TXEN_PIN, LOW);
  digitalWrite(RXEN_PIN, LOW);
  wait(300);
  /*
    wait(3000, 0, S_CUSTOM);
    //CORE_DEBUG(PSTR("MyS: TEST WAIT AFTER PRESENT SENSOR\n"));
    if (PRESENT_ACK == 0) {
    sleep(2000);
    wait(100);
    present(LINK_QUALITY_CHILD_ID, S_CUSTOM, "LINK_QUALITY", 1);
    wait(3000, 0, S_CUSTOM);
    //CORE_DEBUG(PSTR("MyS: TEST WAIT AFTER PRESENT SENSOR\n"));
    } else {
    PRESENT_ACK = 0;
    }
  */
}

void setup() {
  digitalWrite(TXEN_PIN, LOW);
  digitalWrite(RXEN_PIN, LOW);


  digitalWrite(BLUE_LED, LOW);
  wait(100);
  digitalWrite(BLUE_LED, HIGH);
  wait(200);
  digitalWrite(BLUE_LED, LOW);
  wait(100);
  digitalWrite(BLUE_LED, HIGH);
  lpComp();
  detection = false;
  SLEEP_TIME_W = SLEEP_TIME;
  /*
    while (timer < 10) {
    timer++;
    digitalWrite(GREEN_LED, LOW);
    wait(5);
    digitalWrite(GREEN_LED, HIGH);
    wait(500);
    }
    timer = 0;
  */
  wait(100);
  sendBatteryStatus();
  wait(100);
  digitalWrite(TXEN_PIN, HIGH);
  digitalWrite(RXEN_PIN, HIGH);
  send(sensMsg.set(detection), 1);
  digitalWrite(TXEN_PIN, LOW);
  wait(2000, 1, V_VAR1);
  digitalWrite(RXEN_PIN, LOW);
}

void loop() {
  if (nosleep == 0) {
    oldmillis = millis();
    sleep(SLEEP_TIME_W);
  }

  if (detection) {
    if (digitalRead(PIN_BUTTON) == 1 && button_flag == 0 && digitalRead(W_L_SENS) == 0) {
      //back side button detection
      button_flag = 1;
      nosleep = 1;
    }
    if (digitalRead(PIN_BUTTON) == 1 && button_flag == 1 && digitalRead(W_L_SENS) == 0) {
      digitalWrite(GREEN_LED, LOW);
      wait(10);
      digitalWrite(GREEN_LED, HIGH);
      wait(50);
    }
    if (digitalRead(PIN_BUTTON) == 0 && button_flag == 1 && digitalRead(W_L_SENS) == 0) {
      nosleep = 0;
      button_flag = 0;
      digitalWrite(GREEN_LED, HIGH);
      lpComp_reset();
    }

    if (digitalRead(W_L_SENS) == 1 && digitalRead(PIN_BUTTON) == 0) {
      //sens detection
      newmillis = millis();
      interrupt_time = newmillis - oldmillis;
      SLEEP_TIME_W = SLEEP_TIME_W - interrupt_time;
      wait(100);
      digitalWrite(TXEN_PIN, HIGH);
      digitalWrite(RXEN_PIN, HIGH);
      send(sensMsg.set(detection), 1);
      digitalWrite(TXEN_PIN, LOW);
      wait(3000, 1, V_VAR1);
      digitalWrite(RXEN_PIN, LOW);
      if (AckG == 1) {
        while (timer < 10) {
          timer++;
          //digitalWrite(RED_LED, LOW);
          //wait(20);
          //digitalWrite(RED_LED, HIGH);
          //wait(30);
          digitalWrite(BLUE_LED, LOW);
          wait(20);
          digitalWrite(BLUE_LED, HIGH);
          wait(30);
        }
        timer = 0;
        AckG = 0;
        wait(200);
      } else {
        while (timer < 10) {
          timer++;
          digitalWrite(RED_LED, LOW);
          wait(20);
          digitalWrite(RED_LED, HIGH);
          wait(30);
        }
        timer = 0;
        digitalWrite(TXEN_PIN, HIGH);
        digitalWrite(RXEN_PIN, HIGH);
        send(sensMsg.set(detection), 1);
        digitalWrite(TXEN_PIN, LOW);
        wait(3000, 1, V_VAR1);
        digitalWrite(RXEN_PIN, LOW);
        if (AckG == 1) {
          while (timer < 10) {
            timer++;
            digitalWrite(RED_LED, LOW);
            wait(20);
            digitalWrite(RED_LED, HIGH);
            wait(30);
            digitalWrite(BLUE_LED, LOW);
            wait(20);
            digitalWrite(BLUE_LED, HIGH);
            wait(30);
          }
          timer = 0;
          AckG = 0;
        } else {
          while (timer < 20) {
            timer++;
            digitalWrite(RED_LED, LOW);
            wait(20);
            digitalWrite(RED_LED, HIGH);
            wait(30);
          }
          timer = 0;
        }
        lpComp_reset();
      }
    }

    if (SLEEP_TIME_W < 60000) {
      SLEEP_TIME_W = SLEEP_TIME;
      sendBatteryStatus();
    }
  }

  else {
    //if (detection == -1) {
    SLEEP_TIME_W = SLEEP_TIME;
    sendBatteryStatus();
  }
}


void receive(const MyMessage & message) {
  if (message.type == V_VAR1) {
    if (message.sensor == W_L_SENS_CHILD_ID) {
      if (mGetCommand(message) == 1) {
        if (message.isAck()) {
          AckG = 1;
        } else {

        }
      }
    }
  }
  if (message.type == I_BATTERY_LEVEL) {
    if (message.sensor == 255) {
      if (mGetCommand(message) == 3) {
        if (message.isAck()) {
          AckB = 1;
        } else {

        }
      }
    }
  }
  if (message.type == V_VAR1) {
    if (message.sensor == 255) {
      if (mGetCommand(message) == 1) {
        if (message.isAck()) {
          AckL = 1;
        } else {

        }
      }
    }
  }
  /*
    if (mGetCommand(message) == 0) {
    PRESENT_ACK = 1;
    CORE_DEBUG(PSTR("MyS: !!!ACK OF THE PRESENTATION IN THE FUNCTION RECEIVE RECEIVED!!!\n"));
    }
  */
}


void sendBatteryStatus() {
  wait(100);
  batteryVoltage = hwCPUVoltage();
  wait(20);

  if (batteryVoltage > battery_vcc_max) {
    currentBatteryPercent = 100;
  }
  else if (batteryVoltage < battery_vcc_min) {
    currentBatteryPercent = 0;
  } else {
    currentBatteryPercent = (100 * (batteryVoltage - battery_vcc_min)) / (battery_vcc_max - battery_vcc_min);
  }
  digitalWrite(TXEN_PIN, HIGH);
  digitalWrite(RXEN_PIN, HIGH);
  sendBatteryLevel(currentBatteryPercent, 1);
  digitalWrite(TXEN_PIN, LOW);
  wait(3000, C_INTERNAL, I_BATTERY_LEVEL);
  digitalWrite(RXEN_PIN, LOW);
  if (AckB == 1) {
    AckB = 0;
    flag_lq = 1;
  } else {
    digitalWrite(TXEN_PIN, HIGH);
    digitalWrite(RXEN_PIN, HIGH);
    sendBatteryLevel(currentBatteryPercent, 1);
    digitalWrite(TXEN_PIN, LOW);
    wait(3000, C_INTERNAL, I_BATTERY_LEVEL);
    digitalWrite(RXEN_PIN, LOW);
    if (AckB == 1) {
      AckB = 0;
      flag_lq = 1;
    }
  }
  //send(powerMsg.set(batteryVoltage), 1);
  //wait(2000, 1, V_VAR1);

  //sleep(10000); //
  if (flag_lq == 1) {
    linkQuality = calculationRxQuality();
    wait(50);
    digitalWrite(TXEN_PIN, HIGH);
    digitalWrite(RXEN_PIN, HIGH);
    sendSignalStrength(linkQuality, 1);
    digitalWrite(TXEN_PIN, LOW);
    wait(2000, 1, V_VAR1);
    digitalWrite(RXEN_PIN, LOW);
    if (AckL == 1) {
      AckL = 0;
    } else {
      sendSignalStrength(linkQuality, 1);
      wait(2000, 1, V_VAR1);
      if (AckL == 1) {
        AckG = 0;
      }
    }
    flag_lq = 0;
  }
}


void lpComp() {
  NRF_LPCOMP->PSEL = INTR_PIN;
  NRF_LPCOMP->ANADETECT = 1;
  NRF_LPCOMP->INTENSET = B0100;
  NRF_LPCOMP->ENABLE = 1;
  NRF_LPCOMP->TASKS_START = 1;
  NVIC_SetPriority(LPCOMP_IRQn, 15);
  NVIC_ClearPendingIRQ(LPCOMP_IRQn);
  NVIC_EnableIRQ(LPCOMP_IRQn);
}

void s_lpComp() {
  if ((NRF_LPCOMP->ENABLE) && (NRF_LPCOMP->EVENTS_READY)) {
    NRF_LPCOMP->INTENCLR = B0100;
  }
}

void r_lpComp() {
  NRF_LPCOMP->INTENSET = B0100;
}

#if __CORTEX_M == 0x04
#define NRF5_RESET_EVENT(event)                                                 \
  event = 0;                                                                   \
  (void)event
#else
#define NRF5_RESET_EVENT(event) event = 0
#endif


void lpComp_reset () {
  s_lpComp();
  detection = false;
  NRF_LPCOMP->EVENTS_UP = 0;
  r_lpComp();
}

//****************************** very experimental *******************************


bool sendSignalStrength(const int16_t level, const bool ack)
{
  return _sendRoute(build(_msgTmp, GATEWAY_ADDRESS, NODE_SENSOR_ID, C_SET, V_VAR1,
                          ack).set(level));
}
int16_t calculationRxQuality() {
  int16_t nRFRSSI_temp = transportGetReceivingRSSI();
  int16_t nRFRSSI = map(nRFRSSI_temp, -85, -40, 0, 100);
  if (nRFRSSI < 0) {
    nRFRSSI = 0;
  }
  if (nRFRSSI > 100) {
    nRFRSSI = 100;
  }
  return nRFRSSI;
}

//****************************** very experimental *******************************


extern "C" {
  void LPCOMP_IRQHandler(void) {
    detection = true;
    NRF5_RESET_EVENT(NRF_LPCOMP->EVENTS_UP);
    NRF_LPCOMP->EVENTS_UP = 0;
    MY_HW_RTC->CC[0] = (MY_HW_RTC->COUNTER + 2);
  }
}



Управления ножками TXEN и RXEN усилителя осуществляется из кода основной программы, что не очень правильно, наверное имеет смысл добавить управление ножками в файл драйвера внутри библиотеки.

Список используемых компонентов с ссылками на Алиэкспресс:

Модуль YJ-17029
SN74LVC1G00
1PS76SB10.115(SOD-323) SMD Schottky Barrier Diode(2шт)
100UF 107C D-type SMD Tantalum Capacitor
100nF | 50v | +80-20% | SMD 0805 | SMD ceramic capacitor 100nF | Y5V
2UF | 50v | +80-20% | SMD 0805 | SMD ceramic capacitor 2UF | Y5V
14250 Battery Holder 1/2 AA
Micro Button Tact Switch SMD 4Pin 3X4X2.5MM White(2шт)
2x3P | 6pin | 1.27mm | SMT | J1 Pin Header Female
10K | 5% | SMD 0603 | SMD resistor 10K Ohm(3шт)
100K | 5% | SMD 0603 | SMD resistor 100K Ohm
2K7 | 5% | SMD 0603 | SMD resistor 2K7 Ohm
6K8 | 5% | SMD 0603 | SMD resistor 6K8 Ohm
9K1 | 5% | SMD 0603 | SMD resistor 9K1 Ohm
1M | 5% | SMD 0603 | SMD resistor 1M Ohm
100 | 5% | SMD 0603 | SMD resistor 100 Ohm
RGB LED | SMD 0805 | RGBL | RGB LED
M1.4 4mm Round Head Micro Screws(4шт)
M3 15mm Nickel plated Brass Standoff Spacer Female(2шт)
M3 6mm Hexagon Socket Thin low Short Head Cap Screw(2шт)
M3 4mm Hexagon Socket Button Head Screws(2шт)
ANYCUBIC 405nm UV Resin For Photon 3D Printer

Видео работы датчика протечки


Фото датчика:










Датчик работает в режиме пониженного энергопотребления, что сказывается на дальности радиопередачи. Тестировался на расстояниях 30-40метров(находился на улице) от гейта(находился в деревянном доме), доставка сообщений 100%. Ранее когда только были закуплены данные радиомодули для тестов, в режиме пониженного энергопотребления с питанием от повербанка дальность составила 200 метров в условиях городской застройки(радиомодуль находился на улице, принимающий узел находился в бетонной многоэтажке с противоположной стороны дома, относительно передающего радиомодуля). Энергопотребление в режиме сна составляет 3мкА на всю схему. Микросхема SN74LVC1G00 в режиме мониторинга ничего не потребляет. Управление питанием микросхемы осуществляется с ножки МК. В режиме передачи устройство потребляет ~ 24-27мА.

GitHub проекта — github.com/smartboxchannel/EFEKTA_WATER_LEAK_SENSOR

Место где всегда с радостью помогут всем кто хочется познакомиться с MYSENSORS (установка плат, работа с микроконтроллерами nRF5 в среде Arduino IDE, советы по работе с протоколом mysensors, обсуждение проектов — телеграмм чат @mysensors_rus
Добавить в избранное +40 +71
+
avatar
+1
+

Cut забыли
+
avatar
  • berk
  • 11 июля 2019, 13:56
+1
угу, что то проглядел,… воткнул
+
avatar
0
Кат!
+
avatar
+1
А дайте схемку глянуть. Интересно как вы питание реализовали.

А ещё очень интересно узнать на чем вы корпуса печатаете т.к. это отдельная головная боль всех технарей.
+
avatar
  • berk
  • 11 июля 2019, 14:02
0
Схемы как таковой нет, основные узлы недавно выкладывал в нашем чате майсенсорс. Печатаю смолой на Фотоне
+
avatar
0
Благодарю!
+
avatar
  • Dimon_
  • 11 июля 2019, 14:21
+8
дополнительные библиотеки не используются.
И.., внезапно…
#include <MySensors.h>

Да-да… Как же вы этот майсенсорс-то проталкиваете, а…
+
avatar
  • berk
  • 11 июля 2019, 14:24
+3
там я немного о других библах.… проталкиваете? да на чем сижу о том и пишу. перейду на зигби, буду про другое рассказывать.
+
avatar
-4
А, что еще, что то адекватное есть ???
+
avatar
  • Dimon_
  • 11 июля 2019, 14:42
+1
Под ардуино? Конечно же, больше ваащщще ничего нет. Миллионы людей ваяют на ардуине всё, от мигающего светодиода до бионических протезов, и вот без майсенсорс — никуда, чо.
+
avatar
  • berk
  • 11 июля 2019, 15:03
+3
это все очень интересно, про светодиоды и бионические протезы, вы посоветуйте открытый проект для построения сети такого же уровня под Ардуино. Вас же об этом спрашивали.
+
avatar
  • Dimon_
  • 11 июля 2019, 15:46
+1
сети такого же уровня
Сети какого уровня?
+
avatar
  • berk
  • 11 июля 2019, 15:52
-1
прям такого же
+
avatar
  • Dimon_
  • 11 июля 2019, 16:10
+4
Спасибо. Вы снова в своём стиле. Отвечаете общими словами, вокруг да около, и никогда — конкретикой.

Повторю свой вопрос: «прям какого же» уровня сеть вам надо строить на ардуине?

Я, в силу своей профессии, про сетевые уровни, уж простите, знаю чуточку больше вашего, судя по вашим комментам.
+
avatar
  • berk
  • 11 июля 2019, 16:33
0
в каком в своем стиле? я использую майсенсорс, об этом и пишу, время от времени в коментах появляются товариши знайки. Смысл с ними чего то обсуждать. Вам не нравится майсенсорс или не нравится что я пишу о нем, ваше дело и право. Мне он нравится. Всем кому действительно нужны ответы я их даю.
+
avatar
  • Dimon_
  • 11 июля 2019, 17:06
+1
Вам не нравится майсенсорс или не нравится что я пишу о нем
В какой фразе я сказал, что майсенсорс плохой? Более того, я с интересом пролистал обзор. Где я утверждал, что мне не нравится, что вы его используете?
Мне не нравится, что вы «немножечко» не отвечаете за свои слова и, будучи прижаты каким-то фактом, предпочитаете юлить или съезжать с темы, чем признавать его.
+
avatar
  • berk
  • 11 июля 2019, 17:19
+1
да я и не юлю, я написал то что написал, дополнительные библиотеки это дополнительные библиотеки, я так и ответил что я там про другое писал а не о библиотеке майсенсорс. о майсенсорс, я его не проталкиваю никуда, повторюсь, то на чем сам делаю о том и пишу. Отвечать вопросом на вопрос это ваше любимое занятие. Еще раз напишу, все те кому нужна помощь в освоении, я помогаю, бывает трачу на это даже слишком много своего времени.
+
avatar
0
Ну вот опять вода, ответьте конкретно какая/какие библиотеки есть еще для ардуино для построения сети датчиков, исполнительных устройств для «умного» дома, которые могли бы стать альтернативой mysensors. Или сольетесь опять?
+
avatar
  • Dimon_
  • 11 июля 2019, 22:29
0
для построения сети датчиков, исполнительных устройств для «умного» дома, которые могли бы стать альтернативой mysensors
Сейчас я вам расскажу про MQTT. Держитесь за стул! Вы не поверите!

PS: Но ваш агрессивный стиль смущает
+
avatar
  • berk
  • 11 июля 2019, 22:38
0
да уж, для меня в таком применении он закончился пару лет назад. Сейчас просто как вспомогательное. Но вы тем не менее расскажите, или сравните что лучше майсенсорс или mqtt,… мрак
+
avatar
+1
Похоже вы просто не понимаете о чем речь. Mysensors может работать используя mqtt, а вот mqtt заменить mysensors никак не сможет. Советую не позориться, а сначала хоть немного изучить тему, по которой бросились так глупо спорить.
+
avatar
+1
И все еще жду от вас ссылок на альтернативу mysensors, или можно засчитывать слив?
+
avatar
-1
Как это похоже на классического тролля. Начали с непонятной агрессии и пишите про агрессию))) Пишите водянисто, но требуете конкретики. Где ж вас таких, гениев, штампуют)
+
avatar
+2
Почитатйте комментарии ;) mySKU.me/blog/diy/73421.html
+
avatar
  • Dimon_
  • 11 июля 2019, 16:06
+2
Да знаю я. Я потому и начал беседу :)
+
avatar
+9
Жаль, что Администрация закрывает глаза на всё это…
Чел просто рекламирует свой «майсенсорс», нарегал кучу аккаунтов (например, berk, vsv78vrn, dmikhalsky — это все один и тот же человек), которые сами с собой ведут беседу, а по существу тупо спамят.
Все ответы сводятся к следующему: сами хотите — сами модернизируйте, все ответы есть на майсенсорс.орг, вам непременно помогут в телеграмм канале майсенсорс и т.д. и т.п.
+
avatar
  • Dimon_
  • 11 июля 2019, 17:09
+8
По большому счёту, в самом наличии библиотеки или в построении ардуино-самоделок — нет ничего плохого. Смущает именно отношение к публике, стиль ведения бесед. Ну и некоторое, хм.., лукавство, да. :)
+
avatar
  • berk
  • 11 июля 2019, 17:12
-2
да уж, это прям дно…
+
avatar
0
vsv78vrn это мой аккаунт и я также увлекаюсь МайСенсорс и построением сетей на любых устройствах…
на счет телеграм зайди в чат и сможешь убедится, что это разные люди…
жаль, что на таких как ты закрывает глаза Администрация…
все, что сказано про МайСенсор правда… если зайдете в телегу и у вас будут вопросы… то всегда поможем!
Коллектив там адекватный )))
+
avatar
0
клиника
+
avatar
0
а компаратор в авр в режиме сна не работает?
SN74LVC1G00 очень забавная мелкасхема
+
avatar
  • Mplus
  • 11 июля 2019, 14:41
0
какой радиус действия данного девайса с учетом бетонных стен?
+
avatar
0
так это больше уже от радио зависит… я лору пытал один из лучших вариантов… 3 бетонные стены по диагонали и экран лифта…
+
avatar
  • berk
  • 11 июля 2019, 14:58
0
я эти радиомодули тестил исключительно под свои хотелки, пробовал 200 метров и через бетонный дом многоэтажку,… ок. вероятно если выключить режим энергосбережения то долбанет с керамикой и на 500метров. вот видос как бегаю по этажам, это один из первых тестов —
+
avatar
0
Без обид. Но с таким сенсором при небольшом бюджете поступления соседей залить запросто.
Надо другой сенсор, который имеет расстояние между электродами меньше.
В качестве пример посмотрите на сенсоры определения влажности почвы.

BT в качестве беспроводного интерфейса тоже достаточно спорный выбор. WiFi в данном случае был бы по дальности выгоднее. Да, избыточен, но можно даже на роутере (OpenWRT, Entware и прочая) реализовать обработку аларма
+
avatar
  • berk
  • 11 июля 2019, 14:55
-1
надо другой сенсор с меньшим расстоянием?.. -это где то в виде аксиомы выбито в граните? вообще не вижу в этом проблемы, у меня датчик на таким типе уже около полугода на тесте.… Там не совсем БТ, точнее совсем не БТ, частота, да, 2.4. по дальности выгоднее? ну возможно если ваймакс :)
+
avatar
0
вообще не вижу в этом проблемы, у меня датчик на таким типе уже около полугода на тесте.…
Судя по даташиту — high level на ноге у этой микросхемы — 2V. Получить через тонкую лужу на полу два вольта, как мне кажется, надо постараться. На мокрой газете — срабатывает датчик?
+
avatar
  • berk
  • 11 июля 2019, 15:17
-1
там немного не так. отрабатывает данная схема отлично
+
avatar
+1
Здравый смысл включить, не?
Какая лужища должна быть, чтобы замкнуть два контакта на таком расстоянии. И сколько капель, чтобы замкнуть две дорожки с зазором 2 мм.
+
avatar
  • berk
  • 11 июля 2019, 15:15
-3
это датчик протечки а не дождя, смоделируйте ситуацию и вопросы уйдут.
+
avatar
+2
У Вас протечка ассоциируется только с фонтаном?
Капельное поступление, от которого не образуется лужи, но промокает напрочь перекрытие не видели?
+
avatar
  • berk
  • 11 июля 2019, 15:28
-1
у меня протечка асоциируется с аварией которая может нанести серьезный ущерб и источник которой необходимо быстро устранить. По поводу подтеканий например из сифона то в тумбы под раковины можно устанавливать младшую модель, там сам весь девайс целиком около трех сантиметров. И в целом датчики протечки в основном и изготавливаются на электродах стальных. А варианты датчиков которые присутствуют в линейках некоторых производителей, где снизу вместо стержней стоят пластины сработают не четче первых. уж извините но это надо просто пластину с дорожками кидать под раковину например, и чем ее поверхность будет больше, тем лучше. Но это просто не мой вариант. Предложите ваш.
+
avatar
+1
Мне нечего моделировать. У меня стоит система защиты. И успешно срабатывала при минимальном увлажнении.
+
avatar
  • berk
  • 11 июля 2019, 15:30
-1
рад за вашу безопасность,… что за бренд если не секрет?
+
avatar
0
Гидролок.
+
avatar
+2
У меня первые датчики были из решетки… это датчики дождя… но они часто срабатывали на ложные ситуации… к примеру на конденсат… в ванне от пара…
+
avatar
+3
Так а сколько на одной батарейке живет?
+
avatar
  • berk
  • 11 июля 2019, 14:56
-1
хз пока, но должно нереально долго.
+
avatar
  • SAIRUS
  • 11 июля 2019, 20:58
+3
Ппц ответ, а потом ещё обижаетесь что Вас уесосят…

Сложно что ли взять типичную ёмкость элемента питания и разделить на усреднённое энергопотребление получив при этом время работы системы в (часах/днях/годах)?
+
avatar
  • berk
  • 11 июля 2019, 21:10
-5
+
avatar
+1
смотри есть cr2450 там 500 мА ёмкость, а есть и 14250 там 1200мА, а есть и cr123 около 1500мА… с учетом спящего режима в 3 мка… а это 0.000003 ампера… то короче по предварительным данным… цифра такая, что просто не верится… тут даже и рассчитать не получается…
к примеру в среднем датчик от Xiaomi на батарейке cr2016 живет около двух лет…
далее делаем выводы сами…
а некоторый батарейки из старых материнских плат живут до 10 — 15 лет… ))) как то так…
+
avatar
  • u3712
  • 11 июля 2019, 15:08
+4
SN74LVC1G00
Замените ее на SN74LVC1G14DBVR — она имеет на входе ТШ, что резко облегчает жизнь всему устройству. Так-же, крайне желательно поставить емкость по входу этого элемента, для снижения риска ложных срабатываний. (к тому-же, 1G14 еще и дешевле в 2 раза ))
+
avatar
  • berk
  • 11 июля 2019, 15:18
-1
покупал и то и то, цена одинаковая. емкость естественно присутствует.
+
avatar
  • u3712
  • 11 июля 2019, 15:30
+5
Понятно…
SN74LVC1G00DBVR стоят 89 рублей (10 шт) по вашей ссылке, 78руб. минимум.
SN74LVC1G14DBVR стоят примерно 55 рублей за 10/20 штук. Вариант 55р/20шт я брал, вполне рабочие микросхемы.

Дополнительная информация
Вы применили плохое схемное решение, я предложил его исправить (аналоговые сигналы логическими микросхемами не обрабатываются).
+
avatar
  • berk
  • 11 июля 2019, 15:39
-1
возможно дешевле, спорить даже не буду, брал в МСК и то и то по 7рэ за штуку. Менять пока ничего не хочу, все очень устраивает как есть. но вы можете взять проект за основу, что то поменять или сделать всё по другому. проект открытый
+
avatar
  • berk
  • 11 июля 2019, 15:51
-1
пс… конечно спасибо,… без иронии, но я об этом варианте был в курсе. характеристики микросхемы с обвязкой из двух резисторов и емкости позволяют прекрасно использовать аналоговый сигнал на входе. отличный вариант для батарейного устройства, который ничего не потребляет.
+
avatar
+5
Какой вообще смысл в этой микросхеме? если у nrf свой lpcomp с гистерезисом и он у вас все равно включен и используется.
+
avatar
  • rx3apf
  • 12 июля 2019, 00:28
0
А на кой черт вообще дополнительный логический элемент, если у MCU и без того точно такие же CMOS-входы? Идея с 14 более правильная, да (но еще надо посмотреть, как у него с потреблением вблизи точки переключения, тоже может быть не очень хорошо). Я бы делал в режиме опроса через ADC (уже не зависим от порогов, все можно настроить).
+
avatar
-1
В режиме опроса, без прерываний??? И насколько хватит батарейки, на пару дней?
+
avatar
  • rx3apf
  • 12 июля 2019, 14:56
0
Ну естественно, что такие вещи делаются строго в глубокой спячке, по прерываниям!
+
avatar
-2
Ну либо опрос либо прерывания, что будет сигналом для старта ацп, и зачем нужен ацп, если сигнал уже считан???
+
avatar
  • rx3apf
  • 12 июля 2019, 19:23
0
Не «либо», а одно подразумевает другое. Т.е. прерывание от малопотребляющего таймера (часового или RC), запитка сенсора, считывание уровня с ноги и его обработка. АЦП нужен для того, чтобы не привязываться к уровню переключения логического входа, но можно, конечно, и обойтись, или применить другие способы измерения не-логических уровней.
+
avatar
-3
Какой таймер? Это датчик протечки, должен реагировать немедленно! Ваш вариант годится для для погодной станции, их так и делают, но не в этом случае. Это же очевидно, нет?
+
avatar
  • rx3apf
  • 13 июля 2019, 16:13
0
Что значит «немедленно»? Лаг, например, в 1 секунду — это много? О чем Вы вообще?
+
avatar
-1
Раз в секунду собрались будить процессор чтобы ацп считал есть ли утечка воды? Батарейки хватит на неделю! При том что у nrf есть компаратор с регулировкой уровня и гистерезисом и прерыванием по срабатыванию? Феерично!

ЗЫ. Вы хоть один датчик с батарейным питанием разработали в своей жизни? Давайте продолжим беседу, когда вы начнете разбираться в вопросе получше!
+
avatar
  • rx3apf
  • 13 июля 2019, 22:43
-1
Раз в секунду собрались будить процессор чтобы ацп считал есть ли утечка воды? Батарейки хватит на неделю!
Вы пьяны или бредите! Даже если (жуткое предположение) опрос займет 1 ms (что безумно много), 1 mA активного тока потребления при ежесекундном опросе дадут 1 uA среднего потребления.
Вы хоть один датчик с батарейным питанием разработали в своей жизни?
Я двадцать лет ПРОФЕССИОНАЛЬНО занимаюсь именно этой темой, и получаю за это зарплату. Это так, для информации…
+
avatar
  • Z2K
  • 14 июля 2019, 22:51
-1
«1 mA активного тока потребления при ежесекундном опросе дадут 1 uA среднего потребления. „
— В режиме передачи устройство потребляет ~ 24-27мА.
“опрос займет 1 ms (что безумно много) » — не всегда гейт сразу может ответить, задержки могут быть и значительно дольше — если датчик не в автономной системе со своим вторым отдельным приемо-передатчиком на проводном питании, а в общей системе, то гейт обрабатывает много устройств с разным обьемом трафика и разной приоритетностью.
+
avatar
  • rx3apf
  • 14 июля 2019, 23:05
0
Пока мы ожидаем события (протечки), нет необходимости вообще использовать радиоканал (разве что для поддержания работоспособности линка). Приведенная оценка относилась только к опросу самого сенсора протечки, гейт в это участвовать никак не должен.

Я поглядел спецификации на используемый контроллер — опрос вполне можно утоптать до субмикроамперного уровня (этак на порядок меньше озвученных 3 uA).
+
avatar
  • deco
  • 11 июля 2019, 18:03
0
Беспроводной датчик общается с базой на предмет разряда своей батарейки?
+
avatar
-1
проект интересный, но как говорят на защите диплома в институте: «не защитил» ))
+
avatar
  • Nuts_
  • 11 июля 2019, 21:14
0
это смотря какой институт а то и университет :)
+
avatar
0
корпуса с поддержкой печатали?

p.s.
не понимаю вашу отчаянную любовь к MySensor API. есть же более распространенный MQTT
+
avatar
  • berk
  • 11 июля 2019, 19:12
-1
да, с поддержкой. на второе я даже не знаю что и ответить… впереди я вижу только зигби
+
avatar
+1
Зигби все равно используете вы MySensor протокол или MQTT.

Но последний бурного развивается, имеет огромное комьюнити и лет через 10 будет стандартом как mp3. Запомните этот твит ©.
+
avatar
  • berk
  • 11 июля 2019, 21:57
0
я просто не понимаю как майсегсорс можно сравнить с mqtt, не понимаю с какого бока, уместнее бы было сравнивать зигби и майсенсорс. поэтому и не понимаю как вам ответить))
+
avatar
+1
Вы чуточку путаетесь в показаниях.

Гейтвей MySensors может работать как с последовательным портом или через tcp/udp (езернет и вайфай) со своим простым протоколом, так и через MQTT.

Сравнивать MySensors c MQTT — это как сравнивать болтик с йогуртом.

Насчёт бурно развивается — одна версия за последние 5 лет. Не очень-то и бурно.
+
avatar
0
Пипец, сколько же хейтеров MySensors набежало. И Ведь плохо себе представлябт, что это такое, но зато активно хейтят.
Чтобы бы был MQTT, его надо на что-то наложить, как правило, это wifi. Энергоэффективность сразу вылетает в трубу
+
avatar
  • OlegEF
  • 13 июля 2019, 17:21
0
например zigbee устройства уже давно работают по mqtt через шлюз
+
avatar
  • berk
  • 13 июля 2019, 18:56
-1
зигби устройства работают по протоколу зигби, по mqtt может обеспечиватся транспотр до контроллера например,… шлюз<=> контроллер. Так же реализовано и в Майсенсорс, связь между шлюзом и контроллером УД может быть usb serial, tcp ip(ethernet, wifi, (mqtt)).
+
avatar
0
именно так. Только хейтеры все равно минусуют :-)
+
avatar
0
Мне всегда интересно — какие бл*дь протечки? Менструальные? Это когда-нибудь кому нибудь пригодилось? Может если у самого руки кривые, то стоило нанять нормального сантехника и тогда датчики будут не нужны? Т.е. деньги и время заморочиться с такой системой было, а купить качественную сантехнику и пригласить адекватного специалиста для установки не было?
+
avatar
  • Z2K
  • 14 июля 2019, 23:05
0
Не всё и не всегда от специалиста зависит. Еще жестче вопрос можно поставить в авиастроении и эксплуатации самолетов. Там вопрос жизни и смерти — и там специалисты и их работа жестко контролируются — но, но всегда неизбежная в море случайность приводит к неизбежным результатам.
Поэтому кое-кто, кое-где страхуется и не только в страховых компаниях :).
+
avatar
0
То есть эта система для самолетов? Или для вас протечка дома это вопрос жизни и смерти?
+
avatar
0
У меня в городской квартире на отоплении «американка» Bugatti (настоящая, итальянская) потекла («задубела» резиновая прокладка) где-то через 17лет после установки — когда «дали тепло» прошлой осенью, а мы были на даче…
За сутки, пока понемногу подтекало — вздулся паркет на пол-комнаты.
А в прошлую пятницу, уже на даче, проявился свищ в латунном тройнике на чистой воде под кухонной мойкой. Незаметная струйка в доли миллиметра сделала большую лужу за цоколем мебели и была обнаружена только тогда, когда «выползла» из-за цоколя.
+
avatar
0
А можно ссылку на весь проект защиты от протечки-управление краном, резервное питание при отключении, схему наконец. Датчик это хорошо, но в отрыве от центрального блока самой системы это разговор программиста с экономистом, не в обиду будет сказано. хотелось бы увидеть проект законченной системы а не её куски. Или проект тихо помер?