BASTÓN INTELIGENTE: Sistema de Asistencia para Personas con Baja Visión

Autores:

  • Rubén Pisonero Cuenca
  • Adrián Feito Blázquez
  • Wheisheng Zheng
  • Isabel Sastre González

1. Introducción y Motivación

En este proyecto hemos desarrollado un Bastón Inteligente (Smart Cane) diseñado para mejorar la autonomía y seguridad de personas con baja visión o ceguera parcial.

Los bastones blancos tradicionales son herramientas eficaces para detectar obstáculos a nivel del suelo, pero dejan al usuario vulnerable ante objetos situados a media altura (ramas, señales de tráfico, bolardos altos, etc.). Nuestro objetivo ha sido modernizar esta herramienta integrando tecnología empotrada que permita:

  1. Detectar obstáculos a distancia mediante ultrasonidos.
  2. Avisar al usuario de forma háptica (vibración) sin bloquear su sentido del oído.
  3. Proporcionar un sistema de seguridad pasiva (SOS) con geolocalización.

2. Materiales y Componentes (BOM)

Para la realización del prototipo hemos utilizado el ecosistema Arduino por su versatilidad y bajo coste. Los componentes principales son:

  • Microcontrolador: Arduino Uno R3.
  • Sensor de Distancia: HC-SR04 (Ultrasonido).
  • Conectividad: Módulo GSM SIM800L (para envío de SMS) y Módulo GPS NEO-6M.
  • Actuador: Motor de vibración (tipo moneda) controlado por transistor.
  • Alimentación: Powerbank estándar + Regulador de voltaje LM2596 (Step-Down) para estabilizar la tensión del sistema.
  • Otros: Protoboard, resistencias, condensadores (para filtrado de picos del GSM), pulsador de emergencia y caja protectora.

3. Funcionamiento y Casos de Uso

El sistema opera bajo una lógica de feedback progresivo y monitoreo constante. Lo hemos diseñado pensando en tres escenarios principales:

  • Navegación Asistida: Mientras el usuario camina, el sensor barre el entorno frontal. Si no hay obstáculos cercanos (> 250 cm), el bastón permanece silencioso.
  • Detección de Obstáculos: Al detectar un objeto, el sistema activa el motor de vibración con una frecuencia variable:
    • Precaución (150 cm): Vibración lenta.
    • Alerta (50 cm): Vibración media.
    • Peligro Inminente (< 10 cm): Vibración rápida.
  • Emergencia (SOS): Si el usuario pulsa el Botón de Pánico, el sistema captura las coordenadas GPS y envía un SMS de socorro con un enlace a Google Maps.

4. Desarrollo de Hardware y Conexiones

El montaje se ha realizado sobre una protoboard para facilitar la modularidad. Uno de los puntos clave fue el diseño de la alimentación: el módulo GSM genera picos de corriente altos, por lo que fue necesario implementar un bus de energía robusto regulado por el LM2596 y añadir condensadores de filtrado para evitar reinicios del Arduino 1111.+1

A continuación se muestra el esquema completo de conexiones que hemos diseñado:

La electrónica se ha integrado finalmente en una carcasa acoplada al bastón, diseñada para proteger los componentes sin comprometer la ergonomía.


5. Código del Proyecto

El software se ha desarrollado utilizando una arquitectura Orientada a Objetos (POO) para mantener el código limpio y modular. Hemos creado clases independientes para gestionar cada periférico (DistanceSensor, GPSLocation, VibrationAlert, SMSCommunicator, BateryMonitor), dejando el bucle principal (loop) muy simplificado.

Aquí mostramos el fragmento principal de la lógica de control:

C++

#include <Arduino.h>
#include "Config/Config.h"
#include "Sensors/DistanceSensor.h"
#include "Actuators/VibrationAlert.h"
#include "Communication/GPSLocation.h"
#include "Communication/SMSCommunicator.h"
#include "Sensors/BatteryMonitor.h"
#include "Sensors/EmergencyButton.h"

// Instantiate Modules
DistanceSensor distanceSensor(PIN_TRIG, PIN_ECHO);
VibrationAlert vibrationAlert(PIN_VIBRATION);
GPSLocation gpsLocation(PIN_GPS_RX, PIN_GPS_TX);
SMSCommunicator smsCommunicator(PIN_GSM_RX, PIN_GSM_TX);
BatteryMonitor batteryMonitor(PIN_BATTERY, VOLTAGE_DIVIDER_RATIO, BATTERY_THRESHOLD_VOLTS);
EmergencyButton emergencyButton(PIN_BUTTON);

void setup() {
    Serial.begin(9600); // For debugging
    
    distanceSensor.init();
    vibrationAlert.init();
    gpsLocation.init();
    smsCommunicator.init();
    batteryMonitor.init();
    emergencyButton.init();
    
    Serial.println("Smart Cane System Initialized");
}

void loop() {
    // 1. Update GPS
    gpsLocation.update();

    // 2. Check Emergency Button
    if (emergencyButton.isPressed()) {
        Serial.println("Emergency Button Pressed!");
        if (gpsLocation.isValid()) {
            smsCommunicator.sendSOS(gpsLocation.getLatitude(), gpsLocation.getLongitude());
        } else {
            Serial.println("GPS Invalid, sending last known or 0,0");
            // Optionally send 0,0 or wait
            smsCommunicator.sendSOS(0.0, 0.0); 
        }
        delay(5000); // Prevent spamming
    }

    // 3. Distance & Vibration
    long distance = distanceSensor.getDistance();
    vibrationAlert.update(distance);

    // 4. Battery Check
    if (batteryMonitor.isLow()) {
        // Optional: Low battery warning behavior
        // For now, maybe just print to serial or a specific vibration pattern
        Serial.println("Battery Low!");
    }

    delay(10); // Small delay for stability
}

Código completo: BastonInteligente/src/SmartCane.ino at main · Shockp/BastonInteligente


6. Presupuesto

El coste total de materiales del prototipo asciende a 80,00 €, buscando siempre el equilibrio entre funcionalidad y bajo coste.

ComponenteCoste Aproximado
Arduino Uno R315,00 €
Sensor HC-SR042,00 €
Módulo GPS NEO-6M10,00 €
Módulo GSM SIM800L8,00 €
Powerbank + Regulador LM259612,00 €
Protoboard y componentes pasivos7,00 €
Motor Háptico6,00 €
Bastón físico y estructura10,00 €
Cables y varios10,00 €
TOTAL80,00 €

7. Problemas Encontrados y Soluciones

Durante el desarrollo nos enfrentamos a varios desafíos:

  1. Consumo del GSM: El módulo SIM800L es muy exigente energéticamente. Solución: Mejoramos la etapa de potencia con una fuente externa (Powerbank) y condensadores electrolíticos.
  2. Volumen del Prototipo: Al usar un Arduino Uno y una protoboard, el circuito resultó voluminoso. Solución: Diseñamos una caja contenedora específica, aunque identificamos que una versión final debería usar una PCB customizada o un Arduino Nano.
  3. Integración Mecánica: El bastón está en constante movimiento, lo que pone a prueba las conexiones. Solución: Aseguramos el cableado y la sujeción de la caja para evitar falsos contactos por vibración.

8. Vídeo Explicativo

A continuación, podéis ver el vídeo donde explicamos en detalle el montaje, el código y mostramos una demostración real del funcionamiento del bastón:


9. Conclusión

Este proyecto nos ha permitido validar que es posible crear una herramienta de asistencia accesible y funcional con hardware de bajo coste. Aunque existen mejoras posibles en cuanto a miniaturización, el sistema cumple robustamente con su función de proteger y conectar al usuario.

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *