Introducción
En este tutorial vamos a ver otro ejemplo de uso de de la tecnología Bluetooth Low Energy utilizando las placas Arduino MKR WiFi 1010 y Arduino Nano 33 BLE Sense junto con la librería ArduinoBLE. Concretamente vamos a mostrar un ejemplo de cómo se puede realizar una subscripción a una característica de un servicio.
Hagamos un repaso de lo que ya vimos en otros proyectos sobre estas placas:
El Bluetooth en el Arduino Nano 33 BLE Sense es gestionado por el módulo NINA B306 que tiene la calificación de Bluetooth 5.0.
En el caso del Arduino MKR WiFi 1010 el Bluetooth es gestionado por el módulo NINA -W102 que tiene la calificación de Bluetooth 4.2.
En los siguientes enlaces se explican a los conceptos básicos de la tecnología Bluetooth Low Energy que nos ayudará a entender su funcionamiento:
https://www.arduino.cc/en/Reference/ArduinoBLE
https://learn.adafruit.com/introduction-to-bluetooth-low-energy/introduction
En este proyecto veremos cómo el dispositivo central se va a suscribir a una característica de un servicio del dispositivo periférico de tal manera que sólo recibirá información del valor de esta característica en caso de que se actualice su valor, de esta manera el dispositivo central no tendrá que pedir el valor constantemente.
Para ilustrar con un ejemplo lo explicado anteriormente montaremos una estructura metálica con un servomotor que sostendrá una mano dibujada en papel que se moverá en función del movimiento detectado por el sensor de gestos presente en una placa Arduino NaNo 33 BLE Sense.
El funcionamiento será el siguiente:
Si realizamos desde el Arduino Nano 33 BLE Sense (dispositivo periférico) el gesto con la mano del movimiento “LEFT” el servomotor (conectado al dispositivo central) hará girar la mano de papel hacia la izquierda y si detecta el movimiento ”RIGHT” la hará girar hacia la derecha. Cuando se detecta el movimiento “UP” el servomotor situará la mano de papel en la posición central. El movimiento “DOWN” será ignorado.
NOTA: Es necesaria la última versión de la librería ArduinoBLE.
Circuito
Componentes:
-
- Dispositivo periférico: Arduino Nano 33 BLE Sense.
- Dispositivo central: Arduino MKR WiFi 1010 + Arduino MKR Motor Carrier.
Funcionamiento:
-
- El dispositivo central se conectará al dispositivo periférico buscando la característica del servicio especificado al cual se quiere suscribir.
- Una vez establecida la conexión si el sensor de gestos del Arduino Nano 33 BLE Sense (ADPS-9960) detecta cualquiera de los siguientes movimientos: UP, DOWN, LEFT y RIGHT el dispositivo periférico escribirá el valor correspondiente (asociado a estos movimientos) en la característica del servicio cuyo dispositivo central está suscrito haciendo que se mueva el servomotor en la dirección marcada por el movimiento (solo tendremos en cuenta los movimiento de UP, LEFT y RIGHT).
Montaje
Dispositivo periférico
Acoplaremos una placa Arduino Nano 33 BLE Sense a una mini protoboard de 170 puntos que a su vez engancharemos al portapilas gracias a la cinta adhesiva que tiene en su base. En la terminación de los cables de alimentación del portapilas hemos puestos dos conectores macho de tipo Dupont para poder alimentar de una manera sencilla la placa a través de los pines GND y VIN.
Finalmente cargaremos la programación en la placa.
Skecth a cargar en el dispositivo central Arduino Nano 33 BLE Sense:
https://github.com/avilmaru/BLESubscripcion/tree/master/peripheral
Dispositivo central
Crearemos una estructura con placas y vigas de la marca Makeblock donde fijaremos un servomotor.
Empezaremos por el montaje de la base que la realizaremos mediante una placa 7×9 B de Makeblock y 4 separadores de 20 mm de longitud de M4.
Posteriormente acoplaremos un servomotor SG90 a dicha base gracias al soporte que viene con el producto “pack servo” de la marca Makeblock y una placa de ángulos 3×3 también de la marca Makeblock.
Ahora fijaremos al servomotor mediante un tornillo una viga recortable de 80 mm de la marca Makeblock.
Una vez creada la estructura acoplaremos una placa Arduino MKR WiFi 1010 sobre una placa MKR Motor Carrier y conectaremos un portapilas (para pilas de tipo 18650) al conector etiquetado como “LiPo Battery connector” de la placa MKR Motor Carrier.
NOTA: Como veis hemos puesto un conector hembra JST PH 2.54mm al portapilas para poder conectarlo fácilmente al conector para baterías etiquetado como “LiPo Battery connector” de la placa MKR Motor Carrier (aunque también podéis prescindir de esto y utilizar los bornes azules de alimentación VIN y GND de la propia placa).
Finalmente conectaremos el servomotor al conector etiquetado como “Servo 1 output” en la placa MKR Motor Carrier.
Por último dibujaremos en un papel una mano que la pegaremos mediante cinta de doble cara en la viga fijada al servomotor (cortesía de mi hijo Carlo 🙂 ).
Finalmente cargaremos la programación en la placa.
Skecth a cargar en el dispositivo periférico Arduino MKR WiFi 1010:
https://github.com/avilmaru/BLESubscripcion/tree/master/central