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

아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기

부품 및 소모품

부품수량
Adafruit BMP1801
DHT11 온습도 센서 (4핀)1
LDR (조도 의존 저항)1
Espressif ESP8266 ESP-011
아두이노 Nano R31
저항 4.75kΩ1
저항 51kΩ1
LM2596 DC-DC 벅 컨버터 스텝다운 전원 모듈1
DC 잭1
스위치1
12V-2A 벽면 어댑터1
PCB1
수 헤더 40핀 1열 (0.1")1
암 헤더 8핀 1열 (0.1")5
플라스틱 박스1

필요한 도구 및 장비

앱 및 온라인 서비스

프로젝트 소개

소개: 개인 기상 관측소 만들기

방에 앉아 있는데 덥거나 춥게 느껴져서 방의 온도나 습도가 궁금했던 적이 있으신가요? 저도 그런 경험이 있어 개인 기상 관측소 프로젝트를 시작하게 되었습니다.

이 장치는 방의 온도, 습도, 기압, 조도를 모니터링하여 thingspeak.com의 비공개 채널로 업로드합니다.

1단계: 빠른 영상

5분 안에 모든 것을 요약한 짧은 영상입니다. 유튜브에서 보기

2단계: 개인 기상 관측소에 필요한 전자 부품

설명: DHT11로 습도, BMP180으로 온도와 기압, LDR로 조도 강도를 대략적으로 측정합니다. 아두이노 Nano가 이 센서들로부터 데이터를 수집하여 ESP8266으로 전송하고, ESP8266이 thingspeak.com의 비공개 채널로 업로드합니다. 아두이노 Nano는 12V-2A 벽면 어댑터로 전원을 공급하고, 센서들과 ESP8266은 LM2596 기반 벅 컨버터에서 강압된 전압을 공급받습니다.

부품 목록:

아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기

3단계: 개인 기상 관측소에 필요한 도구 및 추가 물품

설명: 와이어 스트리퍼로 전선 피복 벗기기, 줄로 인클로저 절단/구멍 매끄럽게 다듬기, 글루 건으로 인클로저 내부에 부품 고정, 드라이버로 인클로저 뚜껑 닫기, 납땜 인두와 납으로 범용 기판(GCB)에 회로 조립. 4x4x2 인치 플라스틱 박스가 인클로저 역할을 합니다. GCB에서 제대로 조립하기 위해 수/암 버그 스트립과 암 커넥터도 필요합니다.

도구 목록:

추가 물품 목록:

아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기

4단계: 소프트웨어 요구사항

센서 데이터 값을 보려면 thingspeak.com의 비공개 채널이 필요합니다. 아두이노 Nano용 코드를 작성하기 위해 아두이노 IDE도 필요합니다 (PC/노트북과 인터넷 접속 가능한 와이파이 공유기가 있다고 가정).

arduino.cc에서 최신 아두이노 IDE를 다운로드할 수 있습니다. 이제 thingspeak.com에서 비공개 채널을 만들어 보겠습니다.

5단계: Thingspeak.com에서 비공개 채널 만들기

  1. 웹 브라우저에서 thingspeak.com 접속, 우측 상단 'Sign Up' 탭 클릭
  2. 세부 정보 입력 후 'Create account' 클릭
  3. 'New Channel' 탭 클릭
  4. 채널 세부 정보 입력하고 4개 필드 활성화 (센서 값 4개 전송), 아래로 스크롤하여 'Save Channel' 클릭
  5. 'API Keys' 탭 클릭하고 'Write API Key' 메모
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기

이제 여러분의 비공개 ThingSpeak 채널이 준비되었습니다.

6단계: 개인 기상 관측소 회로도

개인 기상 관측소 회로도 이미지와 프리칭 파일을 첨부합니다. 연결은 매우 간단합니다.

아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기

이 회로를 범용 기판에 조립해 보겠습니다.

7단계: 범용 기판(GCB)에 회로 조립

3단계의 하드웨어 도구와 추가 물품을 사용합니다.

아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기

8단계: 코드

개인 기상 관측소 코드는 꽤 간단합니다. 이식성을 위해 주석을 잘 달았습니다. 코드를 업로드하기 전에 다음 사항을 확인하세요.

코드와 사용한 라이브러리 다운로드: GitHub - Personal Weather Station

9단계: 인클로저 준비

4x4x2 인치 박스에 다양한 모양과 크기의 구멍을 뚫어야 합니다. 인클로저 선호하는 벽면에 DC 잭과 스위치 구멍, 뚜껑에 센서 구멍을 만듭니다.

아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기

뜨거운 칼로 플라스틱을 자르고, 줄로 구멍을 매끄럽게 다듬습니다.

아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기
아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기

10단계: 뚜껑 닫기

조립된 GCB를 인클로저 안에 넣습니다. 스위치와 DC 잭을 벽면 구멍에, 센서를 뚜껑 구멍에 배치합니다. 위치를 확정한 후 글루 건으로 고정하고, 드라이버로 뚜껑을 닫습니다.

이제 여러분의 개인 기상 관측소가 완성되었습니다! 전원을 켜고 스마트폰/PC/노트북/태블릿에서 ThingSpeak 비공개 채널을 통해 전 세계 어디서든 방의 온도, 습도, 기압, 조도를 확인하세요.

이 프로젝트는 여기까지입니다. 궁금한 점은 댓글로 남겨주세요. 읽어주셔서 감사합니다.

코드

코드 (아두이노)
#include <SoftwareSerial.h>
#include <Wire.h>
#include <dht.h>
#include <Adafruit_BMP085.h>

#define DEBUG 0 // 디버깅을 위해 시리얼 모니터 사용 시 1로 변경
#define dht_pin A0 // DHT 센서용 A0 핀 정의
#define lightSensor A1 // LDR 전압 분할기용 입력 핀 A1 정의

dht DHT;
Adafruit_BMP085 bmp;
SoftwareSerial esp8266Module(10, 11); // RX, TX

String network = "----"; // 액세스 포인트 SSID
String password = "-------------"; // 와이파이 비밀번호
#define IP "184.106.153.149" // thingspeak.com IP 주소
String GET = "GET /update?key=----------------"; // 채널 키로 교체

void setup() {
  if(DEBUG){
    Serial.begin(9600);
  }
  esp8266Module.begin(9600);
  if (!bmp.begin()) {
    if(DEBUG){
      Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    }
    while (1) {}
  }
  delay(2000);
}

void loop() {
  setupEsp8266();
  DHT.read11(dht_pin);
  double humi = DHT.humidity;
  double bmp_temp = bmp.readTemperature();
  double bmp_pressure = bmp.readPressure();
  int lightIntensity = analogRead(lightSensor);
  updateTemp(String(bmp_temp), String(lightIntensity), String(bmp_pressure), String(humi));
  delay(30000);
}

// ESP8266 설정, 스테이션 모드로 전환 및 와이파이 AP 연결
void setupEsp8266() {
  if(DEBUG){ Serial.println("Reseting esp8266"); }
  esp8266Module.flush();
  esp8266Module.println(F("AT+RST"));
  delay(7000);
  if (esp8266Module.find("OK")) {
    if(DEBUG){ Serial.println("Found OK"); Serial.println("Changing espmode"); }
    esp8266Module.flush();
    changingMode();
    delay(5000);
    esp8266Module.flush();
    connectToWiFi();
  } else {
    if(DEBUG){ Serial.println("OK not found"); }
  }
}

// ESP8266을 스테이션 모드로 설정
bool changingMode() {
  esp8266Module.println(F("AT+CWMODE=1"));
  if (esp8266Module.find("OK")) {
    if(DEBUG){ Serial.println("Mode changed"); }
    return true;
  } else if(esp8266Module.find("NO CHANGE")){
    if(DEBUG){ Serial.println("Already in mode 1"); }
    return true;
  } else {
    if(DEBUG){ Serial.println("Error while changing mode"); }
    return false;
  }
}

// ESP8266을 와이파이 액세스 포인트에 연결
bool connectToWiFi() {
  if(DEBUG){ Serial.println("inside connectToWiFi"); }
  String cmd = F("AT+CWJAP=\"");
  cmd += network;
  cmd += F("\",\"");
  cmd += password;
  cmd += F("\"");
  esp8266Module.println(cmd);
  delay(15000);
  if (esp8266Module.find("OK")) {
    if(DEBUG){ Serial.println("Connected to Access Point"); }
    return true;
  } else {
    if(DEBUG){ Serial.println("Could not connect to Access Point"); }
    return false;
  }
}

// 센서 데이터를 thingspeak.com으로 전송
void updateTemp(String voltage1, String voltage2, String voltage3, String voltage4) {
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";
  esp8266Module.println(cmd);
  delay(5000);
  if(esp8266Module.find("Error")){
    if(DEBUG){ Serial.println("ERROR while SENDING"); }
    return;
  }
  cmd = GET + "&field1=" + voltage1 + "&field2=" + voltage2 + "&field3=" + voltage3 + "&field4=" + voltage4 + "\r\n";
  esp8266Module.print("AT+CIPSEND=");
  esp8266Module.println(cmd.length());
  delay(15000);
  if(esp8266Module.find(">")) {
    esp8266Module.print(cmd);
    if(DEBUG){ Serial.println("Data sent"); }
  } else {
    esp8266Module.println("AT+CIPCLOSE");
    if(DEBUG){ Serial.println("Connection closed"); }
  }
}
개인 기상 관측소 라이브러리 및 코드

Readme 확인: https://github.com/jayraj4021/Personal-Weather-Station-14

회로도

아두이노, ESP8266, ThingSpeak로 신뢰할 수 있는 개인 기상 관측소 만들기

schematic.fzz

제조공정

  1. 라즈베리 파이 태양광 기상 관측소 DIY 제작
  2. 라즈베리 파이 2와 ADS-WS1로 야외 기상 관측소 구축하기
  3. 라즈베리 파이 기상 관측소 만들기: 매일 이메일로 날씨 데이터 전송
  4. 기상 관측소를 CWOP와 통합하기: 실용 가이드
  5. 날씨 모니터 – 라즈베리파이 DIY 기상 관측소 (드롭박스 업로드)
  6. 고급 기상 관측소 v2.0: 실시간 온도, 기압, 습도, 고도 모니터링
  7. 스마트 블라인드: 아두이노와 태양광으로 자동 조명 제어
  8. 아두이노 MKR1000으로 DHT11 센서 데이터를 ThingSpeak에 업로드하기
  9. 1만 원대 휴대용 아두이노 날씨 스테이션 – 나노, DHT22, BMP180, LCD로 직접 제작
  10. eDOT: 내장 IR 리모컨·자동 밝기 조절 갖춘 정밀 아두이노 시계·기상 관측소