728x90

 

1.1 변경내역

- ESP8266을 이용한 웹서버 기능을 제거하고, thingspeak.com 으로 데이터를 전송함.

- DHT22 추가

 

 

- DHT22 온습도 센서 추가.

- 측정 데이터를 thingspeak.com 로 전송해서 모니터하도록 수정함.

728x90
Posted by 하루y
728x90

 

 

1. 기능

1) 토양습도 측정

2) 물제어

- 40%(offset:25%) 미만이면 물 공급(relay on/off)

3) wifi 로 토양습도 정보 제공

- arduino uno 에 시리얼로 wifi(esp8266)을 붙여더니, 긴 text는 통신할 때 오류가 자주 발생함.

 

2. 개선사항

1) 데이터를 라즈베리나 서버 로 전송하고, 해당 서버에서 데이터를 조회하는 결로 변경.

2) SD카드에 환경 값 을 불러와서, 동작하도록 변경

3) OLED화면 설치. 간단한 수치 조회할 수 있게 변경.

- 토양습도, 온습도, 광량, 설정값(ip주소, 관개임계치)

 

- 추석동안 관개시스템 덕분에 방울토마토 열매가 익어가고 있음. ^^;;;

- 드디어, wifi를 달고, 선정리도 조금하고.

- 토양습도센서가 벌써 녹이 쓸고 있다.

보름 전까지도 괜찮았는데, 커피가루 탓인지 갑자기 녹쓸어 버림.

산성흙에서 커는 블루베리 경우는 녹이 잘 쓸지 않는 센서를 구하거나, 간접적인 측정방법이 필요함.

 

- 간단한 걸 몇 일 걸려서 완성. 현재 토양습도 측정치만 조회될 수 있도록 만듬. ㅠㅠ;;;;

- arduino uno에 ESP8266을 시리얼통신해서 WebServer를 구성할 경우, Text가 조금만 길어도 오류가 발생함.

1) ESP8266 펌웨어 프로그래밍을 하면 WebServer 기능은 개선될 것 같고,

2) 통계치 데이터를 보려면, 결국 데이터를 라즈베리파이 나 다른 서버로 전송해야 함.

 

 

728x90
Posted by 하루y
728x90

라즈베리 설치

 

1. 준비물

 

2. sd 카드 포맷

- sd formatter 설치

https://www.sdcard.org/downloads/formatter_4/

- sd 카드 포맷

. 옵션 Overwrite 선택 후 format.

 

3. O/S 설치

- O/S 다운로드

. https://www.raspberrypi.org/downloads/

. RASPBIAN 다운로드

- Win32 Disk Imager 설치

. https://sourceforge.net/projects/win32diskimager/

 

 

* 라즈베리 설치 후 할 일

http://kbc20000.blog.me/220923788944

. 한글 설정은 네트워크 설정 후 할 것.

. wifi 로켈일은 US 해아 wifi 설정되고, koKR로 하면 못 잡음!!

http://cosmosjs.blog.me/221051663695

 

http://webnautes.tistory.com/903

=> wifi 설정

=> X-window 이면, 우측 상단 wifi 에서 ap 선택하면 됨.

 

http://kkokkal.tistory.com/1292

==> 한글 참조 설정. fonts를 받아야 하기 때문에 network/wifi 설정 후 할 것.

http://webnautes.tistory.com/903

==> 한글을 사용하기 위해서, 폰트를 설치해야 하는 데 apt-get update 이후 해야 됨. 이전에는 리소스를 찾지 못함.

$ sudo apt-get update

$ sudo apt-get install ibus ibus-hangul

$ sudo apt-get install ttf-unfonts-core

[출처] 라즈베리파이3 한글입력을 위한 설치와 설정|작성자 코스모스

==> ttf-unfonts-core 리소스를 찾을 수 없어서, apt-get 안내에 따라, fonts-unfonts-core 로 대신 설치함. (성공!!!!)

 

4. linux 접속

- putty 를 이용한 ssh 포트 접속

- vnc 접속

. https://www.realvnc.com/en/connect/download/viewer/ 에서 vnc viewr 받아서 접속

 

728x90
Posted by 하루y
728x90

 

토양수분센서에 따른 특성 분석 후 적용이 필요함.

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"

