산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

hydroMazing 스마트 정원 시스템

구성품 및 소모품

라즈베리 파이 3 모델 B
선택 사항 - 사물 인터넷 - 문자 메시지
× 1
Arduino Nano R3
× 2
Arduino Nano 확장 실드
× 2
DHT21/22 온도/습도 센서
Vcc/Data 사이에 10k 저항이 필요할 수 있음
× 1
광전지 모듈
× 1
nRF24L01 2.4Ghz 무선 라디오 트랜시버 모듈
SMA 안테나 포함 또는 미포함
× 1
달라스 온도 센서(영양액 온도용)
커넥터가 필요할 수 있음
× 1
433MHz RF 송신기 및 수신기 모듈
× 1
무선 제어 콘센트 3-5팩 세트(리모컨 포함)
× 1
Arduino Uno용 Shield 버튼이 있는 DFRobot LCD
× 1

필요한 도구 및 기계

납땜 인두(일반)

앱 및 온라인 서비스

Arduino IDE
Microsoft Visual Studio 2015

이 프로젝트 정보



제품을 만들려는 의도는 아니었습니다. 나는 단순히 일반적인 문제를 해결하고 싶었습니다. 실내 또는 통제된 조건에서 식물을 키우고 싶습니다. 일반적으로 사용 가능한 전자 제품 및 가정 용품을 사용하여 식물이 번성할 수 있는 최적의 환경을 어떻게 만들 수 있습니까? 토양과 수경 중 어느 것이 가장 좋습니까?

hydroMazing은 가정에서 식물을 성공적으로 키울 수 있는 최적의 성장 조건을 쉽게 제공할 수 있는 도구입니다. 원격 클라우드가 아닌 자체 장치에 있는 독립적인 데이터 수집 시스템 및 웹 인터페이스.

~

식물을 재배하는 방법을 배우는 것은 복잡하고 비용이 많이 들 수 있습니다. 식물은 회복력이 있지만 단 한 번의 실수로 농작물을 망칠 수 있습니다. 똑똑한 정원 가꾸기 시스템이 당신을 위해 열심히 일하게 하면 이러한 값비싼 실수를 피할 수 있습니다!

2년 전 개별 Lux WIN100 가열 및 냉각 프로그래밍 가능 콘센트 온도 조절기를 교체하기 위해 Arduino Uno 마이크로컨트롤러를 사용하기로 결정했습니다. 이 콘센트는 소형 히터 또는 이 경우 환기 팬과 같은 기기를 제어합니다. 콘센트에 연결된 장치는 각 장치에 수동으로 프로그래밍한 온도 설정을 사용하여 제품을 켜고 끕니다. 이 환기 팬 제어 기술은 효과적이지만 여러 개의 연장 코드를 사용합니다. 온도 콘센트 컨트롤러는 구식 릴레이를 사용하여 장치의 상태를 전환합니다. 내 초기 시도는 확장 상자를 해킹하여 내 릴레이를 삽입하여 Arduino Uno에 연결하는 것이었습니다. 얼마 지나지 않아 커넥터 너트가 많은 전선이 엉망이 되어 낙담하게 되었습니다.

홈 자동화

한동안 머리에 맴돌던 홈 오토메이션 아이디어는 휴대용 리모콘을 사용하는 무선 제어 AC 콘센트를 사용하는 것이 었습니다. 리모컨을 해킹하여 Arduino Uno의 해당 핀으로 선택한 ON 또는 OFF 버튼에 대한 신호를 보내는 것은 너무 어렵지 않습니까? 이 아이디어를 테스트하는 데 방해가 된 골치 아픈 문제는 신호가 신뢰할 수 없고 Uno가 실제로 실패했을 때 장치를 켰다고 "생각"할지 모른다는 두려움이었습니다. 결국, 나는 알아내는 가장 좋은 방법은 무슨 일이 일어나는지 직접 보고 확인하는 것이라고 스스로 확신할 수 있었습니다. 안타깝게도 이 테스트의 결과는 릴레이 시도보다 훨씬 좋지 않았습니다.

