Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Система HydroMazing Smart Garden

Компоненты и расходные материалы

Raspberry Pi 3, модель B
ДОПОЛНИТЕЛЬНО - Интернет вещей - обмен текстовыми сообщениями
× 1
Arduino Nano R3
× 2
Arduino Nano Expansion Shield
× 2
Датчик температуры / влажности DHT21 / 22
может потребоваться резистор 10 кОм между Vcc / Data
× 1
Модуль фотоэлемента
× 1
nRF24L01 Модуль беспроводного радиоприемопередатчика 2,4 ГГц
с антенной SMA или без нее
× 1
Датчик температуры Далласа (для температуры питательного раствора)
, вероятно, потребуется соединитель
× 1
Модули РЧ передатчика и приемника 433 МГц
× 1
набор 3-5 беспроводных управляемых розеток, включая удаленный
× 1
ЖК-экран DFRobot с кнопками Shield для Arduino Uno
× 1

Необходимые инструменты и машины

Паяльник (общий)

Приложения и онлайн-сервисы

IDE Arduino
Microsoft Visual Studio 2015

Об этом проекте



Я не собирался делать продукт. Я просто хотел решить общую проблему. Я хочу выращивать растения в помещении или в контролируемых условиях. Как создать оптимальную среду для роста растений, используя общедоступную электронику и предметы домашнего обихода? Что лучше:почва или гидропоника?

HydroMazing - это инструмент, упрощающий создание оптимальных условий для успешного выращивания растений в домашних условиях. Независимая система сбора данных и веб-интерфейс, расположенный на вашем собственном устройстве, а не в удаленном облаке.

~

Научиться выращивать растения может быть сложно и дорого. Растения устойчивы, но всего одна невинная оплошность может испортить ваш урожай. Вы можете избежать этих дорогостоящих ошибок, позволив умной системе садоводства сделать тяжелую работу за вас!

Это было два года назад, когда я решил попробовать использовать микроконтроллер Arduino Uno для замены моего индивидуального программируемого выходного термостата нагрева и охлаждения Lux WIN100. Эти выходы управляют устройством, например небольшим обогревателем или, в данном случае, вентилятором. Устройство, подключенное к розетке, включает и выключает устройство с помощью настроек температуры, которые вы вручную программируете для каждого устройства. Этот метод управления вентиляторами вентиляции эффективен, но требует использования нескольких удлинителей. Контроллеры температуры на выходе используют старомодные реле для переключения состояния устройства. Моя первая попытка заключалась в том, чтобы взломать блок расширения, вставив в него свои собственные реле и подключив их к Arduino Uno. Вскоре возникла путаница из проводов с множеством гаек разъемов, и я был разочарован.

Домашняя автоматизация

Идея домашней автоматизации, которая возникла у меня в голове некоторое время, заключалась в том, чтобы использовать розетки переменного тока с беспроводным управлением, которые используют ручной пульт дистанционного управления. Взломать пульт дистанционного управления для отправки сигнала для кнопки ВКЛ или ВЫКЛ, выбранной соответствующим контактом на Arduino Uno, не должно быть слишком сложно, верно? Неоднозначным беспокойством, мешавшим мне протестировать эту идею, был страх, что сигнал будет ненадежным и Uno может «подумать», что включил устройство, когда оно действительно вышло из строя. В конце концов, я смог убедить себя, что лучший способ узнать это - просто попробовать и посмотреть, что происходит. К сожалению, результаты этого теста не намного лучше, чем у попытки эстафеты.

Поиск в Интернете практически любого датчика или электронного устройства с «Arduino» приведет к тому, что ряд продуктов будет продан за несколько долларов. В этом случае я обнаружил пары передатчика и приемника 315 МГц и 433 МГц, которые находятся в частотном диапазоне большинства коммерческих розеток с беспроводным управлением. Самым большим преимуществом использования семейства микроконтроллеров Arduino для проектов такого типа является то, что вы можете найти программное обеспечение с открытым исходным кодом, чтобы начать работу. Еще один поиск в Интернете «библиотеки Arduino» и, в данном случае, передатчика и приемника или пары tx / rx. Теперь это становилось для меня волнующим. Я мог читать коды, поступающие с пульта дистанционного управления, записывать их, а затем программировать Arduino для управления соответствующими выходами. Создание программного обеспечения для работы на Arduino Uno стало проблемой. Примеры, поставляемые с программным обеспечением Arduino, и примеры, включенные в библиотеки, являются отличным началом проекта. По моему опыту, как только вы начнете комбинировать и вносить изменения в примеры, не займет много времени, прежде чем вы наткнетесь на стену. Не думаю, что я хороший программист, я считаю себя упорным перфекционистом.

