Подключение железа к AMS

Модератор: Alex

Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Подключение железа к AMS

Сообщение nick7zmail » Вс апр 24, 2016 10:25 am

Господа...появилась идея создать темку, связанную с подключением всяческих железяк. Ведь примеры всех девайсов для ардуины Алекс не впихнёт в сборку...ибо пинов не хватит даже на меге))). А создавать тему по каждой железке - тоже потеряться можно. По-этому предлагаю выкладывать ваши варианты подключений девайсов отсутствующих в базовой сборке AMS, дабы новичкам было проще...ну и всяческие вопросы по вариантам подключения - тоже можно тут обсуждать. Я буду собирать полезные ссылки в первом сообщении.

Пример оформления:

1) Оборудование (лучше с фото, схема подключения для сложных компонентов тоже не помешает).
2) Возможности (что может обеспечить ваш код, какие доп. возможности, алгоритм работы)
3) Полное описание установки
4) Комментарии, рекомендации (можно не писать)

Навигатор:
- Датчик температуры DHT11/DHT22
- Плата с 4 реле на 220v (пример реализации - 4 розетки)
- LCD экран 20*4 или 16*2 с шиной I2C
- Отличный датчик протечки своими руками (без кода)
- Расход воды (сенсор YF-S201)

esp8266
- Подключение датчиков Dallas Temperature (DS18B20)
Последний раз редактировалось nick7zmail Пн июл 18, 2016 12:31 pm, всего редактировалось 13 раз.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Подключение железа к AMS

Сообщение nick7zmail » Вс апр 24, 2016 10:31 am

1) Оборудование: Датчик температуры DHT11/DHT22
DHT22-PinOut.png
DHT22-PinOut.png (6.79 КБ) 22393 просмотра
2) Возможности: Снятие показаний температуры/влажности. Отправка их в MD, если активен модуль MD, вывод показаний в монитор порта.
3) Для установки достаточно активировать модуль TEMP_FEATURE (если он не активирован), и заменить в папке со скетчем для ардуино файл rtemp.ino (во вложенном архиве). Показания храняться в dht1_temp, dht1_hum. По аналогии можно добавить несколько датчиков.
4) Пока не придумал как совместить со стандартным rtemp, т.к. там датчики ds18b20, и с них записываются только показания только температуры, и для 1 датчика ds нужно 1 место в массиве, а для DHT нужно 2 места под температуру и влажность...чуть позже подумаю над этим вопросом.
Вложения
rtemp.rar
(814 байт) 640 скачиваний
За это сообщение автора nick7zmail поблагодарили (всего 2):
sega6549 (Вс апр 24, 2016 10:40 am) • Serge (Вс фев 28, 2021 3:26 pm)
Рейтинг: 2.33%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Sps
Сообщения: 45
Зарегистрирован: Вт окт 27, 2015 4:23 pm
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Re: Подключение железа к AMS

Сообщение Sps » Вс апр 24, 2016 11:47 am

Я скетч с ds18b20 не трогаю, создал новый под DHT22 в scripts.js, Server Ajax и Файлах.htm продублировал (с изменениями) коды по аналогии работы от ds18b20. Ваш r_temp натолкнул на некоторые мысли, пока экспериментирую.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Подключение железа к AMS

Сообщение nick7zmail » Вс апр 24, 2016 11:31 pm

Еще один девайс, под который я набросал код - вот такая плата с 4 реле. Возможно немного тороплюсь, т.к. плата мне ещё не дошла, но код уже подготовил, и вроде работает.
1) Оборудование: Плата для управления 4мя нагрузками 220v.
02_122.jpg
02_122.jpg (84.39 КБ) 22315 просмотров
2) Возможности: Управление платой с веб интерфейса (как MD, так и AMS), а так же физическими выключателями по типу вот этих
268_P_1252303217900.jpg
268_P_1252303217900.jpg (13.04 КБ) 22315 просмотров
Лично я такими управлять собираюсь...но как вариант - можно использовать обычные настенные выключатели, а реле пустить на свет.
Алгоритм работы следующий: При включении выключателем (физическим) - на сервере меняется статус. При выключении с сервера (кнопкой) устройство отключается. Чтобы включить выключателем - нужно его отключить, и снова включить - устройство включится. С сервера так же можно включать/выключать при отключенном выключателе. Устройство так же будет исправно включаться/выключаться. Дебаг выводится в монитор порта.
3) Для установки необходимо:
-распаковать файл relays.ino в папку с ams
-вписать в начало файла arduino_mega_server

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

