Датчик уровня жидкости на бесконтактном датчике XKC-Y25

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Ответить
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Датчик уровня жидкости на бесконтактном датчике XKC-Y25

Сообщение woow » Вт июл 16, 2019 3:45 pm

Скетч отправляет данные по MQTT с ёмкостного датчика жидкости Non-contact Liquid Level Sensor probe XKC-Y25-T12V и выводит информацию в MajorDoMo. Всё консервативно: по проводам на Arduino. Проект буду развивать дальше , нужно много замеров температуры и т.д. Скетч выудил в интернете и поправил под датчик. Тестил - работает.
SL1024_.jpg
SL1024_.jpg (12.93 КБ) 1404 просмотра
СпойлерПоказать

Код: Выделить всё

/*
Скетч отправляет данные по MQTT с ёмкостного датчика жидкости 
Non-contact Liquid Level Sensor probe XKC-Y25-T12V и выводит   
информацию в MajorDoMo
*/

#include <SPI.h>                
#include <Ethernet.h>          
#include <PubSubClient.h>    

// Задаём mac и ip адреса в Локальной сети
byte mac[]    = { 0xDE, 0xFD, 0xDA, 0xFE, 0xFE, 0xED };
IPAddress ip{192, 168, 1, 17};      //ip Адрес Ethernet Shild'a Arduino
IPAddress server{192, 168, 1, 40};  //ip Адрес MajorDoMo server

// Шапка Функции Callback (обратный вызов)
void callback(char* topic, byte* payload, unsigned int length);

EthernetClient ethClient;                                 //Инициализируем Ethernet client
PubSubClient client(server, 1883, callback, ethClient);   //Инициализируем MQTT client

bool Liquid_level = 0;

// Функция Callback
void callback(char* topic, byte* payload, unsigned int length)
{
  // Выделяем необходимое кол-во памяти для копии payload
  byte* p = (byte*)malloc(length);
  // Копирование payload в новый буфер
  memcpy(p, payload, length);
  client.publish("Vessel/Liquid", p, length);
  // Освобождаем память
  free(p);
}

void setup()
{
  Serial.begin(9600); 
  pinMode(2,INPUT);
  Ethernet.begin(mac, ip);  
}

void loop()
{

Liquid_level = digitalRead(2);
Serial.print("Liquid_level= ");
Serial.println(Liquid_level,DEC);
delay(500);

  if (client.connect("MD"))
  {
    //Отправка данных по MQTT в Брокер

    client.publish("Vessel/Liquid/level", (Liquid_level == 0) ? "0" : "1"); //когда датчик фиксирует достаточный уровень- 0, кода жидкости не хватает (упала ниже датчика)- 1
    delay(2000);      // Задержка в секундах
    client.disconnect();      // Отключиться
  }
}
Raspberry Pi 3B+
Ответить