웹에서 "Arduino"가 포함된 거의 모든 센서 또는 전자 제품을 검색하면 여러 제품이 몇 달러에 판매될 것입니다. 이 경우 대부분의 상업용 무선 제어 콘센트의 주파수 범위 내에 있는 315Mhz 및 433Mhz 송신기 및 수신기 쌍을 찾았습니다. 이러한 유형의 프로젝트에 Arduino 마이크로컨트롤러 제품군을 사용할 때의 가장 큰 장점은 시작할 수 있는 오픈 소스 소프트웨어를 찾을 수 있다는 것입니다. 웹에서 "Arduino 라이브러리" 및 이 경우 송신기와 수신기 또는 tx/rx 쌍에 대한 또 다른 검색입니다. 이제 나에게는 흥미진진해졌습니다. 리모콘에서 나오는 코드를 읽고 녹음한 다음 Arduino를 프로그래밍하여 해당 콘센트를 제어할 수 있었습니다. Arduino Uno에서 작동하도록 소프트웨어를 설계하는 것이 도전이 되었습니다. Arduino 소프트웨어와 함께 제공되는 예제와 라이브러리에 포함된 예제는 프로젝트의 훌륭한 시작입니다. 내 경험에 따르면 예제를 결합하고 수정하기 시작하면 벽에 부딪히는 데 그리 오랜 시간이 걸리지 않습니다. 저는 제가 좋은 프로그래머가 아니라고 생각합니다. 완고한 완벽주의자라고 생각합니다.

내가 가장 좋아하는 책 중 하나인 Zen and Art of Motorcycle Maintenance에서 저자 Robert Pirsig는 Gumption Trap에 대해 이야기합니다. 본질적으로, 검프션 트랩은 사람이 열정을 잃고 프로젝트를 시작하거나 계속하는 데 낙담하게 만들 수 있는 사건 또는 사고 방식입니다. 불편함과 좌절감을 극복해야 할 때와 휴식을 취하고 프로젝트에서 물러나야 할 때를 아는 것은 개인적인 도전입니다. 내가 휴식을 취했다면 내 소스 코드의 충돌에 대한 훌륭한 해결책이 떠오르지 않았을 수도 있습니다. 반대로 한 달 동안 자리를 비우고 완전히 다른 유형의 프로젝트를 진행하면서 활력을 얻은 적도 있습니다. 아마도 프로젝트가 충분히 중요하다면 우리는 그 프로젝트로 돌아가야 할 것입니다. 그 함정은 프로젝트가 아무리 훌륭해도 다시 돌아갈 가치가 없다고 스스로를 확신시키는 것입니다. 아마도 완료하기 위해 다시 돌아올 가치가 없을 것입니다. 여기에서 많은 프로젝트가 종료됩니다.

프로그래밍

내가 개발한 소프트웨어는 마이크로컨트롤러에 프로그래밍되었으며 "센서" 개체와 "기기" 개체의 타이밍, 관리, 전송 및 수신을 위한 기본 매개변수 세트를 특징으로 합니다. 기기 제어는 센서 판독값과 사전 프로그래밍된 임계값을 기반으로 결정을 내리고 무선으로 제어되는 콘센트를 켜거나 끄도록 마이크로컨트롤러에 프롬프트를 표시하는 "TheDecider"라고 명명한 일련의 알고리즘을 통해 이루어집니다. 나는 시스템이 아쿠아포닉스, 버섯 재배, 그리고 프로그래밍된 규칙에 따라 센서를 읽고 기기를 작동하여 제어가 달성되는 모든 환경과 함께 작동하도록 쉽게 수정되기를 원했습니다. 무선으로 제어되는 콘센트는 Arduino를 사용하여 온도 센서의 판독값에 따라 신호를 보내는 팬을 제어하는 ​​신뢰할 수 있는 방법임이 입증되었습니다. 소스 코드가 짐승으로 진화하는 데 오랜 시간이 걸리지 않았습니다. Arduino 마이크로컨트롤러 제품군은 실행할 수 있는 명령어 수가 제한되어 있으며 깜박이는 LED 몇 개 이상을 제어하려는 경우 프로그램 크기 제한에 도달하는 데 그리 오랜 시간이 걸리지 않습니다. 크기 제한으로 인해 처음보다 더 효율적이고 더 나은 코드를 작성해야 한다는 사실을 알게 되었습니다. 창의적인 변수 처리 및 사용자 지정 라이브러리를 사용하더라도 결국에는 다른 마이크로컨트롤러가 필요하거나 더 큰 마이크로컨트롤러로 이동해야 합니다.

