sábado, 29 de junio de 2019

Comenzando con mBlock: el ascensor

mBlock es un programa muy parecido a Scratch pero tiene algunas particularidades. No obstante para aquellos que quieran dar sus primeros (más bien terceros) pasos al pasar de una plataforma a otra, pueden intentar construir el programa del ascensor.sb2 (clic para descargar).

El programa tiene un montón de pequeños objetos cuyo código mayormente consiste en colocarlos en su sitio de manera adecuada. Los números son los sitios donde hay que hacer clic para que el panda se mueva. Es por ello que los números contienen esta pequeña instrucción


A partir de ahí el resto del programa lo contiene el panda. Es tremendamente sencillo. Al hacer clic en uno de los números se fija el destino al que el panda tiene que llegar, y según éste sea mayor o menor que la altura a la que se encuentra, el animalejo irá hacia arriba o hacia abajo, modificando un piso cada vez a razón de 1 segundo por piso para que se vea chulo el efecto. Hay algunas instrucciones de restas sobre 10, etc. que se corresponden con ajustes meramente visuales por la posición interna del objeto.

Este programa pretende mostrar la similitud entre mBlock y Scratch, aunque es cierto que mBlock abre un abanico importante de posibilidades de las que Scratch carece.


Autor: Francisco Javier Bastante Flores


De mBlock a la placa: el semáforo

Una parte importante de la programación con mBlock de cara a la placa de Arduino son los Bloques que el usuario puede crear.

Para ponerlos en práctica y observar cómo funcionan no hay más que utilizar el programa semaforo12.sb (clic para descargar), en el cual hay varios objetos que simulan un semáforo. Cada uno de ellos solamente depende de una variable asociada, que será la que indique si la luz se vuelve gris o de color.

Todo ello se controla desde el escenario, donde hay un programa principal que a su vez llama a un bloque creado por el usuario, de cara a reducir la extensión del programa.

NOTAS IMPORTANTES SOBRE LOS BLOQUES NUEVOS

- Tanto los bloques como las variables que crea el usuario no deben contener tildes (acentos), espacios, ni caracteres extraños (?¿!¡();&$%@), puntos ni comas

- Se puede poner texto adicional tras los bloques de entrada, haciendo clic en opciones:


Para nuestro programa queda de la siguiente manera:

El programa funciona de tal manera que existe la siguiente codificación:

1 -  SI  -  TRUE  - VERDADERO -  ON  - ALTO - ENCENDIDO ( COLOR )
0 - NO - FALSE -       FALSO      - OFF - BAJO -   APAGADO    (  GRIS  )

Se trata de un tipo de codificación más o menos universal en cuanto a lenguajes de programación, por lo que será la que utilicemos. Como truco para recordarla:
el 1 se parece a la I de SI
el 0 se parece a la O de NO

Según el valor de cada variable de los diferentes colores sea 1 o 0, el disfraz será el de encendido o apagado respectivamente para cada círculo. Desde el programa principal se indicarán las opciones de iluminación que, pasando por el nuevo bloque, se traducirán en valores de las variables para coordinar los objetos círculos.

Pero todo esto queda dentro de mBlock. El objetivo es sacarlo al exterior. Para ello, tenemos el programa semaforo.sb2 (clic para descargar).

En él desaparecen los objetos, puesto que el resultado se manda a unos LEDs conectados a la placa



El resultado final es el siguiente


Finalmente, con la misma configuración, podemos hacer que la instrucción de encendido no sea repetitiva, sino interactiva con el exterior. Por ejemplo, utilizando un sensor de ultrasonidos como el siguiente:



que apoyado con el programa semaforoDistancia.sb2 (clic para descargar) permite distinguir cuándo un objeto está a más de 60 cm (verde), entre 60 y 30 cm (ambar) o a menos de 30 cm (rojo) según el color que vayan tomando los LEDs (las medidas pueden cambiarse en el programa). Como ejemplo está el siguiente video:



Autor: Francisco Javier Bastante Flores


Controlando la potencia en LEDs

En esta ocasión haremos uso de una herramienta muy útil. El control de la potencia de salida de los diferentes agujerillos que tiene la placa de Arduino.

En principio mBlock permite una escala desde 0 hasta 255, lo que nos da 256 posibilidades, que es 2 elevado a 8 posibilidades, es decir, 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 256. Es un número muy común en informática.

Bien, para poder visualizar la potencia de salida utilizaremos los diodos LED. Hay que recordar, que deben colocarse correctamente, o de lo contrario no conducirán la corriente y el circuito no funcionará.

Los LEDs tienen dos patas. Una larga y otra corta. La larga será la que tenga un mayor voltaje, y si consideramos tierra (GND) como el voltaje 0, entonces la pata larga debe ir conectada a los números, puesto que tendrán siempre un voltaje superior al GND.

