Giter Club home page Giter Club logo

cyber-growbox-2077's Introduction

cyber-growbox-2077

This is the most epic student's growbox ever. We hope that this project will help us to grow plants that will look like plants from Plants vs Zombies.

cyber-growbox-2077's People

Contributors

electro98 avatar redb0 avatar timofey-arch avatar

Stargazers

 avatar

Watchers

 avatar

cyber-growbox-2077's Issues

Показания датчика параметра среды BME680

Описание проблемы

GrowBox будет содержать датчик, который передает параметры качества воздуха, а именно:

  • Температура воздуха
  • Содержание газов в воздухе (летучие органические соединения)
  • Барометрическое давление
  • Влажность воздуха

Возможная реализация

Для удобной работы с остальными датчиками предлагается оформить процедуру чтения данных с датчика BME680 при помощи функции getAirParametrs, которая возвращает значения с плавающей точкой всех вышеперечисленных параметров качества воздуха.
Данные с датчиков необходимо выводить в Serial порт.

Подключение

  • Arduino Nano
  • BME680 (датчик параметра среды)

Ссылка на интернет-ресурс с подробным описанием работы данного датчика и схемой подключения к плате BME680

Использование БД другого типа

Использование БД другого типа

Описание проблемы

Наш проект столкнулся с сложностью использования реляционных баз данных для хранения временных рядов. Преполагается, что использование БД предназначенного для этого сильно облегчит труд программистов и улучшит структуру хранения и контроля данных.

Возможная реализация

Предлагается взять БД InfluxBD версии 1.8.6. Так как она имеет язык запросов схожий с SQL, именнуемый InfluxQL.
Необходимо переписать все взаимодействия с БД на новый тип.

Реализация тестовой прошивки для esp-01

Реализация тестовой прошивки

Описание проблемы

Тестовая прошивка на платформу Arduino уже на стадии завершения, но для полной автономности системы необходимо сообщение с сервером посредством использования Wi-Fi.

Возможная реализация

Предлагается написать прошивку на платформу esp-01 и реализовать следующий функционал:

  • Получение команд с сервера в любом виде;
  • Отправка команд, типа A1 и R200 на платформу Arduino для управления системой;
  • Отправка на сервер данных полученных от Arduino.

Команды посылаемые на Arduino для управления системой, должны иметь префиксы R и L, A и D за которыми будет следовать числовое значение аргумента команды.

Возможно стоит использовать закрывающий символ типа ;.

Рекомендуется использовать IDE PlatformIO.

Подключение и комплектующие

Комплектующие:

  • плата esp-01
  • плата Arduino nano

Добавление MH-Z19

Описание проблемы

Чтобы корректно контролировать состояние окружаещего воздуха, необходимо получать данные о количестве углекислоты содержащееся в нём.
Для этого предполагается использовать датчик MH-Z19. Этот датчик также имеет не вполне документированную возможность определять температуру воздуха.

Возможная реализация

Для получения данных с датчика необходимо отправить ему простую команду длиной 9 байт по последовательному интерфейсу.

Датчик присылает ответ с контрольной суммой, её необходимо проверить, если контрольная сумма не будет совпадать, предполагается вернуть 0.

Подключение и комплектующие

Комплектующие:

  • Arduino nano (Основная плата)
  • MH-Z19 (Датчик)

О подключении MH-Z19 к Arduino можно прочитать здесь.

Показания датчика концентрации солей в воде TDS Meter V1.0

Описание проблемы

GrowBox будет содержать датчик, который передает данные концентрации солей в воде.

Возможная реализация

Для удобной работы с остальными датчиками предлагается оформить процедуру чтения данных с датчика TDS Meter V1.0 при помощи функции getTdsParametrs, которая возвращает значение с плавающей точкой параметра концентрации воды.
Данные с датчика необходимо выводить в Serial порт.

Подключение

  • Arduino Nano
  • TDS Meter V1.0

Ссылка на интернет-ресурс с подробным описанием работы данного датчика и схемой подключения к плате TDS Meter V1.0