인터넷 없이 무선 모니터링

마이크로컨트롤러가 서로 통신할 수 있는 몇 가지 방법이 있습니다. 내가 찾을 수 있는 가장 저렴한 무선 방법은 nRF24L01 무선 라디오 송수신기입니다. 이 모듈은 hydroMazing이 모니터링 장치와 통신할 수 있는 기능을 제공하는 저전력, 경량의 다양한 블루투스입니다.

센서가 읽고 있는 내용, 가전 제품의 상태 및 알림과 함께 경고를 표시할 수 있도록 액정 디스플레이 실드가 있는 다른 Arduino Uno를 추가하기로 결정했습니다.

나는 다양한 원예 요구와 조건에 맞춤화할 수 있는 개방적이고 적응 가능한 플랫폼을 만들었습니다. 그러나 독립형 무선 시스템이기도 합니다. 시스템의 개방형 아키텍처를 통해 인터넷 연결과 웹 서비스를 쉽게 통합할 수 있습니다.

인터넷 모니터링

nRF24L01 모듈과 연결된 라즈베리파이를 입력하세요.

들어오는 전송을 수신 대기하도록 Arduino 소스 코드의 대부분을 수정한 다음 해당 데이터를 몇 개의 파일에 쓸 수 있었습니다. 먼저 Pi와 hydroMazing Monitor 간의 모든 통신을 캡처하는 로그 파일입니다. 다음으로, 프로그램이 모든 센서 개체의 현재 상태와 모든 기기 개체에 대한 파일을 작성하도록 했습니다. 경고가 발생하면 프로그램은 해당 경고를 포함하는 파일을 생성합니다. 그런 다음 해당 파일에서 데이터 개체를 읽고 Pi의 Apache 서버에 실시간으로 표시하는 PHP 스크립트를 추가했습니다.

다음으로, 경고 파일의 디렉토리를 읽는 Python 스크립트를 작성했습니다. 파일이 존재하는 경우 파일을 읽고 관련 정보를 구문 분석한 다음 이메일이나 SMS 문자를 통해 사용자에게 문자를 보냅니다. 이메일 또는 텍스트 경고를 보내는 것 외에도 python 스크립트는 경고 파일을 PHP 스크립트가 읽고 표시할 위치로 이동합니다. 생성된 로그 파일을 사용하여 데이터를 데이터베이스로 가져올 수 있습니다. HydroMazing의 데이터가 Raspberry Pi에 있는 데이터베이스에 기록되면 분석을 시작하고 일부 보고서를 생성할 수 있습니다. 시스템 모니터링 및 제어는 대부분 우리를 위해 수행되지만, hydroMazing이 문제를 알려야 할 때 이제 Raspberry Pi를 사용하여 할 수 있습니다.

전체 성장을 안내하는 hydroMazing Garden Wizard! 시스템은 hydroMazing이 식별한 문제를 관리하는 방법에 대한 피드백과 팁을 제공합니다. http://www.hydroMazing.com

영양 용액 모니터링

수경재배 용기 시스템의 양액 수위를 모니터링해야 합니다.

