6조

MIE capstone
Mie202006 (토론 | 기여)님의 2020년 12월 17일 (목) 13:34 판 (참고문헌 및 참고사이트)
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

국문 : 중앙관리형 스마트 화분 관리기

영문 : (Centralized Smart Pot Manager)

과제 팀명

키워조

지도교수

오명도 교수님

개발기간

2020 년 9 월 ~ 2020 년 12 월 (총 4 개월)

구성원 소개

서울시립대학교 기계정보공학과 20154300** 안**(팀장)

서울시립대학교 기계정보공학과 20154300** 윤**

서울시립대학교 기계정보공학과 20154300** 주**

서울시립대학교 기계정보공학과 20154300** 허**

서울시립대학교 기계정보공학과 20164300** 김**

서론

개발 과제의 개요

개발 과제 요약

 환경이나 조건이 맞지 않아 식물을 기르기 힘든 사람들을 위한 몇 가지 제품이 있다. 하지만 시중에 있는 스마트 화분들은 기존의 화분을 이용할 수 없어 옮겨 심어야 하거나, 그 크기가 작아 기존의 식물을 옮겨 심을 수도 없다는 단점이 있다. 또한 자동으로 물을 주더라도 그 용량이 크지 않아 물을 채워줘야 하는 빈도가 잦다. 우리 과제에서는 기존의 화분을 그대로 이용할 수 있고, 자동으로 적정량의 물을 주고 관리할 수 있으며, 물탱크를 내장하지 않고 펌프를 통해 자동으로 물을 공급한다. 또한 사용자는 식물에 물이 공급되거나 외부 물탱크에 물이 다 떨어졌을 때, 배수 트레이에 물이 가득 찼을 때 앱을 통해 알림을 받는다. 

개발 과제의 배경 및 효과

(1) 배경 및 동기  

 
<그림 1 현재 본인이 직접 키우는 식물의 존재 여부> 


전국 만 19~59세 성인남녀 1000명을 대상으로 2017년 설문조사를 한 결과 응답자의 85%가 현재 식물을 키우고 있거나 과거에 키운 경험이 있다고 답했다. 이들은 공기정화(58%), 식물에 대한 호감(38%), 인테리어(36%) 등을 식물 재배의 이유로 제시하였다.1) 그만큼 우리나라에선 가정에서 식물을 키우는 것이 대중화되어 있고 '반려식물'이라는 명칭이 생길 만큼 그 장점을 인지하고 있다.   

<그림 2 코로나블루 조사 결과> 


코로나19가 점점 더 장기화되고 잠식될 기미를 보이지 않으면서 이로 인한 각종 사회 문제가 발생하고 있다. 그 중 코로나로 인한 우울증, 즉 코로나블루라는 새로운 이슈가 대두되며 그 영향이 점점 커지고 있다. 전국 성인남녀 805명을 대상으로 2020년 코로나블루에 대해 조사한 결과 코로나블루를 경험한 사람은 4월 54.7%에서 6월 69.2%로 계속 증가세에 있으며 90%가 사회적 우울감이 심해졌다고 답했다.2) 이에 대한 해결책으로 정서 안정을 제공하는 식물 키우기가 대두되며 이전보다 더 주목을 받게 되었다.

하지만 이러한 장점을 인지하고도 식물을 재배하기 조심스러워 하는 사람들이 있다. 바쁜 일상생활에 의한 시간 부족, 식물 관리 능력의 미숙 등을 이유로 말이다. 예전에는 식물을 키웠지만 지금은 키우지 않는 사람들은 그 이유로 관리하기가 힘들다는(63.3%, 중복응답) 점을 가장 많이 꼽았다. 우리는 이러한 사람들 역시 식물 재배의 이점을 누릴 수 있도록 식물을 자동으로 관리하고 원격으로 상태를 확인할 수 있는 장치를 고안했다. 

(2) 작품의 독창성 및 필요성

 

그림 3  클릭앤  글로우
그림 4 워터 타이머
그림 5  플리워
 


