SmartWay
组件和用品
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
必要的工具和机器
![]() |
|
应用和在线服务
![]() |
| |||
![]() |
|
关于这个项目
概览
父母总是为孩子担心。父母希望他们的孩子准时到达学校并按时回家,走指定的路线。
SmartWay 旨在消除父母日常生活中的这种担忧。 SmartWay 将在您的孩子上学和放学时对其进行监控,确保您的孩子始终选择合适的路径到达他/她的目的地学校。
SWay 将使用 GPS 监控您孩子的地理位置,如果孩子偏离您分配给他/她的路径,它会立即向父母发送电子邮件。 SmartWay 还会在孩子到家或上学时向家长发送电子邮件,并在孩子迟到时通知他们。这样,父母可以坐下来享受咖啡,知道他们的孩子安全到达学校和家。

功能
SmartWay 将持续监控您孩子从醒来到回家的地理位置。该设备还配备了一个RGB LED和一个振动电机,如果您的孩子没有走正确的上学路线或迟到,就会警告您的孩子,并在他/她到达学校时祝贺他/她。
该设备通过多种功能工作,以确保您的孩子安全。


- 第一个循环
if(off track)
检测孩子是否偏离了指定的路径,设备有一个系统来检测这种情况发生的次数;如果您的孩子第一次偏离航线,设备会通过将 LED 变为红色并振动电机来警告他/她,然后孩子将有两分钟时间重新回到航线上。如果孩子继续偏离航线两分钟,家长将收到一封电子邮件,警告他们他们的孩子偏离航线以及他/她的地理位置,该电子邮件将每隔 2 分钟发送一次,直到孩子到达在家或在学校。 if(上学时间)
和if(home time)
循环检测是否到了上学和回家的时间,然后设备检查孩子是否到了学校或家,如果他/她准时到达,LED 将变为绿色,设备将向家长发送一封电子邮件,通知他们孩子与到达时间一起到达他/她的目的地。否则,如果到了开学时间而孩子不在学校,它也会
设备只能发送 12 个字节的信息,因此发送时需要一个紧凑的数据包。其他变量将在 SigFox 后端配置。



设备可以发送四个数据包
- 孩子偏离了路线 -(“偏离路线”)
- 孩子到家 -(“在家”)
- 孩子到了学校 -(“在学校”)
- 孩子迟到了 -(“迟到”)
警告系统
佩戴该设备的孩子无论何时到校、到家、到达目的地迟到或偏离航线都会收到提醒



正在运行的设备



好处
使用此设备的家长将受益于:
- 确保他们的孩子安全上下学
- 确保他们的孩子准时到达这些地点
- 确保他们的孩子不会偏离路线
- 节能和低成本 - 持久耐用的电池
建设项目
第 1 步:所需设备
要开始制作项目,我们需要收集材料。对于这个项目,你需要:
- 跳线
- 1、NPN三极管
- 1、陶瓷电容(0.1μF)
- 3、电阻(220Ω)
- 1、电阻(1KΩ)
- 1、RGB LED
- 1、GPS模块
- 1、振动电机
- 1、Arduino MKR1200 狐狸
- 1, 2x AAA/AA 电池盒
- 2节AA电池

第 2 步:连接电路
下一步是连接电路;下面的 Fritzing 图像将说明这是如何完成的。接线有多个部分,所以它们被分成不同的图像。

