1 2 3 4 5 6 7 8 9 10 10/10 10,00оценок: 12

Arduino Mega. Контроллер теплицы. Хроники - 4.0

Тема в разделе "Теплицы и парники", создана пользователем Анкор Плюс, 19.05.18.

Статус темы:
Закрыта.
  1. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Понял. Подготовлю одну из плат и закачаю. Я думал оставлять атмосферное давление или нет.
    В этом случае может в будущем принимать сигналы от метеостанции. Это так по приколу и не сейчас.
     
  2. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Интерфейс узнаваемый, не ошибёшься ;) Все настройки, включая пищалку и руление через разные MCP - тоже перетащил в проект, всё пищит и инициализируется. Настройки стали проще, кое-где уже не надо указывать кол-во датчиков или MCP - достаточно прописать через запятую ;)

    Растём :)]:aga:
     
  3. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    А вот что касается STM32 - если бы кое-кто не гнал ("да у меня уже солнце", "да надо ещё вчера") - то можно было бы потихоньку, в течение годика - поднять с нуля проект контроллера солнечной установки под STM32, с FSMC и прочими плюшками.

    Но - раз надо быстро, значит - надо быстро, будем делать на Due, при необходимости - портируем, и всё: все переходные вещи можно написать ;)

    Всё, ушёл до завтра, отпишись пж по результатам тестирования, завтра я гляну - сегодня уже тыква не варит :(
     
  4. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    LoRa я оставил в проекте.
     
  5. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Потеряем время на изучение. Но мощный источник питания (2500 ватт) для фирмы я уже заложил на STM32 и даже работает в ограниченном варианте.
     
  6. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Правильно сделал ;) А я оставил и nRF в прошивке, совсем на всякий, кто знает. Код - он есть не просит, особенно - когда выключен из проекта директивами условной компиляции :) :) :)
     
  7. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Дима, я не могу сообразить, как ты собираешься подключить датчик засветки BH1750 и компас HMC5883L. У них шина I2C, а значит длина проводов не более 10-20 см. Да и у датчика угла наклона используются три аналоговых входа. Получается что контроллер нужно устанавливать на самой установке?
     
  8. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Датчик засветки пока припилил напрямую к контроллеру. Ты не хочешь попробовать удлинители I2C? Есть же буфера специальные ;)

    Ещё один вариант: через промежуточный МК, который просто плюёт в UART раз в N секунд данные, и подключить его к свободному Serial, например. И усё будет норм. Короче, надо думать, решения есть всегда. Если берём UART, то его через RS-485 можно вытащить куда угодно, прошивка для модуля-переходника - простенькая получится ;)

    Думай до завтра, и я сделаю. Действительно - этот вариант избавит от проблем с датчиками на I2C. Сам лично - склоняюсь к UART + RS-485. 328-й меги - там за глаза ;)
     
  9. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Буфер I2C уже стоит. Даже в твоем контроллере. ;)
     
  10. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @promavto - Саш, обновил всё. Сейчас вкратце постараюсь описать, как подружить весь этот огород.

    Итак - у нас есть контроллер теплицы, контроллер солнечной установки (закачивается на плату контроллера теплицы без вопросов), и прошивка под 328-ю мегу для удлинения датчиков I2C и передачи показаний с них на контроллер солнечной установки.

    Настройками можно связать контроллер солнечной установки с контроллером теплицы, по любому из трёх шлюзов: RS-485, nRF, LoRa. Для этого на стороне контроллера теплицы включается настройка USE_UNI_SUN_CONTROLLER_MODULE, на стороне контроллера солнечной установки - настройка ENABLE_GREENHOUSE_LINK в прошивке UniversalSunControllerModule. Там же - всякие другие настройки, типа того, какие шлюзы использовать.

    При такой связке контроллер солнечной установки по выбранному протоколу общения (например, и в контроллере теплицы, и в контроллере установки - включена USE_LORA) - будет отправлять данные на контроллер теплицы. Единственное, что при использовании радиоканала - надо привязать контроллер установки к нужному ID контроллера теплицы, инструкции - в самом верху UniversalSunControllerModule. ino.

    Контроллер теплицы пока просто выводит в порт полученные данные (естественно, надо включить соответствующий дебаг-режим, например, LORA_DEBUG или RS485_DEBUG). Скажем так - это задел на будущее ;)

    При работе с RS-485 контроллер установки выступает как слейв.

    Далее - про модуль датчиков установки. Это прошивка SunControllerSensors, может работать как по RS-485, так и по LoRa. делает тупо: периодически обновляет показания с датчиков и пишет их в эфир, всё. При работе через RS-485 - выступает как мастер, контроллер установки слушает при этом определённый UART (см. настройку USE_RS485_CHILD_SENSORS). Прошивка должна без проблем закачиваться на твой модуль, разработанный для датчиков контроллера теплицы ;)

    По итогу что получаем: можно и так, и сяк, и с контроллером теплицы связываться и отсылать ему данные с солнечной установки. Датчики на I2C - теперь не проблема вынести на дочерний модуль.

    Единственное "но": надо тестировать всё вместе - особенно это касается радиоканалов; поскольку я ввёл новые типы пакетов для радиоэфира - надо убедиться, что контроллер теплицы неизвестные ему пакеты - тупо игнорирует и ему не сносит крышу. По коду - вроде не должно, но мало ли, что называется.

    Т. е. нужно иметь стенд, где стоит контроллер теплицы с включенной LoRa, стоит контроллер солнечной установки с включенной LoRa, и стоит дочерний модуль солнечной установки с включенной LoRa. По RS-485 - там понятно, шнурок, но и это - тоже желательно протестировать, особенно - связь солнечной установки с дочерним модулем по RS-485.

    В дочернем модуле уже припилен датчик BH1750. Из недостатков, какие я вижу сходу: для нового типа радиопакета (с показаниями датчиков дочернего модуля солнечной установки) - вообще нет привязки к ID контроллера, взять её неоткуда, собственно - именно поэтому я настаивал на RS-485, иначе каждый модуль придётся перед пуском в работу настраивать. Теоретически - привязка по ID контроллера особо и не нужна до тех пор, пока у соседа в радиусе видимости LoRa не появится такой же модуль солнечной установки. Вот об этом - надо подумать, кмк. В принципе, при неиспользовании RS-485 на дочернем модуле можно дописать поддержку команд установки ID контроллера через монитор порта, как это было сделано для модуля метеостанции.

    Фух, вроде ничего не забыл. Пошёл спать, отосплюсь - и приделаю таки привязку к ID контроллера, наверное. Но тестировать - уже НУЖНО!
     
  11. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @promavto, обновил, добавил для дочернего модуля солнечной установки поддержку привязки к ID контроллера через монитор порта, команда SET=ID|тут_идентификатор.

    Теперь всё это можно связать воедино, ваапшче. Т. е. если хочется по радиоканалу связывать все девайсы, то для контроллера теплицы через конфигуратор назначаем ID (там есть в окошке "Настройки прошивки", емнип), а для контроллера солнечной установки и его дочернего модуля - выполняем команды

    SET=ID|тут_идентификатор

    и всё - теперь при хождении пакетов проверяется ещё и привязка по этому значению, т. е. чужие пакеты - нам пофигу. Таким образом, в рамках системы можно назначить связку "один контроллер теплицы - один контроллер солнечной установки - один дочерний модуль солнечной установки", при этом миксуя подключения, например: дочерний модуль солнечной установки может быть связан с ней по LoRa, а сама солнечная установка - связана с контроллером теплицы по RS-485. Или - наоборот. Или - по одинаковым шлюзам.

    Не запутаешься? :) :) :)

    Всё, теперь точно буду спать до обеда, постарайся, пожалуйста, вникнуть в настройки и протестировать, как ходят пакеты в рамках системы. Они должны ходить, если нигде не напорол. Если что-то не будет получаться - записывай, что делал, не забывай про дебаг-режимы ;)
     
  12. evgeny1241
    Регистрация:
    07.07.16
    Сообщения:
    472
    Благодарности:
    46

    evgeny1241

    Живу здесь

    evgeny1241

    Живу здесь

    Регистрация:
    07.07.16
    Сообщения:
    472
    Благодарности:
    46
    Попробывал новые nrf c антеной - ушел на метров 200 работают. чуть позже попробую вариант wifi с репитором ..
    Попробывал новые nrf с модулем датчиков. фигня таже. используемые млаты nano? uno? про .. блок питания nrf как напрямую так и с кондером. датчик пробывал ds18 и si7021 сразу после старта экран с сообшением о инициализации nrf и все. Эти же блоки перешитые на исполнительные проверял - таскал на 200 метров. все работает. прогнал все тесты из статьи на амперке. все работает. фигня какая то.
    Библиотеку nrf брал у Димы с гитхаба из комплекта что называется.
    У кого нибудь они работают ?
    конфиги прям как есть с гитхаба, только nrf включал
     
  13. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    У меня работают. Дебаг-режимы - отключены. Не возитесь с ними, поберегите себя ;)
     
  14. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @evgeny1241, я сейчас ещё раз проверю код, который выложен на гитхабе, и отпишусь. Воозможно, где-то расхождение, т. к. я храню код для гитхаба в отдельном месте.
     
  15. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Продолжаем знакомиться с программами управления солнечной установкой.
    В посту https://www.forumhouse.ru/posts/23938107/ мы ознакомились с программой расчета положения Солнца относительно Ваших географических координат.
    Сегодня я хочу представить Вам программу обработки датчиков наклона MPU-6050 (GY-521) и компаса HMC5883L (GY-273).
    В качестве вводных данных Вам необходимо указать Magnetic Declination (для Зеленограда 11) и Longitude (для Зеленограда 37.15). Эти данные легко получить в интернете.
    Угол наклонения на Солнце лучше получить по оси Z (MPU-6050). В этом случае данные движения датчика, закрепленного сбоку установки будут соответствовать расчетному. Данные компаса получаем по оси Х.

    Код:
    //+++++++++++++++++++++++++ Измерение положения установки по вертикали и горизонтали  +++++++++++++++++++++
    #include <Wire.h>
    #include <HMC5883L.h>
    
    HMC5883L compass;
    
    //Measure Angle with a MPU-6050(GY-521)
    const int MPU_addr = 0x68;
    int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;
    
    int minVal = 265;
    int maxVal = 402;
    
    double x;
    double y;
    double z;
    int Magnetic_Declination = 11; // Зеленоград
    float Longitude = 37.15; // Зеленоград
    
    void setup()
    {
      Serial.begin(57600);
    
      // Initialize MPU6050
      Wire.begin();
      Wire.beginTransmission(MPU_addr);
      Wire.write(0x6B);
      Wire.write(0);
      Wire.endTransmission(true);
    
      // Initialize HMC5883L
      Serial.println("Initialize HMC5883L");
      while (!compass.begin())
      {
        Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
        delay(500);
      }
    
      // Set measurement range
      compass.setRange(HMC5883L_RANGE_1_3GA);
    
      // Set measurement mode
      compass.setMeasurementMode(HMC5883L_CONTINOUS);
    
      // Set data rate
      compass.setDataRate(HMC5883L_DATARATE_30HZ);
    
      // Set number of samples averaged
      compass.setSamples(HMC5883L_SAMPLES_8);
    
      // Set calibration offset. See HMC5883L_calibration.ino
      compass.setOffset(0, 0);
    }
    
    void loop()
    {
      Vector norm = compass.readNormalize();
    
      // Calculate heading
      float heading = atan2(norm.YAxis, norm.XAxis);
    
      // Set declination angle on your location and fix heading
      // You can find your declination on: http://magnetic-declination.com/
      // (+) Positive or (-) for negative
      // For Bytom / Poland declination angle is 4'26E (positive)
      // Formula: (deg + (min / 60.0)) / (180 / M_PI);
      // float declinationAngle = (4.0 + (26.0 / 60.0)) / (180 / M_PI);
      float declinationAngle = (Magnetic_Declination + (Longitude / 60.0)) / (180 / M_PI);
      heading += declinationAngle;
    
      // Correct for heading < 0deg and heading > 360deg
      if (heading < 0)
      {
        heading += 2 * PI;
      }
    
      if (heading > 2 * PI)
      {
        heading -= 2 * PI;
      }
    
      // Convert to degrees
      float headingDegrees = heading * 180 / M_PI;
    
      // Output
      Serial.print(" Heading = ");
      Serial.print(heading);
      Serial.print(" Degress = ");
      Serial.print(headingDegrees);
      Serial.println();
    
      Serial.println("************************");
    
      Wire.beginTransmission(MPU_addr);
      Wire.write(0x3B);
      Wire.endTransmission(false);
      Wire.requestFrom(MPU_addr, 14, true);
      AcX = Wire.read() << 8 | Wire.read();
      AcY = Wire.read() << 8 | Wire.read();
      AcZ = Wire.read() << 8 | Wire.read();
      int xAng = map(AcX, minVal, maxVal, -90, 90);
      int yAng = map(AcY, minVal, maxVal, -90, 90);
      int zAng = map(AcZ, minVal, maxVal, -90, 90);
    
      x = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI);
      y = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI);
      z = RAD_TO_DEG * (atan2(-yAng, -xAng) + PI);
    
      Serial.print("AngleX= ");
      Serial.println(x);
    
      Serial.print("AngleY= ");
      Serial.println(y);
    
      Serial.print("AngleZ= ");
      Serial.println(z);
      Serial.println("-----------------------------------------");
      Serial.println();
      delay(500);
    }
    
    
     
Статус темы:
Закрыта.