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

$10 휴대용 Arduino 기상 관측소(AWS)

구성품 및 소모품

Arduino Nano R3
× 1
DHT22 온도 센서
× 1
bmp180
× 1
Adafruit Standard LCD - 파란색 바탕에 16x2 흰색
× 1

필요한 도구 및 기계

납땜 인두(일반)

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

최근에 우리 대학에서 소규모 과학 전시회를 가졌습니다. 그래서 선생님께서 대학에서 어린 학생들에게 전자공학을 가르치는 프로젝트를 발표해 달라는 요청을 받았으므로 기본적으로 이틀 동안 무언가를 만들 수 있었습니다.

이곳의 기후 조건은 매우 다양하고 최근에는 온도가 섭씨 34-40도 정도입니다. 그래서 기상 관측소를 만들기로 했습니다.

기상 관측소는 무엇을 합니까?

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

와 같은 센서 <울>
  • 바람
  • 습도
  • 온도
  • 압력
  • 고도
  • 목표는 휴대용 기상 관측소를 만드는 것입니다.

    갖추어야 할 기능

    <울>
  • 온도
  • 습도
  • 압력
  • 고도
  • 1단계:재료:재료 구매 시기

    여기 프로젝트에 필요한 것이 있습니다.

    실제로 My UNO에서 프로젝트를 시작했지만 컴팩트 솔루션으로 전환하기로 결정했습니다.

    나는 그 순간 나노를 가지고 있었기 때문에 함께 가야 했고 마이크로가 가장 작기 때문에 마이크로를 사용하고 싶습니다.

    어쨌든 그런 것들을 떠나서 예산과 부품에 대해 이야기하는 것이 목록입니다.

    <울>
  • DHT22 온도 및 습도 센서 -> $3.00
  • BMP180 압력 센서(BMP280이 더 저렴하지만 내가 사는 지역에서는 비쌉니다)> $2.00
  • 아두이노 나노> $1.89
  • 납땜
  • I2C 드라이버가 포함된 LCD 디스플레이> $3.0
  • 베로보드
  • 암컷 머리글
  • 도구 끝에는 다음이 필요합니다.

    <울>
  • 납땜 인두
  • 노즈 플라이어
  • 와이어
  • 그리고 얼마간

    2단계:온도 및 습도 - DHT22

    다른 센서를 사용하여 온도를 측정할 수 있습니다.

    인기있는 것은 DHT22, DHT11, SHT1x입니다.

    따라서 기본적으로 이 센서가 서로 어떻게 다른지, 그리고 처음에 DHT22를 사용한 이유를 알아보겠습니다.

    AM2302는 보정된 디지털 신호를 출력합니다. 독점적인 디지털 신호 수집 기술과 습도 감지 기술을 적용하여 신뢰성과 안정성을 보장합니다. 감지 요소는 8비트 단일 칩 컴퓨터와 연결됩니다.

    이 모델의 모든 센서는 정확한 교정 챔버에서 온도 보상 및 교정되며 교정 계수는 OTP 메모리에 프로그램 형식으로 저장되며 센서가 감지되면 메모리에서 계수를 인용합니다. 소형&저소비형&긴 전송거리(100m)는 AM2302가 모든 가혹한 적용 상황에 적합하도록 지원합니다. 4개의 핀으로 구성된 단일 행 패키지로 연결이 매우 편리합니다.

    세 가지 장단점을 살펴보겠습니다.

    DHT11

    장점:납땜이 필요하지 않습니다. 셋 중 가장 저렴합니다. 안정적인 출력을 빠르게 얻을 수 있습니다. 20m 이상 전송. 강한 간섭.

    단점:도서관! 해상도 옵션이 없습니다. 오류:Temp+/-2°C; 습한+/-5%RH. 부적절한 측정 범위(0-50°C). 응용 프로그램:원예, 농업.

    DHT22

    장점:납땜이 필요하지 않습니다. DHT11에 몇 달러를 추가하고 업그레이드하십시오. 부드러운 곡선. 가장 작은 오류. 넓은 범위. 20m 이상 전송. 강한 간섭.

    단점:더 민감할 수 있습니다. 느린 온도 추적. 도서관이 필요합니다. 응용 프로그램:환경 모니터링. SHT1x

    장점:납땜이 필요 없습니다. 부드러운 곡선. 작은 오류. 빠른 응답. 저전력 소비. 자동 수면. 탁월한 장기 안정성과 일관성.

    단점:2개의 디지털 인터페이스. 습도 오류. DHT11과 동일한 측정 범위. 도서관이 필요합니다. 응용 프로그램:중장비 및 장기간 설치. 다음은 비교적 저렴한 세 가지 선택입니다.

    연결

    Vcc ~ 5V 또는 3.3V

    접지에서 접지로

    arduino의 핀 2에 데이터

    3단계:기압계 및 압력 센서 - BMP180

    bmp180은 I2C("와이어") 인터페이스가 있는 기압 센서입니다.

    기압 센서는 주변 공기의 절대 압력을 측정합니다. 이 기압은 날씨와 고도에 따라 다릅니다.

    이 bmp180 모듈은 3.3v 레귤레이터 662k와 함께 제공되었는데, 이 레귤레이터는 어리석은 짓을 해서 전체 vcc를 칩에 직접 전달하기 위해 와이어를 연결했습니다.

    참고:이렇게 하면 3.3v만 사용하도록 제한합니다. 그 이상의 전압을 사용하면 기기가 망가질 것입니다.

    다른 모델에는 662k 전압 조정기가 없을 수 있습니다. 따라서 철저히 확인하십시오.

    좋아, 돌아와서 센서를 arduino에 연결할 수 있습니다.

    센서는 nano와 Uno의 arduino의 i2c 버스에 연결됩니다.

    SDA==>A4

    SCL==>A5

    VCC==>3.3V

    접지 ==> 접지

    기압에 대해 조금 이야기하고 기압이 고도와 온도를 측정하는 방법에 대해 알아보겠습니다.

    어떤 위치에서든 대기압은 일정하지 않습니다. 지구의 자전, 축 기울기 및 기타 여러 요인 간의 복잡한 상호 작용으로 인해 지역이 더 높고 더 낮아져 우리가 매일 보는 날씨가 변하게 됩니다. 기압의 변화를 관찰하여 날씨의 단기적인 변화를 예측할 수 있습니다.

    예를 들어, 기압이 떨어지는 것은 일반적으로 습한 날씨 또는 폭풍우가 다가오고 있음을 의미합니다(저압 시스템이 유입됨). 상승하는 기압은 일반적으로 맑은 날씨가 가까워지고 있음을 의미합니다(고압 시스템이 통과하고 있음).

    기압도 고도에 따라 다릅니다. 에베레스트 베이스캠프(5,400)의 절대 기압은 델리(216)보다 낮습니다.

    절대 압력은 한 위치에서 다른 위치로 압력 측정값을 직접 비교하기 어렵기 때문에 상대 압력을 사용합니다. 즉, 해수면 압력입니다.

    고도 측정

    해수면에서 대기의 평균 압력은 1013.25hPa(또는 mbar)입니다. 이것은 당신이 우주의 진공을 향해 올라갈 때 0으로 떨어집니다. 이 하락 곡선을 잘 이해하고 있으므로 다음 방정식을 사용하여 두 압력 측정값(p 및 p0) 간의 고도 차이를 계산할 수 있습니다.

    alti=44330*[1-(p/p0)^(1/5.255)]

    해수면 기압(1013.25hPa)을 기준 기압(p0)으로 사용하는 경우 방정식의 출력은 현재 해수면 위 고도가 됩니다.

    주의사항

    바람을 불어넣다: BMP180은 압력을 측정하기 위해 주변 공기에 접근해야 하므로 밀폐된 케이스에 넣지 마십시오. 작은 통풍구를 제공하는 것이 적절해야 합니다.하지만 너무 많은 공기는 허용하지 않습니다. :반면에 빠르게 움직이는 공기나 바람에 노출되면 판독값에 영향을 미치는 순간적인 압력 변화가 발생할 수 있습니다. 강한 기류로부터 장치를 보호하십시오.

    냉정 유지: 압력을 측정하려면 정확한 온도 판독값이 필요하므로 장치를 급격한 온도 변화에 노출시키지 말고 근처의 뜨거운 부품 및 기타 열원에서 멀리 두십시오.

    건조하게 유지 :BMP180은 습기에 약합니다. 물에 담그거나 액체에 닿지 ​​않도록 하십시오.

    눈을 가리지 마십시오: 놀랍게도 BMP180 내부의 실리콘은 빛에 민감하여 칩 상단의 구멍을 통해 장치에 들어갈 수 있습니다. 정확도를 최대화하려면 칩을 주변광으로부터 보호하십시오.

    4단계:회로 만들기

    그래서 우리는 나노용 헤더를 만드는 것으로 시작합니다. 우리는 실제로 암 헤더를 자른 다음 원래 크기처럼 보이도록 파일링합니다. 그런 다음 납땜합니다. 그런 다음 DHT22 센서용 헤더를 만들었습니다.

    . 데이터에서 접지로 연결하려면 10k 저항이 필요했습니다. 그런 다음 모든 것을 납땜했습니다. 그런 다음 유사한 방식으로 헤더를 추가한 bmp180의 시간이었습니다. 전원으로 3.3V를 사용했습니다. 모든 i2c 버스를 연결했습니다.

    마지막으로 i2c lcd를 사용하는 디스플레이를 추가했기 때문에 w는 bmp180 모듈에 사용한 것과 동일한 버스를 사용했습니다.

    (나중에 rtc 모듈을 추가하여 컴퓨터의 시계도 작동하지 않게 하려는 네 번째 슬롯이 있습니다.)

    5단계:코드 작성 시간

    잠깐 ..............

    라이브러리 다운로드

    bmp180

    https://github.com/sparkfun/BMP180_Breakout_Arduin...

    BMP180_Breakout_Arduino_Library-master.zip

    Dht22 라이브러리

    https://github.com/adafruit/DHT-sensor-library

    arduino에 라이브러리를 설치하려면 이 링크를 확인하세요.

    https://www.arduino.cc/en/Guide/Libraries

    저는 arduino 1.6.5를 사용했기 때문에 이 버전에서 코드가 확실히 작동하고, 작동하지 않는 경우 기본 버전으로 1.6.5를 사용하면 더 높을 수도 있습니다.

    #include #include #include #include "DHT.h#include

    SFE_BMP180 압력;

    #define ALTITUDE 20.56 #define I2C_ADDR 0x27 // <<- 추가 여기에 주소를 지정하십시오.#define Rs_pin 0#define Rw_pin 1#define En_pin 2#define BACKLIGHT_PIN 3#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7

    #define DHTPIN 2 // 디지털 우리가 연결된 핀

    // 어떤 유형을 사용하든 주석 처리를 제거합니다!//#define DHTTYPE DHT11 // DHT 11#define DHTTYPE DHT22 // DHT 22(AM2302), AM2321DHT dht(DHTPIN, DHTTYPE);LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);float t1,t2;

    무효 설정(){ Serial.begin(9600); lcd.begin(16,2); // <<-- LCD는 20x4입니다. 필요한 경우 LCD로 변경합니다.// LCD 백라이트 ONlcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);lcd.setBacklight(HIGH); lcd.home(); // LCDlcd.print("Weather Station");delay(5000);dht.begin(); 압력.시작(); } 무효 루프(){ 문자 상태; 이중 T,P,p0,a; 상태 =압력.startTemperature(); if (상태 !=0) { 지연(상태);

    상태 =압력.getTemperature(T); if (상태 !=0) { Serial.print("1"); lcd.clear(); lcd.setCursor(0,0); lcd.print("기압온도 :"); lcd.setCursor(0,1); lcd.print(T,2); lcd.print("도 C"); t1=T; 지연(3000);

    상태 =pressure.startPressure(3); if (status !=0) { // 측정이 완료될 때까지 대기:delay(status);

    status =pressure.getPressure(P,T); if (상태 !=0) {lcd.clear(); lcd.setCursor(0,0); lcd.print("절대 압력:"); lcd.setCursor(0,1); lcd.print(P,2); lcd.print("MB"); 지연(3000);

    p0 =기압.해수면(P,고도); // 1655미터에 있습니다(볼더, CO)

    a =pressure.altitude(P,p0); lcd.clear(); lcd.setCursor(0,0); lcd.print("고도:"); lcd.setCursor(0,1); lcd.print(a,0); lcd.print("미터"); 지연(3000); } } } } float h =dht.readHumidity(); // 온도를 섭씨로 읽습니다(기본값) float t =dht.readTemperature(); t2=t; lcd.clear(); lcd.setCursor(0,0); // 두 번째 줄의 시작으로 이동 lcd.print("Humidity:"); lcd.setCursor(0,1);lcd.print(h); lcd.print(" %"); 지연(3000); lcd.clear(); lcd.setCursor(0,0); // 두 번째 줄의 시작으로 이동 lcd.print("DHT Tempurature:"); lcd.setCursor(0,1); lcd.print(t); lcd.print("도 C"); 지연(3000); lcd.clear(); lcd.setCursor(0,0); // 두 번째 줄의 시작으로 이동 lcd.print("Mean Tempurature:"); lcd.setCursor(0,1); lcd.print((t1+t2)/2); lcd.print("도 C"); 지연(3000);}

    FSIULGKING9D7SD.ino


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

    코드

    <울>
  • 코드 스니펫 #1
  • 코드 스니펫 #1일반 텍스트

    #include #include #include #include "DHT.h#include

    SFE_BMP180 pressure;

    #define ALTITUDE 20.56 #define I2C_ADDR 0x27 // <<- 여기에 주소를 추가하세요. #define Rs_pin 0#define Rw_pin 1#define En_pin 2#define BACKLIGHT_PIN 3#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7

    #define DHTPIN 2 // 어떤 디지털 핀인지 re connected to

    // 어떤 유형을 사용하든 주석 처리를 제거하십시오!//#define DHTTYPE DHT11 // DHT 11#define DHTTYPE DHT22 // DHT 22(AM2302), AM2321DHT dht(DHTPIN, DHTTYPE); LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);플로트 t1,t2;

    무효 설정(){ Serial.begin(9600); lcd.begin(16,2); // <<-- LCD는 20x4입니다. 필요한 경우 LCD로 변경합니다.// LCD 백라이트 ONlcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);lcd.setBacklight(HIGH); lcd.home(); // LCDlcd.print("Weather Station");delay(5000);dht.begin(); 압력.시작(); } 무효 루프(){ 문자 상태; 이중 T,P,p0,a; 상태 =압력.startTemperature(); if (상태 !=0) { 지연(상태);

    상태 =압력.getTemperature(T); if (상태 !=0) { Serial.print("1"); lcd.clear(); lcd.setCursor(0,0); lcd.print("기압온도 :"); lcd.setCursor(0,1); lcd.print(T,2); lcd.print("도 C"); t1=T; 지연(3000);

    상태 =pressure.startPressure(3); if (status !=0) { // 측정이 완료될 때까지 대기:delay(status);

    status =pressure.getPressure(P,T); if (상태 !=0) {lcd.clear(); lcd.setCursor(0,0); lcd.print("절대 압력:"); lcd.setCursor(0,1); lcd.print(P,2); lcd.print("MB"); 지연(3000);

    p0 =기압.해수면(P,고도); // 1655미터에 있습니다(볼더, CO)

    a =pressure.altitude(P,p0); lcd.clear(); lcd.setCursor(0,0); lcd.print("고도:"); lcd.setCursor(0,1); lcd.print(a,0); lcd.print("미터"); 지연(3000); } } } } float h =dht.readHumidity(); // 온도를 섭씨로 읽습니다(기본값) float t =dht.readTemperature(); t2=t; lcd.clear(); lcd.setCursor(0,0); // 두 번째 줄의 시작으로 이동 lcd.print("Humidity:"); lcd.setCursor(0,1);lcd.print(h); lcd.print(" %"); 지연(3000); lcd.clear(); lcd.setCursor(0,0); // 두 번째 줄의 시작으로 이동 lcd.print("DHT Tempurature:"); lcd.setCursor(0,1); lcd.print(t); lcd.print("도 C"); 지연(3000); lcd.clear(); lcd.setCursor(0,0); // 두 번째 줄의 시작으로 이동 lcd.print("Mean Tempurature:"); lcd.setCursor(0,1); lcd.print((t1+t2)/2); lcd.print("도 C"); 지연(3000);}

    깃허브
    https://github.com/sparkfun/BMP180_Breakout_Arduino_Library/archive/master.ziphttps://github.com/sparkfun/BMP180_Breakout_Arduino_Library/archive/master.zip
    깃허브
    https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-library

    회로도


    제조공정

    1. Raspberry Pi 2 기상 관측소
    2. 라즈베리 파이 기상 관측소
    3. Weather Station V 2.0
    4. 모델 레일 디지털 DCC 명령 스테이션 Arduino 및 무료 앱
    5. 6-Shooter:Arduino 음료 혼합 스테이션
    6. Arduino 디지털 주사위
    7. 휴대용 정전식 터치 피아노
    8. Arduino 게임 컨트롤러
    9. 휴대용 거리 감지기
    10. 픽셀 체이서 게임