SmartWay
Компоненты и расходные материалы
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Необходимые инструменты и машины
![]() |
|
Приложения и онлайн-сервисы
![]() |
| |||
![]() |
|
Об этом проекте
Обзор
Родители всегда беспокоятся о своих детях. Родители хотят, чтобы их дети приходили в школу вовремя и возвращались домой по назначенному пути.
SmartWay стремится убрать это беспокойство из повседневной жизни родителей. SmartWay будет следить за вашим ребенком, когда он / она добирается до школы и из нее, гарантируя, что ваш ребенок всегда выбирает правильный путь, чтобы добраться до места назначения, школы.
SWay будет отслеживать геолокацию вашего ребенка с помощью GPS и немедленно отправлять родителям электронное письмо, если ребенок отклоняется от пути, который вы ему назначили. SmartWay также отправит родителям электронное письмо, когда ребенок придет домой или в школу, а также проинформирует их, если ребенок опаздывает. Таким образом, родители могут расслабиться и насладиться чашечкой кофе, зная, что их ребенок благополучно доставляется в школу и домой.

Функциональность
SmartWay будет постоянно отслеживать геолокацию вашего ребенка, начиная с момента его пробуждения и заканчивая возвращением домой. Устройство также оснащено светодиодом RGB и вибромотором, чтобы предупредить вашего ребенка, если он / она ходит неправильным путем в школу или опоздать, и поздравить его / ее, когда он / она придет в школу.
Устройство выполняет множество функций, чтобы обеспечить безопасность вашего ребенка.


- Первый цикл
if (off track)
определяет, отклонился ли ребенок от назначенного пути; в устройстве есть система, которая определяет количество раз, когда это происходит; если ваш ребенок отклонится от курса в первый раз, устройство предупредит его / ее, включив красный светодиод и завибрируя двигатель, после чего у ребенка будет две минуты, чтобы вернуться на курс. Если ребенок не уклоняется от курса в течение следующих двух минут, родитель получит электронное письмо с предупреждением о том, что его ребенок сбился с курса, вместе с его / ее геолокацией, электронное письмо будет отправлено с интервалом в 2 минуты, пока ребенок не прибудет. дома или в школе. -
if (школьное время)
иif (домашнее время)
петли определяют, пришло ли время в школу и домой, затем устройство проверяет, прибыл ли ребенок в школу или домой, если он / она прибыл вовремя, светодиод станет зеленым, и устройство отправит родителям электронное письмо, информирующее их о том, что они ребенок прибыл в пункт назначения вместе со временем прибытия. В противном случае, если пришло время идти в школу, а ребенка нет в школе, это также будет
Устройство может отправлять только 12 байтов информации, поэтому при отправке необходим компактный пакет. Другие переменные будут настроены в бэкэнде SigFox.



Устройство может отправить четыре пакета
- ребенок не по курсу - ("не по курсу")
- ребенок прибыл домой - ("дома")
- ребенок пришел в школу - («в школе»)
- ребенок опаздывает - ("опаздывает")
Система предупреждений
Ребенок, носящий устройство, будет предупрежден всякий раз, когда он / она придет в школу, вернется домой, опоздает в пункт назначения или отклонился от курса



Устройство в действии



Преимущества
Родителям, использующим это устройство, принесут пользу:
- обеспечить безопасное прибытие ребенка в школу и обратно.
- следить за тем, чтобы их ребенок прибыл в эти места вовремя.
- убедитесь, что их ребенок, конечно, не отклоняется.
- Экономия энергии и низкая стоимость - батареи с длительным сроком службы
Создание проекта
Шаг 1. Необходимое оборудование
Чтобы приступить к созданию проекта, нам нужно собрать наши материалы. Для этого проекта вам потребуется:
- перемычки
- 1, транзистор NPN
- 1, керамический конденсатор (0,1 мкФ)
- 3 резистора (220 Ом)
- 1, резистор (1 кОм)
- 1, светодиод RGB
- 1, модуль GPS
- 1, вибромоторный элемент.
- 1, Arduino MKR1200 fox
- 1, 2 батарейных блока AAA / AA
- 2 батарейки AA

Шаг 2. Подключение цепи
Следующим шагом будет подключение схемы; изображения Fritzing ниже иллюстрируют, как это делается. Электропроводка состоит из нескольких частей, поэтому они разделены на разные изображения.