第 3 步:确认代码
代码由多个函数组成,每个函数在项目的组成中扮演特定的角色。
- 警告系统
- 获取 GPS
- 同步实时时钟
- 处理位置
- 发送包裹
- 执行操作
这些部分解释如下。
- 警告系统
void setOutputs(){ pinMode(R, OUTPUT); pinMode(G,输出); pinMode(B,输出); pinMode(motorPin, OUTPUT);}void vibrateMotor() // 振动电机单元{ digitalWrite(motorPin, HIGH);延迟(1000); digitalWrite(motorPin, LOW);}void ledGreen() // LED, Green{analogWrite(R, 0);模拟写入(G,255); analogWrite(B, 0);}void ledOrange() // LED, Orange{analogWrite(R, 255);模拟写入(G,45); AnalogWrite(B, 0);}void ledRed() // LED, Red{analogWrite(R, 255);模拟写入(G,0); AnalogWrite(B, 0);}void resetLED() // 关闭 LED{analogWrite(R, 0);模拟写入(G,0);模拟写入(B, 0);}
这部分代码位于 functions.h
文件。该代码将通知佩戴设备的孩子当前状态。总的来说,这些回路控制着 RGB LED 和振动电机。
- 获取 GPS
bool getGPS(int run){ while(Serial1.available()> 0) { if(gps.encode(Serial1.read())) { if(run ==1) { processData(); } else if(run ==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 件事,它用在 setup loop
同步 GPS,然后用于将板载 RTC 同步到 GPS',并在主循环中用于获取设备的地理位置。
- 同步实时时钟
void synchRTC(){ Serial.println("同步RTC"); Serial.println("________________________________________"); Serial.println(" OK - 正在初始化 RTC"); rtc.begin(); Serial.println("OK - 同步时间"); // 我们必须修剪变量的前 2 位数字 (2018 -> 18) uint16_t yearRAW =gps.date.year(); String 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(), year); Serial.println("成功 - RTC 同步"); Serial.println("________________________________________"); Serial.println(""); Serial.println(""); Serial.println("");}
这部分代码将板载 RTC 与从 GPS 模块接收到的时间同步,它首先从 GPS 模块读取数据,然后对其进行处理。然后循环将板载 RTC 的当前时间设置为接收到的时间并启动 RTC。
- 过程 位置
bool processData(){ if(gps.location.isValid()) { latitude =gps.location.lat();经度 =gps.location.lng();纬度 =53.355504;经度 =-6.258452; if(check.isOut()) { if(check.track()) { Serial.println("OUT OF BOUNDS");警告.offTrackLoop(); } } if(check.isHomeTime() &&createdSchool) { if(check.isHome()) { Serial.println("AT HOME");警告.arrivedHomeLoop(); } else { Serial.println("LATE -> HOME");警告.lateLoop(); } } else if(check.isSchoolTime() &&created Home) { Serial.println("."); if(check.isSchool()) { Serial.println("AT SCHOOL");警告.arrivedSchoolLoop(); } else { Serial.println("LATE -> SCHOOL");警告.lateLoop(); } } else { Serial.println("ON WAY"); } }}
这个循环将处理设备的位置并将其与当前时间进行比较,以查看孩子此时应该在哪里。然后它会根据结果执行相应的操作。
- 做 操作
struct Do{ void offTrackLoop() { if(offTrackVar) { parseData(0); } 振动电机();红灯();延迟(1000);振动电机();重置LED(); offTrackVar =真;延迟(120000); } void lateLoop() { if(!lateVar) { parseData(1); } 振动电机(); ledOrange();延迟(1000);重置LED();后期变量 =真; } 无效到达HomeLoop() { lateVar =false; offTrackVar =假;振动电机(); ledGreen();延迟(1000);重置LED();解析数据(2);到达家 =真;到达学校 =假; } 无效到达SchoolLoop() { lateVar =false; offTrackVar =假;振动电机(); ledGreen();延迟(1000);重置LED();解析数据(3);到达家 =假;到达学校 =真; }};
调用此结构以对 Process Location, 给出的响应采取行动 它会警告孩子切换 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 作为注释,这些变量必须自定义以适合客户端,将要求客户端设置
- 上学时间
- 孩子旅行所需的时间
- 放学时间
- 调试?
- 学校地理位置(LAT、LNG);
- 家庭地理位置(LAT、LNG);
下面的指南将指导您设置变量。











图书馆
SigFox - 版权所有 (c) 2016 Arduino LLC GNU Lesser General Public License 该库属于公共领域
ctype - 版权所有 (c) 2006 自由软件基金会在 GNU 通用公共许可证下,该库在公共领域
RTCZero - 版权所有 (c) 2015 Arduino LLC,遵循 GNU 宽松通用公共许可证,该库属于公共领域
字符串 - 版权 (c) 2009-10 Hernando Barragan,版权 (c) 2011 Paul Stoffrengen 根据 GNU 宽松通用公共许可证,此库属于公共领域
TinyGPS++ - 版权所有 (c) 2008-13 Mikal Hart 根据 GNU 宽松通用公共许可证,该库属于公共领域
设置
确保电路接线正确。有关设置 MKR fox 的详细信息,请单击此处获取 Arduino 教程。如果您想了解有关 Arduino SigFox 库的更多信息,请单击此处。
后端程序
您必须拥有注册的 Arduino MKR1200 fox 才能对后端进行编程。
- 第一步
打开 SigFox 后端并登录您的 SigFox 帐户。
- 第 2 步
点击页面顶部下拉菜单中的“设备类型”

- 第 3 步:
选择您的 Arduino MKRfox 并点击编辑

- 第 4 步:
从左侧菜单中选择回调并导航至右上角的“新建”按钮。

- 第 5 步:
点击新建后,会出现多个回调配置选项,点击自定义回调

接下来将打开一个窗口,您必须填写给定的表格以创建您的回调
最后,您的消息应如下所示:

现在点击确定,一切就绪。
决赛
您需要做的最后一件事是上传下面的代码,确保您根据自己的喜好自定义了标有“TODO”的变量,等待 GOS 模块上的蓝灯闪烁,然后断开微控制器与计算机的连接,然后将电池放入电池盒中。你已经准备好了。
我设计了一个外壳以确保设备安全并使其看起来很有吸引力,我使用了两块亚克力并将边缘熔化成 90 度弯曲。我把所有的电路都放在里面,把电池盒放在它们下面,然后用两个电缆扎带把塑料片捆在一起。


最后我覆盖了一块顶部(透明盖)以隐藏所有电线,只让项目的大脑可见。
背景
我个人知道执行送您的孩子上学的简单任务是多么紧张,每个人都担心孩子在上学的路上可能发生的所有事情。
该项目面向所有在送孩子上学时感到压力的人。 Sway 会让您放松,因为您知道您的孩子会安全到达学校。

代码
SmartWay
完整代码定制零件和外壳
默认情况下不包含在 Fritzing 中 arduino_mkr_fox_1200_fixed_gwlzp1tuih_uh8ucYEGxI.fzpz示意图

制造工艺