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

초소형 인터넷 기상 관측소

구성품 및 소모품

Arduino Nano 33 IoT
× 1
BME 기상 센서
× 1
0.96(OLED 디스플레이) - 128x 64
× 1
플라스틱 케이스 3.9" x 2.7"
× 1
마이크로 USB 케이블
× 1
남성 대 여성 브레드보드 점퍼 와이어
× 1
USB 벽면 충전기
× 1

필요한 도구 및 기계

뜨거운 글루건(일반)

앱 및 온라인 서비스

Arduino IDE
블링크

이 프로젝트 정보

스마트폰을 사물 인터넷에 연결할 수 있는 앱이 많이 있습니다. 나는 그들 중 많은 것을 시도했고 일반적으로 실망했습니다. Blynk는 그렇지 않습니다! 정말 유연하고 아름다운 사용자 인터페이스를 가지고 있으며 모든 종류의 IoT 플랫폼에서 작동하며 Android와 iPhone에서 모두 실행됩니다. 취미 생활을 하는 사람들에게도 무료입니다! 따라서 이것은 Blynk를 사용하여 탐색할 수 있는 비교적 간단한 IoT 프로젝트입니다.

하드웨어

이 프로젝트의 하드웨어는 상당히 간단합니다. WiFi를 처리하는 Arduino Nano 33 IoT, 온도, 습도 및 기압이 모두 하나의 장치에 있는 BME280 센서 보드, 1인치 OLED 디스플레이를 사용합니다. 3개 모두 3.3볼트에서 잘 작동합니다. 디스플레이는 분명히 선택 사항입니다. 목표는 휴대폰에 기상 관측소를 표시하는 것입니다. 그러나 Blynk와 스마트폰을 다루기 전에 먼저 OLED 디스플레이에서 모든 것을 설정하고 실행하는 것이 훨씬 쉽습니다.

아래 회로도는 하드웨어가 상호 연결되는 방법을 보여줍니다. 센서와 디스플레이 인터페이스 모두 I2C를 사용합니다. 이론상으로는 하나의 I2C가 여러 장치를 지원할 수 있지만 센서와 디스플레이의 라이브러리가 약간의 충돌이 있어서 결국 두 개의 다른 I2C 포트를 갖게 되었습니다. 센서는 아날로그에서 일반 기본 I2C 포트를 사용합니다. 핀 4와 5. 디스플레이는 디지털 에 설정된 보조 I2C 포트를 사용합니다. 핀 4와 5. (예, 반대입니다. SDA는 디지털 핀 5입니다))

하드웨어는 디스플레이를 볼 수 있도록 전면이 투명한 작은 플라스틱 케이스에 들어 있습니다. WiFi용 RF에 투명해야 하므로 플라스틱입니다. 상대적으로 비바람에 견디는 것이 필요하지만 센서는 바닥의 1/2 "구멍에 의해 외부 날씨에 노출됩니다. 센서는 그 구멍 안에 앉도록 부착됩니다. 나는 뜨거운 것으로 케이스 내부의 모든 것을 부착했습니다. 접착제이지만 여름 더위에 야외에 놓을 계획이라면 대신 에폭시를 사용하는 것이 좋습니다.

전원은 USB 케이블을 통해 공급됩니다. 그런 식으로 상자에서 나오는 단일 케이블로 프로그래밍하거나 전원을 공급할 수 있습니다. 이 케이블은 프로그래밍할 때 컴퓨터에 연결하거나 기상 관측소로 사용할 때 플러그인 USB 전원 공급 장치에 연결할 수 있습니다.

소프트웨어

Arduino에서 실행되는 소프트웨어는 센서, 디스플레이 및 Blynk에 대한 라이브러리 예제의 매시업 이상입니다. 관련된 라이브러리는 센서용 Adafruit_BME280_Library, 디스플레이용 ss_oled 라이브러리, Blynk용 Blynk 라이브러리입니다. 세 가지 모두 Arduino의 라이브러리 관리자에서 직접 다운로드할 수 있습니다. 각 라이브러리를 개별적으로 실험하여 각각을 더 잘 이해할 수 있습니다.

Blynk에는 하드웨어를 인터페이스로 구성하는 방법에 대한 많은 예가 있습니다. https://examples.blynk.cc/ 불행히도 Nano 33 IoT를 지원되는 Arduino 중 하나로 나열하지 않습니다. 그러나 Blynk는 Nano 33 IoT 및 기타 여러 Arduino 프로세서에서 사용되는 WiFiNINA를 지원합니다. 따라서 #include 및 #include 두 가지 포함을 추가하면 해당 문제가 해결되었습니다.