양액 수준이 감소함에 따라 신선한 물로 보충해야 합니다. 그렇지 않으면 양액이 더 농축되어 일부 식물이 잘 반응하지 않습니다. hydroMazing Nutrient Controller는 신선한 물을 추가하는 펌프를 활성화하여 농도를 시작했을 때의 수준으로 되돌릴 수 있습니다(종종 "토핑 오프"라고 함). 또한 hydroMazing Nutrient Controller는 pH와 EC를 모니터링하고 펌프를 활성화하여 용액을 관리하고 변경이 필요할 때 알려줍니다.

더 원하세요?

<울>
  • 실존적 위기 - Arduino 롤플레잉 게임 시뮬레이터
  • 구매할 수 있는데 왜 DIY를 해야 하나요?
  • "스마트" 정원이란 무엇입니까?
  • 스마트 실내 정원 시작하기
  • 실내 원예 자세히 알아보기
  • 실내 정원 가꾸기:무엇이 잘못될 수 있습니까?
  • 영양 솔루션 시스템 관리
  • 파이를 할 수 있는데 왜 Arduino입니까?
  • <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • 개체 설정
  • 객체 설정C/C++
    CoreSettings.h 파일에는 nRF 네트워크, AC 콘센트 원격 스위치 코드, 타이머, 기기 및 hydroMazing 시스템에서 사용하는 센서 개체 정의를 비롯한 많은 중요한 설정이 포함되어 있습니다.
    /** @file CoreSettings.h* 저작권( C) 2015 Cory J. Potter - All Rights Reserved* LICENSE.txt*의* 조건에 따라 이 코드를 사용, 배포 및 수정할 수 있습니다.* NOT INTENDED FOR COMMERCIAL USE!* 다음과 함께 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 8/TX_PIN#define으로 보내주십시오. 우리의 주소는 1 또는 2입니다. // 00-255 // 참고 :상수의 끝에서 "LL"는 "LONGLONG"타입 // 1034834473185이다 // 1034834473170 CONST uint64_t tx_pipes [5] ={0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F141LL, 0xF0F0F0F1B0LL, 0xF0F0F0F1BBLL}; // 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} uint64_t의 rx_pipes [3] ={0xF0F0F0F0F1LL, 0xF0F0F0F0F2LL, 0xF0F0F0F0F3LL} / ****************** ************************************************** ****/// 무선 제어 콘센트 스위치/**************************************** **********************************/// ETEKCITY #1401// unsigned long mySwitchOn[] ={ 24 , 1398067,1398211,1398531 };// unsigned long mySwitchOff[] ={ 24, 1398076,1398220,1398540 };// ETEKCITY #1405// unsigned l ong mySwitchOn[] ={ 24,1135923,1136067,1136387 };// unsigned long mySwitchOff[] ={ 24,1135932,1136076,1136396 };// ETEKCITY #1406 mySwitch1406// ,4281795,4282115 };// unsigned long mySwitchOff[] ={ 24,4281660,4281804,4282124 };// ETEKCITY #1407// unsigned long mySwitchOn[] ={ 41,8787/} { long mySwitchOff[] ={ 24,87356,87500,87820 };// ETEKCITY #1411// unsigned long mySwitchOn[] ={ 24,283955,284099,284419 };// unsigned] =8 mySwitchOff[4] ,284108,284428 };// ETEKCITY #1415// unsigned long mySwitchOn[] ={ 24,21811,21955,22275,23811,29955 };// unsigned long mySwitchOff[] ={ 64,2 23820,29964 };// ETEKCITY #1419// unsigned long mySwitchOn[] ={24,333107,333251,333571,335107,341251};// unsigned long mySwitchOff333331 ={216,033 ,341260};// ETEKCITY #0319uint8_t totalSwitches =5;unsigned long mySwitchOn[] ={24,333107,333251,333571,335107,341251};unsigned long mySwitchOff[3,3,335107, mySwitchOff[3] =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 Timer_Lcd ={ TIMER_LCD, 12000UL, true, false, 0, &Timer_Log };// Timer Timer_ =_LCD_Cycle 6000UL, 참, 거짓, 0, &Timer_Lcd };// 타이머 Timer_Lcd_Scroller ={ TIMER_LCD_SCROLLER, 500UL, true, false, 0, &Timer_Lcd_Cycle };//타이머 Timer_Ping0, }, &Timer_true, SENSOR_0ULLER_READING /타이머 Timer_Lite ={ TIMER_LITE, 180000UL, true, false, 0, &Timer_Ping };타이머 Timer_Save_Settings ={ TIMER_SAVE_SETTINGS, 3600000UL, true, false, 0, &Timer_txData };//Timer Timer_Sensor_Read ={ TIMER_SENSOR_READINGS, 7000UL, true, false, 0, UL, 0, 0, 0,Timer_Save_Timer ERTs ERTs _A_0, 거짓 , &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 Appliance,_IntakeFan, {104APPLIANCEFan =DEFAULT_TIME, true, false, OFF, &Appliance_Light_1 };Appliance Appliance_ExhaustFan ={1 03, 1, APPLIANCE_EXHAUST_FAN, DEFAULT_TIME, true, false, OFF, &Appliance_IntakeFan };기기 기기 가습기 ={102, 0, APPLIANCE_HUMIDIFIER, DEFAULT_TIME, true, false, OFF, &Appliance_ExhaustFan_TIME, 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, OFFTIME, APPLIANCE_PUMP, true, DEFAULT &Appliance_Heater };uint8_t totalAppliances =6;/******************************************** *******************************/// 센서 초기화/**************** ************************************************** *********///센서:={ 핀; 노드 주소; 센서_유형; 주파수; 최소값; 최대값; UL 타임스탬프 부동 소수점 값; 구조 센서 *다음; }// 첫 번째 NULL - 아직 생성되지 않은 객체를 가리킬 수 없습니다.Sensor 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 };센서 센서_습도 ={PIN7, 1, SENSOR_HUMIDITY, 50, 40, 70, 0, 50, TEMPF1, &Sensor_Temp };Sensor_Sensor_INP 100, 50, 70, 0, 65, &Sensor_Humidity };센서 Sensor_Flow ={PIN2_INT0, 2, SENSOR_FLOW, 100, 50, 50, 0, 75, &Sensor_WaterTemp },//센서 Sensor0,_A0,_S0 10, 100, 0, 75, &Sensor_Flow };//센서 Sensor_Ultrasonic ={PIN_A2, 0, SENSOR_ULTRASONIC, 60, 10, 100, 0, 75, &Sensor_Microphone };//센서 Sensor_PIR2, _PINTO, 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, 0, SENSOR_MOISTURE 1, 0, 1, &Sensor_Flow };센서 센서_전압 ={PIN1_ TX, 1, SENSOR_VOLTAGE, 100, 0, 100, 0, 50, &Sensor_Float };uint8_t totalSensors =7;/***************************** ***************************************************/  

    회로도

    무선 AC 콘센트를 통해 자동으로 제어되는 흡기 및 배기 팬, 재배 조명, 히터, 제습기 및 펌프 이 프로젝트에서 사용되는 무선으로 제어되는 일반적인 AC 콘센트입니다. 조립 및 테스트 hydroMazing 프로토타입 웹 인터페이스 경보 알림을 위한 hydroMazing 프로토타입 웹 인터페이스.

    제조공정

    1. Raspberry Pi의 온도 모니터링
    2. LM35를 사용한 온도 기반 장치 제어 시스템
    3. MCP3008을 사용하는 Raspberry Pi의 아날로그 센서
    4. 스마트 홈 기술 격차
    5. 모든 것이 스마트해질 수 있습니다:최신 스마트 도시의 주요 특성 – 1부
    6. IoT 기반 레벨 모니터링 시스템으로 음료 산업을 더 스마트하게 만들기
    7. ABS(Anti-lock Braking System) 작동 이해
    8. 전자 점화 시스템의 작동 이해
    9. 자기 점화 시스템의 작동 이해
    10. 미국 제조 시스템이란 무엇입니까?