Hola, bienvenida/o!!

Te cuento que me involucré en este mini proyecto porque quise ayudar a una prima que lo necesitaba y me comentaba que en Argentina era difícil conseguir despertadores para sordos; y que los tenía que traer desde EEUU, lo que siempre le generaba un gran trastorno, aparte cuando se le rompía no había quién se lo reparara. Es por esto, que inventé y diseñé un Sistema Despertador a su medida y se lo regalé; y, viendo su gran emoción y alegría, se me ocurrió comenzar a comercializarlo y una vez madurado el producto, difundirlo de forma "libre" para que todo el mundo pueda beneficiarse como lo hizo ella.
Cuando comenzó la demanda del producto, me contacté con un viejo compañero, y gran persona, que tenía sólidos conocimientos de Electrónica y Sistemas, el Sr. Gustavo Di Salvo, para que me ayudara con el armado de los equipos. Con muy buenos aportes de Gustavo, logramos tener en nuestras manos un excelente producto que había superado con creces nuestras primeras expectativas. En ese momento comenzamos a fabricarlos en cantidad.
El Sistema Despertador para Sordos es muy novedoso, de última tecnología y se controla íntegramente desde cualquier teléfono celular con Sistema Android. El dispositivo puede vibrar y a su vez puede encender una lámpara de pié o una luz de velador cuando la alarma suena. Además, permite que un familiar o amigo pueda enviarle un mensaje de texto (SMS) durante la noche y despertar a la persona sorda a la distancia (si fuera necesario ante alguna emergencia). De la misma manera, se puede integrar muy fácilmente con cualquier Sistema de Alarma hogareña para lograr despertarse en caso que suene la alarma del hogar.
Me llena de felicidad poder facilitarle un poquito las cosas a quienes más lo necesitan!! Por eso, decidí hacer este tutorial para poder compartir con todo el mundo este apasionante proyecto que nació desde el corazón. Si querés contribuir con este proyecto no tenés más que comunicarte conmigo.
Muchísimas gracias por tu visita!
Y a leer!!!!

Lic. Leandro A. Ciribé

ACLARACIÓN IMPORTANTE (update de febrero del 2022): quiero decirte que esta página fue realizada en septiembre de 2017 y, por lo tanto, muchas cosas que se indican en la misma están desactualizadas. La tecnología avanza y aparecen nuevas formas de hacer el mismo trabajo de manera más simple. El modelo de Despertador que figura en esta web ya fue sustituido por uno más moderno, siempre siguiendo la premisa de que sea muy fácil de fabricar por uno mismo. Para ver el nuevo modelo ingrese en este tutorial.


Producto 100% Libre para toda la humanidad

Nuestro Sistema Despertador puede ser construido por cualquier persona que tenga algunos conocimientos de Software y de Electrónica; como puede ser, por ejemplo, un estudiante de secundaria de alguna escuela técnica. Pensamos que el "conocimiento" debe ser compartido con todo el mundo; ya que, de esta forma, se beneficia toda la comunidad por igual (personas de bajos recursos, estudiantes, etc). Compartiendo, ganamos todos!!!
Licencia Creative Commons
Nuestro producto se encuentra bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.

“Compartir conocimiento es construir un mundo mejor, habilitando a más personas a mejorar su calidad de vida de forma autosuficiente.” — Jorge Avila
“La inteligencia consiste no sólo en el conocimiento, sino también en la destreza de aplicar los conocimientos en la práctica. ” — Aristóteles

Un reconocimiento a nuestra idea:

Nuestro Sistema Despertador para Sordos/Hipoacúsicos fue seleccionado para participar de INNOVAR 2017; el Concurso Nacional de Innovaciones que organiza el Ministerio de Ciencia, tecnología e Innovación Productiva de la Presidencia de la Nación Argentina.
De aproximadamente 1500 proyectos presentados, poco más de 300 se eligieron para participar de este distinguido evento, donde se reconocen las innovaciones más importantes del país.
Stand en la exhibición de Innovar 2017
Stand en la exhibición de Innovar 2017.

1- Funcionamiento