내 코드에서 볼 수 있는 또 다른 추가 사항은 다음과 같습니다. #include 이것은 센서에서 나오는 숫자를 OLED 디스플레이에 표시하기에 적합한 문자열로 변환하는 데 필요했습니다. 약간의 슬픔을 안겨준 이것에 대한 한 가지 작은 변형은 Blynk가 문자열로 보내든 숫자로 보내든 데이터를 기꺼이 표시한다는 것입니다. 처음에는 OLED로 보내는 것과 동일한 문자열을 Blynk에 보냈습니다. 숫자를 표시할 때는 잘 작동했지만 그래프를 추가할 때 완전히 실패했습니다. 그래프가 작동하도록 하려면 Blynk는 분명히 실제 숫자가 필요했습니다.

참고 - 기압은 일반적으로 해수면으로 수정된 것으로 보고됩니다. 더 높은 고도에서 기압은 분명히 떨어지므로 센서의 값을 해수면에서 해당 값으로 수정하려면 고도 1000피트마다 약 1인치 Hg의 측정 값에 값을 추가해야 합니다. 첨부된 내 코드에서 해발 1300피트의 고도를 보정하기 위해 1.3을 추가한 것을 볼 수 있습니다. 자신의 고도와 일치하도록 이 값을 변경하고 싶을 것입니다. 1000피트당 1"Hg는 대략적인 추정치일 뿐입니다. 정확한 보정을 원하시면 온라인 표에서 고도에 대한 정확한 보정을 제공할 수 있습니다.

Blynk가 없는 기상 관측소

이 시점에서 하드웨어를 설정하고 연결된 소프트웨어를 사용하여 OLED 디스플레이에 날씨 데이터를 표시할 수 있습니다. 기상 관측소를 자체적으로 실행하려면 설정에서 Blynk.begin() 행을 주석 처리하십시오. (Blink에 대한 유효한 연결 없이 Blink.begin()을 주석 처리하지 않으면 스케치가 해당 지점에서 중지되거나 중단됩니다.) 다음 섹션에서는 Blynk에 대해 설명하고 둘 다 설정하는 방법에 대해 설명합니다. 아두이노 스케치와 스마트폰에서 기상 관측소를 휴대폰에 표시합니다.

블링크

Blynk는 iPhone 또는 Android에 쉽게 설치할 수 있으며 자세한 설명서가 함께 제공됩니다. http://docs.blynk.cc/ 하지만 거기에는 너무 많은 정보와 너무 많은 옵션이 있어서 처음에는 약간 혼란스러울 수 있으므로 다음을 수행하겠습니다. 여기에 Blynk를 시작하는 방법에 대한 나만의 버전을 제공하세요.

저는 iPhone에서 Blynk를 사용했지만 Android에서도 경험이 충분히 유사하여 어느 쪽이든 제 지침을 따를 수 있다고 생각합니다. 앱이 있으면 계정을 만들어야 합니다. 거기에서 앱 내에서 새 프로젝트를 만듭니다. 프로젝트에는 하드웨어를 프로젝트와 연결하는 데 사용되는 인증 코드가 제공됩니다. 첫 번째 작업은 하드웨어를 WiFi를 통해 Blynk 프로젝트에 연결하는 것입니다. 이 작업을 수행하고 examples.blynk.cc에서 Blynk Blink라는 Blynk의 기본 스케치/프로그램을 사용하여 테스트할 수 있습니다. 이를 통해 Nano 33 IoT의 온보드 LED를 켜고 끌 수 있습니다. 제 제안은 기상 관측소가 Blynk와 함께 작동하도록 하기 전에 이것을 시도하고 작동하도록 하는 것입니다.

우리는 Nano 33 IoT가 Blynk와 함께 작동하도록 소프트웨어를 구성하는 것에 대해 이미 약간 이야기했습니다. examples.blynk.cc를 열면 기본적으로 ESP8266 보드가 사용됩니다. #include 및 #include 를 찾아 Nano 33 IoT 보드용 #include 및 #include

Nano 33 IoT에 대한 WiFiNINA 지원을 추가하는 것 외에도 이미 이야기했듯이 WiFi 자격 증명과 Blynk 프로젝트의 인증 코드를 추가해야 합니다. LED를 켜고 끄는 방법은 잠시 후에 설명하겠지만 먼저 연결 상태를 확인해보자. Blynk Blink 스케치를 올바르게 구성하고 실행한 상태에서 Arduino의 직렬 모니터를 열면 Blynk 클라우드 서버에 연결되는 것을 볼 수 있습니다. 이 시점에서 하드웨어는 따로 두고 휴대폰에서 Blynk 앱으로 작업할 수 있습니다.