#define DHT_TYPE DHT11   // DHT 11

// 핀설정
#define DHT_PIN 6     // what digital pin we're connected to
#define SOIL_SENSOR_PIN A0     // what digital pin we're connected to
#define SOIL_RELAY_PIN 8 // 토양센서에 결과에 따른 제어 relay 핀

#define DHT_USE_YN 0
#define SOIL_SENSOR_USE_YN 1
#define WATER_RELAY_USE_YN 1

#define SOIL_HUMIDITY_INDEX 40 // 물을 주기 위한 습도 임계치값. 임계치 이하면, 물을 공급한다.
#define WATER_SUPPLY_TIME 10 // 물 공급 시간 (기본:10초)
#define WATER_SUPPLY_INTERVAL_TIME (60 * 1) // 물공급 인터벌 시간. 기본: 10 분(60초 * 10분)

#define LOOP_INTERVAL_TIME 2 // 루프 인터벌 시간 (기본:2초)

DHT dht(DHT_PIN, DHT_TYPE);

// loop 에서 센서 처리 여부
int checkedSensor = 0;
// 물공급 delya time
int waterDelayTime = 0;

void setup() {
  Serial.begin(9600);
  pinMode(SOIL_RELAY_PIN, OUTPUT);
  
  if(DHT_USE_YN) {
    Serial.println("DHT beging...");
    dht.begin();    
  }
}

// DHT 센서 처리
void processDhtSensor() {  
  // DHT 센서 처리 ////////////////////////////
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }  

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C");
}

void processSoilSensor() {
  // 토양 센서 처리 //////////////////////////
  int soilAnalogValue = analogRead(SOIL_SENSOR_PIN);
  int soilDigitalValue = map(soilAnalogValue, 0, 630, 0, 100); // Max(물에 잠길때) : 540 ~ 630, Min: 0
  soilDigitalValue = constrain(soilDigitalValue, 0, 100);
  
  Serial.print("Soil moisture(Digital/Analog): ");
  Serial.print(soilDigitalValue);
  Serial.print(" (%) / ");
  Serial.print(soilAnalogValue);
             
  if(WATER_RELAY_USE_YN && soilDigitalValue < SOIL_HUMIDITY_INDEX) {
    // 습도가 0보다는 크고, 인덱스값보다 작을 때 물을 공급한다. 
    if(soilDigitalValue < 1) {
      Serial.print("\t토양센스가 습도를 측정하고 있지 않습니다.");          
    } else {
      waterDelayTime -= LOOP_INTERVAL_TIME;
      if(waterDelayTime < 1) { // 물공급 인터벌 시간이 지나야, 추가로 물을 공급할 수 있다.
        waterDelayTime = WATER_SUPPLY_INTERVAL_TIME;
        digitalWrite(SOIL_RELAY_PIN, HIGH);  
        Serial.print("\trelay on(");    
        Serial.print(WATER_SUPPLY_TIME);    
        Serial.print("초)");    
        delay(WATER_SUPPLY_TIME * 1000);  
        digitalWrite(SOIL_RELAY_PIN, LOW);  
        Serial.print("\trelay off");        
      } else {
        Serial.print("\t물공급 인터벌 시간이 아직 지나지 않았습니다.(");          
        Serial.print(waterDelayTime);          
        Serial.print("초 남음.)");                  
      }      
    }
  }
}


void loop() {
  delay(LOOP_INTERVAL_TIME * 1000);
  
  checkedSensor = 0;
  
  // DHT 센서 처리
  if(DHT_USE_YN) {
    processDhtSensor();  
    checkedSensor++;
    Serial.print("\t");
  }

  // 토양 센서 처리
  if(SOIL_SENSOR_USE_YN) {
    processSoilSensor();
    checkedSensor++;
    Serial.print("\t");
  }

  if(checkedSensor > 0) {
    Serial.println("");  
  }
}

 

토양습도센서 차이 데이터 측정 자료

- 측정일자: 2017-09-21 23시

 

1. 데이터 측정

1.1 큰화분(샤오미, 토양센서...) 측정 값

a) 조건

- 토양센서 다리 5/5 뭍음

b) 데이터측정