Antes que nada, sería bueno conocer un poco el funcionamiento básico del Sistema Despertador. Para ello, nada mejor que ver el video de la derecha donde se muestra un ejemplo de uso.

En el siguiente enlace podrá descargar nuestro Manual del Usuario en PDF, para una mayor comprensión del funcionamiento y conexionado del Dispositivo.

2- Diagrama básico para comprender el Sistema

Free HTML5 Bootstrap Template by GetTemplates.co
Diagrama básico para comprensión del Sistema.

Como se puede observar en el Diagrama, el conexionado y funcionamiento es bastante sencillo.
* Se dispone de un Módulo Despertador que emite una señal WIFI a la cual hay que conectarse desde el smartphone.
* Una vez conectado, se setea la alarma deseada desde una APP (la cual es inicialmente descargada desde el PLAY STORE de Google)
* Con la alarma activada, al Usuario ya lo pueden despertar de forma remota ante una emergencia. Solamente deberá recibir un mensaje de texto (SMS) con una palabra clave. A partir del 2019 esta funcionalidad ya no está disponible.
* Si ese no fuera el caso, la alarma sonará llegado el horario establecido; vibrará y encenderá la luz del Velador o de una lámpara de pié.
* Una vez que la alarma se dispara, el usuario podrá apagarla desde su smartphone, o bien posponerla por unos minutos para que vuelva a sonar.

3- Componentes principales del Sistema Despertador Deluxe

Los componentes principales que tendremos que elaborar son:
A) El Módulo Despertador WIFI
B) El Dispositivo Vibrador
C) El Dispositivo para encendido de Luz de Velador
D) La Aplicación para Android

Los componentes principales que deberemos conseguir son:
E) Las fuentes de alimentación (la Batería y el Cargador USB)

Free HTML5 Bootstrap Template by GetTemplates.co
Imagen del Modelo Deluxe exhibido en un Stand.

4- Construcción del Módulo Despertador WIFI (A)

Free HTML5 Bootstrap Template by GetTemplates.co
Imagen del Módulo Despertador Wifi y sus componentes.

Materiales:

Vamos a necesitar:
a) 1 cajita plástica de aproximadamente 6cm de ancho x 8.5cm de largo x 3.5cm de alto.
b) 1 placa NodeMcu ESP8266 ESP-12E. Esta placa se puede conseguir fácilmente en DealExtreme, en eBay o por Mercado Libre.
c) 1 cable USB a MicroUSB
d) 2 LEDs comunes de cualquier color (IMPORTANTE: no usar LED de Alta Luminosidad)
e) 1 Resistencia de 330 Ohms
f) 1 Transistor BC639 (o BC548)
g) 1 Relay 5VDC 1A (la salida manejará máximo 250 mA en 5VDC, por lo tanto con 1A nos sobra)
h) 1 Jack Hembra (para Jack Macho mono de 3.5mm)
i) 1 Diodo 1N4007
j) Un poco de cable finito, similar al de audio, para las conexiones electrónicas.

Código para programar la placa NodeMcu:

La placa NodeMcu se programa de forma idéntica a una placa Arduino. Damos por sentado que se conoce la IDE Arduino, su programación y configuración. De todos modos, dejamos el link para descargar el IDE ARDUINO; y en el siguiente enlace, se puede ver una introducción y ejemplos de cómo programar la placa NodeMCU en Arduino. Aparte, se puede encontrar muchísimo material explicativo en google y youtube.


Procederemos a subir el siguiente código en nuestra placa NodeMcu. Si lo desea, puede descomentar las líneas comentadas para depuración Serial del software.

#include <ESP8266WiFi.h>

