제조공정
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
![]() |
| |||
![]() |
|
이것은 ThingSpeak 플랫폼을 사용하여 온라인에 공개적으로 데이터를 게시할 수 있는 Wi-Fi 연결이 가능한 Arduino 기반 미니 기상 관측소의 1세대입니다.
기상 관측소는 다양한 센서를 사용하여 날씨 및 환경과 관련된 다음 데이터를 수집합니다.
<울>목표는 개방형 하드웨어를 사용하여 작고 간단한 기상 관측소를 만드는 것입니다.
시작하고 즐기세요!
전자 부품
이 프로젝트를 조립하는 데 특정 도구가 필요하지 않습니다. 모든 구성 요소는 즐겨 찾는 전자 상거래 상점에서 온라인으로 찾을 수 있습니다.
회로는 USB 포트(컴퓨터 또는 일반 전화 충전기에 연결됨)에 의해 전원이 공급되지만 Arduino 전원 잭에 연결된 외부 DC 전원 공급 장치 또는 배터리를 추가할 수도 있습니다.
기상 관측소 회로의 경우는 이 프로젝트의 범위를 벗어납니다.
부품 연결
회로도에 따라 모든 구성 요소를 연결합니다. 각 센서를 브레드보드에 연결하려면 점퍼 와이어가 필요합니다. protoshield(보다 컴팩트한 회로용), 일반 브레드보드를 사용하거나 Arduino 실드를 소유한 디자인을 사용할 수 있습니다.
USB 케이블을 Arduino Uno 보드에 연결하고 다음 단계로 진행합니다.
코드
최신 Arduino IDE를 이미 설치했다고 가정하고 다음 라이브러리를 다운로드하여 설치합니다.
<울>아두이노 IDE에 라이브러리를 추가하는 방법은 다음 아두이노 가이드를 확인하세요.
Arduino 코드 다운로드(weatherBox.ino
) 코드 섹션에 포함됩니다. XXXXX
바꾸기 WiFi 라우터 SSID별, YYYYY
라우터 비밀번호 및 ZZZZZ
ThingSpeak 채널에서 API 키를 작성합니다(다음 단계에서 얻는 방법 참조).
Arduino 보드를 컴퓨터 USB 포트에 연결하고 코드를 업로드합니다.
ThingSpeak 구성
기상 관측소의 이름과 설명을 지정합니다. 다음 채널을 할당하고 채널을 저장하십시오.
<울>API 쓰기 키를 복사합니다. Arduino 코드의 이전 단계에서 사용됩니다. 스테이션이 켜지면 센서 값이 채널에 주기적으로 업로드됩니다. 각 변수의 공개 및 비공개 시각화를 구성할 수 있습니다.
공개 채널의 예:https://thingspeak.com/channels/35540
Android 앱 사용
모든 브라우저에서 기상 관측소 데이터를 시각화할 수 있습니다. 하지만 Android 기반 스마트폰에서도 확인하고 원할 때마다 시각화할 수 있습니다.
<울>즐거운 시간 보내세요!
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">#include#include #include #include #include #include #define SSID "XXXXX " //XXXXX를 라우터 SSID로 교체#define PASS "YYYYY" // 라우터 비밀번호로 YYYYY 교체#define IP "184.106.153.149" // thingspeak.com IP#define DHT22_PIN 2String GET ="GET /update?key=ZZZZZ&field1="; // ZZZZZ를 ThingSpeak 채널로 교체 write keySoftwareSerial monitor(10, 11); //ESP8266 모듈에 대한 직렬 통신(RX, TX)dht DHT;Adafruit_BMP085_Unified bmp =Adafruit_BMP085_Unified(10085);//Variablesint luminancePin =A0;int uvPin =A1;int DustPin =8;unsigned long duration;unsigned long sampletime_ms =30000;unsigned long delay_time =60000;unsigned long lowpulseoccupancy =0;float ratio =0;float 농도 =0;//setupvoid setup(){ //시리얼 통신 시작 Serial.begin(9600); 모니터.시작(9600); Serial.println("초기화 중..."); //아두이노 핀 설정 pinMode(dustPin, INPUT); //압력 센서 초기화 Serial.println("BMP085 압력 센서 감지 중..."); if(!bmp.begin()) { Serial.println("BMP085 센서가 감지되지 않았습니다. 연결 또는 I2C ADDR을 확인하십시오!"); 동안(1); } Serial.println("BMP085가 감지되었습니다!"); //와이파이 모듈과의 통신 monitor.flush(); 모니터.println("AT"); 지연(2000); if(monitor.find("OK")){ Serial.println("ESP8266 모듈과의 통신:OK"); } else { Serial.println("ESP8266 모듈 오류"); } //와이파이 라우터 연결 connectWiFi(); Serial.print("샘플링("); Serial.print(sampletime_ms/1000); Serial.println("s)..."); //타이머 초기화 시작 시간 =millis();}void loop(){ //먼지 입자 측정 지속 시간 =pulseIn(dustPin, LOW); 낮은 펄스 점유 =낮은 펄스 점유 + 지속 시간; //30초 cicle if ((millis() - starttime)>=sampletime_ms) { ratio =lowpulseoccupancy/(sampletime_ms*10.0); // 백분율(de 0 a 100%) 농도 =1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // 데이터시트에서 lowpulseoccupancy =0; //다른 센서 읽기 char buffer[10]; //조도 센서 float luminance =analogRead(luminancePin); //UV 센서 float uv =analogRead(uvPin); uv =uv * 0.0049; //값을 볼트로 변환 uv =uv * 307; //mW/m²로 변환 uv =uv/200; //UV 지수 계산 //온도 및 습도 int chk =DHT.read22(DHT22_PIN); 플로트 습도 =DHT.humidity; 플로트 온도 =DHT.온도; //압력 및 온도1 sensor_event_t 이벤트; bmp.getEvent(&event); 플로트 압력 =0; 플로트 온도1 =0; if (event.pressure) { 압력 =event.pressure; bmp.getTemperature(&온도1); } //센서 값을 문자열로 변환 String luminanceStr =dtostrf(luminance, 4, 1, buffer); luminanceStr.replace(" ",""); 문자열 uvStr =dtostrf(uv, 4, 1, 버퍼); uvStr.replace(" ",""); 문자열 습도Str =dtostrf(습도, 4, 1, 버퍼); 습도Str.replace(" ",""); 문자열 temperatureStr =dtostrf(온도, 4, 1, 버퍼); temperatureStr.replace(" ",""); 문자열 DustStr =dtostrf(농도, 4, 1, 버퍼); DustStr.replace(" ",""); 문자열 pressureStr =dtostrf(압력, 4, 1, 버퍼); 압력Str.replace(" ",""); 문자열 temperature1Str =dtostrf(온도1, 4, 1, 버퍼); 온도1Str.replace(" ",""); //ThingSpeak에 데이터 보내기 updateSensors(luminanceStr, 습도Str, temperatureStr, uvStr, DustStr, pressureStr, temperature1Str); //다음 샘플링 주기를 기다립니다. Serial.print("Wait "); Serial.print(delay_time/1000); Serial.println("다음 샘플링을 위해"); 직렬.println(); 지연(delay_time); //새 사이클 초기화 Serial.println(); Serial.print("샘플링("); Serial.print(sampletime_ms/1000); Serial.println("s)..."); 시작 시간 =밀리초(); }}//ThingSpeakvoid에 데이터 보내기 updateSensors(String luminanceStr, String 습도Str, String temperatureStr, String uvStr, String DustStr, String pressureStr, String temperature1Str) { String cmd ="AT+CIPSTART=\"TCP\",\""; cmd +=IP, cmd +="\",80"; 모니터.println(cmd); 지연(2000); cmd =가져오기; cmd +=luminanceStr; cmd +="&필드2="; cmd +=습도Str; cmd +="&필드3="; cmd +=온도Str; cmd +="&필드4="; cmd +=uvStr; cmd +="&필드5="; cmd +=먼지Str; cmd +="&필드6="; cmd +=압력Str; cmd +="&필드7="; cmd +=온도1Str; cmd +="\r\n"; 지연(1000); int strsize =cmd.length(); monitor.println("AT+CIPSEND=" + 문자열(strsize)); 지연(2000); 모니터.인쇄(cmd); if(monitor.find("OK")){ Serial.println("전송 성공"); }else{ Serial.println("전송 실패!"); }}무효 sendDebug(문자열 cmd){ Serial.print("SEND:"); 직렬.println(cmd); monitor.println(cmd);} 부울 connectWiFi(){ Serial.println("Wi-Fi 연결 중..."); 문자열 cmd ="AT+CWMODE=1"; 모니터.println(cmd); 지연(2000); 모니터.플러시(); // 버퍼 지우기 cmd="AT+CWJAP=\""; cmd+=SSID; cmd+="\",\""; cmd+=PASS; cmd+="\""; 모니터.println(cmd); 지연(5000); if(monitor.find("OK")){ Serial.println("연결 성공!"); true를 반환합니다. }else{ Serial.println("연결 실패!"); 거짓을 반환합니다. } 직렬.println();}
제조공정
구성품 및 소모품 Arduino UNO × 1 DHT11 온도 및 습도 센서(3핀) × 1 점퍼 와이어(일반) × 3 브레드보드(일반) × 1 Arduino USB 2.0 케이블 × 1 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보 이 프로젝트에서는 KY-015 Arduino DHT11 온도/습도 센서를 사용하여 Arduino IDE 직렬 모니터에 표시합니다. 이 프로젝트는
구성품 및 소모품 Arduino UNO × 1 Microchip Technology ATtiny85 × 1 전해 디커플링 커패시터 - 10uF/25V × 1 점퍼 와이어 M/M × 1 이 프로젝트 정보 저는 다른 위치에서 여러 센서 데이터를 읽어야 하는 프로젝트를 진행 중입니다. 여기에는 몇 개의 PWM 핀만 필요하므로 여러 Arduino Uno를 사용하는 것은 비용이 많이 들고 불필요합니다. 그래서 Arduino Uno 개발 보드 대신 A