Шаг 3. Подтверждение кода
Код состоит из нескольких функций, каждая из которых выполняет определенную роль в структуре проекта.
- Система предупреждений
- Получить GPS
- Синхронизировать RTC
- Местоположение процесса
- Отправить пакет
- Действия
Эти разделы описаны ниже.
- Система предупреждений
void setOutputs () {pinMode (R, OUTPUT); pinMode (G, ВЫХОД); pinMode (B, ВЫХОД); pinMode (motorPin, OUTPUT);} void vibrateMotor () // вибрируем моторную ячейку {digitalWrite (motorPin, HIGH); задержка (1000); digitalWrite (motorPin, LOW);} void ledGreen () // Светодиод, зеленый {analogWrite (R, 0); analogWrite (G, 255); analogWrite (B, 0);} void ledOrange () // светодиод, оранжевый {analogWrite (R, 255); analogWrite (G, 45); analogWrite (B, 0);} void ledRed () // Светодиод, красный {analogWrite (R, 255); analogWrite (G, 0); analogWrite (B, 0);} void resetLED () // Выключаем светодиод {analogWrite (R, 0); analogWrite (G, 0); analogWrite (B, 0);}
Этот раздел кода находится в functions.h
файл. Код уведомит ребенка, носящего устройство, о текущем состоянии. В целом эти контуры управляют светодиодом RGB и вибрирующим двигателем.
- Получить GPS
bool getGPS (int run) {while (Serial1.available ()> 0) {if (gps.encode (Serial1.read ())) {if (run ==1) {processData (); } иначе, если (запустить ==2) {synchRTC (); } if (gps.location.isValid () &&gps.time.isValid () &&gps.date.isValid ()) {return true; } else {вернуть ложь; }}} if (millis ()> 10000 &&gps.charsProcessed () <10) {Serial.println ("Ошибка - модуль GPS ответил с ошибкой"); Serial.println («Код завершения»); Serial.println («________________________________________»); в то время как (1) {}; }}
Это цикл, отвечающий за получение местоположения и времени от модуля GPS. Этот цикл выполняет 3 функции, он используется в цикле настройки
чтобы синхронизировать GPS, он затем используется для синхронизации бортового RTC с GPS и используется в основном цикле для получения геолокации устройства.
- Синхронизировать RTC
void synchRTC () {Serial.println ("Синхронизация RTC"); Serial.println («________________________________________»); Serial.println («ОК - инициализация RTC»); rtc.begin (); Serial.println («ОК - время синхронизации»); // нам нужно обрезать первые 2 цифры переменной (2018 -> 18) uint16_t yearRAW =gps.date.year (); Строка yearString =String (yearRAW); 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 ("");}
Этот фрагмент кода синхронизирует бортовые часы реального времени со временем, полученным от модуля GPS, он сначала считывает данные из модуля GPS, а затем обрабатывает их. Затем цикл устанавливает текущее время встроенного RTC равным полученному времени и запускает RTC.
- Процесс Местоположение
bool processData () {if (gps.location.isValid ()) {latitude =gps.location.lat (); longitude =gps.location.lng (); широта =53,355504; долгота =-6,258452; if (check.isOut ()) {if (check.track ()) {Serial.println («ВНЕ ГРАНИЦ»); warn.offTrackLoop (); }} если (check.isHomeTime () &&прибыла школа) {если (check.isHome ()) {Serial.println ("ДОМА"); warn.arhibitedHomeLoop (); } else {Serial.println ("ПОЗДНЕЕ -> ДОМАШНЕЕ"); warn.lateLoop (); }} иначе, если (check.isSchoolTime () &&прибылаHome) {Serial.println ("."); если (check.isSchool ()) {Serial.println ("В ШКОЛЕ"); warn.arhibitedSchoolLoop (); } else {Serial.println ("ПОЗДНЕЕ -> ШКОЛА"); warn.lateLoop (); }} else {Serial.println ("В ПУТИ"); }}}
Этот цикл обработает местоположение устройства и сравнит его с текущим временем, чтобы увидеть, где в это время должен быть ребенок. Затем он выполнит соответствующее действие в зависимости от результата.
- Делать Действия
struct Do {void offTrackLoop () {если (offTrackVar) {parseData (0); } vibrateMotor (); ledRed (); задержка (1000); vibrateMotor (); resetLED (); offTrackVar =true; задержка (120000); } void lateLoop () {если (! lateVar) {parseData (1); } vibrateMotor (); ledOrange (); задержка (1000); resetLED (); lateVar =true; } void прибылHomeLoop () {lateVar =false; offTrackVar =false; vibrateMotor (); ledGreen (); задержка (1000); resetLED (); parseData (2); прибылHome =true; прибылаШкола =ложь; } void прибылSchoolLoop () {lateVar =false; offTrackVar =false; vibrateMotor (); ledGreen (); задержка (1000); resetLED (); parseData (3); прибылHome =false; прибылаШкола =правда; }};
Эта структура вызывается для выполнения действий с ответом, предоставленным Местоположение процесса, он предупредит ребенка о переключении светодиода RGB и вибрирующего моторного отсека. При необходимости он также отправит пакет в SigFox.
- Отправить Пакет
void parseData (int state) {SigFox.beginPacket (); // начинаем процесс отправки сообщения if (state ==0) // не в курсе {SigFox.print ("off track"); // отправляем сообщение} else if (state ==1) // поздно {SigFox.print ("late"); // отправляем сообщение} else if (state ==2) // прибыл домой {SigFox.print ("дома"); // отправляем сообщение} else // школа прибыла {SigFox.print ("в школе"); // отправляем сообщение} SigFox.endPacket ();}
Эта функция отправляет данные в SigFox, начинается отправка пакета, а затем анализируется соответствующее значение.
Настройка переменных
Код будет содержать несколько переменных с TODO, написанным в виде комментария после них, эти переменные должны быть настроены для соответствия клиенту, клиенту будет предложено настроить
- Время в школу
- Время, необходимое ребенку для путешествия
- Время окончания школы
- Отладка?
- Геолокация школы (LAT, LNG);
- Домашняя геолокация (LAT, LNG);
Приведенное ниже руководство поможет вам настроить переменные.











Библиотеки
SigFox - авторское право (c) Стандартная общественная лицензия ограниченного применения GNU компании Arduino LLC, 2016 г., эта библиотека находится в общественном достоянии
ctype - copyright (c) 2006 Free Software Foundation под Стандартной общественной лицензией GNU, эта библиотека находится в общественном достоянии
RTCZero - авторское право (c) 2015 Arduino LLC под Стандартной общественной лицензией ограниченного применения GNU, эта библиотека находится в общественном достоянии
Строка - авторское право (c) Эрнандо Барраган, 2009-10, авторское право (c) Пол Стоффренген, 2011 г., согласно Стандартной общественной лицензии ограниченного применения GNU, эта библиотека находится в общественном достоянии
TinyGPS ++ - авторское право (c) 2008-13 Mikal Hart под Стандартной общественной лицензией GNU Lesser General License, эта библиотека находится в общественном достоянии
Настройка
Убедитесь, что цепь правильно подключена. Для получения дополнительных сведений о настройке MKR fox щелкните здесь, чтобы перейти к руководству по Arduino. Если вы хотите узнать больше о библиотеке Arduino SigFox, щелкните здесь.
Серверная программа
Для программирования серверной части у вас должен быть зарегистрированный Arduino MKR1200 fox.
- Шаг 1
Откройте серверную часть SigFox и войдите в свою учетную запись SigFox.
- Шаг 2
нажмите «Тип устройства» в раскрывающемся меню вверху страницы

- Шаг 3:
выберите свой Arduino MKRfox и нажмите «Изменить»

- Шаг 4.
Выберите обратные вызовы в меню слева и перейдите к кнопке «новый» в правом верхнем углу.

- Шаг 5.
После того, как вы нажали «Создать», вам будет представлен ряд параметров конфигурации обратного вызова, нажмите «Пользовательские обратные вызовы»

Затем откроется окно, вы должны заполнить данную форму, чтобы создать обратный вызов
В конце ваше сообщение должно выглядеть так:

Теперь нажмите "ОК", и все готово.
Финал
Последнее, что вам нужно сделать, это загрузить приведенный ниже код. Убедитесь, что вы настроили переменную, помеченную как «TODO», в соответствии с вашими предпочтениями, дождитесь, пока синий индикатор на модуле GOS не начнет мигать, а затем отключите микроконтроллер от вашего компьютера и поместите батарейки в батарейный отсек. Все готово.
Я разработал корпус, чтобы устройство было в безопасности и выглядело привлекательно, я использовал два куска акрила и расплавил края, изогнув их под углом 90 градусов. Я поместил всю схему внутрь и батарейный отсек под ними, а затем скрепил кусочки пластика двумя стяжками.


В конце концов, я накрыл кусок верха (прозрачная крышка), чтобы скрыть все провода из поля зрения и оставить видимым только мозг проекта.
Фон
Я лично знаю, насколько напряженным может быть выполнение простой задачи - отправить ребенка в школу, все беспокоятся обо всем, что может случиться с их ребенком, когда он / она идет в школу.
Этот проект адресован всем людям, которые испытывают стресс, отправляя своего ребенка в школу. SWay позволит расслабиться, зная, что ваш ребенок благополучно приедет в школу.

Код
SmartWay
Полный кодИзготовленные на заказ детали и корпуса
По умолчанию не входит в состав Fritzing arduino_mkr_fox_1200_fixed_gwlzp1tuih_uh8ucYEGxI.fzpzСхема

Производственный процесс