#include <WiFiClient.h>
const char* ssid = "DESPERTADOR_IOT"; //ESTE ES EL NOMBRE DE LA WIFI QUE DARÁ EL DESPERTADOR (SIEMPRE DEBERÁ CONTENER LA PALABRA "DESPERTADOR"!!)
const char* pass = "alarma"; //ESTA ES LA CLAVE PARA PODER CONECTARNOS A LA WIFI DEL DESPERTADOR
WiFiServer server(80);
void setup() {
// Serial.begin(115200);
delay(10);
// preparo pin GPIO2 D4
pinMode(2, OUTPUT);
digitalWrite(2, 0);
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, pass);
//Serial.print(ssid);
//Serial.print(pass);
IPAddress myIP = WiFi.softAPIP();
//Serial.print("AP IP address: ");
//Serial.println(myIP);
server.begin();
//Serial.println("Server started");
}
void loop() {
WiFiClient client = server.available();
if (!client) {
delay(5000);
return;
}
// Serial.println("Nuevo Cliente");
while(!client.available()){
delay(1);
}
String req = client.readStringUntil('\r');
//Serial.println(req);
client.flush();
int val;
if (req.indexOf("/gpio/0") != -1)
val = 0;
else if (req.indexOf("/gpio/1") != -1)
val = 1;
else {
//Serial.println("Solicitud inválida");
client.stop();
return;
}
digitalWrite(2, val);
client.flush();
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html><head><title>Despertador IOT</title></head><body><h1>DESPERTADOR</h1><p>\r\nALARMA ";
s += (val)?"<b>ENCENDIDA</b>":"<b>APAGADA</b>";
s += "</body></html>\n";
client.print(s);
delay(1);
//Serial.println("Client disconnected");
}

Esquema electrónico:

Como pueden observar en la imagen, hay unos componentes que van en el Interior de la caja plástica:
- La placa Nodemcu,
- El Relay,
- La Resistencia,
- 1 Led que se utiliza para indicar que la Señal de Alarma del Despertador ha sido activada (conectado al PIN D4 de la NodeMcu),
- El Transistor, y
- El Diodo.
Se puede optar por soldar todos los componentes en una Placa Universal; o bien, soldarlos directamente en el aire unos con otros. Dado que el circuito no es complejo, dejamos a su criterio la forma de soldarlos.

Free HTML5 Bootstrap Template by GetTemplates.co
Imagen del esquema electrónico del Módulo Despertador Wifi.
Free HTML5 Bootstrap Template by GetTemplates.co
Imagen de los componentes exteriores del Módulo Despertador Wifi.


Y hay otros 3 componentes que saldrán hacia el exterior a través de los laterales de la caja:
- 1 Led que se utiliza para indicar el Estado del Despertador (si está Encendido o Apagado). Este Led se debe ubicar de forma que se pueda visualizar su luz desde afuera de la caja.
- El Jack Hembra, que se utiliza para conectar el Dispositivo Vibrador y el Dispositivo que Enciende la Luz del Velador. Por lo tanto, debe quedar como interfase de conexión en un lateral de la caja, afirmado firmemente.
- El cable USB a MicroUSB. El extremo MicroUSB de este cable, debe conectarse a la placa NodeMcu; y su otro extremo, debe salir hacia afuera de la caja (es la ficha USB que se utilizará para alimentar todo el circuito).

5- Construcción del Dispositivo Vibrador (B)

Free HTML5 Bootstrap Template by GetTemplates.co
Imagen del Módulo Vibrador y sus componentes para fabricarlo.

Materiales:

Vamos a necesitar:
a) 1 Motor de DVD de 5VDC.
b) 2 regatones de los que se utilizan en las puntas de las sillas de jardín. Nosotros utilizamos los de 1 pulgada y 1/4.
c) 1 Jack Macho Mono
d) 2 cm de caño de pvc. Este pedacito de caño se usa para fijar el motor y luego encastrar dentro de los 2 regatones como si fuera un sandwich. Debe quedar en el interior, oculto completamente por los dos regatones. Ver explicación a continuación.
e) 1 Tornillo de cabeza grande y que sea pesado. Este tornillo va pegado en la cabeza del motor para que cumpla la función de desbalanceo del giro, o sea, de vibración (ver a continuación). Debe ser pesado porque será el encargado de desbalancear al motor para que vibre bien fuerte.
f) 1 Pistola de Siliconas, que usaremos para fijar el motor dentro del cañito de pvc.
g) 1 Poxipol. Es indistinto el color del mismo. Se usará para fijar el tornillo al motor.
h) 2 mt de cable envainado de 2 conductores, simil audio o telefónico. Recomendamos que este cable sea de Excelente calidad para que no se corte con el uso del vibrador debajo de la almohada y nos pueda durar mucho tiempo.
Nota: Se recomienda utilizar un pegamento de secado rápido, como puede ser La Gotita de Poxipol, para fijar los regatones al cañito de pvc.