Написание тестового сервера для взаимодействия с Wi-fi модулем

Описание проблемы

Для удобного мониторинга, а также сбора, хранения и дальнейшего анализа информации, собираемой датчиками, необходимо реализовать централизованную систему в виде веб-сервера.

Возможная реализация

Сервер должен обращаться к устройству посредством GET и POST запросов. Необходимо реализовать следующие запросы:

  • GET запрос на получения данных с датчиков (независимо от состояния таймера), ответ на этот запрос должен содержать данные в json формате вида:
{
    "parameter": "value_int_float_str", 
}
  • POST/GET запрос на установку таймера для сбора данных с датчиков
  • GET запрос на включение/выключение устройства (лампы, насоса и др.)
  • GET запрос на подъем/опускание платформы с лампами

Помимо непосредственных запросов устройство должно отсылать данные на сервер в виде POST запросов по таймеру с помощью часов реального времени DS3231 и модуля Wi-Fi esp-01. Со стороны сервера нужно обеспечить прием этих запросов и отображение информации на страничке (для начала без сохранения в БД, возможно, реализовать сохранение в списки или словари python).

Реализовать отображение линейных графиков с помощью Dash. Подробнее о линейных графиках смотри в документации к Dash. О размещении графиков на странице можно ознакомиться в документации.

При реализации запросов желательно воспользоваться представлениями в виде классов. Это позволяет сделать flask.views.MethodView.

Инструментарий

  • Flask (для реализации веб-сервера)
  • Dash (для создания дашбордов мониторинга системы)
  • pandas (для удобной работы с данными, по ситуации)

3D-модель для печати корпуса платы

Описание проблемы

GrowBox будет содержать датчики и платы, которые необходимо обезопасить корпусом.

Возможная реализация

Для удобного расположения и эффективной работы плат, предлагается создать корпус размерами 200 х 70 х 70 мм. Сделать отверстия в 3D-модели для вывода проводов питания и датчиков. Создание 3D-модели будет проходить в программе Fusion 360. Расширения файла stl.

Принципиальная схема платы

Аппаратное обеспечение

Основной платформой предлагается использовать Arduino Nano.

Предлагается использовать следующие датчики для измерений:

  • GY-302 для уровня освещенности
  • DS18B20 для измерения температуры питательного раствора (пример подключения)
  • BME680 для измерения температуры, давления и влажности воздуха
  • MH-Z19 для измерения концентрации CO2
  • PH для измерения кислотности питательного раствора
  • TDS для измерения солености питательного раствора

Отправку данных должна осуществляться по Wi-Fi с помощью ESP-01.

Необходима возможность управления внешними устройствами:

  • двумя двигателями Nema 23
  • насосом (12 вольт)
  • двумя лампами (220 вольт)

Для управления двигателями предлагается использовать драйвера A4988.
Лампы и насос должны управляться через реле.

Необходима возможность производить измерения и управлять устройствами по таймеру. Предлагается использовать модуль DS3231.

Конструктив

Плата должна быть разделена на две части:

  • Основная часть с Arduino, драйверами, реле, таймером, Wi-Fi модулем и датчиками PH, TDS, DS18B20.
  • Часть с остальными датчиками

Обе части предполагается соединить шлейфом с максимальной длиной 30 см.

Принципиальная схема платы

Требуется разработать принципиальную схему платы.

Конфигурация проекта для PlatformIO

Цели

Для разработки проекта под Arduino предлагается использовать PlatformIO. По ссылке можно прочитать, почему стоит перейти на эту IDE.
Для него есть удобное расширение под VS Code (ссылка). Рекомендуется ознакомиться с документацией.

Основные причины использования PlatformIO в нашем проекте:

  • поддержка многих файлов
  • удобное управление зависимостями
  • наличие виртуального окружения
  • возможность использования полноценных C/C++

Задачи

Предлагается выполнить следующие действия:

  • Сконфигурировать проект в PlatformIO под Arduino Nano
  • Добавить базовые библиотеки датчиков в файл platformio.ini.

Показания DS18B20

Получение показаний с датчика температуры DS18B20

