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

UnifiedWater v1

구성품 및 소모품

Arduino MKR GSM 1400
× 1
Adafruit NeoPixel 링:WS2812 5050 RGB LED
× 1
GY21 온도 및 습도
× 1
탁도 센서, 광트랜지스터 출력
× 1
Adafruit 방수 DS18B20 디지털 온도 센서
× 1
DFRobot 중력:아날로그 스피어 팁 pH 센서/미터 키트
× 1
SparkFun 푸시버튼 스위치 12mm
× 1
점퍼 와이어(일반)
× 1
저항 220옴
× 1

필요한 도구 및 기계

납땜 인두(일반)

앱 및 온라인 서비스

Arduino 웹 편집기
SORACOM Air IoT 연결 플랫폼
SORACOM 수확
SORACOM 라군

이 프로젝트 정보

개요

강하. 우리의 생존, 무역 등에 필수적입니다. 지난 10년 동안 전 세계 수역의 오염을 줄이기 위해 많은 노력을 기울였습니다. 사람들이 쓰레기를 버리러 바다에 가지 않기 때문에 강은 오염의 근원입니다. 그들은 그것을 강에 버립니다.

이 강은 바다와 바다로 흘러들어가서 한때 강에 던져진 칫솔이 세계를 가로질러 건너편에 닿았습니다.

오염과 싸우기 위해 노력하는 세상에서 데이터는 매우 중요합니다. 기업과 기업이 수질 오염을 줄이기 위한 글로벌 프로젝트에 쉽게 협력할 수 있어야 합니다. 이것이 바로 UnifiedWater가 등장하는 곳입니다.

이 데이터를 쉽게 수집하고 분석할 수 있는 충분히 저렴하고 확장 가능한 장치이므로 강의 오염도를 파악하는 데 필요합니다. WaterAid는 기업에 적합한 모드와 개인을 위한 모드의 2가지 모드로 제공됩니다.

여러 장치가 함께 기능할 수 있으며, 개울을 가로질러 다른 지점이나 다른 수역에 배치될 수 있습니다. 이러한 장치는 데이터를 동일한 데이터베이스로 보내는 시간 간격으로 데이터를 수집합니다. 이를 통해 기업은 버튼 클릭으로 모니터링 중인 강이나 호수의 상태를 확인할 수 있습니다.

장치의 휴대용 버전도 사용할 수 있습니다. 이 버전에서는 개인이 장치를 휴대할 수 있으며 물 샘플을 채취하고자 할 때 장치의 버튼을 누르고 30초 동안 물에 담그면 됩니다. 그러면 온라인 대시보드에서 데이터를 사용할 수 있습니다.

WaterAid는 수온, pH, 습도, 대기 온도 및 습도를 수집하여 강의 오염을 모니터링하는 데 필요한 모든 센서로 가득 차 있습니다.

동영상

이미지

기능

WaterAid는 Soracom의 클라우드 덕분에 사용자, 회사 또는 개인이 데이터를 안전하고 정확하게 수집하고 이 모든 데이터를 한 곳에서 시각화할 수 있습니다. 프로젝트는 프론트엔드와 백엔드로 구성되어 있습니다.

앞면 종료

프로젝트의 프런트 엔드는 데이터를 수집하고 클라우드로 보내는 데 사용되는 물리적 장치입니다. 장치는 모드 1 또는 2로 설정할 수 있습니다. 모드 1에서 장치는 버튼을 눌러 일련의 데이터를 기록하므로 가끔 수역을 모니터링하는 데 유용합니다. 모드 2는 장치가 정의된 시간 간격으로 판독을 수행하고 이 데이터를 클라우드로 푸시하도록 설정합니다.

MKR GSM은 사용하기 쉽고 안정적이기 때문에 프런트 엔드에 사용됩니다. GSM을 통해 Soracom에 액세스할 수도 있습니다. 다음은 데이터를 수집할 때 기기가 취하는 단계입니다.

배터리

여러 가지 방법으로 장치에 전원을 공급할 수 있습니다. 장치에 제공된 포트를 통해 LiPo 배터리, 보조 배터리 또는 장치의 VIN 포트를 통해 배터리를 연결하여 전원을 공급할 수 있습니다.

장치의 수명은 배터리 전력에 크게 의존합니다. 장치는 가능한 한 많은 에너지를 절약하기 위해 읽기 사이에 절전 모드로 들어갑니다.

LED 반지

