Telecontrol via Bluetooth amb Bitbloq2

Telecontrol via Bluetooth amb Bitbloq2

M’agrada treballar el telecontrol en robòtica. Robots com DaVinci, PackBot o Curiosity són exemples reals de les possibilitats de la interacció home-màquina.
Vull que els meus alumnes de 1r d’ESO programin les seves plaques ZUM BT-328 amb Bitbloq per aconseguir que els seus robots responguin a les dades enviades des d’un mòbil mitjançant una aplicació programada amb App Inventor.

Per comunicar el mòbil i el robot utilitzem Bluetooth. El hardware no és problema: la placa zum ja el porta incorporat, i el mòbil també. Només cal sincronitzar els dos dispositius des del mòbil (la contrasenya de zum és 1234).

El problema està en el software: a pesar de l’extensa informació sobre Bitbloq, la referent a l’ús de Bluetooth amb Bitbloq2 encara no està publicada, així que m’he posat a investigar a partir del que sé sobre la comunicació Bluetooth amb Arduino i algunes indicacions que he trobat al fòrum de Bitbloq2.
El meu objectiu: controlar l’encesa d’un dels Leds del meu robot des del mòbil.

Components i connexions:

Al hardware de l’entorn de programació Bitbloq cal connectar un component bluetooth, tot i que la placa zum ja el porti incorporat. Cal connectar l’RXD al pin 1 de la placa, i el TXD al pin 0. També cal establir la velocitat de comunicació (baudrate) a 19200.
Com que la comunicació bluetooth es realitza mitjançant el port sèrie, cal connectar també un component port sèrie, establint també la velocitat de comunicació a 19200.
El Led és el component el comportament del qual vull controlar. En el meu robot està connectat al pin 4 de la placa.

Esquema_Bitbloq

El programa

La idea és que l’encesa del Led estigui associada a la recepció de missatges pel port sèrie, de manera que si es rep una “A” el Led s’ha d’encendre, i si es rep una “P” s’ha d’apagar.
A l’àrea de declaració de variables n’he creat una per desar el missatge que es rebi pel port sèrie en cada moment. He anomenat dada a aquesta variable i he definit que conté dades de text.

BitbloqProgram01

Al bucle principal del programa (loop) el primer que es fa és assignar com a valor de la variable dada el missatge que es rebi pel port sèrie, en el meu cas via bluetooth.
Per no saturar l’execució, la lectura del port sèrie només es realitzarà si hi ha dades entrants (si la longitud del valor de dada és > 0).
En aquest cas, si el valor de la variable dada és una A, el Led s’ha d’encendre, i si és una P, s’ha d’apagar.

BitbloqProgram02

L’aplicació App Inventor

Components de l’aplicació:
ListPicker: botó que en ser clicat em permetrà escollir el dispositiu amb el qual vull connectar el mòbil.
Boto_Desconnectar: botó per tancar la connexió bluetooth.
Boto_Led: en clicar-lo s’enviarà una dada que permetrà encendre/apagar el Led del robot.
BluetoothClient: component no visible que permet la connexió bluetooth.

App_Components

El programa:
En iniciar-se l’aplicació es fixa com a elements de la llista ListPicker les dades dels dispositius amb els quals el mòbil es pot connectar via bluetooth.
Un cop escollit el robot en aquesta llista, s’estableix la comunicació bluetooth.
Quan cliquem el botó desconnectar, es tancarà la connexió bluetooth.

AppProgram01

Un cop establerta la comunicació bluetooth, quan premem el Botó_Led s’enviarà un caràcter: A. Quan el deixem de prèmer, s’enviarà un altre caràcter: P.

AppProgram02

… I funciona!

El següent pas: definir els moviments del robot en funció de l’enviament de diferents caràcters en clicar botons al mòbil …