Free HTML5 Bootstrap Template by GetTemplates.co
Imagen con los pasos para ensamblar el Dispositivo Vibrador.

Ensamblado del Dispositivo Vibrador:

Pasos a seguir:
1) Pegar bien con POXIPOL el tornillo a la bandeja giratoria del motor. A veces hay que recortar un poco la bandejita negra porque sino no entra en el regatón. Medir bien para no tener mayores inconvenientes.
2) Soldar el cable al motor. Si lo desea, una vez soldado el cable, puede aplicar 5 VDC al motor para probar que gira correctamente.
3) Cortar un pedacito de caño de pvc o similar, de 2 cm.
4) Tomamos el cañito de pvc y le fijamos el motor en su interior con la pistola de silicona plástica. Comprobamos que gire libremente sin tocar ningún borde del caño.
5) Agujereamos uno de los regatones para poder pasar el cable.
6) Encastramos un regatón como tapa y el otro como base (como haciendo un sandwich del cañito de pvc).
7) Al encastrar podemos agregar unas gotitas de pegamento de secado rápido para que quede todo bien firme. Debemos probar que la bandeja giratoria y el tornillo no rocen en ningún borde. Deben quedar bien alineados en el centro.
8) Por último, soldamos el cable a la ficha Jack Macho. Es indistinto el orden de polaridad de los cables, dado que el motor de DVD gira e invierte su giro si se le aplica la polaridad a la inversa.
Nota: En el mercado se suelen conseguir motores que se utilizan para vibración y que ya suelen venir con el peso en la punta del eje para realizar el desbalanceo que genera la vibración. Lo único que debe respetar para que funcione es que sea un motor de 5VDC.
Ya tenemos el dispositivo vibrador listo. Sigamos...

6- Construcción del Dispositivo para Encender la Luz del Velador (C)

Free HTML5 Bootstrap Template by GetTemplates.co
Imagen del Dispositivo para Encender la Luz del Velador y sus componentes.

Se nos ocurrieron 2 modelos para el Encendido de la Luz de Velador. El circuito es muy simple y es idéntico para los dos casos. Para este tutorial presentaremos el modelo B.

Materiales:


Vamos a necesitar:
a) 1 cajita plástica de esas que tienen salida de Enchufe Macho.
b) 1 Relay accionable con 5VDC y con salida 220V 5A (mucho cuidado!!! ya que aquí estaremos manejando una salida de 220V de Corriente Alterna)
c) 1 Jack Macho Mono
d) 1 Adaptador de 2 Jack Hembra a 1 Jack Macho Mono
e) 2 mt de cable envainado de 2 conductores, simil audio o telefónico. Recomendamos que este cable sea de Excelente calidad para que no se corte con el uso y nos pueda durar mucho tiempo.
f) 2 mt de cable taller TPR 2x1.5mm
g) 1 Ficha Hembra (tipo prolongador). Comprar de 2 o 3 patitas de acuerdo al enchufe del Velador, para evitar colocar un adaptador.

Esquema eléctrico y electrónico:

Como pueden observar en la imagen, debemos proceder a abrir la caja plástica para encontrar los conectores del enchufe macho.
Una vez ubicados los mismos, armaremos el circuito que se ve en la imagen. Tomaremos el cable TPR 2x1.5mm y lo soldaremos a los conectores del enchufe macho de la caja. Posteriormente, el cable del Neutro lo atornillaremos a un conector de la Ficha Hembra y el cable de la Línea la soldaremos a la patita COMÚN del circuito del Relay.
Luego, soldaremos un cable a la patita NA del Relay; y el otro extremo lo atornillaremos al conector restante de la Ficha Hembra.
Solo nos queda soldar un cable de la ficha Jack Mono a la bobina del relay de 5VDC. Soldaremos Positivo y Negativo indistintamente, ya que no influye en el funcionamiento del circuito.
Ya estamos listos para conectar el Dispositivo de Encendido de Luz al Velador o a una lámpara de Pié.
Les recordamos, que si desean utilizar el Dispositivo Vibrador y el Dispositivo de Encendido de Luz en forma conjunta, deberán conectarlos a través del adaptador de Jack Doble Hembra a Macho Mono (el cual se muestra en la figura).

