Sencillo exobrazo


Puede parecer una banalidad , pero la idea detrás de este prototipo es muy interesante ya que  puede suponer una ayuda importante   a la movilidad,  pues esta  assietncia puede ser especialmente importante para los ancianos y otras personas que necesitan este tipo de ayuda en la vida cotidiana.

El sistema que sugieren sus creadores destaca por su simplicidad : una estructura de aluminio  para sujetar el brazo, un motor y una placa Arduino con su correspondiente escudo (cuyos detalles, por cierto, han publicado en hackaday.com) ,

Nos explican   que en la construcción del  exo-brazo buscaban  que fuese relativamente barato, sencillo y potente que permitiera  un uso fácil del mismo , por lo cual  construir su prototipo no deberia costar mas de 100$ ,  lo cual es un precio bastante razonable ,sobre todo si nos vamos a soluciones que se  estan desarrollando la industria.

El desarrollo de este proyecto comenzó centrándose más en el control del brazo y luego en el propio diseño, por lo que  tal vez el  objetivo número de sus creadores  es   hacer que el control de ExoArm sea tan barato y tan intuitivo como sea posible.

En el siguiente video podemos verlo en acción:

Como podemos  apreciar, hay una estructura articulada de aluminio  y precisamente en la articulación esta el motor (en el codo) , aunque  sugieren que en otros diseños futuros  también proveen implementar  un  actuador en el hombro( de hecho el shield empleado admite dos motores).

Este  exo-brazo tiene   tambien apoyo trasero, de modo que todo el peso se distribuye uniformemente a su cuerpo siendo la capacidad de elevación  alrededor de 10 kg máximo o 22 libras.

 

Electrónica

 

 

modulo.PNG

 

 

Ademas de la placa Arduino, un componente básico es el driver del motor VNH2SP30 ,el cual es esencialmente una versión en rampa del escudo de motor Ardumoto. Esta placa se presenta como un escudo que  se conecta encima de Arduino  y es de bajo coste ( unos 6,5€ en Amazon).

Para este  Shield se usa  un par de drivers de motor de puente completo VNH2SP30. También incluye los circuitos de soporte para que esta placa sea capaz de controlar  un par de motores de alta corriente ,  aunque para esta aplicacion solo se usa uno .

El VIN y el motor son lanzados para  terminales de tornillo de 5mm , lo que facilita la conexión de cables de mayor calibre.

Al utilizar este escudo en aplicaciones de alta demanda extrema puede ser necesario mejorar el rendimiento térmico con un disipador de calor o ventilador y soldar los cables directamente a la placa en lugar de usar un terminal de tornillo (tenga en cuenta la alta corriente de este) , aunque  cuando se utiliza el escudo en corrientes de hasta 6A los chips apenas llegarán a ser perceptiblemente calientes.

Resumidamente  esta son algunas de las características del escudo empleado:

  • Voltaje: max. 16V
  • Regimen de corriente: 30A maximo 
  • Corriente permanente: 14 A
  • Resistencia MOSFET (solo ida): 19 m & OHgr;
  • Frecuencia PWM: 20 kHz Max.
  • Tamano placa: 6 * 5,2 * 2cm / 2,4 * 2 * 0,8pulg
  • Peso : 23 g / 0,8 oz

Una vez resuelto el driver, respecto a Arduino , los pines que se requieren , en la aplicación  son los pines siguientes:

  • Pines 3 y 4  como salidas binarias para configurar el motor vía el driver del motor VNH2SP30
  • Pin 5  como salida analógica para escribir el dato en el el driver del motor VNH2SP30
  • Pin 2  como entrada analógica para el encoder solidario al eje del motor para saber la posición de la articulación
  • Pines 8 como entrada binaria para ordenar subir la articulación via el motor
  • Pines 9  como entrada binaria para ordenar bajar  la articulación vía el motor

 

 

Antes de ver el codigo  final ,  es interesante apreciar como el control del motor se hace fijando los pins 3  y 4 a un valor  y luego sacando un valor analogico en el pin 5, por ejemplo, parar mover  arriba el motor   se usa esta función:

