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

실내 공기질 및 쓰레기 모니터링 시스템

구성품 및 소모품

라즈베리 파이 3 모델 B
× 1
Arduino UNO
× 1
NodeMCU ESP8266 브레이크아웃 보드
× 1
DHT11 온도 및 습도 센서(4핀)
× 1
씨드 그로브 - 가스 센서(MQ2)
× 1
MQ-7 CO 가스 센서(일반)
× 1
초음파 센서 - HC-SR04(일반)
× 1
라즈베리 파이 전원 공급 장치
× 1
HDMI 케이블
× 1
USB-A-B 케이블
× 1
점퍼 와이어(일반)
× 1
5V 배터리(일반)
× 1

앱 및 온라인 서비스

IOTA 탱글
Node.js
라즈베리 파이 라즈비안
Arduino IDE
MQTT

이 프로젝트 정보

1. 소개

빌딩 자동화 빌딩 관리 시스템 또는 빌딩 자동화 시스템(BAS)을 통해 빌딩의 난방, 환기 및 공조, 조명 및 기타 시스템을 중앙에서 자동으로 제어하는 ​​것입니다. 건물 자동화의 목표는 거주자의 편안함 향상, 건물 시스템의 효율적인 운영, 에너지 소비 및 운영 비용 절감, 유틸리티 수명 주기 개선입니다.

아이오타 사물 인터넷에서 정보와 가치를 안전하게 교환하는 것을 목표로 하는 오픈 소스 분산 회계 기술입니다. IOTA의 주요 혁신 중 하나는 기존 블록체인 대신 DAG(Directed Acyclic Graph)라는 수학적 개념을 기반으로 하는 자체 아키텍처(Tangle)를 사용한다는 것입니다. 이 아키텍처는 커미션이 없고 네트워크 지연이 낮고 확장성에 대한 더 나은 관점을 가능하게 합니다. IOTA는 현재 개발 중이며 2019년 내내 이 기술이 대규모로 채택될 준비가 될 것으로 예상됩니다.

Raspberry Pi 3 B 사양 포함:

