제조공정
| × | 1 |
| ||||
|
참고:이 튜토리얼은 오래되었을 수 있습니다. 여기 최신 버전의 경우
소개
영국 시인 윌리엄 워즈워스가 한 번 말했듯이
"당신의 마음은 정원이고, 당신의 생각은 씨앗이며, 수확은 꽃이나 잡초가 될 수 있습니다."
당신의 식물을 살아있게 유지하는 것은 의사 소통이 매우 나쁘기 때문에 꽤 어려울 수 있습니다.
그들을 행복하게 하는 한 가지 방법은 식물을 가져오는 것입니다. 하지만 겨울 재킷 주머니에서 튀어나온 큰 선인장이나 고사리를 들고 다니고 싶지 않을 수도 있습니다. 또한 대부분의 식물은 추위를 싫어합니다.
Spider Plant와 통신하기 위해 몇 달을 보낸 후, 우리는 포기하고 MKR IoT Bundle 구성 요소를 사용하여 대신 모든 식물의 웰빙을 원격으로 조사하는 장치를 만들었습니다.
간단히 말해서:
이 실험에서는 식물을 보호하는 방법과 Arduino 마술을 사용하여 식물이 생존하는지 확인하는 방법을 배웁니다.
수분, 온도 및 빛을 모니터링하여 식물이 행복한지 확인할 수 있습니다. 매일 이메일과 그래프를 보내고 필요 사항을 알릴 수 있습니다.
구성 요소 <울>
학습 목표 <울>
더 알고 싶으십니까?
이 자습서는 MKR1000 및 IoT에 익숙해지는 일련의 실험 중 일부입니다. 모든 실험은 MKR IoT 번들에 포함된 구성 요소를 사용하여 구축할 수 있습니다.
<울>
Zapier 설정
Zapier는 다른 앱의 API를 쉽게 관리할 수 있는 온라인 자동화 도구입니다. 여러 작업을 결합하거나 사용하려는 앱에 Arduino에서 관리할 수 없는 복잡한 API가 있는 경우 훌륭한 도구입니다.
우리의 경우 Arduino에서 검색한 데이터를 이메일로 보내는 데 사용할 것입니다.
다음 몇 가지 간단한 단계에 따라 자신만의 zap을 만드십시오!
그림> 그림> 그림>계속하려면 먼저 주어진 URL을 복사하는 후크를 테스트한 다음 계속을 눌렀을 때 표시되는 테스트 및 검토 버튼을 선택해야 합니다. 다음 매개변수를 URL에 추가하십시오.
custom_webhook_URL?temperature=0&moisture=0&light=0&warning=0
이제 이 URL을 복사하여 새 브라우저 페이지에 붙여넣기만 하면 됩니다.
다음과 같은 응답이 표시되어야 합니다.
그림>축하합니다! 방금 http 요청을 보냈습니다!
이것이 바로 우리가 Arduino 보드로 할 일입니다. 그러나 해당 URL을 브라우저 페이지에 붙여넣는 대신 Zapier 서버로 직접 보냅니다. 또한 이제 센서 값으로 0으로 설정된 매개변수 값을 수정할 것입니다.
API를 테스트하고 작업하는 고급 방법은 #프로팁 페이지 하단에 있습니다.
요청을 테스트한 후 Zap 생성을 진행할 수 있습니다.
할 일...을 사용하여 편집을 진행합니다.
그림> 그림> 그림> 그림> 그림> 그림> 그림>Zapier에서 생성된 이메일을 보려면 사서함을 확인하세요. Gmail 구성의 첫 번째 단계에서 사용한 계정에서 가져옵니다.
이사회 설정
모든 기능을 구현하기 위해 다음 라이브러리를 사용할 것입니다.
<울>이 가이드에 설명된 대로 라이브러리 관리자에서 다운로드할 수 있습니다.
Zapier의 API를 사용하려면 먼저 인증서를 업로드해야 합니다. MKR1000에서. 이는 대부분의 온라인 서비스 및 API에 적용됩니다!
WiFi101 라이브러리에서 펌웨어 업데이터 예제를 업로드하고 hooks.zapier.com을 추가합니다. 도메인으로 이동합니다.
> 예제> WiFi101> FirmwareUpdater
Arduino 웹 편집기를 사용하는 경우 이 기능은 아직 구현되지 않았으므로 Arduino 데스크톱 애플리케이션.
그림> 그림>
HTTP 요청 보내기
이제 Arduino 보드에서 HTTP 요청을 보낼 준비가 되었습니다.
지금은 매개변수에 임의의 값을 설정하고 나중에 실제 센서 값으로 대체됩니다.
부동 온도 =22; 정수 수분 =150; int 빛 =40; String warning ="경고 메시지입니다"; warning.replace(" ", "%20"); 코드>
문자열을 인코딩해야 합니다 , HTTP 요청에서 공백을 보낼 수 없기 때문입니다. 모든 공백은 인코딩된 동등한 %20
으로 대체됩니다.
매개변수를 설정한 후 send_email()
을 호출합니다. 모든 것을 문자열로 변환하고 이전에 사용한 것과 동일한 URL을 다시 작성하는 함수 그런 다음 Zapier 서버에 게시합니다.
WiFi 자격 증명과 Zapier에서 받은 URL로 이 스케치를 채우고 업로드하세요.
#include #include const char* ssid =SECRET_SSID; // 네트워크 SSID(이름) const char* 암호 =SECRET_PSWD; // 네트워크 비밀번호 String httpsRequest =SECRET_REQUEST; // Zapier URL const char* host ="hooks.zapier.com"; WiFiSSL클라이언트 클라이언트; 무효 설정() { Serial.begin(9600); 동안 (! 직렬); 지연(2000); Serial.print("와이파이 연결 중:"); Serial.println(ssid); 동안 (WiFi.begin(ssid, 암호) !=WL_CONNECTED) { Serial.print("."); 지연(500); } 직렬.println(""); Serial.println("와이파이 연결됨"); } 무효 루프() { 부동 온도 =22; 정수 수분 =150; int 빛 =40; String warning ="경고 메시지입니다"; warning.replace(" ", "%20"); send_email(온도, 습기, 빛, 경고); delay(20000) } void send_email(float temperature, int 습기, int light, String warning) { // 값을 String으로 변환 String String _temperature =String(온도); 문자열 _수분 =문자열(수분); 문자열 _light =문자열(빛); 문자열 _warning =경고; if (client.connect(host, 443)) { client.println("POST" + httpsRequest + "?temperature=" + _temperature + "&moisture=" + _moisture + "&light=" + _light + "&warning=" + _warning + " HTTP/1.1"); client.println("호스트:" + 문자열(호스트)); client.println("연결:닫기"); 클라이언트.println(); 지연(1000); while (client.available()) { // 서버의 응답을 콘솔에 출력 char c =client.read(); Serial.write(c); } 클라이언트.스톱(); // 서버 연결 끊기 } else { Serial.println("클라이언트 연결 실패"); } } 코드>
20초마다 선택한 주소로 이메일이 전송됩니다.
요청에 주의하십시오. Zapier는 한 달에 100건의 무료 요청만 허용합니다.
RTC 및 알람
MKR1000의 실시간 시계를 사용하여 매일 특정 시간에 이메일을 보낼 수 있습니다.
이 스케치는 2017년 12월 4일 16:00에 시간과 날짜를 설정하고 매일 16:01에 알람을 트리거합니다.
알람이 인터럽트 기능 지연을 포함할 수 없습니다 하지만 부울 변수를 사용하여 loop()
에서 작업을 트리거할 수 있습니다.
#include RTCZero rtc; // RTC 객체 생성 /* 이 값을 변경하여 현재 초기 시간을 설정합니다. */ const byte seconds =0; const 바이트 분 =0; const 바이트 시간 =16; /* 이 값을 변경하여 현재 초기 날짜를 설정합니다. */ const byte day =4; const 바이트 월 =12; const 바이트 연도 =17; 부울 email_already_sent =거짓; 무효 설정() { Serial.begin(9600); 동안 (! 직렬); 지연(2000); rtc.begin(); // RTC 24H 형식 초기화 rtc.setTime(시, 분, 초); rtc.setDate(일, 월, 년); rtc.setAlarmTime(16, 1, 0); // Arduino가 이메일을 보낼 시간을 설정합니다. rtc.enableAlarm(rtc.MATCH_HHMMSS); rtc.attachInterrupt(alarmMatch); } 무효 루프() { if (!email_already_sent) { // send_email(); email_already_sent =사실; } } void alarmMatch() { // 알람이 울리면 트리거됩니다. Serial.println("Alarm Match!"); email_already_sent =거짓; } 코드>
DIY 토양 수분 센서
토양 화분에 배치된 두 개의 전선은 토양 수분에 따라 저항이 달라지는 가변 저항기를 형성합니다. .
이 가변저항은 분압기 구성으로 연결되며, 아두이노는 2선 사이의 저항에 비례하여 전압을 수집합니다.
즉, 토양이 습할수록 Arduino에서 측정되는 전압이 낮아집니다.
1 메가 옴 저항기 사용 그리고 두 개의 전선으로 DIY 토양 수분 센서를 만들 수 있습니다!
다음 스케치를 업로드하면 센서 값을 읽을 수 있으므로 먼저 건조한 토양에서 테스트를 시작하는 것이 좋습니다. 그리고 읽은 값을 기록해 두십시오.
해당 값은 임계값을 설정하는 데 사용됩니다. Arduino가 식물에 물이 필요할 때를 알고 긴급 이메일을 보낼 수 있도록 합니다.
int 습기 핀 =A2; // 사용한 저항에 따라 이 threeshold를 설정합니다. // 이 값을 보정하는 가장 쉬운 방법은 건조 및 젖은 토양 모두에서 센서를 테스트하는 것입니다. int threeshold =800; 무효 설정() { Serial.begin(9600); 동안 (! 직렬); 지연(2000); } 무효 루프() { Serial.println(get_average_moisture()); 지연(5000); } int get_average_moisture() { // 더 정확한 값을 위해 평균 10개 값을 만듭니다. int tempValue =0; // 임시로 수분 값을 저장하는 변수 for (int a =0; a <10; a++) { tempValue +=analogRead(moisturePin); 지연(100); } 반환 tempValue / 10; } 코드>
온도 및 광 센서 추가
두 개의 센서를 연결하려면 아래 회로도를 참조하십시오. 다음 두 함수를 사용하여 센서에서 값을 읽습니다.
float get_temperature(){ int 판독 =analogRead(A1); 부동 전압 =판독값 * 3.3; 전압 // 1024.0; // 온도를 섭씨로 인쇄 float temperatureC =(전압 - 0.5) * 100; //도당 10mv에서 500mV 오프셋으로 변환 // 화씨로 변환 float temperatureF =(temperatureC * 9.0 / 5.0) + 32.0; 반환 온도C; } int get_light(){ int light_value=analogRead(A0); light_value를 반환합니다. } 코드>
temperatureF
를 반환하여 화씨 단위를 사용할 수 있습니다. 온도C
대신
#ProTip:ThingSpeak를 사용하여 값 표시
제어 괴물 모두를 위해 수집된 모든 데이터를 다음과 같은 아름다운 그래프로 표시하는 지침이 있습니다.
ThingSpeak 플랫폼을 사용하여 그래프를 그릴 것입니다. 시작하려면 다음 단계를 따르세요.
그림> 그림>ThingSpeak 라이브러리를 다운로드하고 시작해 보겠습니다. 아래 스케치는 1분마다 센서 값을 클라우드에 업로드합니다. WiFi 자격 증명과 채널의 API 키를 입력하고 업로드하기만 하면 됩니다.
#include #include #include "ThingSpeak.h" const char* ssid =SECRET_SSID; // 네트워크 SSID(이름) const char* 암호 =SECRET_PSWD; // 네트워크 비밀번호 WiFiClient ThingSpeakClient; 서명되지 않은 긴 myChannelNumber =356392; const char * myWriteAPIKey =SECRET_WRITE_API; int lightPin =A0; // 광 센서가 연결된 아날로그 핀 int tempPin =A1; // 아날로그 핀 TMP36의 Vout(감지) 핀은 int 습기 핀 =A2에 연결됩니다. 무효 설정() { Serial.begin(9600); 동안 (! 직렬); 지연(2000); Serial.print("와이파이 연결 중:"); Serial.println(ssid); 동안 (WiFi.begin(ssid, 암호) !=WL_CONNECTED) { Serial.print("."); 지연(500); } 직렬.println(""); Serial.println("와이파이 연결됨"); ThingSpeak.begin(ThingSpeakClient);} 무효 루프() { ThingSpeak.setField(1, get_light()); ThingSpeak.setField(2, get_temperature()); ThingSpeak.setField(3, get_average_moisture()); ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey); Serial.println("클라우드로 전송된 메시지"); 지연(60000); // 1분마다 값 전송 } float get_temperature() { int reading =analogRead(tempPin); 부동 전압 =판독값 * 3.3; 전압 // 1024.0; // 온도를 섭씨로 인쇄 float temperatureC =(전압 - 0.5) * 100; //도당 10mv에서 500mV 오프셋으로 변환 // 화씨로 변환 float temperatureF =(temperatureC * 9.0 / 5.0) + 32.0; 반환 온도C; }int get_average_moisture() { // 더 정확한 값을 위해 평균 10개 값을 만듭니다. int tempValue =0; // 임시로 수분 값을 저장하는 변수 for (int a =0; a <10; a++) { tempValue +=analogRead(moisturePin); 지연(10); } 반환 tempValue / 10; } int get_light() { int light_value =analogRead(A0); light_value를 반환합니다. } 코드>
아래의 전체 Pro 스케치에서 이 업로드를 1분마다 트리거되는 RTC 알람에 첨부하는 방법을 볼 수 있습니다.
안타깝게도 Gmail은 삽입을 허용하지 않습니다. 그래프 및 iframe 이메일 본문에 있지만 아름다운 버튼으로 이메일을 통해 링크를 보낼 수 있습니다. 아래 팁을 참조하세요.
우리는 ThingSpeak를 선택했지만 거기에는 수많은 대안이 있습니다! 예를 들어 Dweet.io 및 freeboard.io를 살펴보십시오.
#ProTip:이메일 스타일 지정
Zapier를 사용하면 본문에 일부 html 및 css 코드를 삽입할 수 있습니다. 이메일의. 이를 사용하여 다음과 같이 스타일리시한 이메일을 보낼 수 있습니다.
이 결과를 얻으려면 본문 유형을 html로 변경하십시오. Zapier 인터페이스에서 맞춤 HTML 및 CSS를 추가합니다.
그림>이 템플릿을 복사하여 붙여넣기:
HELLO !
다음은 정원 및 #9752;
♨ 온도:{{querystring__temperature}} C
☔ 수분:{{_querystring__moisture}}
☀ 조명:{{querystring__light}}
{{querystring__warning}}
그래프 보기
#ProTip:PostMan으로 API 테스트
HTTP 요청으로 작업하는 것은 어려울 수 있습니다. 다행히도 필요한 URL을 구축하는 데 도움이 되는 많은 도구가 있습니다.
우편 배달부가 좋은 예입니다.
Zapier에서 제공한 초기 URL을 붙여넣고 매개변수를 추가한 후 전송하면 됩니다. 서버의 응답을 인쇄하고 URL을 작성합니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">제조공정
구성품 및 소모품 Arduino MKR1000 × 1 Infineon 센서 허브 나노 × 1 노키아 5110 LCD × 1 HC-05 블루투스 모듈 × 1 브레드보드(일반) × 1 점퍼 와이어(일반) × 1 SparkFun 푸시버튼 스위치 12mm × 1 부저 × 1 FT1235 5W 송신기 × 1 FT1236 5W 수신기 × 1 필요
구성품 및 소모품 Arduino UNO 기본 구성요소 중 하나입니다. × 1 초음파 센서 - HC-SR04(일반) 기본 구성요소 중 하나입니다. × 1 리튬 이온 배터리 1000mAh 기본 구성요소 중 하나입니다. × 2 RGB 확산 공통 음극 기본 구성요소 중 하나입니다. × 1 부저 필요한 용품 중 하나 × 1 저항 330옴 필요한 용품 중 하나 × 3 USB-A-B 케이블 필요한 용품 중 하나 × 1