Pueden conectarse directamente o hacer Uso de la Protoboard que será lo que hagamos en este caso. De cualquier modo, para este programa solo podrán utilizarse aquellos números con el rabillo delante (~3, ~5, ~6, ~9, ~10, ~11). En este caso se ha escogido el número 11.



Tras haberlos conectado debidamente según la imagen superior, cargaremos en la placa el siguiente programa: subeYbajaLED.sb2 (hacer clic en archivo para descargar)

La instrucción es sencilla. La potencia oscilará entre los valores mínimo y máximo que se hayan fijado (Pmin y Pmax) e irá variando en incrementos de 20, siempre recordemos que los valores de Pmin y Pmax deben estar dentro de la escala desde 0 a 255.
Cuando llegue al valor máximo o al mínimo pasará de sumar el incremento a restarlo o viceversa. En caso de que la potencia adquiera un valor que se salga del intervalo, se fijará al límite más cercano.

Para realizar la variación, se configura una potencia en el LED y se le da un tiempo para que visualmente pueda apreciarse el cambio de una potencia a otra. Al llegar a uno de los extremos ese tiempo se aumenta notablemente por puro capricho.

El resultado es el siguiente:


Un paso más allá es el de aplicar el mismo principio a tres LEDs de manera sucesiva. Para ello, se siguen los pasos anteriores y se añade un selector de LEDs en un bloque llamado fijarLED, de tal modo que la salida de la potencia se dará sucesivamente en las patillas 9, 10 y 11. Este bloque solo se ejecutará cuando la potencia se corresponda con la mínima, que se recomienda que sea de 0.

Nótese que el bloque
es equivalente a poner

De este modo, el programa resultante se denominará subeYbajaLED3.sb2 (clic para descargar).

La configuración en cuanto a los cables es muy similar, teniendo cuidado de enchufar los LEDs como ya hemos dicho a los números 9, 10 y 11. En cuanto al GND de los tres LEDs y considerando la protoboard, pueden estar conectados todos a la misma fila, dado que el GND es común para todos (para más dudas ver Uso de la Protoboard).





Autor: Francisco Javier Bastante Flores

martes, 25 de junio de 2019

El programa motores003.sb2

El programa motores003.sb2 (descargar aquí) tiene un funcionamiento bastante sencillo.

Pretende emular las órdenes como si se tratara de un reloj, según la imagen a continuación:
De este modo, cuando queremos que el vehículo vaya
hacia adelante, la dirección será 12,
hacia atrás, la dirección será 6,
hacia la derecha, la dirección será 3,
hacia la izquierda, la dirección será 9,
esté parado, la dirección será 0.

Todo esto se programa en un bloque nuevo que se crea para este propósito:
NOTA IMPORTANTE: Tanto los bloques como las variables que crea el usuario no deben contener tildes (acentos), espacios, ni caractéres extraños (?¿!¡();&$%@), puntos ni comas.

(clic en la imagen para ampliar)

Así, se configurarán tanto los motores del lado derecho como los del lado izquierdo, siendo
0 el valor que hace que los motores de un lado se paren,
1 el valor que hace que los motores de un lado vayan hacia delante,
-1 el valor que hace que los motores de un lado vayan hacia atrás.

Por ejemplo, si queremos girar a la derecha (3), los motores del lado izquierdo deben ir hacia adelante (1).
Pero los del lado derecho pueden estarse quietos (0), de modo que se describa una curva abierta, o bien pueden ir hacia atrás (-1) de manera que el coche gira sobre sí mismo.
Ambas opciones son válidas y depende del criterio del programador el utilizar uno u otro método.

Como se puede ver, el bloque direccion llama a su vez a otros dos bloques que también se crearon desde cero. Se programan según lo siguiente:


(clic en la imagen para ampliar)

Estos bloques permiten que el coche solo envíe señal de funcionamiento cuando el número es distinto de cero (1 o -1) y están programados de tal modo que distinguen si el sentido de giro de cada uno de los pares de motores es hacia un lado o hacia otro, según lo indicado en el bloque de direccion.

Una vez se tienen las bases para la movilidad del coche, se confecciona el programa principal. En el caso de motores003.sb2 es el siguiente:

(clic en la imagen para ampliar)

Al principio se indica la potencia a transmitir a los motores en una escala de 0 a 255 que nada tiene que ver con valores reales de tensión o voltaje. Se para el coche (direccion 0) y se comienza el programa.

Dicho programa llama al bloque de dirección, que será el que configure en cada momento el sentido de giro de los motores. No obstante, tras haberlos configurado, es necesario incluir un bloque de espera por un tiempo determinado, para que dicha acción pueda ejecutarse mínimamente.

En el caso de la direccion 12 no se incluye porque el tiempo es indefinido hasta que se encuentra con un obstáculo. Pero en las otras indicaciones, si no se incluyera no tendría validez ninguna puesto que se aplicaría por un intervalo tan corto de tiempo que no llegaría a ser apreciable.

