관엽 식물의 자동 급수기를 만들자! ! (ESP-WROOM-02) ~ 그 중 1 ~

1. 소개



이번에는 ESP-WROOM-02개발 보드 의 자동 물 공급기를 만들어 본다.

※펌프 이외의 곳은 넷으로 많이 있으므로 가볍게 설명하고 있습니다!

물을 사용하므로 물에 잠기지 않도록주의하십시오.

[보충]



트위터 시작했습니다. 따라주세요.

※※※ 평소에는 경마 예상 시바 를 운용하고 있습니다.
연대적 중률 : 약 86%
회수율 : 약 136%

ESP-WROOM-02를 사용한 이유



Wifi 경유로의 데이터의 로깅이나 Twitter 제휴 등 향후의 확장을 생각해 ESP-WROOM-02로 해 보았습니다.

완성 이미지



Youtube 동영상은 이쪽



2. 재료 준비



준비한 것(총액으로 5,000엔 이내)


이름
구매 장소


ESPr® Developer(ESP-WROOM-02 개발 보드)
센고쿠 덴쇼 (아키하바라)에서 구입

Grove - 수분 센서
센고쿠 덴쇼 (아키하바라)에서 구입

트랜지스터 (2SC1815GR)
센고쿠 덴쇼 (아키하바라)에서 구입

브레드보드
센고쿠 덴쇼 (아키하바라)에서 구입

브레드보드용 점프 와이어
센고쿠 덴쇼 (아키하바라)에서 구입

미니 에어 펌프 모터(6V)
아마존에서 구매

플라스틱 용기(수통)
다이소에서 구입

비닐 호스
도큐 핸즈에서 구입


그 외에 납땜, 드릴, 접착제, 접착제 총, USB 케이블 등의 도구를 준비.

3. 회로도



간단하게 이번 회로도입니다.
ESP-WROOM-02에서 Analog를 읽으려면 TOUT 핀을 사용하는 것 같습니다.



4. 브레드 보드에서 시도





여기서 토양 습도 센서로부터 오는 데이터를 시리얼 모니터로 확인하면, 습도가 높은 상태를 1023으로 낮으면 0이 되어 있었습니다.

우선 여기까지의 프로그램.
#include <SPI.h>

#define ANALOG_PIN     A0 
#define MOTOR_PIN 12

void setup() {
  Serial.begin(115200);  
  pinMode(MOTOR_PIN, OUTPUT);
}

void loop() {
  int val = analogRead(ANALOG_PIN);
  int per = (int) map(val, 0, 1023, 0, 100);

  String message = "土壌湿度 : " + String(per) + "%";
  Serial.println(message)
  if (val < 200) {
    digitalWrite(MOTOR_PIN, HIGH); 
  } else {
    digitalWrite(MOTOR_PIN, LOW);    
  }
  delay(1000);   
}


12번의 Pin에 LED등 디버그해 주면 확인할 수 있다고 생각합니다만, 습도가 낮아지면 LED가 점등한다.

5. 펌프 만들기



물을 주는 펌프를 만듭니다.

①드릴과 용기를 준비(페트병 등으로 OK)





②뚜껑에 2개의 구멍을 뚫고 비닐호스를 통과시킨다





③【중요】뚜껑의 밀폐도를 높인다



뚜껑을 통과한 호스에 틈이 없어 공기가 새지 않도록 합니다.
※※ 제대로 하지 않으면 움직이지 않습니다.



④하나는 에어 펌프 모터에 다른 하나는 식목에



사진의 예라면 오렌지 호스를 모터에 연결합니다.
핑크 호스를 식물에 연결합니다.



6. 막상 실험! !



Youtube 동영상은 이쪽


나름대로 움직였습니다. 앞으로 운용하면서 개선하겠습니다.

7. 약간 기능 추가



모처럼의 ESP-WROOM-02이므로 Twitter에 데이터를 업로드해 보겠습니다.

[계정]
htps : // 라고 해서 r. 코 m / 아우토와 테린 g
#include <SPI.h>
#include <ESP8266WiFi.h>

#define ANALOG_PIN     A0 
#define MOTOR_PIN 12

const char* ssid = "*******************";
const char* password = "*******************";

// StewGate U を使う
const char* host = "stewgate-u.appspot.com";
const char* token = "*******************";  


void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  pinMode(MOTOR_PIN, OUTPUT);
}

int tweetTime = 0;
void loop() {
  int val = analogRead(ANALOG_PIN);

  if (tweetTime == (600 * 6)) {
    tweetTime = 0;
  } else if(tweetTime == 0) {
    int per = (int) map(val, 0, 1023, 0, 100);
    String message = "土壌湿度 : " + String(per) + "%";
    tweet(message);
  }
  if (val < 200) {
    digitalWrite(MOTOR_PIN, HIGH); 
  } else {
    digitalWrite(MOTOR_PIN, LOW);    
  }
  delay(1000);   
  tweetTime++;
}

void tweet(String msg) {
  WiFiClient client;
  const int httpPort = 80;

  if(!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  client.println("POST /api/post/ HTTP/1.0");
  client.print("Host: ");
  client.println(host);

  int msgLength = 40;
  msgLength += msg.length();
  client.print("Content-length:");
  client.println(msgLength);
  client.println("");

  client.print("_t=");
  client.print(token);
  client.print("&msg=");
  client.println(msg);
  delay(10);

  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
}


8.사이고에게



자택의 환경에서 아직도 여러가지 시험하고 싶은 일이 있으므로, 더 여러가지 것을 만들고 싶습니다.

트위터 시작했습니다. 따라주세요.

좋은 웹페이지 즐겨찾기