SmartWay: Kit Integral para Monitorización Infantil GPS, Vibración, RGB y Sigfox (Arduino MKR Fox 1200)
Componentes y materiales
| Arduino MKR Fox 1200 (Sigfox) | 1 |
| Módulo GPS GY-NEO6MV2 | 1 |
| Motor vibrador (cell) | 1 |
| LED RGB difuso (cátodo común) | 1 |
| Transistor NPN (genérico, para motor) | 1 |
| Condensador cerámico 0,1 µF (motor) | 1 |
| Resistencia 1 kΩ (base transistor) | 1 |
| Resistencia 221 Ω (LED RGB) | 1 |
| Soporte 2xAA/AAA para RTC | 1 |
| Cables jumper | 1 set |
Herramientas
- Soldador
Software y servicios
- Arduino Web Editor
- Backend Sigfox (cuenta requerida)
- Librerías:
SigFox,RTCZero,TinyGPS++,ArduinoLowPower
Visión general
SmartWay monitoriza la ruta escolar de un niño. Usa GPS para geolocalización, Sigfox para enviar alertas (email) a los padres, y retroalimentación local (LED RGB + vibración) al niño.
Funcionamiento
- Desvío de ruta: Si el niño sale del camino asignado, LED rojo + vibración. 2 min para volver; si no, email a padres con coordenadas (repite cada 2 min).
- Hora escuela/casa: Verifica llegada puntual. LED verde + email "at school"/"at home" con hora. Si no llega a tiempo: LED naranja + email "late".
- Paquetes Sigfox (12 bytes): "off track", "at home", "at school", "late". Variables extra (horarios, coordenadas) se configuran en backend Sigfox.
Montaje
- Conecta GPS a Serial1 (pines TX/RX del MKR Fox).
- LED RGB: pines PWM (R, G, B) con resistencias 220 Ω.
- Motor vibrador: transistor NPN + base 1k Ω + condensador 0,1 µF en colector.
- Alimentación: 2 pilas AA en soporte (RTC) + batería LiPo opcional en MKR Fox.
- Carcasa: dos piezas acrílico curvadas 90°, unidas con bridas; tapa superior transparente con zona opaca para ocultar cableado.
Estructura del código (fragmentos clave)
Sistema de alertas (functions.h)
void setOutputs() { pinMode(R, OUTPUT); pinMode(G, OUTPUT); pinMode(B, OUTPUT); pinMode(motorPin, OUTPUT); }
void vibrateMotor() { digitalWrite(motorPin, HIGH); delay(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); }
Obtención GPS + sincronía RTC
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 return false;
}
}
if (millis() > 10000 && gps.charsProcessed() < 10) { /* error GPS */ while(1); }
}
Procesar ubicación y decidir acción
bool processData() {
if (gps.location.isValid()) {
latitude = gps.location.lat(); longitude = gps.location.lng();
// TODO: reemplazar por coordenadas reales de escuela/casa
latitude = 53.355504; longitude = -6.258452;
if (check.isOut()) { if (check.track()) { warn.offTrackLoop(); } }
if (check.isHomeTime() && arrivedSchool) {
if (check.isHome()) warn.arrivedHomeLoop(); else warn.lateLoop();
} else if (check.isSchoolTime() && arrivedHome) {
if (check.isSchool()) warn.arrivedSchoolLoop(); else warn.lateLoop();
} else { Serial.println("ON WAY"); }
}
}
Acciones y envío Sigfox
struct Do {
void offTrackLoop() { if (offTrackVar) parseData(0); vibrateMotor(); ledRed(); delay(1000); vibrateMotor(); resetLED(); offTrackVar = true; delay(120000); }
void lateLoop() { if (!lateVar) parseData(1); vibrateMotor(); ledOrange(); delay(1000); resetLED(); lateVar = true; }
void arrivedHomeLoop() { lateVar = false; offTrackVar = false; vibrateMotor(); ledGreen(); delay(1000); resetLED(); parseData(2); arrivedHome = true; arrivedSchool = false; }
void arrivedSchoolLoop() { lateVar = false; offTrackVar = false; vibrateMotor(); ledGreen(); delay(1000); resetLED(); parseData(3); arrivedHome = false; arrivedSchool = true; }
};
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("at home");
else SigFox.print("at school");
SigFox.endPacket();
}
Configuración backend Sigfox (callbacks)
- Inicia sesión en backend.sigfox.com.
- Menú "Device Type" → selecciona tu MKR Fox 1200 → "Edit".
- Pestaña "Callbacks" → "New" → "Custom Callback".
- Configura: Type=EMAIL, Channel=EMAIL, Recipient=tu@email.com, Subject="SmartWay Alert", Body={data}.
- Guarda.
Variables a personalizar (marcadas TODO)
- Hora entrada/salida escuela
- Tiempo de trayecto
- Coordenadas escuela (LAT, LNG)
- Coordenadas casa (LAT, LNG)
- Modo debug
Recursos
- Código completo en sección "Code" (archivo .ino).
- Esquemático Fritzing (.fzz) y pieza personalizada MKR Fox (.fzpz) en "Custom parts".
- Esquemático en "Schematics".
Proceso de manufactura
- Raspoulette: Sistema autónomo de puerta de gallinero alimentado por energía solar – Prototipo
- Simple Pi Robot: Construye un Rover Autónomo 2‑WD con Raspberry Pi
- Entendiendo los Motores Lineales: De Energía Eléctrica a Movimiento Lineal Preciso
- Entendiendo los motores BLDC: guía profesional
- Motorreductores: funcionamiento, tipos y aplicaciones esenciales
- Motores servo: funcionamiento, tipos y por qué son importantes
- Entendiendo los reductores para servomotores: funciones, beneficios y aplicaciones
- Motor de arranque: Funcionamiento, tipos, averías y diagnóstico
- Optimización del control de movimiento con motores servo sin bastidor Parker serie K
- Comprender los Motores de Conmutador de CA: Diseño, Tipos y Aplicaciones
- Guía Paso a Paso para Inspeccionar y Diagnosticar Problemas en Motores DC