En cuanto a la forma de esquivar el obstáculo, puede hacerse siempre hacia el mismo lado (derecha o izquierda) o bien de manera aleatoria. Para ello la dirección puede oscilar entre los valores 3 y 9 según lo dispuesto en el programa. Las posibles combinaciones son:
3 + (6 x 0) = 3 (derecha)
3 + (6 x 1) = 9 (izquierda)
Si se tomara al azar entre 3 y 9 habría valores (4,5,6,7,8) que no se recogen en el bloque de direccion y que no harían más que retrasar el funcionamiento del programa, consumiendo energía innecesariamente.

En cuanto al sensor, las informaciones apuntan a que el rango de medición es de 2 cm a 450 cm. No obstante, es recomendable no abusar de este rango y buscar valores intermedios. Los 20 cm indicados en el programa principal pueden ser un buen valor para evitar el choque contra el obstáculo.


Autor: Francisco Javier Bastante Flores

Uso de la protoboard

Para poderla utilizar correctamente es necesario conocer de qué se compone en primer lugar

Es posible que algunas, sobre todo las más pequeñas, no tengan los buses exteriores de alimentación.

Conectar diferentes elementos en una misma FILA supone que todos están a la misma tensión o voltaje. En otras palabras, es como si estuvieran unidos por un cable. De hecho, lo están, en el interior de la protoboard.

Como ejemplo, si en uno de los agujeros de la FILA 3 se conecta un cable que lleve al GND de la placa, todo lo que se conecte a la FILA 3 también estará conectado al GND.

Es más, si se unen con un cable la FILA 3 y la FILA 14, todo lo que se conecte a cualquiera de las dos filas también estará conectado al GND.

Lo mismo ocurriría si en lugar del GND se tratase de cualquier otro valor de voltaje, proveniente de alguna de las salidas numéricas del Arduino, o de la alimentación, etc.

NOTA: Conectar un número elevado de elementos a un mismo voltaje hace que sus intensidades se dividan, por lo que 2 elementos tendrán la mitad de intensidad, 3 tendrán un tercio y así sucesivamente.


Autor: Francisco Javier Bastante Flores

Orientación de los motores

Para poder orientar correctamente los motores es necesario que estos estén bien conectados.

La conexión de los cables a la placa de Arduino es la que se muestra en entradas anteriores (clic aquí).

La de los motores al módulo L298N (placa roja o verde) debe realizarse también según el esquema.
Pero es algo más compleja, porque según estén unidos los cables a los motores, y según sea la disposición del resto de elementos (sensores, etc) en el coche, éste irá hacia adelante, hacia atrás, o girará sobre sí mismo.

Para resolver este problema hemos creado el siguiente programa:

Descarga directa: motoresOrientacion.sb2

Tras haberlo subido a la placa de Arduino, hará que el vehículo vaya de frente (dirección 12 según la nomenclatura de reloj utilizada)



Es posible que algunos de los motores no giren como deberían, sino en sentido contrario.

La solución es tan sencilla como desatornillar los cables del módulo L298N correspondientes a dicho motor, darles la vuelta (conectar un cable donde el otro, y viceversa) y atornillarlos de nuevo.

Con esto nos aseguramos de que las conexiones están correctamente establecidas antes de utilizar el coche.


Autor: Francisco Javier Bastante Flores

miércoles, 12 de junio de 2019

Acoplamiento de Motores con 1 Sensor Ultrasónico


Pasos a seguir:

01. Revisar que los motores estén correctamente conectados (ver entrada)
02. Conectar los cables de la placa y el sensor según los esquemas a continuación
      NOTA: Puede que sea necesario para el sensor el uso de una protoboard
      NOTA: El sensor de ultrasonidos debe colocarse en el frente del vehículo para evitar su colisión
03. Descargar motores003.sb2 (clic aquí)
      NOTA: El funcionamiento se explica aquí
04. Abrirlo desde la carpeta del ordenador
05. Subirlo a la placa de Arduino desde mBlock

IMPORTANTE REVISAR QUE LAS CONEXIONES VCC Y GND DEL SENSOR DE ULTRASONIDOS ESTÉN CORRECTAMENTE DISPUESTAS. DE LO CONTRARIO ÉSTE PODRÍA RECALENTARSE DEMASIADO Y ESTROPEARSE A SÍ MISMO Y AL RESTO DEL CIRCUITO

Esquema gráfico de conexión del cableado

(clic en imagen para ampliar)

 Esquema Resumen de las conexiones que se deben realizar

(clic en imagen para ampliar)


Vídeo de Funcionamiento



Imágenes adicionales

(clic en las imágenes para ampliar)







Autor: Francisco Javier Bastante Flores