1. 개요
다양한 보드를 이용하여 간단히 스마트팜을 구현해 볼 수 있는 키트입니다.
2.1. 부품 리스트
2.2. 조립 방법
1. 기둥을 받침대에 조립합니다.
2. 투광판 ①,②를 기둥 사이에 조립하니다.
3. 일자 지지대①을 기둥에 먼저 끼우고 일자 지지대②를 조립합니다.
4. 일자 지지대② 홈에 삼각 투광판을 조립합니다.
5. 삼각 투광판에 삼각 지지대를 조립합니다.
6. 상단 고정 지지대를 삼각 지지대 위에 조립합니다.
7. 루프 투광판에 루프 지지대를 조립합니다.
루프 지지대의 위치를 조정하여 투광창을 열거나 닫을 수 있습니다.
9. 배너에 스티커를 붙이고 상단 지지대에 꽂아 완성합니다.
3.1. 씨앗의 성장
식물의 씨앗은 자라기 적합한 환경이 갖추어지면 싹을 틔웁니다.
이 현상을 '발아'라고 부릅니다. 씨앗에서 자라 나온 뿌리는 영양분을 흡수하고, 줄기와 잎으로 광합성을 합니다.
무럭무럭 자라난 식물은 꽃을 피우고 씨앗을 맺습니다.
씨앗들은 식물에서 떨어져 나와 다시 발아하여 새로운 생명을 움트게 합니다.
씨앗 뿐만 아니라 균류, 박테리아 등에서 포자가 나와 성장을 시작하는 것도 발아라고 부릅니다.
3.2. 씨앗의 발아에 필요한 3가지 조건
3. 원하는 위치에 적아한 깊이와 크기로 씨앗을 심을 구멍을 만듭니다.
4. 파놓은 구멍에 씨앗을 심습니다.
헥사보드를 연결한 DIY 선샤인 스마트팜입니다.
온도, 습도, 토양 수분량을 LCD에 표시하고, Blynk App을 이용하여 스마트기기로 실시간 모니터링 및 제어를 할 수 있습니다.
헥사보드와 연결할 WiFi가 필수입니다.
4.1.1. 기구부 제작
1. 16*2 LCD 조립
① LCD 고정판과 볼트, 너트를 준비하고 LCD 고정판에 볼트와 너트를 조립한다.
② LCD를 조립된 볼트에 끼우고 너트로 고정한다.
2. 헥사보드 거치대 조립
① 보드 고정판 거치대와 보드 고정판을 긴 볼트와 너트로 조립한다.
② 헥사보드를 보드 고정판에 짧은 볼트로 조립한다.
3. 센서 모듈 조립
※ 커넥터는 방향이 있어 거꾸로 끼워지지 않습니다^^
① DIY 선샤인 스마트팜 키트에서 배너와 상단 고정 지지대를 분해한다.
② 온습도 센서를 케이블과 연결한 뒤 양면테이프를 붙이고 케이블은 구멍을 통해 밖으로 빼낸다.
③ 토양수분 센서의 케이블로 구멍으로 통해 밖으로 빼낸다.
④ RGB LED 바를 상단 고정 지지대의 아랫면에 부착한다.
⑤ LCD 모듈에 연결된 케이블을 상단 고정 지지대의 구멍으로 하나씩(2개가 동시에 들어가지 않습니다^^) 넣은 뒤 미리 조립해 둔 LCD에 케이블을 연결한다.
⑥ LCD를 상단 고정 지지대에 조립한 후, RGB LED바와 LCD와 연결된 케이블은 모두 구멍을 통해 밖으로 빼준다.
⑦ 아래와 같이 헥사보드에 케이블을 연결한다.
토양수분 센서 -> PIN1, 온습도센서 -> PIN2, RGB LED바 -> PIN3, LCD -> I2C
⑧ 헥사보드를 스마프팜에 걸어줍니다.
4.1.2. 코드 작성 및 동작 확인
1. 헥사보드
-. Blynk 연결/ Blynk 연결 시 미소 표시/ Blynk에서 스위치 (V0) 동작 시 RGB LED바 홀수는 빨강, 짝수는 파랑으로 켜고 끄기(식물 생장에 도움을 주는 파장)
-. 아래 코드를 보면 V0 값은 '문자'로 전송이 됩니다. 그래서 문자열로 "1" 로 넣은 것을 확인합니다.
-. 식물은 청색, 적색일 때 생장이 좋아서, 홀수는 빨강, 짝수는 파랑으로 LED가 켜지게 합니다. 계속 사용하기 편하게 함수로 만들었습니다. 밝기는 가장 밝은 100으로 합니다.
-. 온도, 습도, 토양수분 변수를 만들고, 각각의 값을 가져옵니다. 그리고, 토양수분 값은 물이나 물티슈 등을 이용하여 시리얼 모니터에서 최대, 최소 값을 확인한 후, 백분율로 바꾸어 줍니다.
(수분이 많을 수록 숫자가 작습니다.)
-. Blynk의 가상핀에 온도, 습도, 토양수분_백분율을 전송하기.
2. Blynk
이전 헥사보드 코딩에서 우리가 기억해야되는 사항은 LED -> V0, 온도 -> V1, 습도 -> V2, 토양수분_백분율 -> V3 으로 각각의 핀에 대응시켰다는 겁니다.
① 데이타스트림
units은 필수 사항은 아니고, 우리는 모두 정수(Integer)로 하면 됩니다.
-. LED
② 웹 대시보드
위젯은 자신이 넣고 싶은 모양으로 넣습니다. 일단 저는 아래와 같이 하였습니다.
-. LED
헥사보드의 기본 프로그래밍을 학습하고자 하실 때는 아래 링크를 참조하세요.
헥사보드에 모터 쉴드를 연결하여 사용합니다.
4.2.1. 기구부 제작
4.2.2. 코드 작성 및 동작확인
코드는 일반형에 자동 급수를 위한 워터펌프 동작 스위치만 추가하면 됩니다.
1. EasyBlocks
온도, 습도, 토양 수분, 조도 센서 입력값을 LCD에 표시하고, 밝기에 따라 식물생장 LED를 점멸하는 스마트팜입니다.
① LCD 고정판과 볼트, 너트를 준비하고 LCD 고정판에 볼트와 너트를 조립한다.
② LCD를 조립된 볼트에 끼우고 너트로 고정한 뒤, 케이블을 색상에 유의하여 아래와 같이 연결한다.
2. 아두이노 우노 보드 거치대 조립
① 릴레이와 아두이노 우노 보드에 볼트와 너트를 조립한다.
③ 보드 고정판 거치대를 볼트 너트를 이용하여 조립한다. 이 때, 볼트의 방향에 주의한다. 그리고, 센서 쉴드 보드를 아두이노 보드에 조립한다.
3. 센서 모듈 조립
※ 커넥터는 방향이 있어 거꾸로 끼워지지 않습니다. 아래 사진의 방향대로 연결하면 됩니다.
① DIY 선샤인 스마트팜 키트에서 배너와 상단 고정 지지대를 분해한다.
② 온습도 센서를 케이블과 연결한 뒤 양면테이프를 붙이고 케이블은 구멍을 통해 밖으로 빼낸다.
③ 토양수분 센서의 케이블로 구멍으로 통해 밖으로 빼낸다.
④ 식물생장 LED를 상단 고정 지지대의 아랫면에 부착한다.
⑤ LCD 모듈에 연결된 케이블을 상단 고정 지지대의 구멍으로 하나씩(2개가 동시에 들어가지 않습니다^^) 넣은 뒤 LCD 고정판을 조립한다.
⑥ 상단 고정 지지대를 스마트팜에 조립하고 식물생장 LED와 LCD의 케이블은 구멍을 통해 밖으로 빼준다.
⑦ 조도센서를 양면테이프로 보드 고정판 거치대에 부착한다. 케이블을 연결하여 보드 고정판 오른쪽 구멍으로 빼내어 정리한다.
⑧ 보드 고정판 왼쪽 구멍으로는 토양수분 센서와 식물생장 LED 케이블을, 오른쪽 구멍으로는 LCD와 온습도 센서의 케이블을 빼낸다.
⑨ 보드 고정판 거치대를 스마트팜에 조립한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <DHT.h> // 온습도 센서 라이브러리 #include <Wire.h> // i2C 통신을 위한 라이브러리 #include <LiquidCrystal_I2C.h> // LCD 1602 I2C용 라이브러리 LiquidCrystal_I2C lcd(0x27, 16, 2); // 화면이 안나오면 0x27 <-> 0x3F 로 변경 #define SoilPin A0 // 토양수분센서 A0번 핀에 연결 #define CdsPin A1 // 조도센서 A1번 핀에 연결 #define LedPin 3 // LED 릴레이 3번 핀에 연결 #define DHTPin 4 // 온습도 센서 4번 핀에 연결 #define DHTTYPE DHT11 // 온습도 센서타입 DHT dht(DHTPin,DHTTYPE); // 온습도 센서 함수 선언 void setup() { Serial.begin(9600); //시리얼 통신 속도 9600bps으로 설정 dht.begin(); //온습도 센서 초기화 및 통신 시작 pinMode(LedPin,OUTPUT); //릴레이핀(3번핀) 출력으로 설정 lcd.begin(); // LCD 초기화 } void loop() { float tempValue = dht.readTemperature(); // 온도 측정값을 tempValue에 저장 float humValue = dht.readHumidity(); // 습도 측정값을 humValue에 저장 int CdsValue = analogRead(CdsPin); // 조도 측정값을 CdsValue에 저장 int SoilValue = analogRead(SoilPin); // 토양수분 측정값을 SoilValue에 저장 int SoilValue_per = map(SoilValue, 150, 500, 100, 0); /* 센서 값을 퍼센트로 변경, 0~1023의 값이나, 물티슈로 센서를 감싼 상태로 최소값과 그냥 대기중의 최대값을 확인 후 기재 map(SoilValue, 최소값_물티슈, 최대값_대기, 100, 0) */ // 어두우면 LED 조명 켜기 if(CdsValue > 600){ // 조도 측정값에 따른 릴레이핀 동작(생장LED 동작) digitalWrite(LedPin,HIGH); // 밝을 때와 어두울 때의 값을 시리얼모니터로 확인 후 중간 값을 기준으로 사용 } else if(CdsValue <= 600){ digitalWrite(LedPin,LOW); } // LCD에 온도, 습도, 토양수분 표시하기 lcd.begin(); // 잔상제거용, 자리수를 고정하는 방법을 간소화함. lcd.backlight(); // 백라이트 켜기 lcd.setCursor(0, 0); // (X축 넘길 갯수, 라인번호) 첫 번째 칸, 첫 번째 줄에 표시 lcd.print("T : "); lcd.print((int)tempValue); lcd.print("C"); lcd.setCursor(8, 0); // (1칸 띄고, 첫번째 라인) lcd.print("H : "); lcd.print((int)humValue); lcd.print("%"); lcd.setCursor(2, 1); // (2칸 띄고, 2번째 라인) lcd.print("Soil_M : "); lcd.print(SoilValue_per); lcd.setCursor(13, 1); // (13칸 띄고, 2번째 라인) lcd.print("%"); // 시리얼 모니터에 온도, 습도, 조도, 토양수분 아날로그 입력값, 토양수분 %로 변경값 표시하 Serial.print("temp : "); Serial.print((int)tempValue); Serial.print(" °C, "); Serial.print("humi : "); Serial.print((int)humValue); Serial.print(" %, "); Serial.print("Cds : "); Serial.print(CdsValue); Serial.print(" "); Serial.print("Soil : "); Serial.print(SoilValue); Serial.print(" "); Serial.print("Soil_M : "); Serial.print((int)SoilValue_per); Serial.println(" % "); //다음 측정값은 줄바꿈하여 시리얼모니터 표시 delay(300); } | cs |
스마트팜 LCD에 릴레이, 수중모터, 급수 장치 등을 추가하여 수중모터를 토양 수분량에 따라 자동 급수를 하는 스마트팜입니다.
아래 영상입니다.
테스트를 여러번 했더니 흙에 물이 가득이네요^^;;
② LCD를 조립된 볼트에 끼우고 너트로 고정한 뒤, 케이블을 색상에 유의하여 아래와 같이 연결한다.
2. 아두이노 우노 보드 거치대 조립
① 릴레이 2개와 아두이노 우노 보드에 볼트와 너트를 조립한다.
③ 보드 고정판 거치대를 볼트 너트를 이용하여 조립한다. 이 때, 볼트의 방향에 주의한다. 그리고, 센서 쉴드 보드를 아두이노 보드에 조립한다.
3. 센서 모듈 조립
※ 커넥터는 방향이 있어 거꾸로 끼워지지 않습니다. 아래 사진의 방향대로 연결하면 됩니다.
① DIY 선샤인 스마트팜 키트에서 배너와 상단 고정 지지대를 분해한다.
② 온습도 센서를 케이블과 연결한 뒤 양면테이프를 붙이고 케이블은 구멍을 통해 밖으로 빼낸다.
③ 토양수분 센서의 케이블로 구멍으로 통해 밖으로 빼낸다.
④ 급수 장치 상,하판을 볼트와 너트를 이용하여 조립한다.
⑤ 식물생장 LED를 방향에 유의하여 급수 장치에 부착한다.
⑦ 급수 장치 양쪽 홈으로 수중펌프 연결 케이블(40cm/ 2Pin/ 검정,빨강)을 넣는다.
⑧ LCD 모듈에 연결 된 케이블은 상단 고정 지지대의 구멍에 하나씩 넣어 빼낸 후, 급수 장치 상판 중앙의 사각 홈에 넣어 LED 케이블이 있는 방향으로 빼낸다.
⑨ 상단 고정 지지대에 LCD 고정판을 조립하고, 스마트팜에 조립한다. 케이블과 호스는 양 옆의 구멍으로 빼내어 준다.
⑩ 수중 펌프에 연결용 젠더가 끼워진 호스와 케이블을 연결한다.
⑪ 조도 센서를 양면테이프로 보드 고정판 거치대에 부착하고, 3Pin 케이블을 연결하여 보드 고정판 오른쪽 구멍으로 빼내어 정리한다.
⑫ 보드 고정판 왼쪽 구멍으로는 토양수분 센서, 식물생장 LED, 수중 펌프 연결 케이블을, 오른쪽 구멍으로는 LCD와 온습도 센서의 케이블을 빼낸다.
⑬ 보드 고정판 거치대를 스마트팜에 조립한다.
모터 동작을 확인을 위해서 배럴잭에 외부 전원으로 9V 건전지(꼭 알카라인으로)를 연결해 줍니다.
9V 건전지는 단순히 동작을 확인하는 것일 뿐, 정상적인 동작을 위해서는 9V 2A 정도의 어댑터 전원을 이용합니다. 수중모터의 노이즈 문제로 간혹 동작 중 온습도가 측정이 되지 않을 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include <DHT.h> // 온습도 센서 라이브러리 #include <Wire.h> // i2C 통신을 위한 라이브러리 #include <LiquidCrystal_I2C.h> // LCD 1602 I2C용 라이브러리 LiquidCrystal_I2C lcd(0x27, 16, 2); // 화면이 안나오면 0x27 <-> 0x3F 로 변경 #define SoilPin A0 // 토양수분센서 A0번 핀에 연결 #define CdsPin A1 // 조도센서 A1번 핀에 연결 #define LedPin 3 // LED 릴레이 3번 핀에 연결 #define DHTPin 4 // 온습도 센서 4번 핀에 연결 #define DHTTYPE DHT11 // 온습도 센서타입 DHT dht(DHTPin,DHTTYPE); // 온습도 센서 함수 선언 #define PumpPin 9 // 수중 펌프 릴레이 9번 핀에 연결 void setup() { Serial.begin(9600); //시리얼 통신 속도 9600bps으로 설정 dht.begin(); //온습도 센서 초기화 및 통신 시작 pinMode(LedPin,OUTPUT); //릴레이핀(3번핀) 출력으로 설정 pinMode(PumpPin,OUTPUT); //릴레이핀(3번핀) 출력으로 설정 lcd.begin(); // LCD 초기화 } void loop() { float tempValue = dht.readTemperature(); // 온도 측정값을 tempValue에 저장 float humValue = dht.readHumidity(); // 습도 측정값을 humValue에 저장 int CdsValue = analogRead(CdsPin); // 조도 측정값을 CdsValue에 저장 int SoilValue = analogRead(SoilPin); // 토양수분 측정값을 SoilValue에 저장 int SoilValue_per = map(SoilValue, 150, 500, 100, 0); /* 센서 값을 퍼센트로 변경, 0~1023의 값이나, 물티슈로 센서를 감싼 상태로 최소값과 그냥 대기중의 최대값을 확인 후 기재 map(SoilValue, 최소값_물티슈, 최대값_대기, 100, 0) */ // 어두우면 LED 조명 켜기 if(CdsValue > 600){ // 조도 측정값에 따른 릴레이핀 동작(생장LED 동작) digitalWrite(LedPin,HIGH); // 밝을 때와 어두울 때의 값을 시리얼모니터로 확인 후 중간 값을 기준으로 사용 } else if(CdsValue <= 600){ digitalWrite(LedPin,LOW); } // 토양 수분이 40% 미만이면 수중모터 동작하기 (급수) if(SoilValue_per < 40){ // 토양수분 % 측정 값에 따른 릴레이핀 동작(수중모터 동작) digitalWrite(PumpPin,HIGH); // 40% 를 기준으로 사용 } else if(SoilValue_per >= 40){ digitalWrite(PumpPin,LOW); } // LCD에 온도, 습도, 토양수분 표시하기 lcd.begin(); // 잔상제거용, 자리수 만들기 간소화 lcd.backlight(); // 백라이트 켜기 lcd.setCursor(0, 0); // (X축 넘길 갯수, 라인번호) 첫 번째 칸, 첫 번째 줄에 표시 lcd.print("T : "); lcd.print((int)tempValue); lcd.print("C"); lcd.setCursor(8, 0); // (1칸 띄고, 첫번째 라인) lcd.print("H : "); lcd.print((int)humValue); lcd.print("%"); lcd.setCursor(2, 1); // (2칸 띄고, 2번째 라인) lcd.print("Soil_M : "); lcd.print(SoilValue_per); lcd.setCursor(13, 1); // (13칸 띄고, 2번째 라인) lcd.print("%"); // 시리얼 모니터에 온도, 습도, 조도, 토양수분 아날로그 입력값, 토양수분 %로 변경값 표시하 Serial.print("temp : "); Serial.print((int)tempValue); Serial.print(" °C, "); Serial.print("humi : "); Serial.print((int)humValue); Serial.print(" %, "); Serial.print("Cds : "); Serial.print(CdsValue); Serial.print(" "); Serial.print("Soil : "); Serial.print(SoilValue); Serial.print(" "); Serial.print("Soil_M : "); Serial.print((int)SoilValue_per); Serial.println(" % "); //다음 측정값은 줄바꿈하여 시리얼모니터 표시 delay(300); } | cs |
아두이노 설치, 기본 및 각각의 센서 사용법은 아두이노 페이지를 참조바랍니다.