Free HTML5 Bootstrap Template by GetTemplates.co
Imagen del esquema eléctrico y electrónico del Dispositivo de Encendido del Velador.

7- La Aplicación para Android (D)

Free HTML5 Bootstrap Template by GetTemplates.co
Imagen de Nuestra App en Google Play Store.


No hace falta que programes una App para usar nuestro Sistema Despertador, puedes usar la nuestra que ya está subida al Play Store de Google y se puede descargar e instalar de forma gratuita. Se la puede encontrar bajo el nombre de "Despertador para Sordos" ofrecido por el Programador LeAndroid-Innoligent (o sea, nosotros!!).
De todas maneras, como este es un proyecto abierto a la comunidad, a continuación les dejamos el código de la primera versión de la aplicación Android que subimos al Play Store para investigarla, modificarla o mejorarla y adaptarla a nuevas necesidades.

Código para programar la Aplicación en Android:

No entra en el alcance de este tutorial la explicación del entorno de desarrollo de Android. De todos modos, para mayor información puede visitar ANDROID STUDIO

MainActivity.java:

package ar.com.innoligent.deafvibealarm; 
 
import android.support.v7.app.AppCompatActivity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
//import android.util.StringBuilderPrinter; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.NumberPicker; 
import android.widget.TextView; 
import android.widget.Toast; 
import java.util.Calendar; 
 
public class MainActivity extends AppCompatActivity implements OnClickListener { 
    private static final int ALARM_REQUEST_CODE = 1; 
 
    Calendar calendario; 
    long ahoraTest; 
    NumberPicker npH; 
    NumberPicker npM; 
    TextView tv; 
    int ahoraH; 
    int ahoraM; 
    Button btn; 
    Button btnBorrar; 
    Button btnClose; 
    PendingIntent pIntent; 
    AlarmManager manager; 
 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        this.setContentView(R.layout.activity_main); 
 
        npH = (NumberPicker) this.findViewById(R.id.numberPicker); 
        npM = (NumberPicker) this.findViewById(R.id.numberPicker2); 
        tv = (TextView) this.findViewById(R.id.textView3); 
 
        npH.setMaxValue(23); 
        npH.setMinValue(0); 
        npM.setMaxValue(59); 
        npM.setMinValue(0); 
 
        updateHora(); 
 
        npH.setValue(ahoraH); 
        npM.setValue(ahoraM); 
 
        btn  = (Button) this.findViewById(R.id.doFuture); 
        btnBorrar  = (Button) this.findViewById(R.id.button2); 
        btnClose  = (Button) this.findViewById(R.id.button6); 
 
