Serial_bitbloq__USB_mini

En este post os vamos a enseñar cómo realizar una comunicación por puerto serie USB entre vuestro ordenador y la placa controladora. Lo diré de otra forma más sencilla: transferir información y órdenes a tu placa por el cable USB.

Una comunicación consta siempre de dos partes, un emisor y un receptor. Por tanto, vamos a necesitar dos cosas:

  1. Programa dentro de la placa controladora que envíe/reciba datos. (Lo haremos con bitbloq)
  2. Programa dentro del ordenador que envíe/reciba datos. (Usaremos el Monitor Serial de la IDE de Arduino)

Serial_bitbloq__USB

Abre bitbloq y descarga el IDE de Arduino. Tanto si tienes una placa ZUM BT-328 como una placa FreaduinoUNO, conectala al ordenador con el cable USB y… ¡Comenzamos!

“”Aquí robonauta llamando a Base Eco, ¿me recibe?””

ESCRIBIR POR PUERTO SERIE


Serial_bitbloq__USB__1

El ejemplo siguiente envía desde la placa controladora la palabra ‘NEGRO‘ cuando un sensor IR detecta ese color. Conecta dicho sensor al pin digital 3:

zum_IR3

Parte 1: EMISOR – Programación en bitbloq

Para programar un envío de un dato desde la placa en bitbloq, tan sólo será necesario el bloque llamado “Imprimir por puerto serie”

bit_serie_5

Es así sencillo entonces crear un programa en el que se compara cada segundo (1000 ms) el valor del sensor y si éste vale 0 envia la palabra. Carga este programa en tu placa:

bit_serie_3

Parte 2: RECEPTOR – Usando el Monitor Serial de Arduino IDE

Como hemos dicho, utilizaremos el Monitor Serial del IDE de Arduino. Con la placa conectada, abre el programa Arduino y cierra bitbloq.

Ahora selecciona la placa controladora en Herramientas/Tarjeta. En caso de usar la ZUM BT-328 selecciona “Arduino BT w/ATmega328” y en caso de usar una FreaduinoUNO selecciona “Arduino UNO“.

ardu_seleccion_placa

Selecciona el puerto donde está conectada la placa en Herramientas/Puerto Serial:

ardu_seleccion_puerto

Ya podemos abrir el Monitor Serial en Herramientas/Monitor Serial o pulsando aquí:

ardu_seleccion_MonitorSerial

Se abrirá esta ventana donde debemos comprobar que esté marcada una velocidad de 9600 baudios.

ardu_serie_sol_1

Si el sensor IR de nuestro ejemplo comienza a detectar varias veces, en el monitor irá apareciendo la palabra ‘NEGRO’ sin cesar:

ardu_serie_sol_2

Si queremos ver el resultado un poco más ordenado, podemos utilizar el bloque bitbloq “Imprimir por puerto serie con salto de linea“:

bit_serie_4

De esta forma conseguiremos una respuesta más separada así:

ardu_serie_sol_3

LEER EL PUERTO SERIE


Serial_bitbloq__USB__2

Parte 1: RECEPTOR – Programación en bitbloq

En este caso el receptor es la placa controladora. Para toda recepción desde la placa, usaremos este bloque bitbloq que comprueba si ha llegado algo por el puerto serie:

bit_serie_1

Si es así, leeremos el dato recibido y lo guardamos en una variable:

bit_serie_6

Ahora podemos compararlo y actuar dependiendo del valor dicho dato. Por ejemplo, si recibimos una ‘A‘ mayúscula, encenderemos el LED integrado en la placa (D13). Si en cambio el dato recibido es cualquier otro, apagaremos dicho LED. El programa queda así:

bit_serie_8

“- Pero… ¡Has comparado el dato con un 65!¿? – ” Pues sí querido robonauta, porque ahora mismo en bitbloq no hay un bloque para comparar variables de texto tipo char de momento sólo pueden ser tipo String. No te preocupes si te suena a chino, tan sólo debes saber que para este ejemplo usamos números para identificar letras.

La letra ‘A‘ corresponde con el número decimal 65 en código Ascii (mira la tabla al final de este post).

Parte 2: EMISOR – Usando el Monitor Serial de Arduino IDE

Ya tenemos la placa preparada para recibir. Cierra bitbloq y abre de nuevo el Monitor Serie de Arduino IDE. Esta vez asegurate no sólo de marcar 9600 baudios de velocidad sino también la opción “No hay fin de línea“.

ardu_serie_sol_4

Escribe una A mayúscula y pulsa Enviar. ¿Se enciende el LED integrado? Prueba a enviar cualquier otra cosa para apagar dicho LED D13.

Aquí te dejo la tabla Ascii para que compares las letras y caracteres que viajan por el puerto serie:

Ascii_A