현재 시중의 반려식물 재배를 위한  가드닝  디바이스는 스마트 화분과 관개 키트가 있다. 스마트 화분은 내부에 설치된 물탱크를 사용한 급수 시스템을 사용하며 화분과 기기가 일체형으로 이루어져 있다. 단순히 물을 주는 과정만을 자동화한 저렴한 화분에서 성장을 위한 LED를 겸한 10만 원 이상의 제품들[그림 3]까지 다양하게 출시되었다. 스마트 화분은 식물을 제외하고는 모두 장치의 일부이기에 식물의 성장을 위한 환경을 조성하기 비교적 쉽다. 다만 기존에 보유하던 화분을 사용할 수 없으며 기를 수 있는 식물의 크기에도 한계도 명확하다. 또한 물탱크의 용량에 따라 이용자가 물을 보충해 줘야 하는 기간이 한정되어 버린다.

관개 키트는 화분과 분리된 상태로 식물의 성장을 돕는다. 현재 시제품들은 외부의 물탱크로부터 펌프를 사용해 급수하거나 수도꼭지를 통해 물을 주는 방식을 택하고 있다. 단순 물을 공급할 시간을 설정하는 저가형 타이머 제품[그림 4]이나 식물의 성장에 필요한 요건들의 분석이 가능한  스마트팜  용 160만원 상당의 고가 제품[그림 5]으로 나뉜다. 

본 프로젝트는 저가 제품의 관개 키트가 제공하지 못하는 기능으로 물을 주어야 하는 적절한 시간을 알려주며 필요한 만큼 자동으로 급수를 하는 것이 목표이다. 또한 애플리케이션과의 연동 기능을 제공하면서도 상시 전원 공급형이 아닌 배터리 방식을 채용하여 장소에  구애받지  않을 것이다. 햇빛이 들어오지 않는 환경에서도 전원만 공급 되면  생장등을  이용해 식물의 성장을 촉진시킬 수 있다. 설치는 사용 중인 화분의 아래에 놓아두는 간단한 방식으로 배수되는 물의 처리가 용이할 것이며 기존의 화분이 차지하던 공간에서 크게 확장되지 않을 것이다. 

개발 과제의 목표와 내용

(1) 개발 목표  

<서비스 시스템 구상도> 

      화분 표면의 습도를 확인하여 일정 수준 이하로 떨어지면 펌프가 작동한다. 펌프는 외부의 물통으로부터 물을 끌어올린다. 이때 펌프가 작동했음에도 표면 습도 센서의 값에 변화가 없다면 물이 나오지 않은 것이므로 물이 부족하다는 데이터를 서버로 전송한다. 표면 습도가 변화했고, 화분 거치대 부분에 설치된 배수 감지 센서가 작동을 했다면 화분 아래로 물이 떨어지고 있는 것이므로 펌프 작동을 중단한다. 그 후 물이 공급되었다는 정보를 서버에 업로드한다. 

표면의 습도를 확인하는 주기는 외부 전원 유무에 따라 달라진다. 외부 전원이 있다면 실내에 둔 것이므로  생장등을  작동하여 식물의 생장을 돕고, 외부 전원이 없다면 베란다 등 실외에 있는 것이므로 전원 절약을 위해  생장등을  작동하지 않는다. 

클라우드 서버로 전송된 데이터는 스마트폰 앱을 통해 알림으로 알려주거나 현재 식물의 상태를 그래프로 분석하여 보여준다. 


(2) 개발 내용      

(가) 센서  인식후  펌프가 물 공급하는 알고리즘  

화분 표면에  박아둔  토양 습도 측정 센서가 표면 습도가 일정 수준 이하로 떨어졌다고 측정하면 펌프가 작동하여 화분에 물을 공급한다. 펌프가 작동했음에도 토양 습도 측정 센서의 값이 변화가 없다면 외부 물통의 물이 다 떨어진 것이므로 서버로 이를 전달한다. 물이 공급됐다면 화분 거치부에 설치된 수분 감지 센서가 화분 밑에서 물이 나오는 것을 감지할 때까지 펌프를 작동한다.  

전원이 공급되는 경우는 전력에 구애를 받지않기에 일반적인 센서 확인후 작동하는 알고리즘을 가진다. 그러나 관리자의 상황에 따라서 외부에 배치하고 14일정도 방치하는 상황이 생길 수 있다. 따라서 전력이 공급되지 않는 경우를 파악하여 그러한 경우에는 자체 배터리의 효율을 위해 긴 주기를 가지는 센서탐지 시간과 불필요한 기능을 스스로 줄이는 다른 알고리즘을  필요로한다 .       (나) 센서-서버-애플리케이션의 데이터 송수신  