#define RELAYS_FEATURE
byte modulRel =      MODUL_NOT_COMPILLED; 
boolean REL_state[4] = {0};//рядом с boolean LED_state[4] = {0}; 
(в места, похожие по содержанию))
-в функцию voidsetup ()

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

  #ifdef RELAYS_FEATURE
    relInit();
  #endif      
-в функцию void loop()

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

    #ifdef RELAYS_FEATURE
      rel_control();
    #endif      
-на вкладке server_ajax

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

#ifdef RELAYS_FEATURE
void SetREL() {
  if (StrContains(HTTP_req, "REL1=1")) {
      rel_sw(0, 1);
  } else if (StrContains(HTTP_req, "REL1=0")) {
      rel_sw(0, 0);
    }

  if (StrContains(HTTP_req, "REL2=1")) {
      rel_sw(1, 1);
  } else if (StrContains(HTTP_req, "REL2=0")) {
      rel_sw(1, 0);;
    }

  if (StrContains(HTTP_req, "REL3=1")) {
      rel_sw(2, 1);
  } else if (StrContains(HTTP_req, "REL3=0")) {
      rel_sw(2, 0);
    }

  if (StrContains(HTTP_req, "REL4=1")) {
      rel_sw(3, 1);
  } else if (StrContains(HTTP_req, "REL4=0")) {
      rel_sw(3, 0);
    }
}
#endif      
-там же в команде void responseGeneric()

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

    cl.print("<REL>");
      if (REL_state[0]) {cl.print("on");}
                   else {cl.print("off");}
    cl.println("</REL>");

    cl.print("<REL>");
      if (REL_state[1]) {cl.print("on");}
                   else {cl.print("off");}
    cl.println("</REL>");
    cl.print("<REL>");
      if (REL_state[2]) {cl.print("on");}
                   else {cl.print("off");}
    cl.println("</REL>");
    cl.print("<REL>");
      if (REL_state[3]) {cl.print("on");}
                   else {cl.print("off");}
    cl.println("</REL>");
- в void parseRequest() в секцию request_generic

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

SetREL();
- теперь на sd карте - аналогично sample2 создаём кнопки, и привязываем к коду в js

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

var strREL1 = "";
var strREL2 = "";
var strREL3 = "";
var strREL4 = "";
var REL1_state = 0;
var REL2_state = 0;
var REL3_state = 0;
var REL4_state = 0;
....


        if (this.responseXML.getElementsByTagName('REL')[0].childNodes[0].nodeValue === "on") {
            document.getElementById("REL1").innerHTML = "REL 1 is ON";
            REL1_state = 1;
          } else {
              document.getElementById("REL1").innerHTML = "REL 1 is OFF";
              REL1_state = 0;
            }
        if (this.responseXML.getElementsByTagName('REL')[1].childNodes[0].nodeValue === "on") {
            document.getElementById("REL2").innerHTML = "REL 2 is ON";
            REL2_state = 1;
          } else {
              document.getElementById("REL2").innerHTML = "REL 2 is OFF";
              REL2_state = 0;
            }
        if (this.responseXML.getElementsByTagName('REL')[2].childNodes[0].nodeValue === "on") {
            document.getElementById("REL3").innerHTML = "REL 3 is ON";
            REL3_state = 1;
          } else {
              document.getElementById("REL3").innerHTML = "REL 3 is OFF";
              REL3_state = 0;
            }
        if (this.responseXML.getElementsByTagName('REL')[3].childNodes[0].nodeValue === "on") {
            document.getElementById("REL4").innerHTML = "REL 4 is ON";
            REL4_state = 1;
          } else {
              document.getElementById("REL4").innerHTML = "REL 4 is OFF";
              REL4_state = 0;
            }