Blynk 앱이 다소 혼란스럽다는 것을 인정합니다. 왼쪽 상단의 아이콘을 사용하면 프로젝트를 선택하고 계정에서 로그아웃할 수도 있습니다. 오른쪽 상단에 있는 항목을 사용하여 프로젝트 편집 모드로 들어가고 나갈 수 있습니다. 중간에 있는 것이 무엇을 하느냐는 당신이 어디에 있느냐에 달려 있습니다.

온보드 LED를 제어하려면 앱에서 편집 모드로 들어가야 합니다. 그러면 빈 화면이 나타납니다. 왼쪽으로 스와이프하면 위젯 도구 상자가 표시되도록 옆으로 이동합니다. 버튼을 클릭하여 선택하면 이제 기본 화면에 표시됩니다. 거기를 클릭하면 구성을 위해 열립니다. 푸시 모드에서 스위치 모드로 이동합니다. 핀 선택을 사용하여 Nano 33 IoT에서 온보드 LED(디지털 핀 13)를 선택합니다. 이제 확인을 클릭하고 오른쪽 상단 아이콘을 눌러 편집 모드를 종료합니다. 이제 버튼이 LED를 제어해야 합니다.

Blynk가 있는 기상 관측소

이제 기상 관측소를 Blynk 프로젝트에 연결할 준비가 되었습니다. 연결된 소프트웨어를 열고 설정에서 Blynk.begin() 행의 주석 처리를 제거하고 프로젝트 인증 코드와 WiFi 자격 증명을 추가하고 Arduino에 업로드합니다.

휴대전화에서 Blynk를 엽니다. 이 튜토리얼을 따랐다면 버튼은 여전히 ​​존재하며 온보드 LED를 켜고 끌 수 있어야 합니다. 편집 모드로 이동하여 버튼을 클릭하여 구성하고 맨 아래의 삭제로 삭제하십시오. 이제 도구 상자로 이동하여 레이블이 지정된 값을 선택합니다. 디스플레이 아래의 목록 아래에 있습니다. 디스플레이 페이지로 돌아가서 레이블이 지정된 값 디스플레이를 클릭하여 구성합니다. 핀을 클릭한 다음 가상 핀 V3을 선택합니다. 다음 단락에서 가상 핀에 대해 설명합니다. 이제 "예:Temp"라고 표시된 레이블에 대해 "Temp /pin.#/ deg.F"를 입력합니다. .#은 소수점 이하 한 자리를 표시하도록 앱에 지시합니다. 큰 텍스트 크기를 선택하고 푸시의 새로 고침 간격과 녹색의 텍스트 색상을 그대로 둡니다. 이제 확인을 클릭합니다. 레이블이 지정된 값은 이제 온도를 표시할 준비가 거의 완료되었지만 너무 좁습니다. 천천히 선택하십시오. 구성 모드로 다시 들어가지 않을 만큼 충분히 느립니다. 라벨의 윤곽이 켜집니다. 이제 전체 라인을 표시하도록 확장할 수 있습니다. 우리는 여기에서 그렇게 하지 않겠지만 그것은 또한 이리저리 이동할 수 있습니다. 화면 전체의 약 3/4 정도 늘립니다. 그런 다음 편집 모드를 종료하면 휴대전화에 온도가 표시되는 것을 볼 수 있습니다.

Blynk 구성을 마치기 전에 방금 온도 표시 설정에서 본 몇 가지 사항을 설명할 가치가 있습니다. Blynk는 가상 핀이라는 다소 독특한 아이디어를 사용합니다. 디스플레이 값 위젯은 프로세서의 아날로그 핀을 읽도록 설정하거나 디지털 핀이 높거나 낮은지 읽도록 설정할 수 있습니다. 그러나 종종 우리는 변수의 내용을 표시하고 싶습니다. 우리는 그 변수에 가상 핀 번호를 할당함으로써 그렇게 하고, 그때부터 Blynk 앱은 가상 핀 번호로 그 변수를 참조할 것입니다. 따라서 내 소프트웨어에서 가상 핀 V3에 화씨 온도를 할당한 지점을 볼 수 있습니다.