Описание проблемы

В GrowBox питание растений будет осуществляться с помощью питательного раствора. Для исследования влияния его температуры на растения требуется фиксировать этот показатель. Для этого предлагается использовать DS18B20 в герметичном корпусе.

Возможная реализация

Для удобной работы с разными датчиками предлагается оформить процедуру чтения данных в виде функции getTemperature, которая возвращает число с плавающей запятой.

Также необходимо создать функцию для конфигурации датчика, а именно установки его разрешения. Это можно сделать с помощью метода setResolution объекта класса DallasTemperature. Предлагается использовать разрешение равное 12 бит.

Дополнительные зависимости

Работа с датчиком DS18B20 требует подключения дополнительных зависимостей:

Для использования DallasTemperature рекомендуется добавить зависимость milesburton/DallasTemperature @ ^3.9.1 в файл platformio.ini.

Для использования OneWire рекомендуется добавить зависимость paulstoffregen/OneWire @ ^2.3.5 в файл platformio.ini.

Подключение и комплектующие

Комплектующие:

  • Arduino Nano (основная плата)
  • DS18B20
  • Резистор 4,7 кОм

С подключением и примерами работы с DS18B20 можно ознакомиться по ссылке.

Управление реле через Serial

Управление реле через Serial

Описание проблемы

Growbox будет использовать три(возможно расширение) реле для управления освещением растений и насосом питательного раствора. Для тестирования этого функционала на первых этапах проектирования Growbox предлагается добавить функционал раздельного управления реле через Serial порт.

Возможная реализация

Предлагается расширить существующий список команд следующими:

  • A1 - активация первого реле;
  • D1 - деактивация первого реле;

Команды должны иметь символьный префикс A или D. Префикс A обозначает активацию реле, а префикс D деактивацию.

После префикса предлагается указывать порядковый номер реле, который определяется в коде программы.

Поключение и комплектующие

Управление реле должно осуществляться через три любых пина Arduino.

Комплектующие:

  • три модуля реле
  • две лампы для освещения растений
  • насос постоянного тока

Создание логотипа

Создание логотипа

Описание задачи/проблемы

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

Предлагаемая реализация

Предлагается использовать стиль минимализма для создания лого и использовать образ небольшого ростка в горшке.

Необходимо обсудить данную задачу.

Переоформление функции для датчиков

Переоформление функции для датчиков

Описание проблемы

Функции многих датчиков были реализованы, однако, их реализация не позволяет включить эти функции через команду препроцессора <include>.

Предлагаемая реализация

Предлагается переоформить код файлов содержащих эти функции, для возможности последующего импорта этих функций в основной код.

Модель каретки платформы для крепления ламп

Описание проблемы

Платформа с лампами для подсветки растений поднимается и опускается по четырем цилиндрическим направляющим, по две с каждой стороны. К направляющим прилагаются линейные подшипники SC16UU (чертеж с размерами). Каретка должна крепиться к двум подшипникам и иметь крепления для профиля 20x80. Кареток должно быть две штуки.

Описание размеров

Расстояние между центрами направляющих: 160 мм.

Крепление профиля должно располагаться в верхней центральной части каретки.

Методы решения

Модель нужно реализовать в формате stl. Желательно добавить файлы step для возможности изменения модели.

Добавление BME680

Описание проблемы

Для контроля параметров воздушной среды и анализа их влияния на рост растений необходимо измерять такие параметры воздуха как:

  • температура
  • влажность
  • давление

Для этого предполагается использовать датчик BME680. В дополнении к вышеперечисленным параметрам он умеет определять качество воздуха в баллах IAQ (Indoor air quality). Подробное описание с распиновкой можно прочитать здесь.

Подключение

Датчик BME680 работает по интерфейсу SPI или I2C. Для работы этого датчика уже имеются готовые библиотеки, необходимо подключить и использовать следующие библиотеки:

Предлагаемое решение