....
  strREL1 = "";
  strREL2 = "";
  strREL3 = "";
  strREL4 = "";

.....
function GetButtonRel1() {
  if (REL1_state === 1) {
    REL1_state = 0;
    strREL1 = "&REL1=0";
  } else {
      REL1_state = 1;
      strREL1 = "&REL1=1";
    }
  }
  function GetButtonRel2() {
  if (REL2_state === 1) {
    REL2_state = 0;
    strREL2 = "&REL2=0";
  } else {
      REL2_state = 1;
      strREL2 = "&REL2=1";
    }
  }
  function GetButtonRel3() {
  if (REL3_state === 1) {
    REL3_state = 0;
    strREL3 = "&REL3=0";
  } else {
      REL3_state = 1;
      strREL3 = "&REL3=1";
    }
  }
  function GetButtonRel4() {
  if (REL4_state === 1) {
    REL4_state = 0;
    strREL4 = "&REL4=0";
  } else {
      REL4_state = 1;
      strREL4 = "&REL4=1";
    }
  }

Ну вроде ничего не забыл....
4) Отправка в md пока не работает, но "почва" подготовлена. Не могу склеить строковую переменную с byte)), а в разные объекты пихать не хочется. Мог кстати что-то упустить, половина делалось методом тыка)). Пишите, исправимся.
Вложения
relays.rar
(631 байт) 588 скачиваний
Последний раз редактировалось nick7zmail Пт апр 29, 2016 5:39 pm, всего редактировалось 1 раз.
За это сообщение автора nick7zmail поблагодарили (всего 2):
Максим Николаевич (Пн июн 27, 2016 2:38 pm) • awladimer (Чт фев 23, 2017 9:09 pm)
Рейтинг: 2.33%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
smden
Сообщения: 19
Зарегистрирован: Сб апр 23, 2016 10:42 am
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Подключение железа к AMS

Сообщение smden » Чт апр 28, 2016 6:20 pm

Я ещё не подцеплял к relay модулю, но одной переменной не хватает - это int REL_state[3]; в блоке #ifdef RELAYS_FEATURE
Наверно можно ещё так int REL_state[]=""; Но не пробовал.
Raspberry Pi 3
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Подключение железа к AMS

Сообщение serghei » Чт май 26, 2016 1:29 pm

В связи с поддержкой АМС_015 сенсоров появилась необходимость наблюдать температуру термодатчика на экране LCD без
участия WEB интерфейса.Для этого подключаем экран 20*4 или 16*2 с шиной I2C, так как все остальные выводы заняты.
В начале подключаем библиотеку и определяем I2C-сканером адрес экрана

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


#include <SD.h>
#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>


#include <LiquidCrystal_I2C.h>       // Подключаем библиотеку

LiquidCrystal_I2C lcd(0x27,20,4);    // Назначаем адрес и размер экрана..20,4..или 16,2



char const SELF_NAME[] = "AMS Due";
// AMS
char const VERSION[] = "0.15";
#define AMS_VERSION 5

 
В конце Setup инициализируем экран и выводим любой текст, который висит постоянно

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

  timeStamp();
  Serial.println("GLOBAL Init DONE");
  Serial.println();
  timeStamp();
  Serial.println("AMS WORK");
  
  
  
 
      lcd.begin();                       // В зависимости от библиотеки
      
    //lcd.init();                        // Инициализация lcd             
  lcd.backlight();                       // Включаем подсветку
                                         // Курсор находится в начале 1 строки
  lcd.print(" AMS_015 DUE NRF24");       // Выводим любой текст
  
  lcd.setCursor(0, 2);
  lcd.print("TEMP 1 =");                 //Выводится один раз при старте 

} // setup

/* loop
-------------------------------------------------- */

