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

Arduino UNO 미니 기상 관측소

구성품 및 소모품

Arduino UNO
× 1
Espressif ESP8266 ESP-01
× 1
Arduino Proto Shield
일반 브레드보드
× 1
DHT22 온도 센서
× 1
씨드 그로브 - 광 센서
× 1
씨드 그로브 - UV 센서
× 1
씨드 그로브 - 기압계 센서
× 1
씨드 그로브 - 먼지 센서
× 1
저항 1k 옴
× 2
저항 10k 옴
× 1
저항 4.75k 옴
× 1
점퍼 와이어(일반)
× 1

앱 및 온라인 서비스

Arduino IDE
ThingSpeak API

이 프로젝트 정보

이것은 ThingSpeak 플랫폼을 사용하여 온라인에 공개적으로 데이터를 게시할 수 있는 Wi-Fi 연결이 가능한 Arduino 기반 미니 기상 관측소의 1세대입니다.

기상 관측소는 다양한 센서를 사용하여 날씨 및 환경과 관련된 다음 데이터를 수집합니다.

<울>
  • 온도
  • <울>
  • 습도
  • <울>
  • 기압
  • <울>
  • 조도
  • <울>
  • 자외선 지수
  • <울>
  • 먼지 농도
  • 목표는 개방형 하드웨어를 사용하여 작고 간단한 기상 관측소를 만드는 것입니다.

    시작하고 즐기세요!

    전자 부품

    이 프로젝트를 조립하는 데 특정 도구가 필요하지 않습니다. 모든 구성 요소는 즐겨 찾는 전자 상거래 상점에서 온라인으로 찾을 수 있습니다.

    회로는 USB 포트(컴퓨터 또는 일반 전화 충전기에 연결됨)에 의해 전원이 공급되지만 Arduino 전원 잭에 연결된 외부 DC 전원 공급 장치 또는 배터리를 추가할 수도 있습니다.

    기상 관측소 회로의 경우는 이 프로젝트의 범위를 벗어납니다.

    부품 연결

    회로도에 따라 모든 구성 요소를 연결합니다. 각 센서를 브레드보드에 연결하려면 점퍼 와이어가 필요합니다. protoshield(보다 컴팩트한 회로용), 일반 브레드보드를 ​​사용하거나 Arduino 실드를 소유한 디자인을 사용할 수 있습니다.

    USB 케이블을 Arduino Uno 보드에 연결하고 다음 단계로 진행합니다.

    코드

    최신 Arduino IDE를 이미 설치했다고 가정하고 다음 라이브러리를 다운로드하여 설치합니다.

    <울>
  • DHT22 라이브러리
  • <울>
  • Adafruit BMP085 라이브러리
  • 아두이노 IDE에 라이브러리를 추가하는 방법은 다음 아두이노 가이드를 확인하세요.

    Arduino 코드 다운로드(weatherBox.ino ) 코드 섹션에 포함됩니다. XXXXX 바꾸기 WiFi 라우터 SSID별, YYYYY 라우터 비밀번호 및 ZZZZZ ThingSpeak 채널에서 API 키를 작성합니다(다음 단계에서 얻는 방법 참조).

    Arduino 보드를 컴퓨터 USB 포트에 연결하고 코드를 업로드합니다.

    ThingSpeak 구성

    <울>
  • ThingSpeak 계정 만들기
  • <울>
  • 새 채널 만들기
  • 기상 관측소의 이름과 설명을 지정합니다. 다음 채널을 할당하고 채널을 저장하십시오.

    <울>
  • 채널 1 =조명
  • <울>
  • 채널 2 =습도
  • <울>
  • 채널 3 =온도(DHT22에서)
  • <울>
  • 채널 4 =UV 지수
  • <울>
  • 채널 5 =먼지 농도
  • <울>
  • 채널 6 =압력
  • <울>
  • 채널 7 =온도(BMP085에서)
  • API 쓰기 키를 복사합니다. Arduino 코드의 이전 단계에서 사용됩니다. 스테이션이 켜지면 센서 값이 채널에 주기적으로 업로드됩니다. 각 변수의 공개 및 비공개 시각화를 구성할 수 있습니다.

    공개 채널의 예:https://thingspeak.com/channels/35540

    Android 앱 사용

    모든 브라우저에서 기상 관측소 데이터를 시각화할 수 있습니다. 하지만 Android 기반 스마트폰에서도 확인하고 원할 때마다 시각화할 수 있습니다.

    <울>
  • Android 기기의 Google Play 스토어에서 ThingsView 앱 다운로드 및 설치
  • <울>
  • 앱에서 채널 ID 번호를 입력하고 추가를 클릭합니다. ThingSpeak 채널 구성에서 ID를 찾을 수 있습니다.
  • <울>
  • 각 변수의 현재 값이 그래프로 표시됩니다.
  • 즐거운 시간 보내세요!

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • weatherBox.ino
  • weatherBox.ino아두이노
    #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();}
    깃허브
    https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-library
    깃허브
    https://github.com/adafruit/Adafruit-BMP085-Libraryhttps://github.com/adafruit/Adafruit-BMP085-Library

    제조공정

    1. 라즈베리 파이 기상 관측소
    2. Arduino Uno를 사용한 인간 감지 로봇 시스템
    3. K30 센서로 CO2 모니터링
    4. 키는 얼마입니까?
    5. Arduino Uno WiFi를 사용하는 WebServerBlink
    6. 간단한 UNO 계산기
    7. Arduino 클라우드 센서 타워
    8. 시력의 지속성
    9. 현지 기상 관측소
    10. 건강 스테이션 모니터링