외부 전력 공급 여부에 따라 센서의 측정 주기가 달라진다. 아두이노를  통해 전송된 RAW 데이터는  파이어베이스로  전송되고, 사용자는 앱을 통해 RAW 데이터를 해석한 그래프를 확인할 수 있다. 물이 공급됐거나 외부 물통의 물이 다 떨어졌다면 앱으로 알림을 보낸다. 여기서 센서와 서버는 단순  숫자화된  값들만 저장하고 있기에, 많은 용량을 필요로 하지 않아 작은 서버와  아두이노키트로  해결을 하며, 대신에 애플리케이션이 데이터를 해석하는 구조로 제작하는 것을 목표로 한다.     

(다) 외부전력의 적절한 배터리충전과  생장등의  작동조절  

외부에서 충전기를 이용하여 배터리를 충전할 수 있다. 배터리 전원은  아두이노와  생장등  두 곳에 공급되며 사용자는  생장등을  작동시킬 것인지 스위치로 선택할 수 있다. 생장등은  자바라 형태로 측면에 부착되어 사용자가 원하는 높이와 위치에서 빛을 비출 수 있다. 실내가 아닌 베란다에  꺼내두는  등 외부 전력 공급이 없을 때 사용자는  생장등을  꺼서 전력 소모를 줄일 수 있다.  다만 현재의 기기 목표상태로는 외부 전원 공급 없이  생장등을  작동시키키는  힘들기에, 이러한 작동은 예외로 하여 설계를 한다.     

(라) 전체적인 하드웨어 및 배치  

기본적으로 원래 있던 화분을 그대로 사용할 수 있다는 것을 목표로 하기 때문에 화분을 지탱할 만큼 튼튼한 구조여야 하며, 화분의 사이즈와 식물의 다양한 크기에 맞춰 유연하게 배치할 수 있는 형태를 목표로 한다.  목표 기간인 2주간 전원 공급 없이 물을 공급하고 데이터를 전송해야 하므로 전원 효율을 신경 써서 알고리즘을 작성한다. 또한 각종 배터리와 센서들이 크게 심미성이 어긋나지 않는 선에서 배치하되, 작동에는 오류가 발생하지 않도록 한다.     

<전체 시스템 구상도>  

 

관련 기술의 현황

State of art

현재 자동으로 식물을 키우는 것과 관련된 시장은 크게 두가지로 나눌 수 있다. 일반적으로 수경 재배를 통해 큰 규모로 온, 습도, 양분, 심지어 수확까지 자동으로 수행하는 스마트 팜 형태와 가정용으로 화분 형태로 만들어지는 스마트 화분 형태이다.  

스마트팜  기술은 크게 3세대로 나눌 수 있다. 센서 데이터를 수집하여 원격에서 감시하고, 농장을 원격으로 제어하는 1세대, 측정된 센서 데이터와 빅데이터를 통해 최적생산을 위해 창문, 팬, 관수, 양분 등을 자동으로 제어, 공급하는 2세대, 여기에 에너지 관리와 로봇의 자동 수확이 더해지는 3세대로 나뉘어진다. 현재  스마트팜  기술은 최적관리 로봇과 지능형 농기계를 사용하는 3세대엔 미치지 못하였고 2세대까지는 발전되었지만 2세대의 특징이라고 할 수 있는 빅데이터를 활용한 최적화 학습 등은 초보적인 상태이다. 최근엔 LG와 같은 기업이 가정용으로 냉장고 크기의 식물공장 등을 출시하고 있다. 

한편 스마트 화분 기술은  스마트팜과  다르게 기업 규모의 투자가 이뤄지지 않고 있다. 몇몇  벤쳐  회사에서  펀딩  등을 통해 제품화에 성공한 경우가 대다수이다. 이러한 스마트 화분의 일반적인 특징은 토양의 습도, 화분 근처의 광도, 온도 등을 측정하여 사용자에게 알려주는  정도거나  타이머를 이용해 일정 주기마다 물을 준다. 가정용 크기에서 물과 양분, 빛 모두를 식물의 상태에 맞춰 자동으로 공급하는 제품은 아직 나오지 않았지만 기술이 발전한다면 충분히 등장할 것으로 생각된다. 