В одной из моих любимых книг «Дзен и искусство ухода за мотоциклами» автор Роберт Пирсиг говорит о ловушке сообразительности. По сути, ловушка сообразительности - это событие или образ мышления, которые могут заставить человека потерять энтузиазм и отказаться от начала или продолжения проекта. Знание, когда преодолеть дискомфорт и разочарование, а когда сделать перерыв и уйти от проекта, - это личные проблемы. Были времена, когда, если бы я сделал перерыв, я, возможно, не придумал бы отличного решения конфликта в моем исходном коде. Напротив, были времена, когда я уходил на месяц и работал над совершенно другим типом проектов, чувствуя себя воодушевленным. Возможно, если проект будет достаточно важным, мы будем вынуждены вернуться к работе над ним. Ловушка убеждает нас в том, что к проекту не стоит возвращаться, даже если он может быть потрясающим. Может быть, действительно не стоит возвращаться к завершению, и на этом многие проекты заканчиваются.

Программирование

Программное обеспечение, которое я разработал, было запрограммировано в микроконтроллер и имеет набор основных параметров для синхронизации, управления, передачи и приема «сенсорных» объектов и «бытовых» объектов. Управление приборами достигается с помощью набора алгоритмов, которые я назвал «TheDecider», которые принимают решения на основе показаний датчиков и предварительно запрограммированных пороговых значений и побуждают микроконтроллер включать или выключать розетки с беспроводным управлением. Я хотел, чтобы систему можно было легко модифицировать для работы с другими средами, включая аквапонику, выращивание грибов и все, где контроль достигается путем считывания показаний датчиков и управления приборами на основе запрограммированных правил. Розетки с беспроводным управлением оказались надежным методом управления вентиляторами с помощью Arduino для отправки сигналов в зависимости от показаний датчика температуры. Исходный код быстро превратился в зверя. Семейство микроконтроллеров Arduino ограничено в количестве выполняемых инструкций, и достижение предельного размера программы не займет много времени, если вы хотите управлять более чем несколькими мигающими светодиодами. Я обнаружил, что ограничение размера вынудило меня писать более качественный и эффективный код, чем я делал изначально. Даже с творческой обработкой переменных и настраиваемыми библиотеками в конечном итоге потребуется другой микроконтроллер или переход на более крупный.

Беспроводной мониторинг без Интернета

Есть несколько способов, которыми микроконтроллеры могут связываться друг с другом. Самый дешевый беспроводной метод, который я смог найти, - это беспроводной радиоприемопередатчик nRF24L01. Этот модуль представляет собой маломощный и легкий вариант Bluetooth, дающий HydroMazing возможность связываться с устройством мониторинга.

Я решил добавить еще одну Arduino Uno с экраном на жидких кристаллах, чтобы я мог отображать то, что считывают датчики, состояние устройств и предупреждения с уведомлениями.

Я создал свою собственную открытую и адаптируемую платформу, которая может быть адаптирована к самым разным потребностям и условиям садоводства; но также автономная беспроводная система. Открытая архитектура системы позволяет легко интегрировать подключение к Интернету и веб-службы.

Интернет-мониторинг

Введите Raspberry Pi, подключенный к модулю nRF24L01.

Я смог изменить большую часть своего исходного кода Arduino, чтобы прослушивать входящие передачи, а затем записывать эти данные в несколько файлов. Во-первых, файл журнала, который фиксирует все сообщения между Pi и HydroMazing Monitor. Затем у меня есть программа, которая записывает текущее состояние всех объектов датчиков и файл для всех объектов устройства. Когда возникает предупреждение, программа создает файл, содержащий это предупреждение. Затем я добавил PHP-скрипт для чтения объектов данных из соответствующих файлов и отображения в реальном времени на сервере Apache Pi.