void loop() {
  #ifdef UPLOAD_FEATURE

 
И в самом конце вставляем значение датчика температуры сенсора или любого градусника в системе.

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

    
    // end loop works
    print1s();
    eraseCyclos();
    profCalc();

    cyclosDelayWork();
    
    
        lcd.setCursor(10, 2);//  устанавливаем начальную позицию вывода значения
        lcd.print(nrf1Temp1);//  Выводим любое значение,конкретно тут температуру сенсора

  } // if (modeWork == MODE_SERVER)
} // loop

 
На практике очень удобно- не надо включать компьютер,чтобы узнать температуру. Таким же образом можно выводить напряжение и мощности одновременно. Работает на Меге и Дуе. Экран запитывается с платы контроллера +5 вольт.
Всё это справедливо и для АМС_014.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Подключение железа к AMS

Сообщение serghei » Пт июн 24, 2016 8:44 am

Продолжаем подключать оборудование к сенсору для измерения расхода воды. Использую датчик YF-S201.
Промежуточный результат на АМС на картинке.


Код еще сырой,но все работает. Сенсор уверенно ловится через каменную стену в метр толщиной и два гипсокартона.
В процессе изучения протокола удалось научиться передавать значения датчиков. Следующей задачей будет подключение второго сенсора. Пока не могу понять какие команды надо передать,чтобы база могла разделять данные с разных сенсоров.
Код для Дуи и сенсора прилагаю. В них дополнительной опцией прикручен экран.
Подобный метод подходит для всего, что нужно посчитать- счетчики воды, электроэнергии, любых оптопар и т.д.
Вывод в МД реализован не корректно, но работал пока не начались проблемы с циклами.
Ближайшей задачей является правильный вывод значений в МД. на 99% это необходимо для хранения истории и дальнейшего анализа.
Вложения
CD_AMS015_sensor_vol.part05.rar
(78.71 КБ) 494 скачивания
CD_AMS015_sensor_vol.part04.rar
(256 КБ) 481 скачивание
CD_AMS015_sensor_vol.part03.rar
(256 КБ) 474 скачивания
CD_AMS015_sensor_vol.part02.rar
(256 КБ) 481 скачивание
CD_AMS015_sensor_vol.part01.rar
(256 КБ) 466 скачиваний
ams_nrf24_controller.rar
(13.47 КБ) 509 скачиваний
ams_due_lcd_015_MD_test_vol_work.rar
(45.78 КБ) 476 скачиваний
YF-S201.jpg
YF-S201.jpg (24.5 КБ) 21680 просмотров
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Подключение железа к AMS

Сообщение serghei » Пт июн 24, 2016 9:27 am

По поводу самого датчика. Очень похож на игрушку для взрослых.Реально стоит на холодной воде перед бойлером. По паспорту расчитан на давление в 2 килограмма. У меня 4-6. При наружной температуре в 30 градусов и подачи воды в 20 очень сильно потеет и конденсирует. Для практического применения желательно искать подобные датчики в латунном корпусе. В китае стоят от 12 баксов.
На 3-х литровую банку делает 1300 оборотов.Поэтому в скетче стоит коэффициент 430. Получаются литры.Для других датчиков коэффициент надо подбирать экспериментально.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Подключение железа к AMS

Сообщение serghei » Пт июн 24, 2016 4:21 pm

Прошу прощения. Правильный скетч для сенсора
Вложения
ams_nrf24_controller_yfs201_test_4_lcd_work.rar
(16.33 КБ) 551 скачивание
За это сообщение автора serghei поблагодарил:
Andrey64 (Вс авг 13, 2017 3:38 pm)
Рейтинг: 1.16%
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Подключение железа к AMS

Сообщение Alex » Сб июн 25, 2016 11:59 am

Пока не могу понять какие команды надо передать,чтобы база могла разделять данные с разных сенсоров.
Это очень просто: при первом включении сенсор генерирует сетевой адрес (1..254) случайным образом. Этот номер передаётся в каждом пакете и однозначно идентифицирует отправителя. Нужно только дописать пару строк кода, которые будут реагировать на пакеты только с этого сетевого адреса.

Если не нравится сгенерированный адрес, то есть встроенная сетевая команда, изменяющая его, или в скетче сенсора можно принудительно выставить любой адрес.
Ответить