Для подключения библиотек Adafruit_Sensor.h и Adafruit_BME680.h необходимо добавить в файле platformio.ini в параметр lib_deps строки:

  • adafruit/Adafruit Unified Sensor @ ^1.1.4
  • adafruit/Adafruit BME680 Library @ ^1.1.1

Исходя из примера прошивки для BME680 создать объект датчика для I2C можно как:
Adafruit_BME680 bme

Для получения данных объект имеет атрибуты:

  • temperature - для чтения температуры (в градусах Цельсия);
  • humidity - для чтения влажности (в процентах);
  • pressure - для чтения давления (в Паскалях);
  • gas_resistance - для чтения качества воздуха (в Омах).

Алгоритм преобразования данных в индекс IAQ можно сделать на основе кода:
https://github.com/G6EJD/BME680-Example/blob/master/ESP32_bme680_CC_demo_02.ino

Необходимо реализовать следующие функции:

  • setupBME - функция для конфигурации датчика, см. пример из библиотеки Adafruit_Sensor.h;
  • airTemperature - функция, которая возвращает температуру воздуха;
  • airHumidity - функция, которая возвращает влажность воздуха;
  • airPressure - функция, которая возвращает давление воздуха;
  • airQuality - функция, которая возвращает индекс IAQ.

Неполноценные и непонятные issue(задачи/проблемы)

Неполноценные и непонятные issue(задачи/проблемы)

Описание проблемы

Наш cyber-growbox-2077 является успешным учебным проектом, но у него есть серьёзный недостаток/преимущество, он затрагивает темы шире наших профессиональных тем из-за чего преподаватели не могут качественно проверить прогресс нашей работы.

Мы им увы не помогаем и issue, написанные нами, недостаточно информативны и почти не описывают проблем/задач, которые они должны решить.

Предлагаемое решение

Всем студентам, работающим над этим проектом, таким как: @Timofey-arch, @SerLap-ctrl, @Electro98.

Необходимо научиться:

  • Использовать стиль Markdown;
  • Внятно описывать проблему при написании issue;
  • Использовать теги в виде смайликов в сообщении коммита, в соотвествии с рекомендациями описанными в файле CONTRIBUTING.md.

Также предлагается оформить полноценную веху проекта связанную с завершением этапа тестирования отдельного функционала микроконтроллера, датчиков и модулей.

Система контроля выполнения этой задачи

Предлагается назначить @redb0, как человека контроллируещего процесс обучения необходимым навыкам. А @NikMatyukhin, как человек непосредственно не связанный с проектом, будет объективно оценить результат обучения.

Дополнительные сведения

Любые предложения и комментарии по поводу данной проблемы будут приняты к рассмотрению.

Абсолютное позиционирование и неправильная калибровка двигаталей

Описание проблемы

При использовании этой прошивки двигатели поднимаются/опускаются на неправильное расстояние. При вводе команды L10 двигатель поднимается на 40 мм. Я использую винт, шаг которого 2 мм.

Также есть проблема в том, что после ввода команды L80 программа не реагирует на любые команды с меньшими значениями, например, L50 или L70.

Возможная проблема

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

Возможное решение

Предлагается изменить позиционирование на относительное и исправить количество шагов на 1 мм.

Смена протокола общения ESP-01 и Arduino Nano с UART на I²C

Смена протокола общения ESP-01 и Arduino Nano с UART на I²C

Описание проблемы

Наш проект столкнулся с сложностью использования протокола UART в общении между ESP-01 и Arduino. Преполагается, что использование протокола I²C сильно упростит код и облегчит логику общения.

Возможная реализация

Предлагается написать библиотеку и изменить код в прошивках под использование протокола I²C.

Изменить название переменной sensors на ds18b20

В файле sensors.cpp нужно дать переменной sensors более осмысленное название. Так как эта переменная связана с датчиком ds18b20 предлагается дать ей одноименное название ds18b20. Очевидно, нужно будет сменить названия во всех файлах.

Real-Time обновление графиков

Real-Time обновление графиков

Описание проблемы

Мы подумали, что реализация моментального обновления графика для пользователя будет замечательной функцией, которой нам не хватает. Ведь это облегчает контроль за данными и возможность быстрого реагирования на изменения.