기술 로드맵

   2020 6 image08.png

특허조사

◇사물 인터넷 기반 스마트 화분 및 그 관리 시스템(SMART FLOWERPOT BASED ON INTERNET OF THING AND MANAGEMENT SYSTEM FOR THE SAME) 


2020 6 image09.png


출원번호/일자  1020160024574 (2016.02.29) 

공개번호  10-2017-0101692  

본 발명의 일 실시예에 따른 사물 인터넷 기반 스마트 화분은 재배토를 수용하여 식물이  식재되는  용기의 일면에 부착되고, 상기 식물에 관한 고유 식별 정보를 저장하는 전자 태그; 온도, 습도, 일사량, 대기 오염도, 및 상기 재배토의 수분량 중 적어도 하나를 포함하는 상태 정보를 측정하는 적어도 하나의 센서를 포함하는  센서부 ; 상기 전자 태그에 저장된 고유 식별 정보를 판독하는 태그 리더; 사용자 단말기와 무선 통신을 수행하여 상기 태그 리더에 의해 판독된 상기 고유 식별 정보를 상기 사용자 단말기에 전송하고, 상기 고유 식별 정보에 대한 응답으로 상기 사용자 단말기로부터 상기 식물에 관한 재배 정보를 수신하는 무선 통신부; 및 상기 재배 정보를 상기 상태 정보와 비교하고, 상기 비교 결과에 기초하여 상기 식물의 생육에 필요한 정보를 알람으로 제공하는 제어부를 포함한다. 


◇스마트 디바이스를 이용한 화분관리 시스템 및 화분관리 방법(System for managing plant pot using smart device, and method thereof) 

2020 6 image10.png


출원번호/일자  1020160010867 (2016.01.28) 

등록번호/일자  1017465960000 (2017.06.07) 

본 발명은 스마트 디바이스를 이용한 화분관리 시스템 및 화분관리 방법에 관한 것이다. 본 발명은, 각 스마트 화분에 하나 씩 설치되어 상기 스마트 화분의 습도 값을 미리 설정된 주기에 따라 측정하는 적어도 하나 이상의  아두이노  기반 습도센서 모듈; 상기  아두이노  기반 습도센서 모듈로부터 근거리 무선통신을 통해 습도 값을 수신하여 수신된 습도 값과 매칭되는 색상을 출력하는 스마트 전구; 및 상기  아두이노  기반 습도센서 모듈로부터 근거리 무선통신을 통해 습도 값을 수신하여, 습도 값을 터치스크린으로 출력하며, 각 스마트 화분별로 미리 설정된 주기에 따라 수신된 각 습도 값을 일별 시간의 흐름을 메타 정보로 한 습도 변화 정보로 저장한 뒤, 습도 변화 정보, 그리고 습도 변화 정보의 일별 평균 값을 이용해 다이어리 UI 화면으로 출력하는 스마트 디바이스; 를  포함한다. 이에 의해, 아두이노  보드에  착탈식으로  부착된 습도센서를 이용해서 측정한 화분의 습도 값을 근거리 무선통신을 통하여 사용자의 스마트 디바이스와 스마트 전구로 전송함으로써, 전송된 습도의 값에 따라 관리 계획을 수립할 수 있는 효과를 제공한다. 

특허전략

◇현재 출원되어 있는 특허들은 온도, 습도, 재배토의 수분량 등을 센서로 인식하고 전자 태그를 통해 식물을 식별하여 재배 정보와 현재 상태를 비교하고 식물의 생육에 필요한 정보를 알람으로 전달하는 것과 센서로 습도를 인식하고 해당하는 색상을 출력하는 전구를 지니고 이를 터치스크린으로 출력하는 것 등이 있다. 하지만 우리의 과제와 같이 여러 개의 화분을 동시에 관리하고, 적정량의 물을 전원 공급 없이 일정 기간동안 공급하는 형태의 제품은 발견하지 못했다. 또한 우리 과제는 화분 하단에 물 감지 센서를 설치해 화분 하단까지 충분히 물이 젖었을 때 상단의 물 공급을 중단하도록 하는 시스템이 있다는 특징이 있다. 이에 따라 특정기간 동안 전원공급 없이 작동할 수 있으며, 물 공급량 또한 자동으로 조절된다는 점을 중점적으로 특허로 청구할 계획이다. 