이 장치에는 LED 링도 장착되어 있습니다. 이것은 사용자에게 현재 장치가 무엇을 하고 있는지에 대한 피드백을 제공합니다. 링이 있을 수 있는 3가지 모드가 있습니다.

<울>
  • 다색 기기가 설정 중이거나 데이터를 처리 중임을 나타냅니다.
  • 빨간색 깜박임 경고, 일반적으로 장치를 물에 넣어야 하지만 오류를 나타낼 수도 있음을 의미합니다.
  • 파란색 또는 녹색 진행 중 기기가 현재 샘플을 채취 중이며 물에 넣어야 함을 나타냅니다.
  • 샘플 채취

    기기가 샘플을 채취할 때 기기의 센서를 모두 물 속에 넣어야 합니다. 센서를 예열하기 위해 샘플을 채취하기 전에 6초 지연이 있습니다. 최상의 결과를 얻으려면 워밍업이 진행 중일 때 센서를 물에 담가야 합니다.

    데이터 파싱

    데이터는 JSON 문자열 형태로 쏘라콤에 보내야 합니다. 이것은 사용된 모든 키에 값을 제공합니다. 그러면 백엔드에서 데이터를 쉽게 해석할 수 있습니다. 다음은 전송될 페이로드의 예입니다.

    { 
    "위도":53.3474617,
    "경도":-6.2514529,
    "waterpH":7.30,
    "waterTurbidity":94,
    /> "waterTemp":12.10,
    "atmoTemp":14.50,
    "atmoHum":82,
    "deviceID":1,
    "deviceName":"device1",
    "에포크":1559392636,
    "모드":2
    }

    백엔드

    프로젝트의 백엔드는 Soracom을 참조합니다. 데이터는 대시보드의 백엔드에서 수집되고 시각화됩니다. 이 대시보드는 Soracom Lagoon을 사용하여 생성됩니다.

    대시보드

    대시보드는 장치에서 수집된 모든 데이터를 요약합니다. 데이터가 수집된 장소를 지도에 표시하며, 물의 오염 정도에 따라 색상이 달라집니다. 그런 다음 데이터는 그 아래의 선 그래프에 그래프로 표시되고 테이블에 완전히 요약됩니다.

    사용자는 또한 물의 pH 또는 탁도 값이 비정상인 경우 이메일을 통해 경고를 받습니다. 아래는 대시보드의 일부 스크린샷입니다.

    확장성

    이 장치는 쉽게 확장할 수 있으며 모든 데이터를 동일한 대시보드에서 수집하고 설명할 수 있습니다. 여러 장치에서 데이터를 Soracom으로 스트리밍할 수 있으며 대시보드에서 데이터를 시각화할 수 있습니다.

    장치의 가격과 제작 및 프로그래밍이 매우 쉽기 때문에 여러 장치를 쉽게 사용할 수 있습니다. 이러한 장치는 Soracom Krypton과 같은 도구를 사용하여 Soracom에 쉽게 등록할 수도 있습니다.

    각 기업 또는 개인은 장치에서 수집한 데이터가 시각화되는 개인화된 대시보드를 갖게 됩니다. 가까운 시일 내에 사람들이 동일한 대시보드에서 공동 작업하고 데이터를 서로 공유할 수 있기를 바랍니다.

    혜택

    이 제품을 사용하는 개인 또는 회사는 다음과 같은 이점을 누릴 수 있습니다.

    <울>
  • 장치가 매우 자급자족하므로 운영 비용이 절감됩니다.
  • 쉽게 확장할 수 있는 이 장치는 단독으로 또는 수십 명의 다른 사람과 함께 쉽게 작동할 수 있습니다.
  • 빠른 데이터 수집을 통해 데이터를 클라우드로 푸시하고 실시간으로 시각화할 수 있습니다.
  • 쉬운 시각화, 온라인 대시보드를 사용하여 언제 어디서나 데이터를 시각화할 수 있습니다.
  • 프로젝트 구성

    1단계:필수 장비

    이 프로젝트에는 물과 대기에 관련된 많은 매개변수를 모니터링하는 많은 센서가 필요합니다. 아래는 필요한 모든 재료 목록입니다.

    <울>
  • 1, Arduino MKR GSM
  • 1, 16 LED RGB LED 링
  • 1, GY-21 온도 및 습도 모듈
  • 1, 탁도 센서
  • 1, 방수 온도 센서
  • 1, pH 센서 및 모듈
  • 1, 푸시버튼
  • 1, 저항기(220Ω)
  • 점퍼 와이어
  • 2단계:회로 연결

    구성 요소는 함께 납땜되어야 합니다. 회로도의 이해를 돕기 위해 브레드보드를 ​​사용했습니다. 회로도는 아래와 같습니다.

    MKR GSM 준비

    센서를 장치에 납땜한 후 SIM 카드, GSM 안테나 및 배터리를 장치에 부착해야 합니다. VIN 포트를 통해 2개의 AA 배터리로 보드에 전원을 공급하고 있습니다. 단계는 아래와 같습니다.

    3단계:코드 승인

    프로젝트 코드에는 4개의 주요 섹션이 있습니다.

    <울>
  • 센서 데이터 수집
  • 시간 및 날짜 가져오기
  • 데이터 처리
  • 데이터 보내기
  • 이 모든 섹션은 아래에 설명되어 있습니다.

    센서 데이터 수집

    Serial.println("샘플 채취");
    Serial.println("________________________________________");
    Serial.println("샘플 채취");
    Serial.println (" OK - 워밍업");
    delay(6000); // 센서 보정 지연
    colorLED(50);
    Serial.println(" OK - 샘플 채취");
    Serial.print(" ");
    for (int i =0, i <16, i++)
    {
    if (모드 ==1)
    {
    strip.setPixelColor(i, strip.Color(0, 255, 0) ));
    strip.show();
    }
    else
    {
    strip.setPixelColor(i, strip.Color(0, 0, 255));
    strip.show();
    }
    // 여러 물 샘플을 가져옴 - 센서가 정확하지 않음
    waterTurbidity +=getWaterTurbidity();
    waterPh +=getWaterPh();
    if (i> 14)
    {
    // 고정밀 센서용 단일 샘플 채취
    waterTemperature =getWaterTemp();
    atmoTemperature =getAtmoTemp ();
    atmoHumidity =getAtmoHumidity();
    }
    Serial.print(".");
    delay(500);
    }
    직렬 .println("");
    Serial.println("성공 - 가져온 샘플");
    for (int i =0; i <=16; i++)
    {
    strip.setPixelColor(i, strip.Color(0, 0, 0));
    strip.show();
    지연(30);
    }
    Serial.println("______________________________________________________");
    Serial.println("");
    delay(500);

    위의 코드 섹션은 센서가 물에서 보정될 때까지 6초를 기다리는 것으로 시작합니다. 그런 다음 장치는 16번 루프를 돌며, 루프마다 새로운 LED가 링을 켭니다.

    값이 변동하는 센서의 데이터를 16회 수집하여 평균을 구합니다. 고정밀 센서는 마지막 루프에서 읽습니다.

    시간 및 날짜 가져오기

    void getCredentials()
    {
    Serial.println(" [1/2] Time");
    Serial.println(" OK - RTC에서 시간 가져오기");
    currentEpoch =processTime();
    colorLED(50);
    Serial.println(" [2/2] Geolocation");
    Serial.println(" 확인 - 가져오기 GPRS의 지리적 위치");
    while (!getLocation());
    Serial.print(" 성공 - 지리적 위치는 "); Serial.print(위도, 7); Serial.print(", "); Serial.println(경도, 7);
    colorLED(50);
    }

    bool getLocation()
    {
    if (location.available( ))
    {
    위도 =location.latitude();
    경도 =location.longitude();
    delay(500);
    true를 반환합니다.
    }
    else
    {
    지연(500);
    false 반환;
    }
    }

    첫 번째 루프는 자격 증명을 처리합니다. 시간은 설정 시 GSM 네트워크에 동기화된 온보드 RTC에서 추출됩니다. 지리적 위치는 GPRS에서 추출됩니다.

    데이터 처리

    void processData()
    {
    Serial.println(" OK - 물 pH 및 탁도의 평균 구하기");
    waterPh =(waterPh / 16);
    waterTurbidity =(waterTurbidity / 16);
    Serial.println(" OK - 데이터를 직렬로 덤프");
    Serial.println("");
    Serial.print(" [ 물] pH "); Serial.println(waterPh);
    Serial.print(" [물] 탁도 "); Serial.println(waterTurbidity);
    Serial.print(" [물] 온도 "); Serial.println(waterTemperature);
    Serial.print(" [기압] 온도 "); Serial.println(atmoTemperature);
    Serial.print(" [기압] 습도 "); Serial.println(atmoHumidity);
    Serial.println("");
    Serial.println("성공 - 데이터 처리");
    colorLED(50);
    }

    문자열 makeLine()
    {
    Serial.println(" OK - 문자열 만들기");
    문자열 dataReturned; 데이터 반환 +="{"; dataReturned +=" \n";
    dataReturned +="\"위도\":" + String(위도, 7); dataReturned +=", \n";
    dataReturned +="\"경도\":" + String(경도, 7); dataReturned +=", \n";
    dataReturned +="\"waterpH\":" + String(waterPh); dataReturned +=", \n";
    dataReturned +="\"waterTurbidity\":" + String(waterTurbidity); dataReturned +=", \n";
    dataReturned +="\"waterTemp\":" + String(waterTemperature); dataReturned +=", \n";
    dataReturned +="\"atmoTemp\":" + String(atmoTemperature); dataReturned +=", \n";
    dataReturned +="\"atmoHum\":" + String(atmoHumidity); dataReturned +=", \n";
    dataReturned +="\"deviceID\":" + String(deviceID); dataReturned +=", \n";
    dataReturned +="\"장치 이름\":"; 데이터 반환 +=문자열("\""), 데이터 반환 +=문자열(장치 이름), 데이터 반환 +=문자열("\""); dataReturned +=", \n";
    dataReturned +="\"epoch\":" + String(currentEpoch); dataReturned +=", \n";
    dataReturned +="\"모드\":" + 문자열(모드); dataReturned +=" \n";
    dataReturned +="}";
    Serial.println(" OK - 데이터가 아래에 있음");
    Serial.println("");
    Serial.println(dataReturned);
    Serial.println("");
    Serial.println(" 성공 - 문자열이 준비되었습니다.");
    colorLED(50);
    반환 데이터 반환;
    }

    프로세스 데이터() 변동 경향이 있는 센서에서 수집한 데이터의 평균을 구한 다음 모든 데이터를 직렬 모니터에 덤프합니다.

    makeLine() 모든 데이터를 Soracom으로 전송되는 JSON 문자열로 컴파일합니다. 모든 값은 백엔드로 보낼 준비가 된 JSON 버퍼로 구문 분석됩니다.

    데이터 보내기

    void parseData(String dataToSend)
    {
    Serial.println(" OK - 연결 설정");
    if(client.connect(url, 80))
    {
    Serial.println(" 연결 설정됨, 데이터 구문 분석");
    client.println("POST / HTTP/1.1");
    client.println("호스트 :Harvest.soracom.io");
    client.println("사용자 에이전트:Arduino/1.0");
    client.println("연결:닫기");
    client.print ("콘텐츠 길이:");
    client.println(dataToSend.length());
    client.println("");
    client.println(dataToSend);
    Serial.println(" OK - 데이터 구문 분석");
    }
    Serial.println(" OK - 응답 받기");
    Serial.println("");
    while(1)
    {
    if(client.available())
    {
    char c =client.read();
    Serial.print(c);
    }
    if(!client.connected())
    {
    break;
    }
    }
    Serial.println(" 성공 - 데이터가 구문 분석됨");
    }

    마지막으로 데이터가 Soracom으로 전송됩니다. 장치는 서버와 연결을 설정한 다음 자격 증명을 준비합니다. 그런 다음 데이터가 서버로 전송되고 응답이 직렬 모니터로 인쇄됩니다.

    그런 다음 트리거가 단계를 다시 반복하여 깨울 때까지 기기가 절전 모드로 전환됩니다.

    4단계:변수 설정

    프로젝트를 사용하기 전에 편집해야 하는 특정 변수가 있습니다. 아래에 나열되어 있습니다. 설정 지침도 아래에 있습니다.

    <울>
  • 모드 장치의 모드는 주기적으로 샘플을 취하는지 또는 버튼의 동작으로 샘플을 취하는지를 결정합니다. 이 변수가 1로 설정되면 장치는 버튼을 통해 작동해야 합니다. 모드를 2로 설정하면 기기가 주기적으로 샘플을 채취합니다.
  • deviceID 및 deviceName 장치 집합이 사용 중인 경우 장치를 식별하는 데 사용되는 사용자 지정 변수입니다. 사용하는 각 기기에는 쉽게 식별할 수 있도록 고유한 ID와 이름을 부여해야 합니다.
  • 수면 시간 장치가 읽기 사이에 휴면하는 시간을 저장하며, 테스트에 적합하지만 필드에서 사용할 때 변경해야 하는 코드에서 5초로 설정됩니다. 15분 간격으로 샘플을 채취할 수 있습니다.
  • 프로디버그 디버깅할 때 사용되는 코드에서는 false로 설정되어 있지만 디버깅 시 직렬 모니터가 필요한 경우 true로 설정해야 합니다. 디버그가 꺼져 있어도 장치는 여전히 직렬로 인쇄합니다. 디버그가 켜져 있으면 직렬 모니터가 켜져 있지 않으면 장치가 실행되지 않습니다.
  • 5단계:코드 업로드

    백엔드를 설정하기 전에 데이터를 백엔드로 보내야 합니다.

    이렇게 하려면 MKR GSM을 컴퓨터에 연결하고 코드를 장치에 업로드하고 이 설정에 대해 장치 모드가 1로 설정되어 있는지 확인하십시오. 코드가 업로드되면 모든 센서를 물에 넣습니다.

    이제 장치의 버튼을 누르고 데이터가 수집 및 전송될 때까지 기다립니다. 이 작업을 몇 번 반복하여 Soracom Air를 채웁니다.

    6단계:Soracom 설정

    이 단계는 2개의 섹션으로 나뉩니다. 첫 번째 섹션에서는 Soracom 계정을 만들고 SIM을 등록하고 다른 섹션에서는 Air에서 데이터를 수집하도록 Soracom Harvest를 설정하는 방법을 다룹니다. 이미 Soracom 계정이 있는 경우 첫 번째 섹션을 건너뛰세요.

    섹션 1:계정 만들기

    섹션 2:그룹 및 수확

    7단계:라군 설정

    Soracom에서 마지막으로 설정할 것은 Lagoon입니다. 이것은 데이터를 시각화하고 데이터가 좋지 않은 경우 이메일 알림을 생성하는 데 사용할 도구입니다. 아래 단계를 따르세요.

    Calibration Problems

    The turbidity and pH sensors have to be calibrated to be used precisely, you might find that when running the code, the turbidity might by 105% or the pH of water 3. In this case, the sensors have to be calibrated. A quick guide into calibrating them is below.

    <울>
  • pH Sensor The pH sensor can be calibrated using the potentiometers on the module, place the probe in still bottled water of pH 7 and wait for 5 minutes, now develop a code that prints the pH from the sensor to the serial monitor. Twist the potentiometer until the pH is 7.
  • Turbidity Sensor The turbidity sensor is not very precise and so a relative percentage, compared to pure water is taken. To refine the value of pure water, if your readings exceed 100% turbidity, you will need to place the turbidity sensor in pure water and develop a code that prints the voltage on the analog pin of the pH sensor to the serial monitor. A variable named calibration is found in sensors.h , change the value of that variable to the voltage received when the probe was placed in pure water.
  • Libraries

    <울>
  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
  • Adafruit_Neopixel (c) Phil Burges Lesser General Public Licence this library is in the public domain
  • MKRGSM (c) 2016 Arduino AG GNU Lesser General Public Licence this library is in the public domain
  • Wire (c) 2006 Nicholas Zambetti GNU Lesser General Public Licence this library is in the public domain
  • OneWire (c) 2007 Jim Studt GNU General Public Licence this library is in the public domain
  • DallasTemperature GNU General Public Licence this library is in the public domain
  • RTCZero (c) 2015 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
  • Final

    Finally, I got an enclosure done for the project that could be easily portable but be fixed to collect samples both in mode 1 and 2. Steps are below.

    Finally, ensure that the mode is set accordingly and start using the device on the field. Check out your local river or lake and see how clean it is. Play around with the dashboard and see what other widgets it has.

    Background

    Today, data is the new currency and collecting it easily and efficiently is key to a better environment. By measuring the pollution of rivers and lakes collectively, we can raise awareness that the waters are getting dirtier and something has to be done.

    I was thinking of an idea for the Soracom contest and I felt like I had to make something beneficial for the environment, the idea of people and companies working together on collective dashboards to visualise the status of rivers and lakes globally inspired me to take this project on.

    What will you do to stop water pollution? Because action has to be taken today, and tomorrow is a day too late.


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

    코드

    코드
    The repo for the projecthttps://github.com/Andrei-Florian/UnifiedWater-v1

    회로도

    schematics_e7TRP6KJKI.fzz

    제조공정

    1. O2 센서란 무엇입니까?
    2. Raspberry Pi를 사용한 모션 센서
    3. 라즈베리 파이 토양 수분 센서
    4. DS18B20 센서 테스트
    5. 라즈베리 파이 온도 센서
    6. 센서 텔레메트리 2.0.1
    7. 감정 센서 / EEG
    8. Raspberry Pi 2의 Windows 10 IoT Core – Adafruit 센서 데이터
    9. 마이리버
    10. Arduino 클라우드 센서 타워