Возможная реализация

Предлагается взять библиотеку для вебсокетов, как например flask-SocketIO. Так как она легко встраивается в flask. И реализовать с помощью сокетов и javascript обновление графиков plotly c данными.

Управление шаговыми двигателями через Serial

Управление шаговыми двигателями через Serial порт

Описание проблемы

GrowBox будет использовать два шаговых двигателя Nema 23 для подъема/опускания платформы с лампами освещения растений. Для тестирования этого функционала на первых этапах проектирования GrowBox предлагается добавить функционал синхронного управления двумя двигателями через Serial порт.

Возможная реализация

Предлагается подавать следующие команды через Serial порт:

  • L10 - вращение влево, высота 10 мм;
  • R10 - вращение вправо, высота 10 мм;
    или
  • L1500 - вращение влево, 1500 шагов;
  • R1500 - вращение вправо, 1500 шагов.

Команды должны иметь символьный префикс L или R. Префикс L обозначает, что вращение идет против часовой стрелке/налево. Префикс R обозначает, что вращение идет по часовой стрелке/направо.

После префиксов предлагается указывать:

  • либо расстояние в мм (предпочтительно)
  • либо количество шагов

Для расчета расстояния в мм необходимо преобразовывать их в количество шагов, которое зависит от модели винта (шага резьбы) и количества шагов на 1 оборот у двигателя.

Подключение и комплектующие

Управление двумя двигателями должно осуществляться синхронно через один пин Arduino.

Комплектующие:

  • два Nema 23
  • два драйвера A4988
  • винты с шагом резьбы 2 мм

Макет интерфейса

Создание макета интерфейса

Создание макета интерфейса для взаимодействия пользователя с устройством GrowBox. Здесь описан минимальный функционал и требования к интерфейсу.

Функционал

  • Настройка параметров устройства:
    • Интервала измерений (можно задать несколько стандартных интервалов заранее, для удобства пользователя, например 30 мин, 1 час, 24 часа и т. д.)
    • Расписание полива (его можно задавать, например, полив раз в 3 часа, длительностью 5 мин.)
    • Интервала освещения
  • Ручное управление устройством
    • Управление освещением (включение/выключение)
    • Управление поливом (включение/выключение)
    • Управление высотой ламп (поднять/опустить на заданную величину в см.)
  • Визуализация собранных данных:
    • Температура воздуха
    • Влажность воздуха
    • Давление воздуха
    • Концентрация CO2
    • Освещенность
    • Температура питательного раствора
    • Соленость (tds) раствора
    • Кислотность (ph) раствора
  • Настройка визуализации по временным интервалам
  • Можно рассмотреть вариант добавления разных видов визуализации (опционально)

Возможные окна

Предлагается использовать следующий набор окон:

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

Для удобства переключения между окнами необходимо предусмотреть меню.

Платформы

Необходима поддержка десктопных браузеров:

  • Mozilla Firefox
  • Chrome

Для оперативного мониторинга предлагается добавить возможность поддержки мобильных браузеров.

Инструментарий

В качестве инструмента для создания макетов можно использовать Figma

Непосредственно для реализации интерфейса предлагается использовать Dash. Он позволяет удобно строить графики и содержит различные элементы управления.

Показания датчика GY-302 (освещенность)

Показания датчика уровня освещенности GY-302

Описание проблемы

GrowBox будет содержать две лампы, закрепленные на платформе, которая может подниматься/опускаться. Измерение уровня освещенности предлагается осуществлять двумя датчиками освещенности GY-302.

Возможная реализация

Для удобной работы с разными датчиками предлагается оформить процедуру чтения данных с датчика в виде функции getLightIntensity или getLux, которая возвращает целое число.

Данные с датчиков необходимо выводить в Serial порт. Приветствуется возможность построения графика при использовании Arduino IDE.

Подключение и комплектующие

Комплектующие:

  • Arduino Nano (основная плата)
  • GY-302 (датчик освещенности)

О подключении GY-302 к Arduino можно прочитать здесь.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.