SmartWay
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Herramientas y máquinas necesarias
|
Aplicaciones y servicios en línea
| ||||
|
Acerca de este proyecto
Descripción general
Los padres siempre se preocupan por sus hijos. Los padres quieren que sus hijos lleguen puntuales a la escuela y lleguen a casa a tiempo, tomando el camino asignado.
SmartWay tiene como objetivo eliminar esta preocupación de la vida cotidiana de los padres. SmartWay monitoreará a su hijo cuando llegue y regrese de la escuela, asegurando que su hijo siempre tome el camino apropiado para llegar a su destino, la escuela.
SWay monitoreará la geolocalización de su hijo usando GPS y enviará inmediatamente a los padres un correo electrónico si el niño se desvía de la ruta que le asignó. SmartWay también enviará a los padres un correo electrónico cuando el niño llegue a casa o a la escuela, además de informarles si el niño llega tarde. De esta manera, los padres pueden sentarse y disfrutar de su café sabiendo que su hijo llega sano y salvo a la escuela y al hogar.
Funcionalidad
SmartWay monitoreará continuamente la geolocalización de su hijo desde que se despierta hasta que llega a casa. El dispositivo también está equipado con un LED RGB y un motor vibrador para advertir a su hijo si no está tomando el camino correcto a la escuela o si llega tarde, y felicitarlo cuando llegó a la escuela.
El dispositivo funciona a través de muchas funciones para garantizar que su hijo esté seguro.
- El primer bucle
if (fuera de pista)
detecta si el niño se desvió del camino asignado, el dispositivo tiene un sistema que detecta la cantidad de veces que esto ocurre; Si su hijo se desvía del rumbo la primera vez, el dispositivo le advertirá girando el LED rojo y haciendo vibrar el motor, luego el niño tendrá dos minutos para volver al rumbo. Si el niño permanece fuera de curso durante dos minutos más, los padres recibirán un correo electrónico advirtiéndoles que su hijo está fuera de curso junto con su geolocalización, el correo electrónico se enviará de forma receptiva a intervalos de 2 minutos hasta que llegue el niño. en casa o en la escuela. -
if (horario escolar)
yif (hora de casa)
Los bucles detectan si es hora de ir a la escuela y al hogar, luego el dispositivo verifica si el niño llegó a la escuela o al hogar, si llegó a tiempo, el LED se iluminará en verde y el dispositivo enviará a los padres un correo electrónico informándoles que su niño llegó a su destino junto con la hora de llegada. De lo contrario, si es hora de que comience la escuela y el niño no está en la escuela, también lo hará
El dispositivo solo puede enviar 12 bytes de información, por lo que se necesita un paquete compacto al enviar. Otras variables se configurarán en el backend de SigFox.
Hay cuatro paquetes que el dispositivo puede enviar
- el niño está fuera de curso - ("fuera de curso")
- el niño llegó a casa - ("en casa")
- el niño llegó a la escuela - ("en la escuela")
- el niño llega tarde - ("tarde")
Sistema de advertencia
El niño que lleva el dispositivo será alertado cada vez que llegue a la escuela, llegue a casa, llegue tarde a un destino o se desvíe del rumbo
El dispositivo en acción
Beneficios
Los padres que utilicen este dispositivo se beneficiarán de:
- asegurarse de que su hijo llegue sano y salvo a la escuela
- asegurarse de que su hijo llegue puntual a estos lugares
- asegúrese de que su hijo no se desvíe, por supuesto
- Ahorro de energía y bajo costo:baterías de larga duración
Construyendo el Proyecto
Paso 1:Aparato requerido
Para comenzar a hacer el proyecto, necesitamos reunir nuestros materiales. Para este proyecto necesitará:
- cables de puente
- 1, transistor NPN
- 1, condensador cerámico (0,1 µF)
- 3, resistencias (220Ω)
- 1, resistencia (1KΩ)
- 1, LED RGB
- 1, módulo GPS
- 1, Celda de motor vibrante
- 1, Arduino MKR1200 fox
- 1 caja de 2 pilas AAA / AA
- 2 pilas AA
Paso 2:conexión del circuito
El siguiente paso es conectar el circuito; las imágenes de Fritzing a continuación ilustrarán cómo se hace esto. Hay varias partes del cableado, por lo que se dividen en diferentes imágenes.
Paso 3:reconocimiento del código
El código consta de múltiples funciones, cada función desempeña un papel específico en la composición del proyecto.
- Sistema de advertencia
- Obtener GPS
- Sincronizar RTC
- Ubicación del proceso
- Enviar paquete
- Realizar acciones
Estas secciones se explican a continuación.
- Sistema de advertencia
void setOutputs () {pinMode (R, OUTPUT); pinMode (G, SALIDA); pinMode (B, SALIDA); pinMode (motorPin, OUTPUT);} void vibrateMotor () // hace vibrar la celda del motor {digitalWrite (motorPin, HIGH); retraso (1000); digitalWrite (motorPin, LOW);} void ledGreen () // LED, Green {analogWrite (R, 0); analogWrite (G, 255); analogWrite (B, 0);} void ledOrange () // LED, naranja {analogWrite (R, 255); analogWrite (G, 45); analogWrite (B, 0);} void ledRed () // LED, rojo {analogWrite (R, 255); analogWrite (G, 0); analogWrite (B, 0);} void resetLED () // Apague el LED {analogWrite (R, 0); analogWrite (G, 0); analogWrite (B, 0);}
Esta sección del código se encuentra en functions.h
Archivo. El código notificará al niño que lleva el dispositivo sobre el estado actual. En general, estos bucles controlan el LED RGB y la celda del motor vibrante.
- Obtener GPS
bool getGPS (int run) {while (Serial1.available ()> 0) {if (gps.encode (Serial1.read ())) {if (ejecutar ==1) {processData (); } más si (ejecutar ==2) {synchRTC (); } if (gps.location.isValid () &&gps.time.isValid () &&gps.date.isValid ()) {return true; } else {devolver falso; }}} if (millis ()> 10000 &&gps.charsProcessed () <10) {Serial.println ("Error - Módulo GPS respondió con error"); Serial.println ("Código de terminación"); Serial.println ("________________________________________"); while (1) {}; }}
Este es el bucle encargado de recibir la ubicación y la hora desde el módulo GPS. Hay 3 cosas que hace este bucle, se usa en el bucle de configuración
para sincronizar el GPS, luego se usa para sincronizar el RTC a bordo con el GPS y se usa en el bucle principal para obtener la geolocalización del dispositivo.
- Sincronizar RTC
void synchRTC () {Serial.println ("Sincronizando RTC"); Serial.println ("________________________________________"); Serial.println ("OK - Inicializando RTC"); rtc.begin (); Serial.println ("OK - Hora de sincronización"); // tenemos que recortar los primeros 2 dígitos de la variable (2018 -> 18) uint16_t yearRAW =gps.date.year (); Cadena yearString =String (yearRAW); yearString.remove (0,1); uint16_t año =yearString.toInt (); rtc.setTime (gps.time.hour (), gps.time.minute (), gps.time.second ()); rtc.setDate (gps.date.day (), gps.date.month (), año); Serial.println ("Correcto - RTC sincronizado"); Serial.println ("________________________________________"); Serial.println (""); Serial.println (""); Serial.println ("");}
Esta sección de código sincroniza el RTC a bordo con la hora recibida del módulo GPS, primero lee los datos del módulo GPS y luego los procesa. A continuación, el bucle establece la hora actual del RTC integrado en la hora recibida e inicia el RTC.
- Proceso Ubicación
bool processData () {if (gps.location.isValid ()) {latitud =gps.location.lat (); longitud =gps.location.lng (); latitud =53,355504; longitud =-6,258452; if (check.isOut ()) {if (check.track ()) {Serial.println ("FUERA DE LÍMITES"); warn.offTrackLoop (); }} if (check.isHomeTime () &&arrivalSchool) {if (check.isHome ()) {Serial.println ("EN CASA"); warn.arrivedHomeLoop (); } else {Serial.println ("TARDE -> INICIO"); warn.lateLoop (); }} else if (check.isSchoolTime () &&llegóHome) {Serial.println ("."); if (check.isSchool ()) {Serial.println ("EN LA ESCUELA"); warn.arrivedSchoolLoop (); } else {Serial.println ("TARDE -> ESCUELA"); warn.lateLoop (); }} else {Serial.println ("EN CAMINO"); }}}
Este bucle procesará la ubicación del dispositivo y lo comparará con la hora actual para ver dónde debería estar el niño en ese momento. Luego realizará la acción apropiada según el resultado.
- Hacer Acciones
struct Do {void offTrackLoop () {if (offTrackVar) {parseData (0); } vibrateMotor (); ledRed (); retraso (1000); vibrateMotor (); resetLED (); offTrackVar =verdadero; retraso (120000); } void lateLoop () {if (! lateVar) {parseData (1); } vibrateMotor (); ledOrange (); retraso (1000); resetLED (); lateVar =verdadero; } void llegóHomeLoop () {lateVar =false; offTrackVar =falso; vibrateMotor (); ledGreen (); retraso (1000); resetLED (); parseData (2); llegóHome =verdadero; llegóEscuela =falso; } vacío llegóSchoolLoop () {lateVar =false; offTrackVar =falso; vibrateMotor (); ledGreen (); retraso (1000); resetLED (); parseData (3); ArribóHome =falso; llegóEscuela =verdadero; }};
Se llama a esta estructura para tomar medidas sobre la respuesta dada por Ubicación del proceso, advertirá al niño al alternar el LED RGB y la celda del motor vibrante. También enviará un paquete a SigFox si es necesario.
- Enviar Paquete
void parseData (estado int) {SigFox.beginPacket (); // iniciar el proceso de envío de mensajes if (state ==0) // off track {SigFox.print ("off track"); // envía el mensaje} else if (state ==1) // late {SigFox.print ("late"); // envía el mensaje} else if (state ==2) // llegó a casa {SigFox.print ("en casa"); // envía el mensaje} else // llegó la escuela {SigFox.print ("en la escuela"); // envía el mensaje} SigFox.endPacket ();}
Esta función envía los datos a SigFox, se inicia el envío del paquete y luego se analiza el valor apropiado.
Configuración de las variables
El código contendrá múltiples variables con TODO escrito como un comentario después de ellas, estas variables deben personalizarse para adaptarse al cliente, se le pedirá al cliente que las configure
- Hora de ir a la escuela
- Tiempo que tarda el niño en viajar
- Hora a la que termina la escuela
- ¿Depuración?
- Geolocalización escolar (LAT, LNG);
- Geolocalización del hogar (LAT, LNG);
La siguiente guía le guía a través de la configuración de las variables.
Bibliotecas
SigFox - copyright (c) 2016 Arduino LLC Licencia pública general reducida GNU esta biblioteca es de dominio público
ctype - copyright (c) 2006 Free Software Foundation bajo la Licencia Pública General GNU, esta biblioteca es de dominio público
RTCZero - copyright (c) 2015 Arduino LLC bajo la GNU Lesser General Public License, esta biblioteca es de dominio público
Cadena - copyright (c) 2009-10 Hernando Barragán, copyright (c) 2011 Paul Stoffrengen bajo la GNU Lesser General Public License, esta biblioteca es de dominio público
TinyGPS ++ - copyright (c) 2008-13 Mikal Hart bajo la Licencia Pública General Reducida GNU, esta biblioteca es de dominio público
Configuración
Asegúrese de que el circuito esté cableado correctamente. Para obtener detalles sobre la configuración de su MKR fox, haga clic aquí para ver el tutorial de Arduino. Si desea saber más sobre la biblioteca Arduino SigFox, haga clic aquí.
Programa de backend
Debe tener un zorro Arduino MKR1200 registrado para programar el backend.
- Paso 1
Abra el backend de SigFox e inicie sesión en su cuenta de SigFox.
- Paso 2
haga clic en "Tipo de dispositivo" en el menú desplegable en la parte superior de la página
- Paso 3:
seleccione su Arduino MKRfox y haga clic en editar
- Paso 4:
Seleccione devoluciones de llamada en el menú de la izquierda y navegue hasta el botón "nuevo" en la esquina superior derecha.
- Paso 5:
Después de hacer clic en nuevo, se le presentarán varias opciones de configuración de devolución de llamada, haga clic en Devolución de llamada personalizada
A continuación se abrirá una ventana, debe completar el formulario dado para crear su devolución de llamada
Al final, su mensaje debería verse así:
Ahora haga clic en Aceptar y estará listo.
Final
Lo último que debe hacer es cargar el código a continuación, asegúrese de haber personalizado la variable marcada con "TODO" según sus preferencias, espere a que la luz azul en el módulo GOS parpadee y luego desconecte el microcontrolador de su computadora y coloque las baterías en la caja de la batería. Ya está todo listo.
Diseñé una carcasa para mantener el dispositivo seguro y para que se viera atractivo, utilicé dos piezas de acrílico y fundí los bordes curvándolos a 90 grados. Coloqué todo el circuito dentro y la caja de la batería debajo de ellos y luego até las piezas de plástico con dos bridas.
Al final, cubrí una parte de la parte superior (cubierta transparente) para ocultar todos los cables de la vista y solo dejar visible el cerebro del proyecto.
Antecedentes
Personalmente sé lo estresante que puede ser ejecutar la simple tarea de enviar a su hijo a la escuela, todos se preocupan por todas las cosas que le pueden pasar a su hijo mientras se dirige a la escuela.
Este proyecto está dirigido a todas las personas que se sienten estresadas cuando envían a su hijo al colegio. SWay le permitirá relajarse sabiendo que su hijo llegará sano y salvo a la escuela.
Código
SmartWay
El código completoPiezas y carcasas personalizadas
No incluido en Fritzing por defecto arduino_mkr_fox_1200_fixed_gwlzp1tuih_uh8ucYEGxI.fzpzEsquemas
Overall_WZeRYkIUCF.fzzProceso de manufactura
- Motores de conmutador de CA
- Prototipo de Raspoulette
- Robot Pi simple
- Cómo comprobar un motor de CC
- ¿Qué es un motor lineal?
- Una introducción al motor BLDC
- ¿Qué es un motorreductor de engranajes?
- ¿Qué es un servomotor?
- ¿Qué es el servomotor reductor?
- Comprender el motor de arranque del motor
- Integración de motor sin marco