Затем я написал сценарий Python, чтобы прочитать каталог для файла предупреждений и, если он существует, прочитать файл, проанализировать соответствующую информацию, а затем отправить электронное письмо или SMS-сообщение пользователю. В дополнение к отправке электронного или текстового оповещения скрипт python перемещает файл оповещения в позицию, которую скрипт PHP должен прочитать и отобразить. Используя созданные файлы журнала, я могу импортировать данные в базу данных. После того, как данные HydroMazing будут записаны в базу данных Raspberry Pi, мы можем начать выполнять аналитику и создавать некоторые отчеты. Мониторинг и управление системой в основном делается за нас, но когда HydroMazing нужно предупредить нас о проблеме, теперь это можно сделать с помощью Raspberry Pi.

Мастер HydroMazing Garden Wizard, который проведет вас через весь процесс выращивания! Система предоставляет отзывы и советы по решению проблем, которые выявляет HydroMazing. http://www.hydroMazing.com

Мониторинг питательных растворов

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

По мере снижения уровня питательного раствора его необходимо пополнить пресной водой, иначе питательный раствор станет более концентрированным, и некоторые растения не будут хорошо реагировать. Контроллер hydroMazing Nutrient Controller может активировать насос, который добавляет свежую воду, чтобы вернуть концентрацию на уровень, который был при запуске, что часто называется «доливкой». Контроллер Hydrient Nutrient Controller также будет контролировать ваш pH и EC, активируя насосы для управления раствором и уведомляя вас, когда вам нужно внести изменения.

Хотите больше?

  • Existential Crisis - симулятор ролевой игры Arduino
  • Зачем делать "сделай сам", если можно купить?
  • Что такое «умный» сад?
  • Создание умного внутреннего сада
  • Углубляясь в домашнее садоводство
  • Домашнее садоводство:что может пойти не так?
  • Управление системами растворов питательных веществ
  • Почему Arduino, если можно использовать Pi?

Код

  • Настройки объектов