⁃ 36%, 57%(587)

⁃ 큰방울토마토 줄기 기준 거리

⁃ 5cm(37%), 10cm(39%), 15cm(52%) => 물을 주는 방법에 따라 수치가 다를 듯.

 

1.2 작은화분1(골드 방울토마토)

a) 조건

- 토양센서 다리 4/5 뭍음.

b) 데이터 측정

   (샤오미, 토양센서)

⁃ 13%, 29%(296) : 처음 측정.

⁃ 200cc 물주고 - 23:58분, 화분 아래 물 흐름 없음

⁃ 1분후, 48%, 71%(729) - 23:59분

⁃ 5분후, 41%, 70%(721)

⁃ 15분후,41%,70%(719)

⁃ 100cc 추가 - 00:15분, 화분아래 물 흐름.

⁃ 2분후, 67%, 71%(731) <- 토양센서 측정 치 max(730-750)

⁃ 샤오미 센서를 빼고, 물을 닦아서 다시 넣었더니 38%... ㅡㅡ;

=> 아마도, 센서에 직접 물이 뭍은 경우에 수치가 많이 올라가는 듯 함. 물이 고이면 데이터 오류가 발생할 수 있음.

 

1.3 작은화분2(땡땡이 방울토마토)

- 땡땡이 방울 토마토는 물줄 때 최대 200cc 이하가 적당함. 초과시 화분에서 물이 넘칠 수 있음.

a) 조건

⁃ 토양센서 다리 4/5 뭍음.

b) 데이터측정

   (샤오미, 토양센서)

⁃ 19%, 44%(453)

⁃ 30%, 68%(697): 물준후 1분(100cc)

⁃ - 33%, 64%(662) : 15분 후

=> 해당건은 샤오미 쪽 센서가 물이 닿지 않은 듯 함

⁃ 60%,69%(716): 추가 100cc 더, 1분 11:36분

⁃ 58%,68%(703): 5분 후

 

1.4 물주는 시간과 물의 양

a) 조건

- 아파트 14층 베란다 수도꼭지 90도 회전시

b) 데이터측정

- 약 200cc/8초 (단, 호스에 공기가 없다는 가정하에)

 

2. 데이터 평가

1) 토양센서를 얼마나 깊이 뭍는지에 따라 값 차이가 심함. 측정은 거의 도금된 센서 다리모두 뭍음.

2) 토양센서 아나로그 값 max는 1023로 설정해야. 실제 max 아노로그 760으로 설정하면 값 왜곡이 더 심해짐.

3) 토양센서는 다리 짧아 상부 흙의 습도 체크 위주 임(3-4cm).샤오미는 7-8cm 깊이

4) 흙은 상부가 더 말라 있음.

- 샤오미를 작는 화분 측정시 습도가 1/2 뭍을땐 7%, 전체 깊이 뭍으면 13%.

5) 식물 줄기 주변에서 물이 빨리 마르므로(뿔리에서 수분흡수), 센서를 적당한 위치에 설치하는 게 중요함.

 

3. 결론

1) 토양센서의 아나로그 값이 정확한 수치를 알수 없으므로, 사용할 센스의 특성에 맞게 수치를 보정해서 적용해야 함.

- 토양센서 제품에 따라, 습도 0%의 아나로그 수치가 0인 경우도 잇고, 1023인 경우도 있음. 반드시 확인 할 것.

- 현재, 몇가기 제품을 측정해보면, 샤오미제품과 비교할 때 습도가 20~25% 차이가 남.

2) 토양센서를 설치할 때, 줄기에서 5cm~10cm 위치에서 설치하고,

보정된 습도가 43% 정도일 때 물을 공급하는 적당할 듯 함.

- 보정수치습도(%) = 아나로그 실수치 습도(%) - 보정값(23~25%)

. 23% ~ 25%은 몇일 화분을 관찰 했을 때, 화분 겉흙이 말랐을 때, 아나로그 수치가 60% 정도로 측정되었음.

보정수치습도(%)가 40%일때도 물이 공급되지 않아, 화분이 말라서, 43% 정도에서 수분을 공급하기 위해,

보정값을 23%~25%로 조정하는 게 적당함.

 

end.

728x90
Posted by 하루y