void moveup(float writemotor){ /
writemotor = map(writemotor, 0, -80, 255, 0);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
analogWrite(5, writemotor);

Y de forma similar para mover hacia  abajo :

void movedown(float writemotor){ 

writemotor = map(writemotor, 0,-255, 0, 255);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
analogWrite(5, writemotor);
}

Simplemente para  parar el moto,r   sacamos un  valor cero  en el pin 5 usan esta otra función:

void stopmove(){ //parar el motor
digitalWrite(3, LOW);
digitalWrite(4, LOW);
analogWrite(5, 0);
}

 

Una función  muy importante  es conocer la posición de la articulación  gracias a que hay conectado un potenciómetro solidario al aje de modo  que  capturando  el valor  de la salida del potenciómetro podemos   conocer el angulo ,gracias  al  siguiente código:

float errorSum;
float Kp = 2;
float Ki = 0;

float computePID(int setpoint){    
angle = analogRead(2);
angle = map(angle, 0, 344, 0, 90); 

double time_elapsed = micros();
dtrate = (time_elapsed – last) / 1000.f;
last = time_elapsed;

float error = setpoint – angle;
errorSum += error * dtrate;
errorSum = constrain(errorSum, -255, 255);

return (Kp * error) + (Ki * errorSum);

}

Por ultimo,  en la función loop miramos continuamente  los valores binarios de los pines 8 y 9  ,y en función de su estado, llamaremos a alguna de las rutinas anteriores:

 

void loop()   //bucle principal de ejecución
{
int program_runtime = millis();

int readingUp = digitalRead(8);
int readingDown = digitalRead(9);

if(readingUp == 1 && readingDown == 0){
if(program_runtime – previousMillis > interval) {
previousMillis = program_runtime;
Step -= 5;
}

}
if(readingDown == 1 && readingUp == 0) {
if(program_runtime – previousMillis > interval) {
previousMillis = program_runtime;
Step += 5;
}

 

Código arduino

El procesamiento de control como decíamos se hace con un Arduino, por lo que el código es  bastante fácil de entender y modificar cuanto se quiera para mejorarlo o adaptarlo a cada necesidad:

 

#include <ArduinoTimer.h>
#include <CircularBuffer.h>
#include <CommandHandler.h>
#include <CommandProcessor.h>
#include <DataStore.h>
#include <DeviceAddress.h>
#include <EEPROMStore.h>
#include <Filter.h>
#include <MegunoLink.h>
#include <MessageHeaders.h>

#include «MegunoLink.h» /Funciones útiles para comunicarse con MegunoLink Pro.

#include «filter.h»
#include «Servo.h»

TimePlot plot;

int potVal;
int angle;
float dtrate;
double last;

ExponentialFilter FilteredMuscleValue(5, 20); / peso de la derecha, valor de inicio izquierdo

void moveup(float writemotor){ //mover  arriba el motor
writemotor = map(writemotor, 0, -80, 255, 0);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
analogWrite(5, writemotor);

}

void stopmove(){ //parar el motor
digitalWrite(3, LOW);
digitalWrite(4, LOW);
analogWrite(5, 0);
}

void movedown(float writemotor){ //mover hacia  abajo

writemotor = map(writemotor, 0,-255, 0, 255);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
analogWrite(5, writemotor);
}

float errorSum;
float Kp = 2;
float Ki = 0;

float computePID(int setpoint){    //función de  calculo de la posición del encoder
angle = analogRead(2);
angle = map(angle, 0, 344, 0, 90); // dejanski kot
Serial.print(angle);

double time_elapsed = micros();
dtrate = (time_elapsed – last) / 1000.f;
last = time_elapsed;

float error = setpoint – angle;
errorSum += error * dtrate;
errorSum = constrain(errorSum, -255, 255);
//Serial.println(error);
return (Kp * error) + (Ki * errorSum);

// Serial.println(time_elapsed, 5);
}

int Step = 0;

void setup()     //inicializacion del brazo
{
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
Serial.begin(9600);
Step = 0;
}

int k = 1;
int previousMillis = 0;
int interval = 50;

void loop()   //bucle principal de ejecución
{
int program_runtime = millis();

int readingUp = digitalRead(8);
int readingDown = digitalRead(9);

if(readingUp == 1 && readingDown == 0){
if(program_runtime – previousMillis > interval) {
previousMillis = program_runtime;
Step -= 5;
}

}
if(readingDown == 1 && readingUp == 0) {
if(program_runtime – previousMillis > interval) {
previousMillis = program_runtime;
Step += 5;
}

}
Step = constrain(Step, -150, 150);
if(readingDown == 0 && readingUp == 0) Step = 0;

//plot.SendData(«pid», writemotor);
Serial.println(Step);
if(Step > 0) moveup(Step);
if(readingUp == 0 && readingDown == 0) stopmove();
if(Step < 0) movedown(Step);

}

Componentes necesarios

1 × calibrador de tensión con el amplificador de celda de carga
1 × Aluminio 4 x 30 x al menos 2000 mm
1 × Arduino Uno / Nano
1 × controlador de motor VNH2SP30
1 × Motor del limpiador del parabrisas del coche
1 × cables largos
1 × Potenciómetro
1 × Li-Po batería 3S 5500mAh
1 × Tornillos y tuercas. M4 y M6
1 × Cinta adhesiva
1 × Zipties
1 × Correas
1 × Placas de madera
1 × Tubo termorretráctil

 

 

En el siguiente vídeo el autor describe mas detalles de construcción   de este excelente  exo-brazo:

 

 

Mas información en https://hackaday.io/project/20663-assistive-exoskeleton-arm-exoarm#menu-description

Potente y efectiva alarma con notificaciones por SMS y email


Ahora  que llega el verano es muy importante monitorizar los accesos  a  nuestra segunda vivienda  sobre todo para estar al tanto de cualquier acceso no autorizado y emprender las medidas necesarias.

Ademas ,dada la gran dependencia del suministro de corriente alterna,  también es necesario  tener constancia de cualquier caída o reposición que haya en el suministro que es necesario estar  informados  sobre todo ahora que  se aproximan las vacaciones  , para realizar acciones correctivas como por ejemplo reponer   elementos de maniobra o protección pues todos sabemos las consecuencias de tener cortes prolongados de red : posibles  perdidas de alimentos por la falta de refrigeración,fallo en sistemas de alarmas, fallos en  automatismos como riego automático,climatización ,etc

 

Normalmente sistemas capaces  de monitorizar accesos,  así como también  el estado de suministro eléctrico  con la complicación que eso conlleva ( sin red también deben ser capaz de enviar notificaciones) requieren un hardware muy costoso

Afortunadamente  la solución que proponemos que proponemos escapa del planteamiento clásico  al no  necesitar ningún hardware especial ,por lo que es terriblemente sencilla, pues simplemente requiere  un viejo  terminal  android  y por supuesto  una  app que pueda gestionar tanto el acceso como el estado de la red

En el siguiente vídeo podemos ver esta solución en funcionamiento:

 

 

 

 La solución que proponemos es única, pues no es necesario adquirir ningún hardware adicional, ya que se basa en reutilizar un  viejo Smartphone con SO Android 4.1 (Yelly Bean) o superior que tengamos olvidado  en un cajón  , para pasar a gestionar tanto los accesos, como los cortes de red del suministro eléctrico de una vivienda o local.

Al viejo terminal habrá que insertar una SIM  ( por ejemplo de prepago)  instalar la aplicación gratuita  Seguricasa y   mantener el Smartphone conectado al cargador, para que desde ese momento, en cuanto defina en la app el número del teléfono y las cuentas de correo de origen y de destino, pueda recibir   a voluntad   notificaciones por SMS o por mail, de cualquier anomalía que suceda en el suministro de corriente alterna de su vivienda.

El tema de añadir una SIM tiene una explicación: si no tenemos suministro eléctrico no nos puede funcionar nuestra banda ancha o FTTH por no poder alimentar a los equipos de cliente  asi que no tendremos conectividad  por estas vías  por lo  que se nos hace necesario  buscar otra alternativas como las redes 2G8/3G o incluso los SMS’s

 

 

Elementos  necesarios para la solución

A continuación   destacamos los elementos necesarios para la instalación de la aplicación de seguridad :

  • Smartphone Android con SO Android 4.1 (Yelly Bean) o superior.
  • Tarjeta SIM (puede ser de Prepago).
  • Cargador original.
  • Es importante destacar que si se desea almacenar las notificaciones de SMS o e-mail, el terminal debería contar al menos con 128MB de espacio en la SD externa para almacenamiento de logs.
  • Sistema para fijar el smartphone a la pared  o  belcro autoadhesivo
  • Un trozo de cartón duro  fijado solidario a la puerta de acceso que tape parcialmente el sensor de presencia del Smartphone al abrirse.

PUESTA EN MARCHA DE LA SOLUCIÓN SEGURICASA

Veamos a continuación los pasos   a seguir  para  instalar una alarma de accesos y falta de red de corriente alterna  con notificaciones  con sms y emails

 

PASO 1: SELECCIÓN DE TERMINAL

El   montaje  requiere  simplemente un Smartphone con SO Android 4.1o  superior que puede ser reciclado o en desuso. También es importante destacar que   si se desea almacenar las notificaciones de SMS o e-mail, el terminal debería contar al menos con 128MB de espacio en la SD externa para almacenamiento de logs.

El terminal Android debe tener SO Android 4.1 (Yelly Bean) o superior y no  es fundamental  que tenga  la pantalla  perfecta ( o la batería)  ya que la interacción con el terminal solo sera necesaria para configurar cuales van a ser las notificaciones  y los destinatarios de estas ( es decir este terminal puede ser perfectamente reciclado  o incluso en mal estado ) .

PASO 2: INSTALACIÓN DE LA APP SEGURICASA

Encenderemos el terminal  e instalaremos bien   la aplicación “Seguricasa ”  en su versión gratuita ( envía notifiaciones por email) o bien su versión de  premium de pago (0,5€) que también puede enviar SMS’s   y carece de publicidad .

seguricasafree.png

Pensando en la gran seguridad, accesibilidad y confianza que ofrecen los SMS’s frente a otros servicios de mensajería, en esta aplicación se ha optado por permitir él envió de mensajes de forma selectiva según las necesidades de los usuarios  por medio de la versión Premiun  de la misma  app (versión 4)

El link de Google play es esta es   ;https://play.google.com/store/apps/details?id=com.soloelectronicos.seguricasa.alarmaredv4.

v4.png

 

PASO 3: SIM

El siguiente paso  es insertar la SIM  en el terminal si es que vamos  a enviar SMS o emails estando sin suministro eléctrico  , ya que normalmente cuando no haya red eléctrica tampoco solo tenemos tener wifi. Dependiendo de lo que deseemos (sms o emails ) necesitaremos  un plan mas o menos ajustado ,pero en general con una tarjeta pre-pago debería ser suficiente

PASO 4: FIJACIÓN MECÁNICA DEL TERMINAL

Ahora  lo siguiente debería ser fijar el terminal  a un extremo de la puerta si es que vamos a usarlo  también para notificar los acceso a la vivienda o local. Por ejemplo un belcro auto-adhesivo pegado en la parte de atrás del terminal  puede ser un sistema perfecto  , aunque en el mercado  obviamente también existen soportes  para  fijar el terminal de forma vertical de una manera muy simple.

Simple mente necesitaremos un cartón grueso de buena calidad de unos 5 cm de ancho por unos 20 cm:

 

IMG_20170713_135917[1].jpg

El cartón lo cortaremos para que cubra con holgura el sensor de proximidad del terminal ( suele estar en la parte superior)

 

IMG_20170713_140148[1].jpg

Debemos cortar el cartón de modo que pueda cubrir el sensor

 

IMG_20170713_140224[1].jpg

No es necesario que exceda  , simplemente debe rebasar la anchura del terminal

IMG_20170713_140833[1].jpg

Como se ve en la imagen lo doblaremos por la mitad en angulo de 90 grados

 

IMG_20170713_140908[1].jpg

Ahora fijaremos el cartón a la hoja de la puerta cerca de la bisagra de modo que al abrir la puerta el cartón oculte el sensor del terminal

 

IMG_20170713_214820[1].jpg

Seguidamente colocaremos belcro  auto-adhesivo sobre ambos lados del terminal tanto en el marco de la puerta como en el propio terminal

 

IMG_20170316_191402.jpg

Fijaremos seguidamente el terminal con el belcro al marco de la puerta:

 

IMG_20170713_215058[1].jpg

 

Fijado el terminal   ya solo nos quedaría comprobar    que  al abrir al puerta este  tape el sensor de proximidad del terminal tal y como se ve en la fotografía siguiente:

Una vez fijados el terminal  y el cartón es hora de conectar  la alimentación  por medio del cargador original  o en su defecto cualquier cargador con salida micro-usb (tenga en cuenta que el cargador debe permanecer siempre enchufado de modo que pueda ser motorizado  el estado de la red eléctrica por lo que este  debería ser preferentemente el original  o por lo menos de buena calidad ).

!Ya esta  todo preparado !, así que arrancaremos  la aplicación   y  podemos  configurar  todos los  parámetros de notificaciones como vamos a ver  a continuación.

 

PASO 5 :CONFIGURACIÓN DE LA APLICACIÓN

Hay una opción muy importante referida a la configuración de la aplicación, la cual se accede pulsando el botón contextual del terminal   de Android o en el boton central de la app

v4.png

Pulsando sobre el botón de la caja de herramientas de la appp o el de  configuración del terminal nos aparecerá el menú Configuración en la parte Inferior de la pantalla.

Una vez ahí, pulsando sobre el ítem, se mostrara el submenú de configuración de la aplicación estando  la pantalla está divida por seis secciones claramente identificadas:

  • Avisos por SMS.
  • Avisos por email.
  • Números de teléfono para SMS.
  • Correo electrónico destino.
  • Usuario Gmail para envíos.
  • Fichero de log.

Avisos por SMS.

La conectividad a internet de los terminales de última generación junto con el crecimiento exponencial tanto de las redes sociales como los de servicios de mensajería no han frenado la expansión de los mensajes SMS a nivel comercial.

Está claro que  los nuevos métodos de comunicación han tomado la delantera en lo que se refiere a las comunicaciones personales y grupales  ,pero a cambio han dejado a los mensajes SMS cómo líderes absolutos  de las comunicaciones de empresas como bancos,  empresas de transporte público, empresas de telecomunicaciones , compañías de seguros, hospitales ,otras instituciones públicas y un largo etcétera las cuales han adoptado los mensajes SMS como método para enviar notificaciones, confirmar transacciones, recordar citas, etc.

Pulsando en cualquiera de las tres opciones de este submenú automáticamente se enviaran   un SMS al número que se defina ante las siguientes circunstancias:

  • Corte de suministro de corriente alterna mediante la el suministro de tensión externa al terminal ( opción “Cortes de electricidad”)
  • Aperturas o  cierres de la puerta   ocultando el sensor de presencia(opción “Aperturas puerta”)
  • Al iniciar por primera vez la aplicación Seguricasa (opción “Al iniciar esta app”).

Avisos por e-mail.

Estar dado de alta en una cuenta de correo electrónico, hoy en día es una realidad pues todos los usuarios de la red disponen de una dirección de correo electrónico y lo utilizan diariamente.

En la actualidad, el uso del correo electrónico, se puede dividir en diferentes ámbitos como académico, laboral y personal, por lo que es muy interesante  también poder avisar  por e-mail ante cualquier evento de acceso  o anomalía en el suministro de corriente alterna desde el Core de esta aplicación.

Los avisos por e-mail en esta aplicación son personalizables mediante esta sección:

Clicando en cualquiera de las tres opciones del submenú de avisos por  e-mail, automáticamente se enviaran   un email a la cuenta de correo electrónico que se defina ante las siguientes circunstancias:

  • Corte de suministro de corriente alterna mediante la el suministro de tensión externa al terminal (opción “Cortes de electricidad”).
  • Aperturas o cierres de la puerta ocultando el sensor de presencia (opción “Aperturas puerta”).
  • Al iniciar por primera vez la aplicación Seguricasa (opción “Al iniciar esta app”).

Número de teléfono para envíos SMS

Complementando el submenú de avisos por SMS ’s se incluye esta sección, donde   se definirá el número de teléfono al que se deseen dirigir los mensajes de texto.

Tenemos que definir sobre todo el número del Teléfono hacia el que quieren dirigirán los SMS ‘s ante los eventos que se deseen auditar chequeados en   el submenú de avisos por sms’s.Opcionalmente,   también se puede asignar una cadena de texto en la opción Usuario que nos permita por ejemplo identificar el número de teléfono que hayamos asignado.

Es interesante destacar que si no informamos del número de teléfono destinatario de los SMS ‘s y clicamos alguna opción de SMS, nos saltara un error de número no definido.Si introducimos el numero o el nombre de usuario en esta sección, para volver a la pantalla principal, pulsar el botón volver del terminal o simplemente pulsa el botón cerrar de esta pantalla.

Correo electrónico destino

Complementando el submenú de avisos por mail, se incluye esta sección donde   se definirá la cuenta de correo electrónico al que se deseen dirigir los mails.

Tenemos que definir el correo electrónico destino hacia el que quieren dirigirán las e-mail ante los eventos que se deseen auditar chequeados en   el submenú de avisos por e-mail

Clicaremos en la copión E-mail y sobre la caja de texto cumplimentaremos el destinatario donde se dirigirán el e-mail ante los eventos que se deseen auditar chequeados en   el submenú de avisos por e-mail.

Es interesante destacar que si no informamos de la cuenta de correo y clicamos alguna opción de envíos de correos, nos saltara un error de mail no definido.

Para volver a la pantalla, el botón volver del terminal o simplemente pulsa el botón cerrar de esta pantalla.

Usuario Gmail para envíos

Complementando el submenú de avisos por mail, en esta sección   se definirá la cuenta de correo electrónico de Gmail desde donde se enviaran los mails.

Obviamente se podría haber definido otro tipo de servidor  de correo saliente, pero  por simplicidad dado que los usuarios de Android están obligados a tener una cuenta vinculada a una dirección de correo de Gmail para instalar nuevas aplicaciones en su terminal , este es el  candidato ideal como  servicio de envió de e-mails.

Dada la facilidad de envíos de correos electrónicos ante las circunstancias definidas, tenemos que definir el correo electrónico origen desde donde se dirigirán las e-mail ante los eventos que se deseen auditar chequeados en   el submenú de avisos por e-mail

La cuenta de Gmail pues se cumplimentara en la opción “cuenta” mediante el formato establecido completo (es decir con el formato [email protected]).

Para volver a la pantalla principal, basta pulsar el botón volver del terminal, o simplemente pulsar el botón cerrar de esta pantalla.

Dado que usaremos la cuenta de Gmail, para poder enviar correos desde esta cuenta, necesitamos cumplimentar en el apartado “Clave” la password de la cuenta de Gmail.

Como vemos en la pantalla anterior al cumplimentar la password de la cuenta de Gmail se ocultara su contenido tanto cuando estamos cumplimentándolo como cuando los revisamos pudiéndolo actualizar o eliminar en cualquier momento desde esta opción.

Es interesante destacar que si no informamos de la cuenta de correo y clicamos alguna opción de envíos de correos, nos saltara un error de mail no definido.

Para volver a la pantalla principal   pulsar el botón volver del terminal o simplemente pulsa el botón cerrar de esta pantalla.

Fichero de log

Es importante destacar que   si se desea almacenar las notificaciones de SMS o e-mail, el terminal debería contar al menos con 128MB de espacio en la SD externa para almacenamiento de logs.

Si deseamos registrar los logs de aviso por email o por SMS, simplemente necesitamos apuntar en el apartado “Carpeta” el nombre del fichero que deseamos usar para registrar todos estos eventos en el root de la microsd.

Para volver a la pantalla principal   pulsar el botón volver del terminal o simplemente pulsa el botón cerrar de esta pantalla.

 

En el siguiente vídeo  podemos ver  mas claramente el funcionamiento de todas estas opciones comentadas;