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

홈 모니터

구성품 및 소모품

Arduino Mega 2560
× 1
Arduino 이더넷 보드
× 1
I2C 인터페이스가 있는 4x20 LCD
× 1
DHT22 온도 센서
× 1
DS3231 RTC
× 1
HC-SR04 초음파 거리
× 1
OSH Park 맞춤형 PCB 제작
× 1

이 프로젝트 정보

딸아이 집에 Ecobee Smart 온도 조절기를 설치하여 홈 모니터링을 시작했습니다. 그것들은 Ecobee에 의해 중단되었으므로 배수조 수위, 홍수 경보, 정전 및 기타 항목과 같은 것을 모니터링할 수 있는 대안을 원했습니다. 나는 특히 Arduino와 웹 사이트의 코딩을 위해 다양한 사이트의 다른 프로젝트에서 많은 것을 그렸습니다. 알림에 Pushingbox를 사용하는 것은 원격 알림 수단을 허용하는 시스템의 핵심 부분이었습니다. 저는 그들의 지식과 프로젝트를 공개해 준 공개 디자인 커뮤니티에 감사드립니다.

나는 Arduino Mega 2560으로 시작하여 이더넷 카드를 추가했습니다. Eagle cad를 사용하여 입력용 보드와 시각적 표시기를 디자인했습니다. OSH Park에서 만든 것입니다. 인터페이스 보드는 7개의 사용 가능한 건식 접점, 온도 및 습도 센서, 실시간 시계 및 초음파 섬프 레벨 센서를 Arduino에 연결합니다.

로컬 디스플레이의 경우 4x20 LCD 디스플레이를 사용했습니다. 또한 모든 알람 입력의 상태를 표시하는 8개의 LED가 있습니다(입력 시 황색, 해제 시 녹색, 재설정 시 꺼짐).
리셋 버튼은 메시지 활성화 PB가 Pushingbox를 사용하여 알림을 켜고 끄는 동안 모든 녹색 LED를 지웁니다.

웹사이트는 LAN에서만 표시됩니다. 보안상의 이유로 라우터를 이식하고 싶지 않았습니다. 내 연구실 시스템에서 단독으로 사용하고 싶었기 때문에 jqplot 뿐만 아니라 일부를 사용한 Arduino 예제가 몇 가지 있었습니다.

전체 디스플레이 웹사이트.

아직 레이블이 없지만 소프트웨어는 센서에서 10인치 미만의 거리에서 경보하도록 설정되어 있으며 이 경보가 활성화되었음을 나타내는 황색 LED가 켜집니다. 녹색 알람은 한 번 들어왔지만 그 이후에 열렸음을 나타냅니다. 리셋 pb를 누르면 녹색 LED가 꺼지지만 레벨이 10인치보다 클 때까지 황색 LED가 켜진 상태를 유지합니다.

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

코드