관련 시장에 대한 분석

경쟁제품 조사 비교

내용

마케팅 전략

내용

개발과제의 기대효과

기술적 기대효과

내용

경제적 및 사회적 파급효과

내용

구성원 및 추진체계

내용

설계

설계사양

내용

개념설계안

내용

이론적 계산 및 시뮬레이션

내용

조립도

조립도

내용

조립순서

내용

부품도

내용

제어부 및 회로설계

내용

소프트웨어 설계

내용

자재소요서

내용

결과 및 평가

완료작품 소개

프로토타입 사진

내용

포스터

내용

특허출원번호 통지서

내용

개발사업비 내역서

내용

완료 작품의 평가

내용

향후평가

내용

부록

참고문헌 및 참고사이트

1) 시장조사전문기업  엠브레인  트렌드 모니터 [1]

 

2) 동아닷컴 [2]

3) G마켓 연령대별 반려식물 상품 구입 비율   [3]

4) '코로나 우울증' 국민 전반 '심각' 상황…강도높은 '심리 방역' 필요   [4]

5 ) 스마트팜  기술 및 시장동향 보고서 - 과학기술일자리진흥원

6 ) [기술 &시장 분석] 식물 재배기(plant grower)   [5]

7 ) 이제는 집에서 키운다…웰빙 바람 타고 커지는 ‘식물 재배기’ 시장   [6]

8 ) 2018 중소기업  전략기술로드맵  2019-2021  스마트팜   [7]

관련특허

◇사물 인터넷 기반 스마트 화분 및 그 관리 시스템(SMART FLOWERPOT BASED ON INTERNET OF THING AND MANAGEMENT SYSTEM FOR THE SAME)  

출원번호/일자 1020160024574 (2016.02.29)  

공개번호 10-2017-0101692  


◇스마트 디바이스를 이용한 화분관리 시스템 및 화분관리 방법(System for managing plant pot using smart device, and method thereof)  

출원번호/일자 1020160010867 (2016.01.28)  

등록번호/일자 1017465960000 (2017.06.07) 

소프트웨어 프로그램 소스

NODE_MCU

void loop() { 
  boolean  isEmpty ; 
  int moisture1=0; 
  int moisture2=0; 
  int moisture3=0; 
  int moisture4=0; 
  int  getNum =0; 
  int  waterT ; 
  int num=0; 
  String path= "/device_info "; 
//아두이노에서  받은 값을 특정 범위구간마다 분할  
  getNum =s.read (); 
  num=getNum /50; 
    switch(num){ 
      case(0): 
        moisture1=getNum%50; 
        moisture1=moisture1*2; 
        Firebase.setInt(firebaseData,path+"/TriggerField/plant_1",moisture1); 
        break; 
      case(1): 
        moisture2=getNum%50; 
        moisture2=moisture2*2; 
        Firebase.setInt(firebaseData,path+"/TriggerField/plant_2",moisture2); 
        break; 
      case(2): 
        moisture3=getNum%50; 
        moisture3=moisture3*2; 
        Firebase.setInt(firebaseData,path+"/TriggerField/plant_3",moisture3); 
        break; 
      case(3): 
       moisture4=getNum%50; 
       moisture4=moisture4*2; 
       Firebase.setInt(firebaseData,path+"/TriggerField/plant_4",moisture4); 
       break; 
      case(4): 
       //특정상황에대한  값, 물이부족하거나  물을 줬다는 기록을 서버에 남김  
        if(getNum ==250){ 
        Firebase.setString(firebaseData,"/id_list/a/water_level","Empty"); 
        } 
        else if(getNum ==210){ 
          Firebase.setString(firebaseData,path+"/TriggerField/plant_1_w","watering"); 
            delay(1000); 
            Firebase.setString(firebaseData,path+"/TriggerField/plant_1_w","normal"); 
        } 
        else if(getNum ==220){ 
         Firebase.setString(firebaseData,path+"/TriggerField/plant_2_w","watering"); 
            delay(1000); 
            Firebase.setString(firebaseData,path+"/TriggerField/plant_2_w","normal"); 
        } 
        else if(getNum ==230){ 
         Firebase.setString(firebaseData,path+"/TriggerField/plant_3_w","watering"); 
            delay(1000); 
            Firebase.setString(firebaseData,path+"/TriggerField/plant_3_w","normal"); 
        } 
        else if(getNum ==240){ 
          Firebase.setString(firebaseData,path+"/TriggerField/plant_4_w","watering"); 
            delay(1000); 
            Firebase.setString(firebaseData,path+"/TriggerField/plant_4_w","normal"); 
        } 
        else if(getNum ==245){ 
            Firebase.setString (firebaseData ,"/id_list /a/water_level","Not  Empty"); 
        } 
        break; 
        //서버에서 받은 값으로 물주는 시간을 다시한번 재정립. 
      Firebase.getInt (firebaseData ,"/id_list /a/wateringtime "); 
      waterT =firebaseData.intData (); 
      if(wateringT !=waterT ){ 
       s.write (waterT ); 
       wateringT =waterT ; 
      } 
      break; 
    } 
  delay(1000); 
} 