Настройки объектов C / C ++
Файл CoreSettings.h содержит множество важных настроек, включая сеть nRF, коды удаленного выключателя розетки переменного тока, определения объектов Timer, Appliance и Sensor, используемые системой HydroMazing.
 / ** @file CoreSettings.h * Copyright ( C) 2015 Cory J. Potter - Все права защищены * Вы можете использовать, распространять и изменять этот код в соответствии с * условиями LICENSE.txt * НЕ ПРЕДНАЗНАЧЕН ДЛЯ КОММЕРЧЕСКОГО ИСПОЛЬЗОВАНИЯ! * Вы должны были получить копию LICENSE.txt с * этот файл. Если нет, напишите по адресу: * / # ifndef __CORESETTINGS_H __ # define __CORESETTINGS_H __ # ifdef ARDUINO // RX_PIN 3 in use by Dallas Temperature Probe # define RX_PIN 103 # define TONE_PIN 104 # define TX_PIN 8 // What это наш адрес 1 или 2uint8_t node_address =1; uint8_t totalNodes =3; unsigned long lastRxTimeStamp =0; const uint64_t nRFbaseAddress =1034834473100; uint8_t nRFaddress =0; // 00–255 // ПРИМЕЧАНИЕ:«LL» в конце константы имеет тип «LongLong» // 1034834473185, 1034834473170 // const uint64_t tx_pipes [5] ={0xF0F0F0F0E1LL, 0xF0F0F0F0F0D2LL, 0xF0FLLF0F0F0F0D2LL, 0xF0F0LLF0F0F0F0F0D2LL, 0xF0F0LLF0F0F0F0F0F0F0F0F0F0F0 // Const uint64_t rx_pipes [5] ={0xF0F0F0F22ALL, 0xF0F0F0F299LL, 0xF0F0F0F308LL, 0xF0F0F0F377LL, 0xF0F0F0F3E6LL}; // uint64_t tx_pipes [3] ={0xF0F0F0F0E8LL, 0xF0F0F0F0E7LL, 0xF0F0F0F0E6LL}; // uint64_t rx_pipes [3] ={0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL}; uint64_t tx_pipes [3] ={0xF0F0F0F0F8LL, 0xF0F0F0F0F7LL, 0xF0F0F0F0F6LL}; ************************************************* **** /// Розеточные переключатели с беспроводным управлением / ************************************* ********************************* /// ETEKCITY # 1401 // длинное без знака mySwitchOn [] ={24 , 1398067,1398211,1398531}; // unsigned long mySwitchOff [] ={24, 1398076,1398220,1398540}; // ETEKCITY # 1405 // беззнаковый l ong mySwitchOn [] ={24,1135923,1136067,1136387}; // long без знака mySwitchOff [] ={24,1135932,1136076,1136396}; // ETEKCITY # 1406 // long без знака mySwitchOn [] ={24,4281651 , 4281795,4282115}; // unsigned long mySwitchOff [] ={24,4281660,4281804,4282124}; // ETEKCITY # 1407 // unsigned long mySwitchOn [] ={24,87347,87491,87811}; // без знака long mySwitchOff [] ={24,87356,87500,87820}; // ETEKCITY # 1411 // long mySwitchOn [] ={24,283955,284099,284419}; // long без знака mySwitchOff [] ={24,283964 , 284108,284428}; // ETEKCITY # 1415 // long без знака mySwitchOn [] ={24,21811,21955,22275,23811,29955}; // long без знака mySwitchOff [] ={24,21820,21964,22284, 23820,29964}; // ETEKCITY # 1419 // long без знака mySwitchOn [] ={24,333107,333251,333571,335107,341251}; // длинное без знака mySwitchOff [] ={24,333116,333260,333580,335116 , 341260}; // ETEKCITY # 0319uint8_t totalSwitches =5; unsigned long mySwitchOn [] ={24,333107,333251,333571,335107,341251}; unsigned long mySwitchOff [] ={24,333116,3 33260,333580,335116,341260}; / *************************************** ******************************* // * Связь I2C * // ********** ************************************************* ************ / const int MY_ADDRESS =42; const int SEND_TO_ADDRESS =22; / *********************** *********************************************** // * Таймеры * // ******************************************** ************************** /// Объект таймера ={(тип), (интервал в миллисекундах), готовность, запуск, отметка времени, (указатель на следующий объект) Timer Timer_txData ={TIMER_TX_DATA, 30000UL, true, false, 0, NULL}; // Таймер Timer_Lcd ={TIMER_LCD, 12000UL, true, false, 0, &Timer_Log}; // Таймер Timer_Lcd_Cycle ={TIMER_CYCYLE ={TIMER_LED 6000UL, true, false, 0, &Timer_Lcd}; // Таймер Timer_Lcd_Scroller ={TIMER_LCD_SCROLLER, 500UL, true, false, 0, &Timer_Lcd_Cycle}; // Таймер Timer_Ping ={TIMER_SENSOR_READINGS, 10UL, true, false, 0UL, истина, ложь, 0 / Таймер Timer_Lite ={TIMER_LITE, 180000UL, true, false, 0, &Timer_Ping}; Таймер Timer_Save_Settings ={TIMER_SAVE_SETTINGS, 3600000UL, true, false, 0, &Timer_txData}; // Таймер Timer_Sensor_Read ={TIMER_SENSOR_READINGS, 7000UL, true, false, 0, &Timer_Save_Settings, true, false, true, false, Timer_Save_Settings}, 45 Timer_Save_Settings}; , &Timer_Sensor_Read}; Таймер Timer_rxData ={TIMER_RX_DATA, 6000UL, true, false, 0, &Timer_Save_Settings}; / **************************** ******************************************* /// Инициализировать устройства / ************************************************* ********************** / Appliance Appliance_Light_1 ={101, 1, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, NULL}; // Appliance Appliance_Light_2 ={ 102, 0, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, &Appliance_Light_1}; // Appliance Appliance_Light_3 ={103, 0, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, &Appliance_Light_2}; Appliance_Light_2}; Appliance Appliance_PLANKE_Intake_104, APPLIANCE_Intake DEFAULT_TIME, true, false, OFF, &Appliance_Light_1}; Appliance Appliance_ExhaustFan ={1 03, 1, APPLIANCE_EXHAUST_FAN, DEFAULT_TIME, true, false, OFF, &Appliance_IntakeFan}; Appliance Appliance_Humidifier ={102, 0, APPLIANCE_HUMIDIFIER, DEFAULT_TIME, true, false, OFF, &Appliance_ExhaustFan}; true, false, OFF, &Appliance_Humidifier}; // Appliance Appliance_AirPump ={PIN4, 2, APPLIANCE_PUMP, DEFAULT_TIME, true, false, OFF, &Appliance_Heater}; Appliance Appliance_FeedPump ={105, 1, APPLIANCE_PUMPUM, false, false, false, true, false, OFF &Appliance_Heater}; uint8_t totalAppliances =6; / *************************************** ******************************* /// Инициализировать датчики / ************* ************************************************* ********* /// Датчик:={pin; node_address; SENSOR_TYPE; freq; minVal; maxVal; Отметка времени UL; значение с плавающей запятой; struct Sensor * next; } // NULL для первого - мы не можем указать на объект, который еще не был создан. Датчик Sensor_Photocell ={PIN_A0, 1, SENSOR_PHOTO, 100, 50, 100, 0, 25, NULL}; Sensor Sensor_Temp ={PIN7, 1, SENSOR_TEMPF, 50, 70, 80, 0, 75, &Sensor_Photocell}; Датчик Sensor_Humidity ={PIN7, 1, SENSOR_HUMIDITY, 50, 40, 70, 0, 50, &Sensor_Temp}; Sensor Sensor_WaterTemp ={PIN3_INT1, 1, SENSOR_FATER_TEMP 100, 50, 70, 0, 65, &Sensor_Humidity}; Sensor Sensor_Flow ={PIN2_INT0, 2, SENSOR_FLOW, 100, 50, 50, 0, 75, &Sensor_WaterTemp}; // Датчик Sensor_Microphone ={PIN_A1, 0, SENSOR_SOUND, 60, 10, 100, 0, 75, &Sensor_Flow}; // Датчик Sensor_Ultrasonic ={PIN_A2, 0, SENSOR_ULTRASONIC, 60, 10, 100, 0, 75, &Sensor_Microphone}; // Датчик Sensor_PIR ={PIN_A2, 0, SENSOR_PHOTO, 60, 10, 100, 0, 75, &Sensor_Microphone}; // Датчик Sensor_Moisture ={PIN_A2, 0, SENSOR_MOISTURE, 60, 10, 100, 0, 75, &Sensor_Flow}; Sensor Sensor_Float ={PIN_A2, 1, SENSOR_FLOAT, 100, 0, 1, 0, 1, &Sensor_Flow}; Sensor Sensor_Voltage ={PIN1_ TX, 1, SENSOR_VOLTAGE, 100, 0, 100, 0, 50, &Sensor_Float}; uint8_t totalSensors =7; / ************************* ********************************************** / 

Схема

Приточные и вытяжные вентиляторы, лампы для выращивания растений, обогреватели, осушители и насосы, автоматически управляемые через беспроводные розетки переменного тока распространенные розетки переменного тока с беспроводным управлением, используемые в этом проекте. Собрано и протестировано прототип веб-интерфейса HydroMazing прототип веб-интерфейса hydroMazing для уведомлений о предупреждениях.

Производственный процесс

  1. Мониторинг температуры на Raspberry Pi
  2. Система управления устройством на основе температуры с использованием LM35
  3. Аналоговые датчики на Raspberry Pi с использованием MCP3008
  4. Пробел в навыках умного дома
  5. Умным может быть все:основные черты новейших умных городов - Часть 1
  6. Делаем производство напитков умнее с помощью системы мониторинга уровня на базе Интернета вещей
  7. Понимание работы антиблокировочной тормозной системы (ABS)
  8. Понимание работы электронной системы зажигания
  9. Понимание работы системы зажигания от магнето.
  10. Что такое американская система производства?