        btn.setOnClickListener(this); 
        btnBorrar.setOnClickListener(this); 
        btnClose.setOnClickListener(this); 
    } 
 
    @Override 
    protected void onSaveInstanceState(Bundle state) { 
        super.onSaveInstanceState(state); 
        state.putString("HORAPROGRAMADA", tv.getText().toString()); 
        state.putBoolean("BTNACTIVAR", btn.isEnabled()); 
        state.putBoolean("BTNCANCELAR", btnBorrar.isEnabled()); 
    } 
 
    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
        super.onRestoreInstanceState(savedInstanceState); 
 
        if (savedInstanceState != null) { 
            if (savedInstanceState.containsKey("BTNACTIVAR")) { 
                btn.setEnabled(savedInstanceState.getBoolean("BTNACTIVAR")); 
            } 
            if (savedInstanceState.containsKey("BTNCANCELAR")) { 
                btnBorrar.setEnabled(savedInstanceState.getBoolean("BTNCANCELAR")); 
            } 
            if (savedInstanceState.containsKey("HORAPROGRAMADA")) { 
                CharSequence valor = savedInstanceState.getString("HORAPROGRAMADA"); 
                tv.setText(valor); 
            } 
        } 
    } 
 
    private void updateHora(){ 
        long ahora = System.currentTimeMillis(); 
        calendario = Calendar.getInstance(); 
        calendario.setTimeInMillis(ahora); 
        ahoraH = calendario.get(Calendar.HOUR_OF_DAY); 
        ahoraM = calendario.get(Calendar.MINUTE); 
        ahoraTest = (ahoraM*60000)+(ahoraH*3600000); 
    } 
 
    private void establecerAlarmaClick(long when){ 
        manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
        Intent       intent  = new Intent(this, MyReceiver.class); 
        pIntent = PendingIntent.getBroadcast(this, ALARM_REQUEST_CODE, intent,  PendingIntent.FLAG_CANCEL_CURRENT); 
 
        manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + when, pIntent); 
    } 
 
    @Override 
    public void onClick(View v) { 
        if (v.getId() == R.id.doFuture){ 
            btnBorrar.setEnabled(true); 
            btn.setEnabled(false); 
            updateHora(); 
            long horaSet = npH.getValue()*3600000; 
            long minSet = npM.getValue()*60000; 
            long timeSet = horaSet + minSet; 
            long alarm = 0; 
            if (ahoraTest <= timeSet){ 
                alarm=timeSet-ahoraTest; 
            } 
            if (ahoraTest == timeSet){ 
                alarm=5000; 
            } 
            if (ahoraTest >= timeSet){ 
                alarm=ahoraTest-timeSet; 
                alarm=86400000-alarm; 
            } 
            String textohora = R.string.alarmrunat + npH.getValue() + ":" + npM.getValue(); 
            tv.setText(textohora); 
 
            establecerAlarmaClick(alarm); 
 
            String programacion = R.string.alarmOK + npH.getValue() + ":" + npM.getValue(); 
            Toast t= Toast.makeText(this, programacion, Toast.LENGTH_LONG); 
            t.show(); 
 
        } 
        if (v.getId() == R.id.button2){ 
            btn.setEnabled(true); 
            tv.setText(""); 
            String programacion; 
 
            manager.cancel(pIntent); 
            programacion = R.string.alarmCANCEL +"."; 
            Toast t= Toast.makeText(this, programacion, Toast.LENGTH_LONG); 
            t.show(); 
            btnBorrar.setEnabled(false); 
        } 
        if (v.getId() == R.id.button6){ 
            finish(); 
        } 
    } 
} 


MyReceiver.java:
package ar.com.innoligent.deafvibealarm; 
 
/** 
 * Created by lender on 19/05/16. 
 */ 
import android.widget.Toast; 
import android.content.Intent; 
 
public class MyReceiver extends android.content.BroadcastReceiver { 
 
    @Override 
    public void onReceive(android.content.Context context, android.content.Intent intent) { 
        Intent openWeb = new Intent(context, openWeb.class); 
        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        context.startActivity(openWeb); 
 
 
        // Toast.makeText(context, "ALARMA ACTIVADA", Toast.LENGTH_LONG).show(); 
    } 
 
} 
 

openweb.java:
package ar.com.innoligent.deafvibealarm; 
 
import android.support.v7.app.AppCompatActivity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.view.View.OnClickListener; 
import android.os.Bundle; 
import android.view.View; 
import android.webkit.WebView; 
import android.widget.Button; 
import android.widget.Toast; 
 