<울>
  • Arduino 코드
  • 웹사이트
  • Arduino 코드C/C++
     // 홈 모니터 코드/* 할당 arduino grn led 빨간색 led 인터페이스 표시기 표시기 센서# 가변 입력 핀 출력 핀 출력 핀 가변 보드 핀 보드 빨간색 핀 보드 grn 핀섬프 레벨 1 6,8 18 19인치 x15-2 ~ 6 , x15-3 ~ 8 20-1 20-2홍수 경보 2 28 23 25 x15-4 20-3 20-4 전력 손실 3 30 27 29 x15-5 20-5 20-6 온도 4 ftemp 5 (ftemp,1 ) x15-1 습도 5 fhumi 5 (fhumi,1) x15-1aux 1 6 aux1 32 31 33 x15-6 20-7 20-8aux 2 7 aux2 34 35 37 x15-11 21-1 21-82 3 aux 3 36 39 41 x15-7 21-3 21-4aux 4 9 aux4 38 43 45 x15-8 21-5 21-6aux 5 10 aux5 40 47 49 x15-9 21-7 21-8reset 억제 리셋-102meshbage 리셋 금지 x15-12message led 17*은 wifi 실드용으로 변경해야 합니다. WIRINGVCC에서 5VLCD로:SDA 핀에서 핀 21LCD:SCL 핀에서 핀 20DHT:DHT 핀 1에서 VCCDHT로:DHT 핀 2에서 핀 5로, 10K에서 VCCDHT로:DHT 핀 3 예비DHT:DHT 핀 4에서 GNDSR04:SR04 핀에서 핀 8SR04:SR04 핀 에코에서 핀 6RTC:SDA 핀에서 핀 21RTC:SCL 핀에서 핀 20LOSS OF POWER 핀 30FLOOD ALARM 핀 28MESSAGE LED 핀 17은 핀 4, 7, 10, 11, 12, 13 50, 51, 52 및 53을 사용할 수 없습니다. */// 라이브러리#include #include #include # include  #include #include #include #include #include // HTTP 캡처에 사용되는 버퍼 크기 requests#define REQ_BUF_SZ 50// boardbyte mac[] ={ 0xzz, 0xzz, 0xzz, 0xzz, 0xzz, 0xzz };IPAddress ip(192, 168, 1, 100);//(10, 9, 9, 12); 또는 (192,168,1,100); IP 주소는 networkIPAddress 게이트웨이(192,168,1,1)에 따라 변경해야 할 수 있습니다. //(10,9,9,1):또는 (192,168,1,1); 이전에 다른 스케치에서 사용되지 않은 주소 서브넷(255,255,255,0);//(255,255,255,0)을 제거해야 할 수도 있습니다. 이전에 다른 스케치에서 사용되지 않은 것은 제거해야 할 수도 있습니다.thernetServer server(1000); // 포트 1000File에 서버 생성 webFile; // SD 카드의 웹 페이지 파일char HTTP_req[REQ_BUF_SZ] ={0}; // null로 끝나는 버퍼링된 HTTP 요청으로 저장됨 stringchar req_index =0; // HTTP_req 버퍼에 대한 색인//PushingBox.com의 비밀 DevID. 원하는 경우 여러 핀에 여러 DevID를 사용할 수 있습니다.char DEVID1[] ="xxxxxxxxxxxxxxxxx"; //시나리오:"이것은 첫 번째 경고 시나리오입니다." 여기에 DevID를 따옴표로 묶으십시오.// DEVICE SETUP//setup LCDLiquidCrystal_I2C lcd(0x27,20,4); // 16자 및 2줄 표시를 위해 LCD 주소를 0x27로 설정 // DHT22dht 설정 DHT;#define DHT22_PIN 5//setup sonar#define TRIGGER_PIN 8 // 초음파 센서의 트리거 핀에 연결된 Arduino 핀.#define ECHO_PIN 6 // 초음파 센서의 에코 핀에 연결된 Arduino 핀.#define MAX_DISTANCE 200 // 핑할 최대 거리(센티미터). 최대 센서 거리는 400-500cm입니다.NewPing 소나(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // 핀 및 최대 거리의 NewPing 설정.//setup RTCRTC_DS3231 RTC;//전역 변수 unsigned long mathtime1 =0; 부호 없는 긴 mathtime2 =0; 부호 없는 긴 mathtime3 =0; 부호 없는 긴 mathtime3a =0; 부호 없는 긴 mathtime4 =0; 문자열 타임스트링; 문자열 날짜 문자열; unsigned int 인치; 부동 ftemp; 플로트 후미; 정수 aux1; 정수 aux2; 정수 aux3; 정수 aux4; 정수 aux5; 정수 재설정; 정수 msginhbt =낮음; 정수 센서1 =0; 스트링 센서2 =0; 스트링 센서3 =0; 정수 센서4 =0; 정수 센서5 =0; 스트링 센서6 =0; 스트링 센서7 =0; 스트링 센서8 =0; 스트링 센서9 =0; 스트링 센서10 =0; 문자열 messageend;문자열 sensor1msg;문자열 sensor2msg;문자열 sensor3msg;문자열 sensor6msg;문자열 sensor7msg;문자열 sensor8msg;문자열 sensor9msg;문자열 sensor10msg;문자열 msginhbtmsg;문자열 devid ="xxxxxxxxxxxxxxxxxx";char serverName[] ="api.pushingbox.com"; 부울 lastConnected =false; 부울 DEBUG =true; // 문제 해결용 pushboxboolean DEBUG1 =true; //웹사이트 문제 해결을 위해 부울 DEBUG2 =false; //문제 해결을 위해 datavoid setup(){// SD CARD OPERATIONS // 이더넷 칩 비활성화 pinMode(10, OUTPUT); 디지털 쓰기(10, 높음); // 디버그용 직렬 시작 Serial.begin(9600); if (DEBUG1){Serial.println("시작 프로그램..");} Ethernet.begin(mac,ip,gateway,subnet); if (DEBUG1){Serial.println("활성 서버 IP:");Serial.println(Ethernet.localIP());} server.begin(); // SD 카드 초기화 if (DEBUG1){Serial.println("SD 카드 초기화 중...");} if (!SD.begin(4)) { if (DEBUG1){Serial.println("ERROR - SD 카드 초기화 실패!");} 반환; // 초기화 실패 } if (DEBUG1){Serial.println("SUCCESS - SD 카드가 초기화되었습니다.");} // index.htm 파일 확인 if (!SD.exists("index.htm")) { if ( DEBUG1){Serial.println("오류 - index.htm 파일을 찾을 수 없습니다!");} return; // 인덱스 파일을 찾을 수 없습니다 } Serial.println("SUCCESS - index.htm 파일을 찾았습니다."); // INITIALIZE EQUIPMENT //웹 서버 초기화 Ethernet.begin(mac, ip); // 이더넷 장치를 초기화합니다. server.begin(); // 클라이언트 수신 시작 // lcd 초기화 lcd.init(); //RTC 초기화 Wire.begin(); RTC.begin(); if (!RTC.isrunning()) { if (DEBUG2){Serial.println("RTC is NOT running!");} // 다음 행은 RTC를 이 스케치가 컴파일된 날짜와 시간으로 설정합니다. RTC.adjust(DateTime (__날짜 시간__)); } 지금 날짜 시간 =RTC.now(); 컴파일된 DateTime =DateTime(__DATE__, __TIME__); if (now.unixtime() -1){ //명령이 오는지 확인 homefront =homefront+6; // 다음 문자를 얻습니다. int endfront =homefront+3; //이 명령은 3자 문자열 작업 =line.substring(homefront,endfront);//명령 값을 검색합니다. client.print("datas({ sensor1 :"); client.print(sensor1); client.print("datas({ sensor1 :"); print(", sensor2:"); client.print(sensor2); client.print(", sensor3:"); client.print(sensor3); client.print(", sensor4:"); client.print(sensor4 ); client.print(", sensor5:"); client.print(sensor5); client.print(", sensor6:"); client.print(sensor6); client.print(", sensor7:"); 클라이언트 .print(sensor7); client.print(", sensor8:"); client.print(sensor8); client.print(", sensor9:"); client.print(sensor9); client.print(", sensor10:"); client.print(sensor10); client.print(", msgtimer:"); client.print(mathtime3a); client.print(", msgonoff:"); client.print(msginhbtmsg); client.print( "})"); } 부서지다; } if(c =='\n') { 연속 =참; } else if (c !='\r') { 연속 =거짓; } } } 지연(1); client.stop(); } if (DEBUG1){Serial.print("datas({ sensor1:"); Serial.println(sensor1); Serial.print(", sensor2:"); Serial.println(sensor2); Serial.print(", sensor3:"); Serial.println(sensor3); Serial.print(", sensor4:"); Serial.println(sensor4); Serial.print(", sensor5:"); Serial.println(sensor5); 직렬. print(", sensor6:"); Serial.println(sensor6); Serial.print(", sensor7:"); Serial.println(sensor7); Serial.print(", sensor8:"); Serial.println(sensor8 ); Serial.print(", sensor9:"); Serial.println(sensor9); Serial.print(", sensor10:"); Serial.println(sensor10); Serial.print(", msgtimer:"); 직렬 .println(mathtime3a); Serial.print(", msgonoff :"); Serial.print(msginhbtmsg); Serial.println("})");} if (DEBUG1){Serial.print("내 웹사이트 IP 주소:"); Serial.println(Ethernet.localIP());} }void timeanddate(){//시간 및 날짜 DateTime now =RTC.now(); DateTime future(now.unixtime() - 0);//시간 수정은 840 문자열 시간 문자열에 있었습니다. 문자열 분 문자열; 문자열 두 번째 문자열; if(future.hour() <10){ hourstring ='0' + String(future.hour()) + ':';} else { hourstring =String(future.hour()) + ':';} if (future.minute() <10){ minstring ='0' + String(future.minute()) + ':';} else { minstring =String(future.minute()) + ':';} if( future.second() <10){ secondstring ='0' + String(future.second());} else { secondstring =String(future.second());} timestring=시문자열 + 분문자열 + 초문자열; 문자열 월 문자열; 문자열 일 문자열; 문자열 연도; if(future.month() <10){monthstring ='0' + String(future.month()) + '/';} else {monthstring =String(future.month()) + '/';} if (future.day() <10){ daystring ='0' + String(future.day()) + '/';} else {daystring =String(future.day()) + '/';} datestring=월 문자열 + 일 문자열 + future.year(); lcd.setCursor(0,0); lcd.print(시간 문자열); lcd.setCursor(10,0); lcd.print(날짜 문자열); mathtime1 =(now.unixtime()); 반품; }void 초음파 센서(){ //초음파 센서{ unsigned int uS =sonar.ping_median(5); // 핑을 보내고 마이크로초(uS)로 핑 시간을 얻습니다. lcd.setCursor(9,1); lcd.print(" "); lcd.setCursor(9,1); lcd.print(미국 / US_ROUNDTRIP_IN); // 핑 시간을 cm 단위의 거리로 변환하고 결과를 출력합니다. (0 =설정된 거리 범위를 벗어남) inches =(uS / US_ROUNDTRIP_IN); 센서1 =인치; if (DEBUG2){Serial.print("거리:");Serial.println(inches);}}return;}void dht22(){//온도 및 습도 센서{ if ((mathtime1 - mathtime4)>2) { 정수 chk =DHT.read22(DHT22_PIN); fhumi=(DHT.습도); ftemp=((DHT.온도*1.8)+32); lcd.setCursor(9,2); lcd.print(후미, 1); lcd.setCursor(12,3); lcd.print(ftemp, 1); 수학시간4 =수학시간1; } //지연(2000); // 판독을 위한 2초 지연 if (DEBUG2){Serial.println("온도 및 습도:");} if (DEBUG2){Serial.println(ftemp,1);} if (DEBUG2){Serial.println(fhumi ,1);} }return;}void annunciator() { //섬프 알람 if (inches<10) { digitalWrite(18, HIGH); 디지털 쓰기(19, 높음); } else { digitalWrite(19, LOW);} // 홍수 경보 if (digitalRead(28) ==HIGH ) { digitalWrite(23, HIGH); 디지털 쓰기(25, 높음); } else { digitalWrite(25, LOW);}//전원 손실 alarmif (digitalRead(30) ==HIGH ) { digitalWrite(27, HIGH); 디지털 쓰기(29, 높음); } else { digitalWrite(29, LOW);}//aux 1 alarmif (digitalRead(32) ==HIGH ) { digitalWrite(31, HIGH); 디지털 쓰기(33, 높음); } else { digitalWrite(33, LOW);}//aux 2 alarmif (digitalRead(34) ==HIGH ) { digitalWrite(35, HIGH); 디지털 쓰기(37, 높음); } else { digitalWrite(37, LOW);}//aux 3 alarmif (digitalRead(36) ==HIGH ) { digitalWrite(39, HIGH); 디지털 쓰기(41, 높음); } else { digitalWrite(41, LOW);}//aux 4 alarmif (digitalRead(38) ==HIGH ) { digitalWrite(43, HIGH); 디지털 쓰기(45, 높음); } else { digitalWrite(45, LOW);}//aux 5 alarmif (digitalRead(40) ==HIGH ) { digitalWrite(47, HIGH); 디지털 쓰기(49, 높음); } else { digitalWrite(49, LOW);} // ledsif 재설정 (digitalRead(42) ==HIGH) { int ledPinsout[] ={18, 19, 23, 25, 27, 29, 31, 33, 35, 37 , 37, 39, 41, 43, 45, 47, 49}; 정수 ledPinsoutcnt =17; { for (int q=0; q 99999){mathtime3a =99999;};if (DEBUG2){Serial.print("수학 시간 1:");Serial.println(mathtime1);Serial.print("수학 시간 2:"); 직렬 .println(mathtime2);Serial.print("수학 시간 3:");Serial.println(mathtime3);Serial.print("ZFLAG:");Serial.println(zflag);}{ if (zflag ==1 &&mathtime3> 300 ) // 300초로 변경하면 5분마다 메시지를 보냅니다. {mathtime2 =mathtime1; if (DEBUG1){Serial.println("SEND MESSAGE!");} EthernetClient 클라이언트; Serial.println("이더넷 준비됨"); // 이더넷 보드/쉴드의 IP 주소 인쇄:Serial.print("My SENDMESSAGE IP 주소:"); Serial.println(Ethernet.localIP()); // 이더넷 쉴드를 초기화하기 위해 1초 주기:delay(1000);if (DEBUG2){Serial.print("incoming value:");Serial.println(messagesend);}String repel =messagesend;char room[repel. length()+1];repel.toCharArray(room,repel.length()+1); if (DEBUG2){Serial.print("이것은 프레임이 되는 값입니다:");Serial.println(room);} client.stop(); if(DEBUG){Serial.println("연결 중...");} if (client.connect(serverName, 80)) { if(DEBUG){Serial.println("연결됨");} if(DEBUG){ Serial.println("요청 보내기");} client.print("GET /pushingbox?devid="); client.print(분할); client.print("&룸="); if (DEBUG){Serial.print("전송되는 값입니다:");Serial.println(room);} client.print(room); client.println("HTTP/1.1"); client.print("호스트:"); client.println(서버이름); client.println("사용자 에이전트:Arduino"); 클라이언트.println(); } else { if(DEBUG){Serial.println("연결 실패");} }} 반환;}
    웹사이트자바스크립트
    이를 실행하려면 js 및 css 파일을 추가해야 하며 사용 중인 컴퓨터에 있습니다. I
     홈 모니터   <스크립트 언어="자바스크립트" 유형="텍스트 /javascript" src="js/jquery-1.10.1.min.js"> <스크립트 언어="javascript" type="text/javascript" src="js/gauge.js"> <스크립트 언어="자바스크립트" 유형="텍스트/자바스크립트" src="js/jquery.jqplot.min.js"> <스크립트 언어="자바스크립트" 유형="텍스트/자바스크립트" src=" js/jqplot.dateAxisRenderer.min.js">  <스크립트 유형 ="텍스트/자바스크립트" src="../src/plugins/jqplot.canvasAxisLabelRenderer.min.js"> <스크립트 유형="텍스트/자바스크립트" src="../src/plugins/jqplot. canvasTextRenderer.min.js"> //  <스크립트 class="code" language="javascript" type="text/javascript"> // 차트 및 게이지 객체 var tempChar, humChar; var tempGauge, humGauge; // 두 차트에 대한 데이터 포인트를 저장하는 배열 var tempData =new Array(); var humData =새로운 Array(); // 두 차트에 대해 과거의 "더미" 데이터를 생성합니다. var startTime =(new Date()).getTime() - 270000; for(변수 i =0; i <10; i++) { tempData.push([startTime, 20]); humData.push([시작시간, 50]); 시작 시간 +=30000; } // 문서가 준비되면 객체를 만들고 "더미" 데이터로 차트를 채웁니다. $(document).ready(function() { showCharts(); showGauges(); }); // 두 개의 차트를 표시하는 함수 function showCharts() { tempChar =$.jqplot('tempchartdiv', [tempData], { title:'Sump Level', series:[{showMarker:false, lineWidth:1,color:" blue"}], 축:{ xaxis:{ 렌더러:$.jqplot.DateAxisRenderer, tickOptions:{ formatString:'%M:%S', }, tickInterval:15 }, yaxis:{ 최소:0, 최대:30, 틱 간격:5, } } }); humChar =$.jqplot('humchartdiv', [humData], { 제목:'온도', 시리즈:[{showMarker:false, lineWidth:1,color:"red"}], 축:{ xaxis:{ 렌더러:$ .jqplot.DateAxisRenderer, tickOptions:{ formatString:'%M:%S' }, tickInterval:10 }, yaxis:{ 최소:0, 최대:100, tickInterval:10 } } }); } // 2개의 게이지를 표시하는 함수 function showGauges() { tempGauge =new Gauge({ renderTo :'tempgauge', width :250, height :250, glow :true, units :'in', title :'Sump Level' , minValue :0, maxValue :50, majorTicks :['0','10','20','30','40','50'], minorTicks :5, strokeTicks :false, 하이라이트 :[ { from :0, to :12, color :'rgba(50, 255, 61, .70)' }, { from :12, to :20, color :'rgba(205, 216, 0, .70)' }, { from :20, to :50, color :'rgba(255, 00, 0, .70)' }, ], colors :{ plate :'#824E00', majorTicks :'#f5f5f5', minorTicks :'#ddd ', 제목 :'#fff', 단위 :'#000', 숫자 :'#eee', 바늘 :{ 시작 :'rgba(240, 128, 128, 1)', 끝 :'rgba(255, 160, 122, .9)' } } }); humGauge =new Gauge({ renderTo :'humgauge', 너비 :250, 높이 :250, 광선 :true, 단위 :'Deg F', 제목 :'온도', minValue :0, maxValue :100, majorTicks :['0 ','10','20','30','40','50','60','70','80','90','100'], minorTicks :5, strokeTicks :false , 하이라이트 :[ { from :0, to :50, color :'rgba(255, 0, 0, .70)' }, { from :50, to :65, color :'rgba(205, 216, 0, .70)' }, { from :65, to :80, color :'rgba(50, 255, 61, .70)' }, { from :80, to :100, color :'rgba(255, 0, 0, .70)' }, ], 색상:{ 플레이트:'#824E00', majorTicks:'#f5f5f5', minorTicks:'#ddd', 제목:'#fff', 단위:'#000', 숫자:'#eee', 바늘 :{ 시작 :'rgba(240, 128, 128, 1)', 끝 :'rgba(255, 160, 122, .9)' } } }); tempGauge.draw(); humGauge.draw(); }; // 3초마다 업데이트 함수를 호출합니다. setInterval(updateValues, 3000); // Arduino에서 업데이트된 데이터를 검색하고 차트 및 게이지를 업데이트하는 함수 function updateValues() { var realTemp; var 실제흠; var getData =거짓; // Arduino에서 JSON 형식의 데이터를 가져오고 JSONP를 사용하여 도메인 간 호출을 수행합니다. $('#status').css({"color":"yellow"}); $('#status').text("요청 보내기..."); var jqxhr =$.ajax({ url:'http://10.9.9.12:1000/?callback=?', dataType:'jsonp', jsonpCallback:'datas'}) // 요청이 성공했다면... .done(function(data) { $('#status').css({"color":"green"}); $('#status').text("Request Received!"); // 검색된 저장 두 개의 변수에 데이터를 저장하고 JS 콘솔에 표시합니다. actualTemp =50 - data.sensor1; actualHum =data.sensor4; console.log("---------- Got new data -------- --"); console.log("온도:\t" + realTemp); console.log("습도:\t" + realHum); console.log("저수조 수준:\t" + data.sensor1); console.log("홍수 경보:\t" + data.sensor2); console.log("전원 손실:\t" + data.sensor3); console.log("온도:\t" + data.sensor4); console.log("습도:\t" + data.sensor5); console.log("보조 1:\t" + data.sensor6); console.log("보조 2:\t" + data.sensor7); console.log("보조 3:\t" + data.sensor8); console.log("보조 4:\t" + data.sensor9); console.log("보조 5:\t" + data.sensor10 ); console.log(""); console.log("값 업데이트 중..."); // 업데이트 c harts, 가장 오래된 값 제거 var x =(new Date()).getTime(); if(tempData.length ==100) tempData.shift(); tempData.push([x, 실제 온도]); tempChar.series[0].data =임시 데이터; tempChar.resetAxesScale(); tempChar.axes.xaxis.tickInterval =15; tempChar.axes.yaxis.min =0; tempChar.axes.yaxis.max =50; tempChar.replot(); if(humData.length ==100) humData.shift(); humData.push([x, 실제음]); humChar.series[0].data =humData; humChar.resetAxesScale(); humChar.axes.xaxis.tickInterval =15; humChar.axes.yaxis.min =0; humChar.axes.yaxis.max =100; humChar.replot(); // 게이지 업데이트 tempGauge.setValue(actualTemp); humGauge.setValue(실제흠); console.log("...완료!"); console.log(""); //웹 페이지로의 변수 전송 허용 var elArduino1 =document.getElementById('sensor1'); elArduino1.textContent =data.sensor1; var elArduino2 =문서.getElementById('센서2'); elArduino2.textContent =data.sensor2; var elArduino3 =document.getElementById('sensor3'); elArduino3.textContent =data.sensor3; var elArduino4 =document.getElementById('센서4'); elArduino4.textContent =data.sensor4; var elArduino5 =document.getElementById('sensor5'); elArduino5.textContent =data.sensor5; var elArduino6 =document.getElementById('sensor6'); elArduino6.textContent =data.sensor6; var elArduino7 =document.getElementById('sensor7'); elArduino7.textContent =data.sensor7; var elArduino8 =document.getElementById('sensor8'); elArduino8.textContent =data.sensor8; var elArduino9 =document.getElementById('sensor9'); elArduino9.textContent =data.sensor9; var elArduino10 =document.getElementById('sensor10'); elArduino10.textContent =data.sensor10; var elArduino10 =document.getElementById('msgtimer'); elArduino10.textContent =data.msgtimer; }) // 오류가 발생하면 JS에서 인쇄합니다. console .fail(function() { console.log( "Unable to get new data :("); }); } <스타일 유형=" text/css"> .clean { 패딩:0; 여백:0;}   

    홈 모니터 Kevin Strain 개발

    날짜 및 시간:

    MUDSHARK INDUSTRIES
    더 나은 미래를 위한 세상 변화

    상태:

    저수조 수준 값: 위에서 인치

    홍수 경보 상태:

    전원 상태:

    온도 값: ° F

    습도 값: %

    보조 입력 1 상태:

    보조 입력 2 상태:

    보조 입력 3 상태:

    보조 입력 4 상태:

    보조 입력 5 상태:

    보낸 이메일 메시지 분 전

    회로도

    인터페이스 및 표시기 LED%20BAR%202.sch

    제조공정

    1. 혈압 모니터
    2. 가정에 무선 센서 네트워크 구축
    3. Raspberry Pi를 사용하여 집 온도 모니터링
    4. RASPBERRY PI 홈 자동화
    5. 집에서 DIY 숙제 작성 기계 만들기
    6. Arduino를 사용하여 모니터 Ambilight 만들기
    7. IoT를 사용한 심박수 모니터
    8. 온수기 열전대 전압 모니터
    9. 자율 홈 어시스턴트 로봇
    10. Alexa에 의해 활성화된 Arduino 홈 컨트롤러