빠르게 언급할 가치가 있는 또 다른 Blynk 아이디어는 푸시 모드에서 남겨둔 새로 고침 간격입니다. 이는 Arduino 스케치가 데이터를 내보내고 있음을 의미합니다. 우리의 경우 분당 한 번씩 온도, 습도 및 기압을 업데이트합니다. 그러나 Blynk는 Blynk 앱이 간격을 설정하고 하드웨어에 새 데이터를 요청하는 Pull 메서드도 지원합니다.

이제 Blynk에 기상 관측소 표시를 마치겠습니다. 레이블이 지정된 값 디스플레이가 두 개 더 필요합니다. 하나는 습도(%)(가상 핀 V4)용이고 다른 하나는 "인치. HG" 또는 수은 인치(가상 핀 V5)의 압력입니다. 내 것처럼 보이게 하려면 금색의 습도와 빨간색의 압력을 원할 것입니다. 습도의 경우 소수점 이하 한 자리를 표시했습니다. 압력을 위해 소수점 이하 두 자리를 표시했습니다.

이제 온도, 습도 및 기압을 표시하는 3개의 레이블이 지정된 값 디스플레이가 있는 경우 세 가지 모두의 그래프를 추가할 수 있습니다. 이는 SuperChart 위젯을 추가하여 수행됩니다. 먼저 화면의 나머지 부분을 채우도록 아래쪽으로 늘입니다. 그런 다음 그것을 클릭하여 구성하십시오. X축 값 표시를 켜고 라이브, 1시간, 6시간, 1일, 1주, 1개월의 해상도를 선택했습니다. 그리고 3개월. 우리는 3개의 변수 각각에 대해 하나씩 3개의 데이터 증기가 필요합니다. 각 데이터 스트림을 구성하려면 오른쪽에 있는 아이콘을 클릭하십시오. 각각에 대해 가상 핀을 다시 선택해야 합니다. y축 스케일링의 경우 높이를 선택합니다. 그런 다음 온도의 경우 높이를 67 - 100으로 설정하고 습도의 경우 높이를 34 - 66으로 설정하고 압력의 경우 높이를 0 - 33으로 설정합니다. 레이블이 지정된 값과 일치하도록 색상을 설정합니다. Y축 표시를 켭니다. 그게 다야. 편집 모드를 종료하면 전화기 디스플레이가 내 것과 같아야 합니다. 그래프가 시작되는 데 약간의 시간이 걸립니다. 빠른 결과를 보려면 실시간 또는 1시간 해상도를 확인하세요.

Blynk의 또 다른 기능은 완성된 Blynk 프로젝트를 다른 스마트폰과 공유하여 두 대 이상의 휴대폰에서 기상 관측소를 볼 수 있도록 하는 것입니다. 공유를 시작하려면 프로젝트를 편집 모드로 설정하고 프로젝트 설정의 상단 중간 아이콘을 클릭하십시오. 공유를 켠 다음 링크를 생성합니다. 이메일로 보내거나 공유할 수 있는 QR 코드가 제공됩니다. 새 사용자는 Blynk 앱이 필요하지만 Blynk의 계정은 필요하지 않습니다. 미등록 사용자의 앱에는 다른 사람의 Blynk 프로젝트의 QR 코드를 로드할 수 있는 링크가 있습니다. 그게 다야

이것은 Blynk에 대한 매우 제한적인 소개였지만 시작하기에 좋은 위치를 제공해야 합니다. 앞서 Blynk는 무료라고 언급했습니다. 거의 그렇습니다. 위젯과 공유 모두 Blynk가 에너지라고 부르는 포인트를 사용합니다. 무료로 2500포인트를 받을 수 있다고 합니다. 이 프로젝트를 무료로 수행하기에 충분합니다. 그러나 공유하거나 추가하면 Blynk 에너지가 고갈될 수 있습니다. 추가 5000포인트를 받기 위해 6달러를 썼습니다. Blynk로 다른 프로젝트를 진행하려면 Blynk 연료에 몇 달러를 지출해야 할 수도 있습니다.

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

코드