public class openWeb extends AppCompatActivity implements OnClickListener { 
    private static final int ALARM_REQUEST_CODE = 1; 
    WebView wv; 
    PendingIntent pIntent; 
    AlarmManager manager; 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_open_web); 
 
        wv = (WebView) this.findViewById(R.id.webView); 
        Button bt = (Button) this.findViewById(R.id.button); 
        bt.setOnClickListener(this); 
        Button bt5 = (Button) this.findViewById(R.id.button3); 
        bt5.setOnClickListener(this); 
        Button bt10 = (Button) this.findViewById(R.id.button4); 
        bt10.setOnClickListener(this); 
        Button bt15 = (Button) this.findViewById(R.id.button5); 
        bt15.setOnClickListener(this); 
        try { 
            wv.loadUrl("http://192.168.4.1/gpio/1"); 
        }catch (NullPointerException e){ 
            wv.loadUrl("about:blank"); 
        } finally { 
            System.out.println("Error"); 
        } 
    } 
 
    private void establecerAlarmaClick(long when){ 
        manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
        Intent intent  = new Intent(this, MyReceiver.class); 
        pIntent = PendingIntent.getBroadcast(this, ALARM_REQUEST_CODE, intent,  PendingIntent.FLAG_CANCEL_CURRENT); 
        manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + when, pIntent); 
    } 
 
    @Override 
    public void onClick(View v) { 
        if (v.getId() == R.id.button){ 
            try { 
                wv.loadUrl("http://192.168.4.1/gpio/0"); 
            }catch (NullPointerException e){ 
                wv.loadUrl("about:blank"); 
            } finally { 
                System.out.println("Error"); 
            } 
            // int p = android.os.Process.myPid(); 
            //android.os.Process.killProcess(p); 
            finish(); 
        } 
        if (v.getId() == R.id.button3){ 
            try { 
                wv.loadUrl("http://192.168.4.1/gpio/0"); 
            }catch (NullPointerException e){ 
                wv.loadUrl("about:blank"); 
            } finally { 
                System.out.println("Error"); 
            } 
            establecerAlarmaClick(300000); 
            String programacion = R.string.snooze5 + "."; 
            Toast t= Toast.makeText(this, programacion, Toast.LENGTH_LONG); 
            t.show(); 
            finish(); 
        } 
        if (v.getId() == R.id.button4){ 
            try { 
                wv.loadUrl("http://192.168.4.1/gpio/0"); 
            }catch (NullPointerException e){ 
                wv.loadUrl("about:blank"); 
            } finally { 
                System.out.println("Error"); 
            } 
            establecerAlarmaClick(600000); 
            String programacion = R.string.snooze10 + "."; 
            Toast t= Toast.makeText(this, programacion, Toast.LENGTH_LONG); 
            t.show(); 
            finish(); 
        } 
        if (v.getId() == R.id.button5){ 
            try { 
                wv.loadUrl("http://192.168.4.1/gpio/0"); 
            }catch (NullPointerException e){ 
                wv.loadUrl("about:blank"); 
            } finally { 
                System.out.println("Error"); 
            } 
            establecerAlarmaClick(900000); 
            String programacion = R.string.snooze15 + "."; 
            Toast t= Toast.makeText(this, programacion, Toast.LENGTH_LONG); 
            t.show(); 
            finish(); 
        } 
    } 
} 


MySMSReceiver.java:
package ar.com.innoligent.deafvibealarm; 
 
/** 
 * Created by lender on 19/05/16. 
 */ 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsManager; 
import android.telephony.SmsMessage; 
//import android.util.Log; 
 
public class MySMSReceiver extends BroadcastReceiver { 
    final SmsManager sms = SmsManager.getDefault(); 
 