<울>
  • CPU:쿼드 코어 64비트 ARM Cortex A53(1.2GHz 클럭)
  • GPU:400MHz VideoCore IV 멀티미디어.
  • 메모리:1GB LPDDR2-900 SDRAM(900MHz)
  • USB 포트:4.
  • 비디오 출력:HDMI, 3.5mm 잭을 통한 컴포지트 비디오(PAL 및 NTSC)
  • 네트워크:10/100Mbps 이더넷 및 802.11n 무선 LAN.
  • Arduino UNO의 기능 보드:

    <울>
  • 마이크로컨트롤러:ATmega328.
  • 작동 전압:5V.
  • 입력 전압(권장):7-12V.
  • 입력 전압(제한):6-20V.
  • 디지털 I/O 핀:14개(이 중 6개는 PWM 출력 제공)
  • 아날로그 입력 핀:6.
  • I/O 핀당 DC 전류:40mA.
  • 3.3V 핀용 DC 전류:50mA.
  • NodeMCU , 기능:

    <울>
  • 마지막으로 프로그래밍 가능한 WiFi 모듈입니다.
  • Arduino와 유사한(소프트웨어 정의) 하드웨어 IO.
  • Arduino IDE로 프로그래밍할 수 있습니다.
  • USB-TTL 포함, 플러그 앤 플레이
  • 10개의 GPIO D0-D10, PWM 기능, IIC 및 SPI 통신, 1-Wire 및 ADC A0 등이 모두 하나의 보드에 있습니다.
  • 이 프로젝트는 세 가지 버전으로 나뉩니다. 프로젝트를 더 잘 이해할 수 있도록 다음 장으로 나누었습니다.

    <울>
  • 1. 소개
  • 2. 소프트웨어 설치
  • 3. 실내 공기질 모니터링 시스템 v1
  • 4. 실내 공기질 모니터링 시스템 v2
  • 5. 쓰레기 모니터링 시스템
  • 6. 결론
  • 2. 소프트웨어 설치

    a) Raspberry PI 3 B에 Raspbian 설치

    NOOBS를 설치했습니다. , 다운로드 링크 및 지침은 https://www.raspberrypi.org/downloads/

    에 있습니다.

    b) Node.JS 설치

    $ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
    $ sudo apt-get install -y nodejs

    c) Raspberry Pi에서 BCM2835 라이브러리를 다운로드하여 빌드합니다. 이 라이브러리는 DHT11 센서로 작업하는 데 도움이 됩니다.

    $ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.56.tar.gz
    $ tar zxvf bcm2835-1.56.tar.gz
    $ cd bcm2835 -1.56
    $ ./configure
    $ make
    $ sudo make check
    $ sudo make install

    d) Raspberry Pi에 실내 공기 품질 iota 프로젝트 다운로드 및 설치

    $ cd ~
    $ git clone https://github.com/guillengap/indoor-air-quality-and-garbage-monitoring-system.git
    $ cd 실내 공기 -품질 및 쓰레기 모니터링 시스템
    $ npm 설치

    e) 직렬 포트 다운로드 및 설치

    $ nmp 직렬 포트 설치 

    f) Arduino IDE 다운로드 및 설치:

    https://www.arduino.cc/en/Main/Software

    3. 실내 공기질 모니터링 시스템 v1

    DHT11 센서 데이터를 읽고 MAM을 사용하여 Tangle에 게시합니다.

    어떻게 작동합니까?

    a) 실내 공기 품질 iota 프로젝트에는 3개의 자바 스크립트 파일이 있습니다.

    <울>
  • sensor.js :DHT11 센서 데이터를 읽고 표시합니다:온도 및 습도.
  • mam_sensor.js :DHT11 센서 데이터를 읽고 MAM을 사용하여 IOTA Tangle에 게시합니다.
  • mam_receive.js :MAM을 사용하여 IOTA Tangle에서 저장된 데이터를 추출하고 데이터를 표시합니다.
  • b) 전체 노드 끝점과 측면 키는 모두 자바스크립트 파일에 하드코딩되어 있습니다. 스크립트 실행을 중지하려면 CTRL+Z를 누르세요. .

    c) Arduino UNO 보드인 DHT11 센서에 연결합니다.

    d) nodesensor.js 실행 Raspberry Pi가 DHT11 센서 모듈에서 온습도 데이터를 읽을 수 있는지 확인합니다.

    $ 노드 sensor.js 

    여기에서 DHT11 센서로 캡처한 습도 및 온도 데이터를 볼 수 있습니다. 모든 것이 정상이면 다음 단계로 넘어갑니다.

    e) 노드 실행 mam_sensor.js . 이 스크립트는 DHT11 센서 모듈의 온도 및 습도 데이터를 Tangle에 저장합니다.

    $ 노드 mam_sensor.js 

    3개의 노드로 테스트했으며 https://potato.iotasalad.org:14265

    에서 더 나은 결과를 얻었습니다.
    //const iota =new IOTA({ 제공자:'https://nodes.testnet.iota.org:443' });
    const iota =new IOTA({ 제공자:'https //potato.iotasalad.org:14265' });
    //const iota =새로운 IOTA({ 제공자:'https://peanut.iotasalad.org:14265' });

    https://iotasalad.org/nodes

    에서 사용 가능한 일부 노드를 참조할 수 있습니다.

    다음 정보를 보내드립니다:

    <울>
  • 도시:멕시코
  • 건물:65
  • 날짜 및 시간(UTC):연도. 월, 일, 시간. 분 및 초
  • 데이터:섭씨 및 화씨 온도 및 상대 습도 백분율
  • f) 다른 터미널을 열고 node mam_receive.js your_root를 입력합니다. 및 저장된 센서 데이터가 표시됩니다. 예:

    $ 노드 mam_receive.js AMBTIKZKEVEEQFCUGIDUOLDOXL9OZQ9GOMNBFYHVRAUCAMHDQQJBSNAMFZYRLTUVAHFDINHTTFKIPELIG 

    수신된 데이터를 관리하는 코드는 다음과 같습니다.

    // TANGLE에서 데이터 수신
    const executeDataRetrieval =async function(rootVal, keyVal) {
    let resp =await Mam.fetch(rootVal, MODE, keyVal, function(data) {
    let json =JSON.parse(iota.utils.fromTrytes(data));
    console.log(`City:${json.city}, 건물:${json.building}, 시간 :${json.dateTime} UTC, 데이터:${json.data}`);
    });
    }

    테스트

    이미지

    4. 실내 공기질 모니터링 시스템 v2

    DHT11, MQ-2 및 MQ-7 센서 데이터를 읽고 MAM을 사용하여 Tangle에 게시합니다.

    어떻게 작동합니까?

    a) 실내 공기 품질 iota 프로젝트에는 5개의 파일이 있습니다.

    <울>
  • sensorArduino.ino :이 코드는 DHT11 습도 및 온도 센서, MQ-2 LPG 가스 센서, MQ-7 CO 가스 센서의 세 가지 센서의 데이터를 캡처하는 코드입니다.
  • ListportsArduino.ino :Arduino UNO 보드에서 사용 가능한 포트를 보여줍니다.
  • sensorArduino.js :DHT11, MQ-2 및 MQ-7 센서 데이터를 읽고 표시합니다.
  • mam_sensorArduino.js :DHT11, MQ-2 및 MQ-7 센서 데이터를 읽고 MAM을 사용하여 Tangle에 게시합니다.
  • mam_receiveArduino.js :MAM을 사용하여 Tangle에서 저장된 데이터를 추출하고 데이터를 표시합니다.
  • b) 전체 노드 끝점과 측면 키는 모두 자바스크립트 파일에 하드코딩되어 있습니다. 스크립트 실행을 중지하려면 CTRL+Z를 누르세요. .

    c) Arduino UNO 보드, 센서:DHT11, MQ-2 및 MQ-7에 연결합니다.

    d) 실내 공기 품질 iota 프로젝트에 있는 "sensorArduino" 폴더에는 DHT11, MQ-2 및 MQ7과 같은 센서 라이브러리가 있습니다. Arduino 라이브러리에 설치해야 합니다.

    e) 스케치 sensorArduino.ino 업로드 , Arduino UNO 보드로 이동하여 실행합니다. Arduino UNO 보드와의 통신 포트를 선택합니다. 제 경우에는 Tools> Port> / dev / ttyACM0

    입니다.

    f) 터미널을 열고 node listportsArduino.js를 실행합니다. 포트가 활성 상태인지 확인합니다.

    $ 노드 listportsArduino.js 

    g) 노드 mam_sensorArduino.js 실행 . 이 스크립트는 Arduino UNO 보드의 데이터를 Tangle에 저장합니다.

    $ 노드 mam_sensorArduino.js 

    다음 정보를 보내드립니다:

    <울>
  • 도시:뉴욕
  • 건물:13
  • 날짜 및 시간(UTC):연도. 월, 일, 시간. 분 및 초
  • 데이터:LPG 가스(ppm), CO 가스(ppm), 온도(섭씨 온도), 상대 습도 백분율,
  • h) 다른 터미널을 열고 node mam_receiveArduino.js your_root를 입력합니다. 그리고 저장된 센서 데이터가 표시됩니다. 예:

    수신된 데이터를 관리하는 코드는 다음과 같습니다.

    // TANGLE에서 데이터 수신
    const executeDataRetrieval =async function(rootVal, keyVal) {
    let resp =await Mam.fetch(rootVal, MODE, keyVal, function(data) {
    let json =JSON.parse(iota.utils.fromTrytes(data));
    console.log(`City:${json.city}, 건물:${json.building}, 시간 :${json.time} UTC, 데이터:${json.data}`);
    });
    executeDataRetrieval(resp.nextRoot, keyVal);
    }

    테스트

    이미지

    5. 쓰레기 모니터링 시스템

    MAM을 사용하여 NodeMCU 및 MQTT를 사용하여 IOTA Tangle에 SRF05 센서 데이터 보내기

    어떻게 작동합니까?

    a) 이 프로젝트에는 3개의 파일이 있습니다:

    <울>
  • trashcan.ino :이 코드는 쓰레기통 안의 쓰레기 양을 % 단위로 계산합니다. 그런 다음 MQTT 프로토콜을 사용하여 데이터를 Raspberry Pi 3B 보드로 보냅니다.
  • nodemcu_mqtt_mam .js :SRF05 센서 데이터를 읽고 MAM을 사용하여 Tangle에 게시합니다.
  • nodemcu_mam_receive.js :MAM을 사용하여 Tangle에서 저장된 데이터를 추출하고 데이터를 표시합니다.
  • b) 전체 노드 끝점과 측면 키는 모두 자바스크립트 파일에 하드코딩되어 있습니다. 스크립트 실행을 중지하려면 CTRL+Z를 누르세요. .

    c) SRF05 초음파 센서인 NodeMCUboard에 연결합니다.

    d) 보드 관리자를 사용하여 esp8266 패키지를 설치합니다. Arduino IDE 기본 설정 창을 열고 추가 보드 관리자 URL 필드에 입력합니다. http://arduino.esp8266.com/stable/package_esp8266com_index.json

    메뉴 선택:도구> 게시판> 게시판 관리자... 검색 필드에 esp8266을 입력하고 최신 버전을 설치합니다.

    e) 이제 NodeMCU가 모기 서버와 통신하도록 합시다. 먼저 Arduino IDE에 PubSubClient 라이브러리를 추가하여 시작합니다. 이 라이브러리는 MQTT 메시징용이며 NodeMCU를 지원합니다.

    <울>
  • 메뉴 선택:스케치> 라이브러리 포함> 라이브러리 관리
  • 검색 대상:PubSub
  • PubSubClient(Nick O'Leary)를 선택하고 최신 버전을 설치합니다.
  • f) 다음 Mosquitto(MQTT) 설치 RaspberryPi 3B에서. MQTT 프로토콜은 발행/구독 모델을 사용하여 메시징을 수행하는 간단한 방법을 제공합니다. 따라서 저전력 센서 또는 휴대전화, 임베디드 컴퓨터 또는 마이크로컨트롤러와 같은 모바일 장치와 같은 사물 인터넷 메시징에 적합합니다. Raspberry Pi에 로그인하고 터미널을 열고 다음을 입력합니다.

    $ cd~ 
    $ wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
    $ apt-key mosquitto-repo.gpg.key 추가
    $ cd /etc/apt/sources.list.d/$ wget http://repo.mosquitto.org/debian/mosquitto-stretch.list

    이제 다음을 설치하십시오.

    $ cd~
    $ wget http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u11_armhf .deb
    $ sudo dpkg -i libssl1.0.0_1.0.1t-1+deb8u11_armhf.deb
    $ wget http://ftp.nz.debian.org/debian/pool/main/libw/ libwebsockets/libwebsockets3_1.2.2-1_armhf.deb
    $ sudo dpkg -i libwebsockets3_1.2.2-1_armhf.deb

    libss... 최신 버전은 여기에서 찾을 수 있습니다:http://security.debian.org/debian-security/pool/updates/main/o/openssl/

    MQTT 브로커 및 모기 클라이언트를 설치합니다.

    $ sudo apt-get 설치 모기 모기 클라이언트 

    MQTT 설치에 문제가 있는 경우 다음을 시도할 수 있습니다.

    $ npm install mqtt --save 

    라즈베리 파이를 재부팅하십시오. 터미널을 열고 모기 버전을 확인하십시오:

    $ 모기 -v 

    모기 서버를 시작 및 중지할 수 있습니다.

    $ sudo /etc/init.d/mosquitto 시작
    $ sudo /etc/init.d/mosquitto 중지

    Raspberry Pi의 IP를 확인합니다.

    $ ifconfig 

    g) 스케치 trashcan.ino 업로드 , NodeMCU 보드에. 다음 데이터 확인:

    <울>
  • NodeMCU 1.0 보드
  • 직렬 포트
  • Serial.begin(115200);
  • const char* wifi_ssid ="ARRIS-WXYZ";
  • const char* wifi_password ="XXXXXXXXXXXX";
  • const char* mqtt_server ="192.168.0.12"; // 라즈베리 IP
  • int trashcan =25;// 내 휴지통의 길이는 25CM입니다.
  • h) nodemcu_mqtt_mam.js 실행 , 이 스크립트는 NodeMCU 보드의 데이터를 Tangle에 저장합니다.

    $ nodemcu_mqtt_mam.js 

    다음 정보를 보내드립니다:

    <울>
  • 도시:베를린
  • 건물:7
  • 날짜 및 시간(UTC):연도. 월, 일, 시간. 분 및 초
  • 데이터:휴지통 비율.
  • i) 다른 터미널을 열고 node mam_receiveArduino.js your_root를 입력합니다. 그리고 저장된 센서 데이터가 표시됩니다. 예:

    수신된 데이터를 관리하는 코드는 다음과 같습니다.

    // TANGLE에서 데이터 수신
    const executeDataRetrieval =async function(rootVal, keyVal) {
    let resp =await Mam.fetch(rootVal, MODE, keyVal, function(data) {
    let json =JSON.parse(iota.utils.fromTrytes(data));
    console.log(`City:${json.city}, 건물:${json.building}, dateTime :${json.dateTime} UTC, 데이터:${json.data}`);
    });
    executeDataRetrieval(resp.nextRoot, keyVal);
    }

    이 경우 사용 가능한 노드가 다릅니다:https://iotasalad.org/nodes

    const iota =새로운 IOTA({ 제공자:'https://durian.iotasalad.org:14265' }); 

    테스트

    이미지

    6. 결론

    실내 공기질 모니터링 시스템 v1:

    이 프로젝트는 만족스럽게 작동했으며 얻은 결과에서 볼 수 있듯이 건물 내부의 공기 품질을 모니터링합니다. 우리는 멕시코 시티에 위치한 건물에서 이 프로젝트를 시뮬레이션합니다. 이것은 DHT11 습도 및 온도 센서와 Raspberry Pi 3B 보드, Java Script 코드 및 IOTA 프로토콜을 사용한 기본 테스트였습니다.

    실내 공기질 모니터링 시스템 v2:

    이 프로젝트에서는 DHT11, MQ-2(LPG) 및 MQ-7(CO) 센서를 사용했습니다. 이 기회에. 우리는 뉴욕시에 위치한 건물에서 데이터 캡처를 시뮬레이션하고 Arduino UNO 및 Raspberry Pi 보드를 사용하여 이 데이터를 MAM(Masked Authenticated Messaging)을 사용하여 IOTA Tangle로 보냅니다. 이것은 더 많은 센서를 추가하는 실용적이고 빠른 방법이었습니다. 이 버전은 스마트 빌딩 및 LP 가스가 사용되는 산업 및 화재로 인해 일산화탄소가 생성되는 산업에서 사용할 수 있습니다.

    쓰레기 모니터링 시스템:

    이 프로젝트의 목표는 베를린 시내 또는 모든 지역에 위치한 스마트 빌딩의 쓰레기 보관소를 관리하는 것입니다. 쓰레기가 쌓이면 분해 시 제품의 나쁜 냄새가 날 수 있지만 이제 우리는 쓰레기통에 쓰레기가 있는 기간과 이 쓰레기의 비율을 알 수 있습니다.


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

    코드

    <울>
  • 센서.js
  • mam_sensor.js
  • mam_receive.js
  • mam_sensorArduino.js
  • mam_receiveArduino.js
  • sensor.js자바스크립트
    실내 공기질 모니터링 시스템 v1
    DHT11 센서를 테스트하는 코드
    const sensor =require('node-dht-sensor');const TIMEINTERVAL =10; // SECONDSconst 센서 유형 =11; // 11=DHT11, 22=DHT22const GPIOPIN =4; // DHT11 센서의 RASPBERRY GPIO 핀function readSensor(){ sensor.read(SENSORTYPE, GPIOPIN, function(err, 온도, 습도) { if (!err) { console.log('temp:' + temperature.toFixed(1) ) + 'C, ' + '습도:' + 습도.toFixed(1) + '%'); } else { console.log(err); } });}readSensor();// 모든 센서 값을 자동으로 업데이트 10 SECONDSsetInterval(readSensor, TIMEINTERVAL*1000);
    mam_sensor.js자바스크립트
    실내 공기질 모니터링 시스템 v1
    이 코드는 DHT11 센서 모듈의 온도 및 습도 데이터를 Tangle
    const sensor =require('node-dht-sensor');const Mam =require('./lib/mam.client.js')로 저장합니다.;const IOTA =require('iota.lib.js');const moment =require('moment');//const iota =new IOTA({ 제공자:'https://nodes.testnet.iota.org:443 ' });const iota =새로운 IOTA({ 제공자:'https://potato.iotasalad.org:14265' });//const iota =새로운 IOTA({ 제공자:'https://peanut.iotasalad.org :14265' }); const MODE ='제한됨'; // 공개, 개인 또는 제한 const SIDEKEY ='mysecret'; // 제한된 모드에서만 사용 const SECURITYLEVEL =3; const TIMEINTERVAL =30; // SECONDSconst 센서 유형 =11; // 11=DHT11, 22=DHT22const GPIOPIN =14; // DHT11 센서의 RASPBERRY GPIO PIN// MAM 상태 초기화 mamState =Mam.init(iota, undefined, SECURITYLEVEL);// 채널 모드if (MODE =='restricted') { const key =iota.utils.toTrytes(SIDEKEY); mamState =Mam.changeMode(mamState, MODE, key);} else { mamState =Mam.changeMode(mamState, MODE);}// TANGLEconst에 게시 publish =async function(packet) { // MAM PAYLOAD 생성 const trytes =iota .utils.toTrytes(JSON.stringify(패킷)); const 메시지 =Mam.create(mamState, trytes); // 새 MAMSTATE 저장 mamState =message.state; console.log('루트:', 메시지.루트); console.log('주소:', 메시지.주소); // 페이로드 첨부 Mam.attach(message.payload, message.address); return message.root;}function readSensor(){ sensor.read(SENSORTYPE, GPIOPIN, 비동기 함수(err, 온도, 습도) { if (!err) { const city =('MEXICO'); const building =('65 '), const dateTime =moment().utc().format('YYYY/MM/DD hh:mm:ss'), const 데이터 =`{온도:${온도.toFixed(1)}°C($ {(온도.toFixed(1)*1.8)+32}°F), 습도:${humidity.toFixed(1)}%}`; const json ={"data":데이터, "dateTime":dateTime, " 건물":건물, "도시":도시}; const root =await publish(json); console.log(`도시:${json.city}, 건물:${json.building}, 시간:${json. dateTime} UTC, 데이터:${json.data}, 루트:${root}`); } else { console.log(err); } });}// START ITreadSensor();// 자동으로 센서 값 업데이트 30초마다setInterval(readSensor, TIMEINTERVAL*1000);
    mam_receive.js자바스크립트
    실내 공기질 모니터링 시스템 v1
    저장된 센서 데이터가 표시됩니다.
    const Mam =require('./lib/mam.client.js');const IOTA =require('iota.lib.js');//const iota =new IOTA( { 제공자:'https://nodes.testnet.iota.org:443' });const iota =새로운 IOTA({ 제공자:'https://potato.iotasalad.org:14265' });//const iota =새로운 IOTA({ 제공자:'https://peanut.iotasalad.org:14265' }); const MODE ='제한됨'; // 공개, 개인 또는 제한 const SIDEKEY ='mysecret'; // 제한된 모드에서만 사용let root;let key;// CHECK THE ARGUMENTSconst args =process.argv;if(args.length !=3) { console.log('인수로서 누락된 루트:node mam_receive.js  '); process.exit();} else if(!iota.valid.isAddress(args[2])){ console.log('잘못된 루트를 입력했습니다:'+ args[2]); process.exit();} else { root =args[2];}// MAM STATElet 초기화 mamState =Mam.init(iota);// SET CHANNEL MODEif (MODE =='restricted') { 키 =iota.utils .toTrytes(사이드키); mamState =Mam.changeMode(mamState, MODE, key);} else { mamState =Mam.changeMode(mamState, MODE);}// TANGLEconst에서 데이터 수신 executeDataRetrieval =async function(rootVal, keyVal) { let resp =Mam을 기다립니다 .fetch(rootVal, MODE, keyVal, function(data) { let json =JSON.parse(iota.utils.fromTrytes(data)); console.log(`도시:${json.city}, 건물:${json .building}, 시간:${json.dateTime} UTC, 데이터:${json.data}`), }); }executeDataRetrieval(루트, 키);
    mam_sensorArduino.js자바스크립트
    실내 공기질 모니터링 시스템 v2
    DHT11, MQ-2 및 MQ-7 센서 데이터를 읽고 MAM을 사용하여 Tangle에 게시합니다.
    const SerialPort =require('serialport');const moment =require('moment');const IOTA =require ('iota.lib.js');const Mam =require('./lib/mam.client.js');//const iota =new IOTA({ 제공자:'https://nodes.testnet.iota. org:443' });const iota =새로운 IOTA({ 제공자:'https://potato.iotasalad.org:14265' });const MODE ='제한됨'; // 퍼블릭, 프라이빗, RESTRICTEDconst SIDEKEY ='mysecret'; // 오직 ASCII CHARACTERSconst SECURITYLEVEL =3; // 1, 2, 3const 포트 이름 ='/dev/ttyACM1'; // 유효한 포트를 입력 const port =new SerialPort(PORTNAME, { baudRate:9600, autoOpen:true});const Readline =SerialPort.parsers.Readline;const 파서 =port.pipe(new Readline({ 구분 기호:'\r\) n' }));// MAM 상태 초기화 mamState =Mam.init(iota, undefined, SECURITYLEVEL);// SET CHANNEL MODEif (MODE =='restricted') { const key =iota.utils.toTrytes(SIDEKEY); mamState =Mam.changeMode(mamState, MODE, key);} else { mamState =Mam.changeMode(mamState, MODE);}// TANGLEconst에 게시 publish =async function(packet) { // MAM PAYLOAD 생성 const trytes =iota .utils.toTrytes(JSON.stringify(패킷)); const 메시지 =Mam.create(mamState, trytes); // 새 MAMSTATE 저장 mamState =message.state; console.log('루트:', 메시지.루트); console.log('주소:', 메시지.주소); // 페이로드 첨부 Mam.attach(message.payload, message.address); return message.root;}// 직렬 포트 라이브러리 EVENTSport.on('open', showPortOpen);parser.on('data', readSerialData);port.on('close', showPortClose);port.on('error ', showError);// 콜백 기능 기능 showPortOpen() { console.log('직렬 포트 열림. 데이터 속도:' + port.baudRate);}async function readSerialData(data){ let json ={}; const 시간 =moment().utc().format('YYYY/MM/DD hh:mm:ss'); const 도시 =('NY'); const 건물 =('13'); json['시간'] =시간; json['도시'] =`${도시}`; json['건물'] =`${건물}`; json['데이터'] =`{${데이터}}`; console.log('json =',json); const root =await publish(json);}function showPortClose() { console.log('직렬 포트가 닫혔습니다.');}function showError(error) { console.log('직렬 포트 오류:' + 오류);} 
    mam_receiveArduino.jsJavaScript
    Indoor Air Quality Monitoring System v2
    Extract the stored data from the Tangle using MAM and display the data.
    const Mam =require('./lib/mam.client.js');const IOTA =require('iota.lib.js');//const iota =new IOTA({ provider:'https://nodes.testnet.iota.org:443' });const iota =new IOTA({ provider:'https://potato.iotasalad.org:14265' });const MODE ='restricted'; // PUBLIC, PRIVATE OR RESTRICTEDconst SIDEKEY ='mysecret'; // ENTER ONLY ASCII CHARACTERSlet root;let key;// CHECK THE ARGUMENTSconst args =process.argv;if(args.length !=3) { console.log('Missing root as argument:node mam_receive.js '); process.exit();} else if(!iota.valid.isAddress(args[2])){ console.log('You have entered an invalid root:'+ args[2]); process.exit();} else { root =args[2];}// INITIALIZE MAM STATElet mamState =Mam.init(iota);// SET CHANNEL MODEif (MODE =='restricted') { key =iota.utils.toTrytes(SIDEKEY); mamState =Mam.changeMode(mamState, MODE, key);} else { mamState =Mam.changeMode(mamState, MODE);}// RECEIVE DATA FROM THE TANGLEconst executeDataRetrieval =async function(rootVal, keyVal) { let resp =await Mam.fetch(rootVal, MODE, keyVal, function(data) { let json =JSON.parse(iota.utils.fromTrytes(data)); console.log(`City:${json.city}, Building:${json.building}, Time:${json.time} UTC, Data:${json.data}`); }); executeDataRetrieval(resp.nextRoot, keyVal);}executeDataRetrieval(root, key);

    회로도

    Schematic diagram Schematic diagram Schematic diagram

    제조공정

    1. DIY 환경 및 대기 질 모니터
    2. Raspberry Pi 및 Nagios로 실내 온도 모니터링
    3. Python 및 Raspberry Pi 온도 센서
    4. Moteino와 Raspberry Pi로 실내 온도 모니터링
    5. 라즈베리 파이용 DIY 적외선 모션 센서 시스템
    6. Raspberry Pi Photocell 로그 및 경고 시스템
    7. Raspberry Pi 온도 및 광 센서
    8. Raspberry Pi 및 Twilio를 사용한 음성 및 SMS 지원 광 센서
    9. Raspberry Pi 센서 및 액추에이터 제어
    10. Raspberry Pi 및 습도 센서를 사용한 수경재배