El uso de la aplicación Microsoft Soundscape (por alguna razón solo disponible para el sistema operativo iOS), que permite a los ciegos navegar en el espacio y descubrir qué hay a su alrededor, utilizando instrucciones de voz, será aún más conveniente si hace un control remoto externo de seis botones propuesto por tres autores Instructables - Jazz Ang, Ana Liu y Venkatesh Potluri.
Estrictamente hablando, Soundscape no es desarrollado por Microsoft en sí, sino por una división llamada Microsoft Research, que se dedica a experimentos e investigaciones en una amplia variedad de campos. Se cree que incluso la atmósfera interna allí es completamente diferente que en el resto de la corporación.
Los botones del control remoto:
1: inicia / detiene la reproducción de un archivo de audio o video, y cuando la aplicación Soundsdape se ejecuta y se ejecuta en segundo plano, también activa / desactiva las notificaciones de voz de este programa.
2: sonido de encendido / apagado completo, un análogo del botón de silencio en el control remoto del televisor.
3: vaya a la siguiente pista en el reproductor de audio o video, y en el programa Soundscape, vaya a la siguiente notificación de voz.
4 - ir a la pista anterior o notificación de voz.
5: duplica el botón de Inicio.
6 - control del modo "Controlador virtual" del sistema operativo iOS (le permite usar controles remotos externos como se describe).
Como se puede ver en el diagrama hecho en casa, compilados en el programa Fritzing, los botones, cada uno de los cuales se complementa con una resistencia pull-up de 10 kΩ, se conectan a los terminales 11, 7, 15, 16, 27 y 25 de la placa Adafruit Feather nRF52 Bluefruit LE bastante cara, que es compatible con Arduino IDE y contiene un módulo bluetooth. Cuando se utiliza el dispositivo, esta placa se alimenta con un cable micro USB estándar del banco de alimentación y, cuando se programa, desde una PC. Tenga en cuenta que muchos bancos de energía se apagan automáticamente cuando el consumo de corriente es demasiado bajo, y el umbral de apagado depende del modelo.
Una vez ensamblado el diseño de acuerdo con el esquema, los asistentes configuran el IDE de Arduino para que funcione con esta placa, como se muestra en las siguientes dos capturas de pantalla:
Una vez configurado todo, los maestros completan el boceto en el tablero:
#include
#define CONTROL_PLAY_PAUSE 0x00CD
#define CONTROL_SCAN_NEXT 0x00B5
#define CONTROL_SCAN_PREVIOUS 0x00B6
#define CONTROL_MUTE 0x00E2
#define AC_FORWARD 0x0225
#define AC_BACK 0x0224
#define CONSUMER_BROWSER_HOME 0x0223
BLEDis bledis;
BLEHidAdafruit blehid;
bool hasKeyPressed = false;
// conecta los pines en el tablero
int playpauseButtonPin = 11;
int muteButtonPin = 7;
int nextButtonPin = 15;
int backButtonPin = 16;
int homeButtonPin = 27;
int switchControlButtonPin = 25;
configuración nula ()
{
pinMode (playpauseButtonPin, INPUT);
pinMode (muteButtonPin, INPUT);
pinMode (nextButtonPin, INPUT);
pinMode (backButtonPin, INPUT);
pinMode (homeButtonPin, INPUT);
pinMode (switchControlButtonPin, INPUT);
Serial.begin (115200);
mientras que (! Serie) demora (10); // para nrf52840 con usb nativo
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Verifique bluefruit.h para ver los valores admitidos
Bluefruit.setName ("TESTArroundMeBluefruit52");
// Configurar e iniciar el servicio de información del dispositivo
bledis.setManufacturer ("Adafruit Industries");
bledis.setModel ("Pluma de fruta azul 52");
bledis.begin ();
/ * Iniciar BLE HID
* Nota: Apple requiere que el dispositivo BLE debe tener un intervalo de conexión mínimo> = 20 m
* (Cuanto más pequeño sea el intervalo de conexión, más rápido podremos enviar datos).
* Sin embargo, para dispositivos HID y MIDI, Apple podría aceptar un intervalo de conexión mínimo
* hasta 11.25 ms. Por lo tanto, BLEHidAdafruit :: begin () intentará establecer el mínimo y el máximo
* intervalo de conexión a 11.25 ms y 15 ms respectivamente para un mejor rendimiento.
* /
blehid.begin ();
/ * Establezca el intervalo de conexión (min, max) a su valor preferido.
* Nota: ya está configurado por BLEHidAdafruit :: begin () a 11.25ms - 15ms
* min = 9 * 1.25 = 11.25 ms, max = 12 * 1.25 = 15 ms
* /
/ * Bluefruit.Periph.setConnInterval (9, 12); * /
// Configurar y comenzar a anunciar
startAdv ();
}
void startAdv (void)
{
// paquete de publicidad
Bluefruit.Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit.Advertising.addTxPower ();
Bluefruit.Advertising.addAppearance (BLE_APPEARANCE_HID_KEYBOARD);
// Incluye servicio BLE HID
Bluefruit.Advertising.addService (blehid);
// Hay suficiente espacio para el nombre del desarrollador en el paquete publicitario
Bluefruit.Advertising.addName ();
/ * Iniciar publicidad
* - Habilite la publicidad automática si está desconectado
* - Intervalo: modo rápido = 20 ms, modo lento = 152,5 ms
* - El tiempo de espera para el modo rápido es de 30 segundos
* - Inicio (tiempo de espera) con tiempo de espera = 0 se anunciará para siempre (hasta que se conecte)
* *
* Para intervalos publicitarios recomendados
* https://developer.apple.com/library/content/qa/qa1931/_index.html
* /
Bluefruit.Advertising.restartOnDisconnect (verdadero);
Bluefruit.Advertising.setInterval (32, 244); // en unidad de 0.625 ms
Bluefruit.Advertising.setFastTimeout (30); // número de segundos en modo rápido
Bluefruit.Advertising.start (0); // 0 = No dejes de anunciar después de n segundos
}
// usando esta función para controlar el teléfono
void sendCommand (comando uint16_t) {
// Asegúrate de que estamos conectados y unidos / emparejados
para (uint16_t conn_hdl = 0; conn_hdl conectado () && conexión-> emparejado ())
{
// Enciende el LED rojo cuando comenzamos a enviar datos
digitalWrite (LED_RED, 1);
Serial.println ("Enviando comando ...");
// Enviar pulsación de tecla
blehid.consumerKeyPress (conn_hdl, comando);
// Demora un poco entre informes
retraso (10);
// Enviar liberación de clave
blehid.consumerKeyRelease (conn_hdl);
// Apaga el LED rojo
digitalWrite (LED_RED, 0);
Serial.println ("¡Comando enviado!");
}
}
retraso (250);
}
// usando esta función para configurar con control de interruptor
void sendSwitchControl (comando de cadena) {
for (int i = 0; i
Desde el lado del sistema operativo iOS, los asistentes primero configuran el emparejamiento con el control remoto a través de Bluetooth:
Luego, las funciones de todos los botones en la sección de accesibilidad:
Después de asegurarse de que todo funciona, los asistentes imprimen botones en una impresora 3D y comparten los archivos necesarios con los lectores en thingiverse licenciado bajo CC-BY 3.0. Estas partes se pueden hacer de otras maneras, o no se pueden hacer en absoluto.
Los siguientes dos videos muestran cómo los maestros prueban el control remoto en acción:
Queda por reconstruir el control remoto de la misma manera, pero soldando y poniendo el resultado en el caso, y en iOS instale la aplicación Soundscape y ejecútela en segundo plano, y puede usar el dispositivo.