    public MySMSReceiver() { 
    } 
    @Override 
    public void onReceive(Context context, Intent intent) { 
        final Bundle bundle = intent.getExtras(); 
        if(bundle!=null) { 
            try{ 
                final Object[] pdusObj = (Object[]) bundle.get("pdus"); 
                for (int i = 0; i < pdusObj.length; i++) { 
                    SmsMessage MENSAJE = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
                    //String REMITENTE = MENSAJE.getDisplayOriginatingAddress(); 
                    String MENSAJEE = MENSAJE.getDisplayMessageBody(); 
                    //  Log.i("RECEIVER", "numero:" + REMITENTE + " Mensaje:" + MENSAJEE); 
                    if(MENSAJEE.contains("DESPERTATE")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("despertate")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("Despertate")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("WAKEUP")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("WAKE-UP")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("Wakeup")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("Wake-Up")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("Wake-up")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("wake-up")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("wake-Up")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("Wake Up")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("Wake up")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("wake up")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    if(MENSAJEE.contains("WAKE UP")){ 
                        Intent openWeb = new Intent(context, openWeb.class); 
                        openWeb.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        context.startActivity(openWeb); 
                    } 
                    //new peticion_get(REMITENTE+"--"+MENSAJEE).execute(); 
                } 
            }catch(Exception e){ 
//                            Log.d("Exception caught",e.getMessage()); 
            } 
        } 
    } 
} 
Para mayor información sobre el código de la App, escribir a Soporte - Innoligent. Para dispositivos con Versión de Android 6 o superior, deben utilizar esta otra App "App Despertador para Sordos (mDVA) con SMS". La versión actual que está en el Play Store de Google no dispone de la funcionalidad de "Despierte Remoto por SMS" (por política de seguridad de Android, a partir de enero del 2019, se dió de baja esta característica). Apenas consigamos ayuda de la comunidad, o tengamos tiempo disponible, subiremos el nuevo código a esta página.

8- Las fuentes de alimentación (E)


Las fuentes de Alimentación de nuestro Sistema Despertador pueden ser cualquiera de estas dos: un Cargador de Celular o un Power Bank (Batería)
La diferencia entre una y otra, es que ante un corte de energía eléctrica, el cargador de celular apagará nuestro dispositivo; en cambio, con un Power Bank esto no sucederá.

Especificaciones:


- El Cargador de Celular debe ser USB y de 1 Amper o más de salida.
- El Power Bank (o batería) debe ser marca Philips y de 10400 mA/h. Esto nos dará una autonomía para utilizar el Despertador por 2 o 3 noches, luego hay que recargar el Power Bank durante el día para volver a utilizarlo a la noche.
Por qué enfatizamos en la marca del Power Bank? porque sabemos que con este modelo funciona; y, el mismo, es fácil de conseguir en cualquier Compumundo, o bien, por Mercado Libre.
Hay algunos Power Banks que no funcionan con nuestro Despertador. Tuvimos varios casos donde enchufamos el Despertador al power bank, el mismo se enciende, pero al minuto o dos, se apaga. Pensamos que éste comportamiento se dá porque nuestro Despertador no consume una corriente suficiente para que el Controlador Electrónico del Power Bank lo detecte como si fuera un dispositivo similar a un celular. Por eso recomendamos el de Philips que sabemos que sí funciona a la perfección.

Free HTML5 Bootstrap Template by GetTemplates.co
Imagen del Cargador de Celular y del Power Bank.

Dónde conseguir el Despertador para Sordos? Quién lo fabrica, vende o distribuye?


El Despertador para Sordos lo podés conseguir directamente en Innoligent, enviándonos un email a Soporte - Innoligent, o llamando por teléfono al 0341-5401901 (Whatsapp: +5493415401901).

En el mapa podrá encontrar a todas las personas o instituciones que fabrican, venden o distribuyen el Despertador para Sordos presentado en este tutorial.

Si desea figurar en este mapa como persona o institución capaz de fabricar nuestro Sistema Despertador, escríbanos a Soporte - Innoligent.


Finalidad


INNOLIGENT realiza la publicación del presente tutorial, con el único y exclusivo fin de brindar una ayuda y colaboración a quienes tengan la necesidad de construir su propio Sistema Despertador, no obteniendo lucro alguno.-


Garantía


Atento tratarse de un mero tutorial informativo y gratuito, INNOLIGENT no brinda garantía alguna sobre el particular, ya sea en cuanto a su fabricación y/o uso.-


Limitación de Responsabilidad


Se deja expresa constancia que INNOLIGENT y sus creadores no asumen ningún tipo de responsabilidad civil y/o penal por potenciales daños directos y/o indirectos que pudieran resultar por la aplicación y/o uso del presente tutorial y/o las potenciales consecuencias que pudieran derivar del armado del producto, no encontrándose comprendida esta empresa dentro del artículo 2 de la Ley de Defensa del Consumidor (24.240). Asimismo, tampoco asume responsabilidad alguna en relación a las personas físicas y/o jurídicas que fabriquen y/o distribuyan y/o creen y/o efectúen montajes y/o construyan y/o transformen y/o importen y/o distribuyan y/o comercialicen y/o realicen concesión de marca, sobre dicho producto.