제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
|
| ||||
|
개요
부모는 항상 자녀를 걱정합니다. 부모는 자녀가 지정된 경로를 따라 정시에 학교에 도착하고 제시간에 집에 도착하기를 바랍니다.
SmartWay는 부모의 일상 생활에서 이러한 걱정을 제거하는 것을 목표로 합니다. SmartWay는 자녀가 등하교할 때 자녀를 모니터링하여 자녀가 항상 목적지인 학교에 도착할 수 있는 적절한 경로를 따르도록 합니다.
SWay는 GPS를 사용하여 자녀의 지리적 위치를 모니터링하고 자녀가 지정된 경로를 벗어나면 즉시 부모에게 이메일을 보냅니다. SmartWay는 또한 자녀가 집이나 학교에 도착할 때 부모에게 이메일을 보내고 자녀가 지각할 경우 알려줍니다. 이렇게 하면 부모는 자녀가 학교와 집에 안전하게 도착한다는 사실을 알고 편안하게 앉아서 커피를 즐길 수 있습니다.
기능
SmartWay는 아이가 깨어났을 때부터 집에 도착할 때까지 아이의 지리적 위치를 지속적으로 모니터링합니다. 이 장치에는 RGB LED와 진동 모터가 장착되어 있어 자녀가 학교에 올바로 가지 않거나 지각할 경우 경고하고 학교에 도착하면 축하해 줍니다.
이 장치는 자녀의 안전을 보장하기 위해 여러 기능을 통해 작동합니다.
그림> <울>if(오프 트랙)
자식이 할당된 경로에서 벗어났는지 감지합니다. 장치에는 이것이 발생하는 횟수를 감지하는 시스템이 있습니다. 자녀가 처음으로 코스를 이탈하면 LED가 빨간색으로 바뀌고 모터가 진동하여 장치가 경고하고 2분 동안 코스로 돌아올 수 있습니다. 자녀가 2분 더 코스를 벗어나 있으면 부모는 자녀가 자신의 지리적 위치와 함께 코스를 벗어났다는 경고 이메일을 받게 되며, 자녀가 도착할 때까지 2분 간격으로 이메일이 수신 가능하게 전송됩니다. 집이나 학교에서if(학교 시간)
및 if(홈 타임)
루프가 학교와 집에 갈 시간인지 감지한 다음 장치는 아이가 학교나 집에 도착했는지 확인합니다. 아이가 제시간에 도착하면 LED가 녹색으로 바뀌고 장치는 부모에게 자녀가 학교나 집에 도착했음을 알리는 이메일을 보냅니다. 아이가 도착 시간과 함께 목적지에 도착했습니다. 그렇지 않고, 학교가 시작할 시간이고 자녀가 학교에 없는 경우에도 장치는 12바이트의 정보만 보낼 수 있으므로 보낼 때 컴팩트 패킷이 필요합니다. 다른 변수는 SigFox 백엔드에서 구성됩니다.
그림> 그림>기기가 보낼 수 있는 패킷은 4개입니다.
<울>경고 시스템
장치를 착용한 어린이는 학교에 도착하거나 집에 도착하거나 목적지에 늦게 도착하거나 코스를 이탈할 때마다 알림을 받습니다.
그림> 그림>작동 중인 기기
그림> 그림>
혜택
이 기기를 사용하는 부모는 다음과 같은 이점을 누릴 수 있습니다.
<울>
프로젝트 구성
1단계:필수 장비
프로젝트를 시작하려면 재료를 수집해야 합니다. 이 프로젝트에는 다음이 필요합니다.
<울>2단계:회로 연결
다음 단계는 회로를 연결하는 것입니다. 아래 Fritzing 이미지는 이것이 어떻게 수행되는지 보여줍니다. 배선에 여러 부분이 있으므로 서로 다른 이미지로 분할됩니다.
3단계:코드 승인
코드는 여러 기능으로 구성되며 각 기능은 프로젝트 구성에서 특정 역할을 수행합니다.
<울>이 섹션은 아래에 설명되어 있습니다.
<울>
코드의 이 섹션은 functions.h
에서 찾을 수 있습니다. 파일. 코드는 현재 상태에서 장치를 착용한 어린이에게 알립니다. 전반적으로 이 루프는 RGB LED와 진동하는 모터 셀을 제어합니다.
bool getGPS(int run){ while(Serial1.available()> 0) { if(gps.encode(Serial1.read())) { if(run ==1) { processData(); } else if(실행 ==2) { synchRTC(); } if(gps.location.isValid() &&gps.time.isValid() &&gps.date.isValid()) { true를 반환합니다. } else { false를 반환합니다. } } } if(millis()> 10000 &&gps.charsProcessed() <10) { Serial.println("오류 - GPS 모듈이 오류로 응답함"); Serial.println("종료 코드"); Serial.println("______________________________________________________"); 동안(1) {}; }}
GPS 모듈로부터 위치와 시간을 수신하는 루프입니다. 이 루프가 하는 일은 3가지가 있으며 설정 루프
에서 사용됩니다. GPS를 동기화하기 위해 온보드 RTC를 GPS에 동기화하는 데 사용되며 메인 루프에서 장치의 지리적 위치를 가져오는 데 사용됩니다.
void synchRTC(){ Serial.println("RTC 동기화 중"); Serial.println("______________________________________________________"); Serial.println(" 확인 - RTC 초기화"); rtc.begin(); Serial.println(" 확인 - 동기화 시간"); // 변수의 처음 2자리를 잘라야 합니다. (2018 -> 18) uint16_t yearRAW =gps.date.year(); 문자열 yearString =문자열(연도RAW); yearString.remove(0,1); uint16_t 연도 =yearString.toInt(); rtc.setTime(gps.time.hour(), gps.time.minute(), gps.time.second()); rtc.setDate(gps.date.day(), gps.date.month(), 연도); Serial.println("성공 - RTC 동기화됨"); Serial.println("______________________________________________________"); Serial.println(""); Serial.println(""); Serial.println("");}
이 코드 섹션은 온보드 RTC를 GPS 모듈에서 수신한 시간과 동기화하고 먼저 GPS 모듈에서 데이터를 읽은 다음 처리합니다. 그런 다음 루프는 온보드 RTC의 현재 시간을 수신된 시간으로 설정하고 RTC를 시작합니다.
<울>bool processData(){ if(gps.location.isValid()) { 위도 =gps.location.lat(); 경도 =gps.location.lng(); 위도 =53.355504; 경도 =-6.258452; if(check.isOut()) { if(check.track()) { Serial.println("범위 초과"); 경고.offTrackLoop(); } } if(check.isHomeTime() &&arrivalSchool) { if(check.isHome()) { Serial.println("집에서"); warn.arrivedHomeLoop(); } else { Serial.println("늦은 -> 홈"); 경고.lateLoop(); } } else if(check.isSchoolTime() &&arrivalHome) { Serial.println("."); if(check.isSchool()) { Serial.println("학교에서"); 경고.arrivedSchoolLoop(); } else { Serial.println("늦은 -> 학교"); 경고.lateLoop(); } } else { Serial.println("온 웨이"); } }}
이 루프는 장치의 위치를 처리하고 현재 시간과 비교하여 이 시간에 아이가 있어야 하는 위치를 확인합니다. 그런 다음 결과에 따라 적절한 조치를 취합니다.
<울>struct Do{ 무효 offTrackLoop() { if(offTrackVar) { parseData(0); } 진동모터(); led레드(); 지연(1000); 진동모터(); 리셋LED(); offTrackVar =참; 지연(120000); } 무효 lateLoop() { if(!lateVar) { parseData(1); } 진동모터(); led오렌지(); 지연(1000); 리셋LED(); lateVar =참; } 무효 arrivalHomeLoop() { lateVar =거짓; offTrackVar =거짓; 진동모터(); led그린(); 지연(1000); 리셋LED(); parseData(2); 도착한 집 =사실; 도착한 학교 =거짓; } 무효 arrivalSchoolLoop() { lateVar =거짓; offTrackVar =거짓; 진동모터(); led그린(); 지연(1000); 리셋LED(); parseData(3); 도착한 집 =거짓; 도착한 학교 =사실; }};
이 구조체는 프로세스 위치에서 제공한 응답에 대한 조치를 취하기 위해 호출됩니다. RGB LED와 진동하는 모터 셀을 토글하는 어린이에게 경고합니다. 또한 필요한 경우 SigFox로 패키지를 보냅니다.
<울>void parseData(int state){ SigFox.beginPacket(); // 메시지 전송 프로세스 시작 if(state ==0) // off track { SigFox.print("off track"); // 메시지 보내기 } else if(state ==1) // late { SigFox.print("late"); // 메시지 보내기 } else if(state ==2) // 집에 도착했습니다. { SigFox.print("at home"); // 메시지 보내기 } else // 도착한 학교 { SigFox.print("at school"); // 메시지 전송 } SigFox.endPacket();}
이 함수는 데이터를 SigFox로 전송하고 패킷 전송을 시작한 다음 적절한 값을 파싱합니다.
변수 설정
코드에는 TODO가 그 뒤에 주석으로 작성된 여러 변수가 포함됩니다. 이 변수는 클라이언트에 맞게 사용자 정의해야 하며 클라이언트는 설정하라는 메시지가 표시됩니다.
<울>아래 가이드는 변수 설정을 안내합니다.
그림> 그림> 그림> 그림> 그림> 그림> 그림> 그림> 그림> 그림>라이브러리
SigFox - copyright (c) 2016 Arduino LLC GNU Lesser General Public License 이 라이브러리는 공개 도메인입니다.
ctype - copyright (c) 2006 GNU General Public License에 따른 Free Software Foundation, 이 라이브러리는 공개 도메인입니다.
RTCZero - GNU Lesser General Public License에 따른 copyright (c) 2015 Arduino LLC, 이 라이브러리는 공개 도메인에 있습니다.
문자열 - copyright (c) 2009-10 Hernando Barragan, copyright (c) 2011 Paul Stoffrengen은 GNU Lesser General Public License에 따라 공개 도메인에 있습니다.
TinyGPS++ - copyright (c) 2008-13 Mikal Hart, under the GNU Lesser General Public License, 이 라이브러리는 공개 도메인입니다.
설정
회로가 올바르게 배선되었는지 확인하십시오. MKR 여우 설정에 대한 자세한 내용은 여기를 클릭하여 Arduino 자습서를 참조하십시오. Arduino SigFox 라이브러리에 대해 더 알고 싶으시면 여기를 클릭하십시오.
백엔드 프로그램
백엔드를 프로그래밍하려면 등록된 Arduino MKR1200 여우가 있어야 합니다.
<울>SigFox 백엔드를 열고 SigFox 계정에 로그인합니다.
<울>페이지 상단의 드롭다운 메뉴에서 "장치 유형"을 클릭하십시오.
<울>Arduino MKRfox를 선택하고 편집을 클릭하십시오.
<울>왼쪽 메뉴에서 콜백을 선택하고 오른쪽 상단 모서리에 있는 "새로 만들기" 버튼으로 이동합니다.
<울>새로 만들기를 클릭하면 여러 콜백 구성 옵션이 표시됩니다. 사용자 정의 콜백을 클릭하십시오.
다음 창이 열리면 주어진 양식을 작성하여 콜백을 생성해야 합니다.
마지막에 메시지는 다음과 같아야 합니다.
이제 확인을 클릭하면 모든 설정이 완료됩니다.
최종
마지막으로 해야 할 일은 아래 코드를 업로드하여 "TODO"로 표시된 변수를 원하는 대로 사용자 정의했는지 확인하고 GOS 모듈의 파란색 표시등이 깜박일 때까지 기다린 다음 컴퓨터에서 마이크로 컨트롤러를 분리한 다음 배터리 상자에 배터리를 넣습니다. 모든 준비가 완료되었습니다.
나는 장치를 안전하게 유지하고 매력적으로 보이도록 인클로저를 설계했으며 두 개의 아크릴을 사용하고 가장자리를 90도로 휘게 녹였습니다. 내부에 모든 회로와 그 아래에 배터리 상자를 배치한 다음 두 개의 케이블 타이를 사용하여 플라스틱 조각을 함께 묶었습니다.
그림>결국 나는 모든 전선을 보이지 않게 숨기고 프로젝트의 두뇌만 보이게 하기 위해 상단 부분(투명 덮개)을 덮었습니다.
배경
저는 개인적으로 자녀를 학교에 보내는 간단한 작업을 수행하는 것이 얼마나 스트레스가 될 수 있는지 알고 있습니다. 모든 사람들은 자녀가 등교하는 동안 일어날 수 있는 모든 일에 대해 걱정하고 있습니다.
이 프로젝트는 자녀를 학교에 보낼 때 스트레스를 받는 모든 사람들을 대상으로 합니다. SWay는 자녀가 안전하게 학교에 도착할 것이라는 사실을 알고 안심할 수 있도록 합니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">
제조공정
구성품 및 소모품 SparkFun 듀얼 H-Bridge 모터 드라이버 L298 × 1 DC 모터(일반) × 4 Arduino UNO × 1 LED(일반) × 8 저항 221옴 × 8 서보(타워 프로 MG996R) × 1 초음파 센서 - HC-SR04(일반) × 1 앱 및 온라인 서비스 Arduino IDE Microsoft Visual Studio 2015
Arduino 자습서 시리즈의 네 번째 Arduino 자습서에 오신 것을 환영합니다. 이 튜토리얼에서는 PWM(Pulse Width Modulation)을 사용하여 DC 및 서보 모터를 제어하는 방법을 배웁니다. 이것은 따라하기 쉬운 단계별 비디오 자습서입니다. 또한 동영상 아래에서 이 튜토리얼에 필요한 부품과 동영상의 예제 소스 코드를 찾을 수 있습니다. 첫 번째 예에 필요한 구성요소 DC 모터 ........................................................... 또는 CPU 팬