아두이노

void loop()
{
  Stime = 0;
/////////////// Sensor VCC Control ////////////
//digitalWrite (10, HIGH);
//////////////// Moisture Sense ///////////////
  moisture0 = analogRead (A0);
  moisture1 = analogRead (A1);
  moisture2 = analogRead (A2);
  moisture3 = analogRead (A3);
///////////// Water Flow Sense ////////////////
  water0 = analogRead (A8);
  water1 = analogRead (A9);
  water2 = analogRead (A10);
  water3 = analogRead (A11);
////////////// HIGH = water out ///////////////
  digitalWrite (2, LOW); // blue 
  digitalWrite (3, LOW);
  digitalWrite (4, LOW);
  digitalWrite (5, LOW); // yellow 
  // close solenoid valve at beginning 
  Stime =millis (); // water supply start time record 
  while ( moisture0 >=mcrit && water0 >wcrit ) {
      digitalWrite (2, HIGH); // Valve open 
      delay(2000);
      digitalWrite (7, LOW); // Motor on 
      water0 =analogRead (A8); // water sense 
      Etime =millis (); // water supply mid time record 
      interval =Etime -Stime ; // water supply time interval 
      if ( water0 <=wcrit ) { // water sensed 
        digitalWrite (7, HIGH); // Motor off 
        delay(2000);
        digitalWrite (2, LOW); // Valve close 
        waterEmpty = 0; // water not empty 
        s.write (210); //////752 
        delay(1000);
        s.write (245);
        break;
      } // finish watering after sensing water
      else if ( interval >= waitingTime ) { // water not sensed 
        digitalWrite (7, HIGH); // Motor off 
        delay(2000);
        digitalWrite (2, LOW); // Valve close 
        waterEmpty = 1; // water empty 
        s.write (250); //////752 
        break;
      } // stop the pump if  sonsor  doesn't change(no water left)
  }
  delay(1000);

  Stime =millis ();
  while ( moisture1 >= mcrit  && water1 > wcrit ) {
    Serial.println ("@#");
      digitalWrite (3, HIGH);
      delay(2000);
      digitalWrite (7, LOW);
      water1 = analogRead (A9);
      Etime  = millis ();
      interval = Etime  - Stime ;
      if ( water1 <= wcrit ) {
        digitalWrite (7, HIGH);
        delay(2000);
        digitalWrite (3, LOW);
        waterEmpty  = 0;
        s.write (220); //////752 
        delay(1000);
        s.write (245);
        break; 
      } 
      else if ( interval >= waitingTime ) {
        digitalWrite (7, HIGH);
        delay(2000);
        digitalWrite (3, LOW);
        waterEmpty  = 1;
        s.write (250); //////752 
        break;
      }
  } 
  delay(1000);
  
  Stime  = millis ();
  while ( moisture2 >= mcrit  && water2 > wcrit ) {
      digitalWrite (4, HIGH);
      delay(2000);
      digitalWrite (7, LOW);
      water2 = analogRead (A10);
      Etime  = millis ();
      interval = Etime  - Stime ;
      if ( water2 <= wcrit ) {
        digitalWrite (7, HIGH);
        delay(2000);
        digitalWrite (4, LOW);
        waterEmpty  = 0;
        s.write (230); //////752 
        break;
      }
      else if ( interval >= waitingTime ) {
        digitalWrite (7, HIGH);
        delay(2000);
        digitalWrite (4, LOW);
        waterEmpty = 1;
        s.write (250); //////752 
        break;
      }
      delay(1000);
  }

  Stime =millis ();
  while ( moisture3 >=mcrit && water3 > wcrit ) {
      digitalWrite (5, HIGH);
      digitalWrite (7, LOW);
      water3 =analogRead (A11);
      Etime =millis ();
      interval =Etime -Stime ;
      if ( water3 <=wcrit ) {
        digitalWrite (7, HIGH);
        digitalWrite (5, LOW);
        waterEmpty = 0;
        s.write (240); //////752 
        break;
      }
      else if ( interval >=waitingTime ) {
        digitalWrite (7, HIGH);
        digitalWrite (5, LOW);
        waterEmpty = 1;
        s.write (250); //////752 
        break; 
      }
      delay(1000);
  }
  
  delay(500);
  Serial.print ("isEmpty : ");
  Serial.print (waterEmpty );
  Serial.print (moisture0);
  Serial.print (moisture1);
  Serial.print (moisture2);
  Serial.print (moisture3);
  Serial.print (water0);
  Serial.print (water1);
  Serial.print (water2);
  Serial.print (water3);

  moisture0 =analogRead (A0);
  moisture1 =analogRead (A1);
  moisture2 =analogRead (A2);
  moisture3 =analogRead (A3);

Serial.println (moisture0);
Serial.println (moisture1);
Serial.println (moisture2);
Serial.println (moisture3);

Serial.println (water0);
Serial.println (water1);

  message1 = (1023 - moisture0)/2; // change the result of sensor into percentage of moisture 
 message1 = message1 / 10;
  s.write (message1); // send the percentage to  NodeMCU 
  delay(1000);
  Serial.println (message1);
  message2 = (1023 - moisture1)/2; //////124397852 
  message2 = message2 / 10 + 50;
 s.write (message2); ///8773 
  delay(1000);
  Serial.println (message2);

  message3 = (1023 - moisture2)/2; //////124397852 
  message3 = message3 / 10 + 100;
  s.write (message3); ///8773 
  delay(1000);
  Serial.println (message3);
  message4 = (1023 - moisture3)/2; //////124397852 
  message4 = message4 / 10 + 150;
  s.write (message4); ///8773 
  delay(1000);
  Serial.println (message4);

  digitalWrite (7, HIGH);
  delay(1000);
}