<울>
  • 작은 인터넷 기상 관측소
  • 초소형 인터넷 기상 관측소Arduino
    WiFi 및 Blynk를 스마트폰에 연결<사전>/*이 스케치는 Arduino Nano 33 IoT용입니다.BME280 센서 보드를 사용합니다.0.96인치 128 x 64 OLED 디스플레이를 사용합니다.WiFi를 통해 Blynk 클라우드 서버에 연결하여 스마트폰에 날씨 데이터를 표시합니다. */#include #include #include // BME280 library#include // OLED에 표시하기 위해 날씨 숫자를 문자열로 변환하는 데 사용# include // OLED 라이브러리// Nano 33 IoT가 Blynk와 작동하도록 하려면 다음 두 가지가 필요합니다.#include #include char auth[] ="YourBlynkProjectCode";char ssid[ ] ="YourWifiID";char pass[] ="YourWiFiPassword";Adafruit_BME280 bme; // I2C 인터페이스 사용Adafruit_Sensor *bme_temp =bme.getTemperatureSensor();Adafruit_Sensor *bme_pressure =bme.getPressureSensor();Adafruit_Sensor *bme_humidity =bme.getHumiditySensor();#define SDA_PIN 5#define SCL -1#define FLIP180 0#define INVERT 0#define USE_HW_I2C 0#define MY_OLED OLED_128x64#define OLED_WIDTH 128#define OLED_HEIGHT 64SSOLED 솔드; // OLEDBlynkTimer 타이머의 인스턴스; // Blynk의 인스턴스 timervoid setup() { if (!bme.begin(0x76)) { // 센서가 감지될 때까지 대기 while (1) delay(10); } bme_temp->printSensorDetails(); bme_pressure->printSensorDetails(); bme_humidity->printSensorDetails(); oledInit(&ssoled, MY_OLED, OLED_ADDR, FLIP180, INVERT, USE_HW_I2C, SDA_PIN, SCL_PIN, RESET_PIN, 400000L); oledFill(&ssoled, 0x0, 1); Blynk.begin(인증, ssid, 통과); // Blynk 없이 기상 관측소를 작동하려면 이 라인을 주석 처리합니다. timer.setInterval(60000L, myupdate); // 1분에 한 번씩 myupdate를 실행합니다. myupdate(); // 메인 루프가 1분을 기다리기 때문에 Blynk에 대한 디스플레이 및 데이터의 초기 업데이트를 실행합니다.}void loop() { Blynk.run(); // Blynk는 기본 루프에서 자체적으로 실행하는 것을 선호합니다. 타이머.런(); // 다른 모든 것은 Blynk 타이머를 통해 처리됩니다.}// 이 루틴은 Blynk 타이머에 의해 호출되어 OLED 디스플레이를 업데이트하고 데이터를 Blynkvoid로 푸시합니다. myupdate(){ sensor_event_t temp_event, pressure_event, 습도_event; bme_temp->getEvent(&temp_event); bme_pressure->getEvent(&pressure_event); bme_humidity->getEvent(&humidity_event); float ctemp =temp_event.온도; // 온도를 섭씨로 얻음 float ftemp =32 + (9*ctemp)/5; // 온도를 화씨로 변환 float hum =습도_event.relative_humidity; // 상대 습도 구하기 float ppress =pressure_event.pressure; // mm 단위로 압력을 얻습니다. float mpress =1.3 + ppress/33.8939; // 인치 Hg로 변환하고 1.3을 추가하여 지역적으로 보고된 실제 기압과 일치시킵니다. 1.3을 제거하거나 자체 조정을 추가할 수 있습니다. 문자 mytemp[8]; dtostrf(ftemp, 6, 2, mytemp); // temp를 문자열로 변환 char myhum[8]; dtostrf(hum, 6, 2, myhum); // 습도를 문자열로 변환 char mypress[8]; dtostrf(mpress, 6, 2, mypress); // 압력을 문자열로 변환 // OLED 디스플레이 업데이트 oledWriteString(&ssoled, 0,2,1,(char *)"Weather Station", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,2,3,(char *)"온도 =", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,50,3,(문자 *) mytemp, FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,105,3,(문자 *)"F", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,2,5,(문자 *)"습도=", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,50,5,(문자 *)myhum, FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,105,5,(문자 *)"%", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,2,7,(문자 *)"Press=", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,50,7,(문자 *) mypress, FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,105,7,(char *)"in", FONT_NORMAL, 0, 1); // 새로운 날씨 데이터를 Blynk에 푸시 Blynk.virtualWrite(V3, ftemp); Blynk.virtualWrite(V4, 험); Blynk.virtualWrite(V5, mpress); }

    회로도


    제조공정

    1. 집적 회로
    2. Raspberry Pi 기반 기상 관측소
    3. Raspberry Pi 2 기상 관측소
    4. 라즈베리 파이 기상 관측소
    5. 기상 관측소로 IOT에 참여하십시오 – CWOP
    6. Weather Station V 2.0
    7. 모델 레일 디지털 DCC 명령 스테이션 Arduino 및 무료 앱
    8. 6-Shooter:Arduino 음료 혼합 스테이션
    9. 모션센스
    10. Arduino 기반 날씨 풍선 데이터 로거