위키페이지 작성을 위한 문법 가이드

표는 위키 문법에 맞추어 작성할 수 있습니다. Mediawiki table generator를 이용하면 손쉽게 표를 작성하여 위키 문법으로 export할 수 있습니다. 아래는 Mediawiki table generator를 이용하여 작성한 표의 예시입니다. 위 웹페이지에서는 직접 CSV파일을 가져와서 바로 표를 만들 수도 있습니다. 직접 표를 문법에 맞추어 편집하고자 하시는 분들은 wiki 표 문법을 참조하면 도움이 됩니다.


구분 실험 1 실험 2 실험 3 실험 4
결과 1 1.1 2.1 3.1 4.1
결과 2 1.2 2.3 4.5 6.4
결과 3 5.1 5.4 2.7 8.5
  • 수식

원래 위키백과에서는 math 태그를 이용하여 바로 수식을 작성할 수 있지만 capstone wiki에서 그 기능은 지원되지 않는것으로 확인됩니다. 따라서 수식을 올리기 위해서는 수식을 사진으로 변환한 후 올려야 합니다. LATEX 수식 생성기 를 이용하면 tex 문법을 이용하여 수식을 작성하여 파일로 저장할 수 있습니다.

svm object function

위 수식은 support vector machine의 비용 함수를 표현한 예시입니다. tex 문법은 tex 수식 문법 에서 확인할 수 있습니다.

  • 사진

사진은 "도구-파일 올리기" 탭에서 파일을 올린 후 아래와 같이 올릴 수 있습니다. 파일명은 파일 올리기에서 정한 "파일의 새 이름"을 사용하면 됩니다.

Mnist 데이터 예제입니다.


  • 코드

코드는 syntaxhighlight 기능을 이용하여 아래와 같이 표현할 수 있습니다.

#include <iostream>
int main ( int argc,  char **argv ) {
    std::cout << "Hello World!";
    return 0;
}

이에 대한 자세한 내용은 Mediawiki syntaxhighlight를 참고하면 도움이 됩니다.