La magia del nonius. Medir más allá de lo posible.

10 septiembre 2019

El nonius es uno de esos “cacharros” que parecen magia por mucho que conozcas las reglas que lo rigen o seas capaz incluso de construirlos, lo mismo que pasa con el giróscopo.

Lo primero que tenemos que saber hacer es dividir un segmento en el número de veces que queramos, aunque numéricamente no sea demasiado sencillo.

Por ejemplo, dividir un segmento cualquiera en un número de partes arbitrario. Aquí podéis verlo, es sencillo.

Ahora, asumiendo que podemos hacer eso, vamos a por el nonius.

Imagina que tenemos una regla usual que llega hasta los milímetros y que estamos interesados en poder medir DÉCIMAS de milímetro.

El truco consiste en añadir una regla móvil de la siguiente manera.

Fíjate que lo que hemos hecho es tomar NUEVE milímetros y dividirlo en DIEZ partes, algo que podemos hacer con el truco del que acabamos de hablar. Hasta ahora no hemos necesitado ningún instrumento más preciso que nuestra regla convencional de partida.

La regla inferior es la móvil. A partir de ahora vamos a empezar a moverla y a observar cuidadosamente lo que ocurre.

Todas las figuras que vamos a usar son de Dnu72 y pueden encontrarse en esta página de la Wikipedia.

Primero, y dado que “nos falta” un milímetro, verás que sólo nos coincide la primera línea de la regla inferior con una de la regla superior. Es resto están un poco desplazadas.

¿Qué ocurre si hago coincidir el 10 de ambas escalas? Pues sería una situación parecida, coincidirían las líneas del 10, pero ninguna otra. ¿Cuánta distancia habríamos movido la regla inferior? Un milímetro, que es justo lo que habíamos querido quedarnos cortos.

¿Qué pasa en las situaciones intermedias? Pues si pongo la regla en la posición inicial y la desplazo un poco a la izquierda, coincidirá la línea del “uno de abajo” con una de las de arriba, como podéis ver aquí. Y es la ÚNICA que coincide.

Si lo muevo un poquito más, ahora coincidirá la “línea del dos” y, de nuevo, es la única que coincide. Al “faltar” un milímetro en la escala móvil, sólo nos va a coincidir una línea cada vez.

Total, que según nos vamos moviendo, nos irán coincidiendo las líneas una a una hasta llegar a que nos coincidan los dos 10.

Aquí, por ejemplo, coincide la línea del seis (recuerda, nos importa la línea que coincide abajo, no con quien coincide arriba. La de arriba es la línea de los siete milímetros, pero ¡la de abajo es la del seis!)

Resumamos, porque acaba de producirse la MAGIA.

  • Desde que nos coinciden los ceros hasta que nos coinciden los 10, la distancia recorrida es un milímetro.
  • Durante ese movimiento van coincidiendo las diez líneas dibujadas, una a una.
  • Que están igualmente espaciadas…

Pues, compañeros, cada vez que te coincida una línea habrás avanzado ¡UNA DÉCIMA DE MILÍMETRO!

¿No es impresionante?

Con una regla que sólo puede medir milímetros y un poco de ingenio, puedo medir ¡décimas de milímetro!

Aquí tenéis un simulador en el que podréis ver cómo sucede lo increíble

Este artilugio que se llama nonius va acoplado a multitud de aparatos de medida, quizá el más común, el calibre.

Es una herramienta imprescindible en cualquier taller, como ves, lista para medir exteriores (abajo), interiores (arriba) y profundidades (derecha), leyendo la medida siempre en la misma escala.

De la página del simulador os pongo esta captura para contaros cómo se lee la medida.

La manera de leerlo es la siguiente. Primero leemos los milímetros que llevamos pasados, es decir, que ya haya superado el cero de la regla móvil. En nuestro caso 12.

Después sumamos tantas décimas como el número de línea de la escala inferior que coincida con una línea de arriba. En nuestro caso 4.

Así que esta medida son 12,4 mm.

Si te fijas en el dibujo, efectivamente el cero ha pasado del 12 y está ligeramente por debajo de la mitad de ese milímetro.

Por supuesto os he contado una versión sencilla para que entendáis el ingenioso artificio. El que quiera ver diferentes maneras de implementarlo para obtener distintos alcances en la medida y sus fórmulas generales, puede consultar la entrada de Wikipedia, donde encontrará un detallado análisis.

Anuncios

SPSS y Python, cómo leer y escribir datos

5 septiembre 2019

SPSS es un programa para hacer estadística bastante popular (y propietario, IBM).

Por supuesto tiene muchas funciones de las más comunes integradas y, como en cualquier software, si tienes experiencia no es difícil ir bastante rápido en las tareas más comunes.

El problema es cuando quieres hacer algo no tan común, pero para eso se pueden hacer pequeños “pedazos de código”, scripts, en lenguajes como Python y r, siempre que estén instalados los plugins correspondientes.

Me veo en estas cosas por echar un cable (como tantas veces me lo echan a mí). La cuestión es que para calcular el valor de una variable en un registro necesitábamos acceder a otras variables de OTROS registros y hacer algunos bucles. Algo trivial en Python, pero que no acabábamos de ver cómo hacer en SPSS (quizá mi desconocimiento). El caso es que al final, después de unas cuantas vueltas y de consultar en varios sitios, conseguí encontrar la manera de leer una variable, convertirla en una lista (lo que me permite hacer los cálculos en Python que desee) y luego escribir otra lista en la variable que quería calcular.

Quizá os parezca sencillo… pero a mí me hubiera encantado encontrar este post el tiempo que anduve buscando, así que lo escribo.


BEGIN PROGRAM.

import spss                                #cabecera
spss.StartDataStep()
datasetObj = spss.Dataset()
numColumnaVar1=0               
#aquí tienes que poner el número de la columna en la que está cada variable, empezando a contar por 0
numColumnaVar2=1
numColumnaVarResultado=2
var1=[]                               
#inicializamos los arrays vacíos para luego usar el método append e ir rellenando
var2=[]
varResultado=[]
for i in range(len(datasetObj.cases)):               
#leemos ambas variables (los índices empiezan en cero)
    var1.append(datasetObj.cases[i,numeroColumnaVar1][0])   
#cases lee como si fuera un vector de un componente, así que al poner [0] elegimos el primer elemento
    var2.append(datasetObj.cases[i,numeroColumnaVar2][0])    

AQUÍ HACEMOS EN PYTHON LO QUE QUERAMOS CON LAS LISTAS QUE HEMOS CREADO var1, var2, etc.

FINALIZAMOS SUBIENDO LOS VALORES A LA VARIABLE VACÍA EN LA TERCERA COLUMNA QUE HABREMOS CREADO A MANO EN SPSS

#escribo la variable en la tabla usando el varResultado
for i in range(len(datasetObj.cases)):                   
#i es un índice que recorrerá todos los registros
    datasetObj.cases[i,numerocolumnaVarResultado]=varResultado[i]            
spss.EndDataStep()                    #finalización
END PROGRAM.

Del código que ves escrito sólo tienes que tocar los números de columna origen y destino, recordando que empieza la cuenta en cero.

numColumnaVar1=0                
numColumnaVar2=1
numColumnaVarResultado=2
Por supuesto, tendrás que repetir el código si quieres “tomar” más variables de la base de datos o si quieres al final escribir más variables como resultado.
Paso a explicaros el código paso a paso.
Todo el código está encapsulado entre las instrucciones BEGIN PROGRAM. y END PROGRAM.
“Cabecera”
import spss                                
spss.StartDataStep()
datasetObj = spss.Dataset()
Con estas instrucciones conseguimos que Python pueda tratar el conjunto de datos como un objeto, con sus correspondientes atributos (propiedades) y métodos (funciones), que serán las que usemos para extraer los valores, primero ,y subirlos, después.
Identificación de variables por columna
numColumnaVar1=0                
numColumnaVar2=1
numColumnaVarResultado=2
Usamos estas variables numéricas para luego decirle al programa de qué variables de SPSS tiene que leer los datos y en cuál escribirlos. Ojo en esta última, porque, si te equivocas, vas a sobreescribir una variable en la que podrías tener datos. Asegúrate de que está vacía y de elegir bien los números ANTES de ejecutar el código.
Lectura de datos.
for i in range(len(datasetObj.cases)):                
    var1.append(datasetObj.cases[i,numeroColumnaVar1][0]) 
Hacemos un bucle con tantas iteraciones como longitud (len) tenga la base de datos.
Añadimos cada lectura en una posición de la lista que habíamos creado para ello (var1).
Importante el [0] del final, porque cada lectura la toma como un lista, aunque sólo tenga un componente. Al añadir esto, le decimos que lea el valor de la variable i (lo tomará como lista), que elija el primer valor de esa lista de números, que sólo tiene uno (!) (el número [0]) y que lo guarde como elemento i de nuestra lista, la var1.
Si no pusiéramos que cogiera sólo un elemento nos quedaría un vector de vectores: var1= ([35],[22],[17]…)
Cuando ya tenemos las variables en Python, ya tenemos toda la libertad y facilidad que nos da programar en un lenguaje tan versátil.
Subir datos
Después de haber hecho todas las perrerías que quieras en Python, sólo te queda subir los datos que has ido añadiendo a varResultado.
Como definimos varResultado como un array vacío, en tu código acuérdate de llenarla usando el método append. Si esto te viene mal o te da problemas, inicia el array dando valores.
for i in range(len(datasetObj.cases)):                   
    datasetObj.cases[i,numerocolumnaVarResultado]=varResultado[i]
Así que hacemos un bucle en el que vamos escribiendo en cada registro (hasta completar la longitud de la base de datos) los valores calculados, en la columna elegida al principio. No tiene por qué ser sólo una variable, podéis subir tantos resultados como deseéis.
OJO DE NUEVO, que si escribís esto en una variable en la que ya tengáis datos, los perderéis.
Cerrando
spss.EndDataStep()                    #finalización
END PROGRAM.
Con esto se completa el script.
Es un código muy simple, también se pueden crear y dar formato a las variables desde Python, pero creo que un usuario básico de SPSS hace eso con la gorra y meter esto por aquí os haría más lío.
Como lo más probable es que no tengáis que crear un conjunto grande de variables, estamos hablando de que tardáis un minuto. Si necesitas automatizarlo, porque sean muchas, considera hacerlo desde Python o desde r.
El detalle de todo esto y muchas más cosas podéis encontrarlas aquí en la Python Reference Guide for IBM SPSS Statistics
Lo nuestro está en la página 55 y siguientes.
Espero que os sirva.
Juntos somos más.

Inteligencia artificial, creatividad y miedo

9 abril 2019

Fuente: Wikipedia

La inteligencia artificial provoca muchos miedos infundados mientras, curiosamente, se dejan de tomar precauciones para situaciones peligrosas más que predecibles.

Hay personas, algunas científicos reputados, que advierten de que si/cuando las máquinas tomen autoconciencia y capacidad de autorreplicación pasarán a eliminarnos porque somos un competidor en recursos que no les aportará nada que les interese.

Otros creen que nuestros propios algoritmos (mal programados) podrían llevar a hacerles pensar que acabar con nosotros es la mejor opción. Por ejemplo: Si el objetivo a conseguir de nuestro algoritmo es reducir el gasto sanitario sin más consideraciones, podría empezar a valorar matar enfermos.

En muchos artículos ya se nos cuenta que hoy, ahora, en estos momentos, los algoritmos de decisión resultan sesgados por los datos con los que se les entrena y que eso a veces nos pasa desapercibido. De esto habla mucho @HelenaMatute

También tenemos en el horizonte los vehículos autónomos, su fiabilidad, su capacidad de decidir en situaciones complicadas. Por ejemplo: un peatón entra en la calzada y dar un volantazo salvará su vida, pero comprometerá la del conductor. ¿Qué debe hacer?

Pero yo quería hablaros de otro miedo, menos tangible, que tiene que ver con que el desarrollo de la inteligencia artificial nos plantea preguntas inquietantes sobre qué es lo que somos.

Para empezar, digamos que no tenemos una definición concreta y detallada  de la IA, y no os creáis que es por la “A”… es por la “I”. El problema es que tampoco tenemos una teoría satisfactoria sobre la mente, qué es la inteligencia o qué es ser inteligente.

Se suele asumir como “prueba de IA” lo que se conoce como el Test de Turing, que podría resumirse en que si te estás escribiendo mensajes con “algo” y es capaz de hacerse pasar por una persona, siendo una máquina, sin que puedas detectarlo, diremos que es una inteligencia artificial.

Como ves, un “desastre” de definición: subjetiva, poco detallada…

Nuestras tradicionales definiciones de inteligencia solían tener que ver con diferenciarnos del “resto de animales” y ponernos en una situación superior: autoconsciencia, uso de herramientas, cultura… pero, la verdad es que se han ido encontrando animales cuyo comportamiento difería más en grado que en algo cualitativamente diferente de nosotros, respecto de estas categorías.

Hoy creo, y ese el miedo del que os quería hablar, que nos preocupa sentirnos inferiores a las máquinas.

– Oye, que hay un bicho que corre más rápido que tú.

– Ya, pero correr rápido no es lo que me hace humano.

Y así con muchas características en animales y máquinas: la capacidad sensorial, la fuerza, la resistencia, la capacidad manipulativa, la rapidez de cálculo, juegos como el ajedrez o el Go…

Uno de los últimos bastiones de la “humanidad superior” es la creatividad, y a mí se me junta con mis cosas de profes… ya sabéis que los profesores nos dedicamos a matarla. (Me niego a enlazar al listillo que dice esto, pero es la charla TED más vista… grrrr).

Primer problema… el de siempre, ¿qué es la creatividad? ¿Qué es hacer algo nuevo? ¿Es posible la novedad? ¿Es sólo un remix? ¿Quién “valida” esa novedad? ¿Con qué criterio?

Preguntas no resueltas para humanos, así que imagina cómo conseguir saber si una máquina ha sido creativa en alguna tarea.

En educación se invoca constantemente la creatividad, sobre todo desde fuera del aula, porque desde dentro del aula sabemos bien que no puede crearse sin tener “elementos” para crear, sin tener conocimientos concretos sobre las técnicas, los objetos y procedimientos del campo en el que quiere uno ser creativo.

Es el problema de las cosas abstractas, se aprenden a través de lo concreto y se expresan a través de lo concreto. Por eso también es tan difícil medir la inteligencia, porque resulta inseparable, en la práctica, del lenguaje, de las matemáticas, de conceptos de otras disciplinas. Estudiando esas cosas desarrollamos la inteligencia y preguntándolas la evaluamos. Para algunos que sólo escuchen a gurús educativos supongo que esto será un descubrimiento.

Por lo tanto, cuando me pregunto si la música que compone una IA ha sido un acto creativo, debería ser capaz de responder primero si la música que compone un humano lo es.

Si pienso que una IA sólo reconoce patrones, extrae “leyes” de su experiencia, y las recombina y que eso no es crear, debería ser capaz de explicar si mi proceso creativo de entrenamiento de mi red neuronal de mi encéfalo y mi desempeño no puede explicarse de una manera similar.

En un artículo que leí recientemente apelaba a algún músico revolucionario de principios del siglo XX y fundamentaba su defensa de la creatividad humana en que cambió la estructura y la forma de pensar la música, que no se limitaba a escribir una “partitura más”. Si aceptáramos eso, aunque triste defensa me parece, date cuenta de que no marca como superior la creatividad de todos, sino sólo la de grandes genios reformadores. Fíjate también que deja en el saco de los “remezcladores”, además de a ti y a mí, a exponentes relevantes que se desenvolvieron dentro de movimientos artísticos ya iniciados. Me hizo recordar que en la película “Yo, robot”, un personaje interpretado por Will Smith le decía a un robot que él era sólo “relojería” que no podía escribir una sinfonía, y el robot le contestó: ¿puedes tú?

Al leer el artículo no podía dejar de acordarme de aquel programa que jugaba al Go, y que en lugar de aprender de partidas humanas, jugaba con versiones anteriores de sí mismo (AlphaGo Zero) de forma que “dedujo”, sólo a partir de las reglas del juego, estrategias ganadoras. Un comentario muy curioso de los jugadores de Go es que jugaba de una forma “diferente”, ejem, ejem… otro mito que se nos cae. Si este programa pudiera enseñarnos ahora a nosotros, lo haría con un estilo diferente, nuevo, rompedor. Entonces, ¿ha sido creativo?

Quizá deberíamos asumir nuestra limitada condición mental, emocional, artística y vivir tranquilos con eso. Todos sabemos que no tenemos el genio de Mozart, y que eso no nos hace menos humanos ni menos personas. Ya hemos asumido que no hacemos cálculos con la fiabilidad o la rapidez de un ordenador, ¿somos menos por eso? ¿Tenemos que ser más en algo para considerarnos “valiosos?

Hay que tener mucho ojo con esto, porque a veces se infiltra en nuestras creencias sin que nos demos cuenta y, efectivamente, estemos “midiendo” el valor de las personas por lo que son capaces de hacer, haciendo “rankings” y, disculpadme, pero me da casi tanto asco hacer una lista de gente por sueldo que por cociente intelectual. No olvidemos que no tenemos mayor título que ser humano y que esto es lo único y necesario para hacernos acreedores de respeto.

Siguiendo con la creatividad, si entendemos que dar pinceladas al azar no es un acto creativo porque tenemos un sistema de “validación” que tiene que ver con conceptos como “belleza”, “provocar una emoción”, etc., recordad momentos en los que habéis visto tocar con emoción cosas escritas sin ella, o viceversa, y a algunos os ha provocado emoción y a otros no. Es perfectamente posible emocionarse con una composición artificial que ejecute un humano o una composición humana ejecutada por una máquina. Mucho ojo aquí también que es muy fácil empezar a asumir una forma de dualismo “alma”/cuerpo, que es una postura filosófica respetable, pero entonces asúmase también que ya no se habla desde la perspectiva científica del asunto, que es eminentemente materialista y en la que “la mente” es la consecuencia de la fisiología.

Es muy probable que nos veamos de nuevo “descentralizados” de la creación como en tantas revoluciones científicas (copernicana, darwiniana, etc.) y no pasará nada, porque quizá nos estamos equivocando y, como en tantas cosas en la vida, no se trata tanto de ser “el mejor de tu portal” como de la experiencia que vives y de cómo la vives. Qué sientes TÚ al cantar esa canción, cómo aprendes TÚ a dibujar, cómo es tu viaje…

Somos habitantes de La zona intermedia cuyos logros quizá no sean reseñables en los libros de Historia del Universo, pero cuyas aventuras fueron apasionantes. Así que, tranquilos: Vivan, disfruten, quiéranse, permiten que les quieran… y dejen que ganen otros.


Life hack para personas con movilidad reducida

1 marzo 2019

Voy a compartir con vosotros un apaño “cacharrista” al que he llegado pensando en una necesidad que nos contaba una persona con serios problemas de movilidad.

(Ya sabéis que llamamos cacharrimo a esos experimentos que hacemos con material casero pero con estupendos resultados)

En este caso en particular tenía que ver con la posibilidad de limpiarse de manera autónoma en el baño.

Buscando por la red se pueden encontrar muchos artilugios que pueden sujetar de manera sencilla papel higiénico o toallitas húmedas, y soltarlas con facilidad evitando tener que mancharse.

Para algunos casos hay un problema añadido, la falta de fuerza, amplitud de movimientos o miembros de longitud reducida. Aquí la física nos impone una limitación.

Energía generada = Fuerza x Distancia

¿Qué quiere decir esto? Que yo puedo tener la misma energía, por ejemplo 10 unidades, de infinitas maneras distintas. Sólo por poneros números sencillos.

10 = 1 · 10

10 = 2 · 5

10 = 5 · 2

10 = 10 · 1

Interpretemos esto. En el primer ejemplo tengo una fuerza muy pequeña pero que se mueve una distancia larga, mientras que en el último ejemplo tengo una fuerza grande pero que se desplaza una distancia pequeña.

Con mecanismos más o menos sencillos (sin motores, ni aportes de energía extra) podemos cambiar un tipo de movimiento en otro.

Por ejemplo, con el gato del coche podemos cambiar un movimiento de poca fuerza y mucho recorrido (un montón de vueltas de manivela) y transformarlo en un movimiento de mucha fuerza (levantar el peso del coche) con poco recorrido. Aquí tenéis un ejemplo visual con un cascanueces, de nuevo poca fuerza y más recorrido, por más fuerza y menos recorrido.

Es el mismo principio que usamos en las marchas de las bicicletas o los automóviles, en las palancas, los mecanismos con engranajes, etc.

Pero claro, ¿qué pasa si no tenemos ni fuerza ni amplitud de movimientos en las manos? Pues que no disponemos de energía para conseguir el movimiento necesario para limpiarnos. Es como si te dan cinco manzanas para comer una semana e intentas arreglarlo con “organización”. No es posible.

Una manera de solventar esto consiste en sujetar alguno de estos elementos en algún lugar de tu cuarto de baño de manera que sea tu cuerpo el que muevas, en lugar del aparato, para poder limpiarte. Esto puede ser suficiente para solucionar la necesidad en tu casa, pero, ¿cómo lo hacemos si queremos usar otros baños: en el trabajo, casas ajenas, locales de ocio?

Aquí nos vienen a la mente la falta de limpieza de muchos de esos lugares, así como las enormes diferencias constructivas y de organización de objetos en estos lugares.

Así que tenemos que buscar un modo de sujeción, que resulte “universal” y que evite lugares potencialmente sucios como la tapa de los váteres.

De las primeras ideas que se le ocurren a uno son ventosas, imanes, pero no me acaban de convencer porque lo que bien se agarra, difícil se suelta. Quiero decir que poner un aplique en una pared con una ventosa suficientemente fuerte para que aguante que te frotes contra ella, necesitaría de cierta fuerza para ponerla y quitarla, como hemos visto en estanterías y agarraderas de baño.

He llegado a una solución que me gusta bastante, a ver qué os parece.

  • No necesita mucha fuerza
  • Puede ponerse con una sola mano
  • Se pone en una puerta con pomo o picaporte, bastante universal
  • Es mecánicamente muy estable en todas direcciones
  • Usa elementos comunes y baratos

Son dos perchas de las que se colocan en la parte superior de las puertas.

He puesto sólo un listón de madera sujeto con bridas, pero ahí iría lo que se quisiera sujetar o bien un anclaje para poder poner y quitar lo que se quisiese.

¿Cómo se coloca?

1. Se apoya sobre el pomo o picaporte

2. Se mueve para colocarlo en el ancho de la puerta

3. Se cierra la puerta

Con la presión que hace la puerta sobre los ganchos, más el apoyo sobre el pomo (o el picaporte) se queda bastante rígido para esfuerzos tanto verticales como horizontales.

Aquí os pongo un vídeo para que veáis que efectivamente es muy sencillo de poner con una sola mano y que no requiere fuerza ni especial habilidad.

La unión entre las perchas y el aparato que queráis (el listón en mi caso) podríais pensar en hacerlas móviles para que se pudiera plegar juntándose al listón moviéndose hacia abajo. Estas uniones deberían tener en este caso un tope para que al desplegarse no subieran más de noventa grados y así todo el conjunto podría guardarse en una bolsa recta como las que se usan para planos o trípodes.

Espero que os sirva, tanto para la aplicación que contábamos al principio como para cualquier otra, y me encantaría que nos lo contéis por aquí y que mandéis vídeos o fotos de vuestras aplicaciones.

Juntos somos más.


Control de Arduino por reconocimiento de voz

21 febrero 2019

Allá, vamos, ¡HABLAREMOS Y LAS COSAS NOS OBEDECERÁN!

No se trata de dar palmadas y que se enciendan o apaguen luces, de reaccionar al volumen, sino de reconocer PALABRAS CONCRETAS y responder según cuáles sean.

EL DETECTOR

La madre del cordero es, claro, el cacharrito que te escucha y reconoce lo que dices. Podéis acceder a sus características aquí.

Y esto es lo primero que quería contaros, LA GENTE HACE COSAS, hacen cacharros que detectan, gases, presencia, distancia, luz… o que incluso me reconocen el habla. Y no hace falta que sepáis el detalle de la construcción del aparato para poder usarlo. Si no tienes tiempo/ganas/capacidad de adentrarte en el detalle, puedes tomarlo como una caja negra.

Si lo tratamos con una caja negra necesitamos saber dos cosas:

  1. ¿Cómo conectarlo?
  2. ¿Como hacer que funcione?

Para ambas cosas tenemos que consultar documentación o los mil tutoriales que hoy en día hay en Internet.

1. ¿Cómo conectarlo?

           a) Alimentación

Generalmente necesitará alimentación, así que habrá alguna manera de darle energía. Lo más habitual es que encuentres unos pines que pongan Vcc y GND, que corresponden al “polo positivo” y al “polo negativo” (ground = tierra).

Estos cacharrines normalmente trabajan a 5V o a 3,3V que pueden tomarse de una fuente exterior o de la propia placa controladora que usamos (Arduino).

La alimentación la tenemos a la izquierda, los pines de la derecha son para conectar un micrófono si no se quiere usar la típica conexión jack.

          b) Datos

Ya tiene “chicha” para funcionar, pero ¿cómo me va a llegar la información del sensor?

Es muy habitual que haya un pin y que por ahí llegue un valor binario (0,1), “analógico” (0-255, p.ej.), un carácter (una “letra”), etc.

En este caso hay dos pines y se puede establecer una comunicación BIDIRECCIONAL con el sensor. Podemos mandarle órdenes en TIEMPO DE EJECUCIÓN y variar su comportamiento. TX y RX representación transmisión y recepción.

Si te fijas, esta estructura de alimentación-datos es común a muchos aparatos, aunque en los últimos años nos estamos acostumbrando a usar un sólo cable porque el conector USB hace “trampa” y además de transmitir datos es capaz de alimentar pequeños dispositivos.

2. ¿Cómo hacer que funcione?

EL CONTROLADOR

Hace años cuando queríamos que un circuito hiciera una función, teníamos que diseñar el circuito específicamente para eso, y podía ser terriblemente difícil según lo complejo de la función. Hoy en día, tenemos un controlador programable, así que tenemos TODO EL PODER de programar las barbaridades más enrevesadas que queramos: Cuando la entrada1 sea menor que 200 pero mayor que 125 y siempre que sea jueves por la tarde y que en la entrada2 se detecte que hay una persona cerca queremos que… Este disparate es tan sencillo de implementar como escribir el programa.

En nuestro caso vamos a usar una variante de Arduino que compramos en Elecfreaks.

Como podéis ver es un Arduino con algún apañín majo, como tener tomas de Vcc y GND para cada puerto y posibilidad de conectar como macho o hembra, un botón de encendido y selección de voltaje y otras cosillas, pero para lo que vamos a usar valdría cualquier Arduino que tengáis.

Para programarlo usaremos el IDE, no me detendré en el detalle de la programación general de Arduino, pero tenéis los comentarios para vuestras dudas.

Puede que en este momento tengáis una sensación de horror: ¿Cómo lidiar con el sensor en concreto que estamos usando? NO IMPORTA (Demasiado…)

Quiero decir la dificultad se la ha zampado el fabricante y los programadores por ti, o bien, la circuitería interna del cacharro ya te da un valor manejable (binario, analógico, etc.), o bien tendrás LIBRERÍAS, conjunto de funciones que sólo tendrás que usar para tener tus resultados.

En nuestro caso en particular no necesitaremos una librería, pero recuerda, que en sensores complejos sí las tendrás. Búscalas, instálalas… y, normalmente, tendrás programas añadidos en la sección ejemplos del IDE para aprender cómo funcionan. FACILÍSIMO.

Aquí veis, por ejemplo, que para usar la pantalla de cristal líquido tengo ya unos ejemplos hechos para ver cómo se baja de manera automática, parpadea, etc.

Así que, el sensor (por complejo que sea) o bien me da un valor fácil de usar, o bien vendrá acompañado de librerías con funciones que podré usar de manera sencilla.

PROGRAMACIÓN DE LOS COMANDOS DE VOZ

Ya hemos dicho que nuestro cacharrillo quiere comunicarse de manera bidireccional con la tarjeta controladora, igual que ella también lo hace con el ordenador cuando la conectamos con el cable USB, Bluetooth o WIFI.

En Arduino hay dos pines con los que se puede uno comunicar con la tarjeta o acceder a la comunicación con el ordenador a través de ella. Están identificados con T y R.

Para poder acceder al sensor desde el ordenador, vía la placa controladora, pondremos el cable TX al T y el RX al R para que lo que “oiga” la placa, lo pueda “oír” el sensor. (Esto podría hacerse con otro dispositivo, pero ya que tenemos la tarjeta, podemos usarla).

En este modelo de tarjeta tenemos la facilidad de poder usar Vcc y GND en cualquiera de los pines rojos y negros, respectivamente. En un Arduino corriente, tendríamos que ir a los pines 5V y GND o conectarlos a una protoboard y cablear allí.

Bien, ahora conectamos con el cable USB de la placa al ordenador, y así podremos acceder a la configuración del sensor para los comandos que deseemos.

Mirando el manual podemos ver cuáles son. Aquí tenéis algunos.

La cuestión es que necesitamos un programa para poder enviar estos comandos. Yo he usado este que se recomendaba en algunos tutoriales http://www.sudt.com/en/ap/index.html

IMPORTANTE: En la controladora no puede estar cargado un programa que “estorbe” a las comunicaciones. Así que asegúrate cuando vas a programar los primeros comandos, como cuando luego vayas a programar más (que ahí va a ser cuando se te olvide) de que has subido un programa en blanco antes de conectarte con AccessPort.

Es importante la configuración adecuada. Resalto que pongáis el puerto en el que se haya configurado la tarjeta controladora al conectarla, la velocidad de conexión y que los comandos se enviarán en hexadecimal.

Los comandos se han elegido de una manera bastante amigable, en mi opinión.

Mirad, este aparato es capaz de almacenar tres grupos de cinco comandos, pudiendo tener activo sólo un grupo a la vez (cinco comandos), aunque el grupo activo puede cambiarse mediante comandos si lo programas adecuadamente.

Los comandos se escriben AA 0x..

Para borrar empiezan por 0, así que 01 borra el primer grupo, 02 el segundo, 03 el tercero y 04 todos.

Para escribir empiezan por 1, así que 11 graba el primer grupo, etc.

Para activar empiezan por 2, así que 21 activa el primer grupo, etc.


En los dos botones de arriba tenéis, la configuración y el botón para activar y desactivar la conexión.

Abajo deberéis escribir los códigos y a la derecha tenéis el botón de enviar (imagen penosa, I know).

Si queréis, por limpieza, podemos empezar por borrar todos los grupos, así que pondremos AA 04, damos a enviar y esperamos la confirmación en pantalla.

Ahora grabemos un grupo de cinco instrucciones. En el manual podéis leer que nos pedirá confirmación de cada comando de voz, que debemos esperar a que diga START para hablar y que hay que grabar el grupo seguido.

Me dice START para que diga el comando, AGAIN para prevenirme de que va a pedirme que lo repita y START para que lo repita. Si todo va bien, me dice Finish one, que quiere decir que ha grabado el comando con éxito. Si no hay sonido, es demasiado alto, la repetición no concuerda, etc. te da mensajes y te pide de nuevo que lo hagas. Cuando terminas de grabar el grupo, recibes el mensaje Group1 finishi!. Todas estas acciones y los diferentes estados del sensor se acompañan con señales luminosas que podéis leer descritas en el manual.

Ahora se trataría de probar que efectivamente reconoce los comandos si se los decimos, y eso se puede hacer desde aquí mismo, algo muy conveniente. Recordad que cuando probamos algo debemos acotar las fuentes de error y separarlas lo más posible para poder identificarlas. Si espero a que esté todo montado y no funciona, ¿qué es lo que ha fallado?

Para probarlo, insisto, desde la misma aplicación, debemos cargar ese grupo de comandos, para eso usamos la instrucción AA 21 (recuerda, empieza por cero para borrar, por 1 para grabar y por 2 para cargar).

He repetido los comandos en orden (he dicho los números del uno al cinco, por simplicidad) y los distingue sin problemas unos de otros. Aunque si digo otras cosas a veces las reconoce como instrucciones, por ejemplo, SEIS lo reconoce como TRES, CIRCO como CINCO… quizá esto pueda mejorarse con comandos más largos (para ver el límite, consultar manual). Se supone que, como es de esperar, entornos poco ruidosos, buenos micrófonos, líneas cortas hasta el micro, etc., son favorables.

PROGRAMACIÓN

En los diversos tutoriales que podéis encontrar por ahí hay ejemplos de código, yo os pondré el que he usado para probar con mi placa, una modificación de ellos.

/*Este es un programa para controlar un LED y un zumbador
* medicante el módulo de reconocedor de voz de geetech.
* Javier Fernández Panadero feb 2019
* @javierfpanadero htttp://lacienciaparatodos.wordpress.com
*/
byte com = 0; //variable que recoge la respuesta del sensor
int LED =10; //pin en el que conectaremos el LED
int zumbador =11; //pin en el que conectaremos el zumbador

void setup() {

Serial.begin(9600); //inicia la comunicación a esa velocidad
pinMode(LED, OUTPUT); //configura el pin del LED como salida
pinMode(zumbador, OUTPUT); //configura el pin del zumbador como salida

delay(1000);
Serial.write(0xAA);
Serial.write(0x00); //pone el sensor en espera

delay(1000);
Serial.write(0xAA);
Serial.write(0x37); //las respuestas del sensor “compactas”, 11 en lugar de Result:11

delay(1000);
Serial.write(0xAA);
Serial.write(0x21); //carga el primer grupo de cinco comandos
}

//aquí el bucle de arduino que se repite constantemente

void loop() {

//este while se activa cuando haya alguna respuesta del sensor

while(Serial.available()){

com = Serial.read(); //toma la respuesa y la mete en com

/*según sea la respuesta hará una y sólo una de las acciones
* saldrá del while y volverá a quedar mirándolo una y otra vez
* hasta que haya otra respuesta disponible desde el sensor
*/

switch(com){
case 0x11:
digitalWrite(10,HIGH); //enciende el LED
break;
case 0x12:
digitalWrite(10,LOW); //apaga el LED
break;
case 0x13:
analogWrite(11,440); //hace sonar el zumbador
break;
case 0x14:
analogWrite(11,0); //silencia el zumbador
break;
case 0x15:
analogWrite(11,0); //silencia el zumbador
digitalWrite(10,LOW); //apaga el LED
break;
}
}

}

Ahora tendríamos que subir el programa… pero esto de las comunicaciones es bastante delicado para el principiante. Fíjate que hay mucha gente enviando y recibiendo información: el ordenador, la placa y el sensor.

De momento, para poder cargar el programa, necesitamos que el programa con el que estábamos grabando los comandos “suelte el puerto” y lo deje libre para que enviemos el programa desde el IDE a la placa. Así que vamos al programa y le damos al botón de desactivar la conexión que está en la parte superior izquierda de la ventana. Si no lo hicierais así el IDE os dará un error al intentar subirlo. Insisto que esto es frecuente entre principiantes, así que si estáis con estas cosas y os da un error de comunicación, mirad a ver si tenéis tomado el puerto en el AccessPort, con el Monitor Serie de Arduino, no está bien seleccionado el puerto en alguna de las dos aplicaciones, etc.

Como he tenido varios percances, probablemente no le haga daño a nadie que desconectéis el sensor mientras subís el programa… Si queréis ser precavidos, apagad la placa antes de estas conexiones y desconexiones.

Si habéis llegado hasta aquí no deberíais haber tenido problema en subirlo.

FUNCIONAMIENTO

Ya sabéis que una vez que el programa está cargado en la placa podéis desconectaros del ordenador y alimentar la placa a través de una batería, pilas, etc. El sensor toma su energía de la placa, a través de Vcc y GND, así que tampoco habrá problema. Para mis pruebas no la voy a desconectar, pero el cable USB estará funcionando sólo como alimentación.

Importante. CABLEADO

Apago la placa y voy a conectar el sensor… pero… ATENCIÓN… porque este error me ha tenido parado durante horas. Prestemos atención a quién se comunica con quién.

Antes queríamos que el sensor se conectase con el ordenador a través de Arduino, por lo que poníamos sus cables de transmisión TX y recepción RX directamente a los de la placa, para que lo que el ordenador le dijera a la placa (y fuera recibido por RX de la placa) le llegase también al sensor, y lo que el sensor quisiera decir, fuera del cable TX del sensor al pin TX de la placa y el ordenador lo escuchara como si lo dijera Arduino.

Pero ahora queremos que lo que diga el sensor lo escuche Arduino y lo que diga Arduino lo escuche el sensor. Por lo tanto TENEMOS QUE CAMBIAR EL CABLEADO, poniendo el TX de uno con el RX del otro y viceversa.

Así que, cambiamos el cableado, volvemos a conectar y encendemos la placa.

Ya podemos probar nuestros comandos y deberían funcionar correctamente. Probad con otras palabras, hablando más lento o más rápido… aunque todo esto lo podíais hacer mejor directamente en el paso anterior, donde no teníais el resto de fuentes de error.

Aquí tenéis un cutre-vídeo del asunto .Veis que le cuesta reconocer el CINCO, aunque también entiende CINCO cuando le digo CIRCO…

¿Y TO’ ESTO PA’ QUÉ?

Tienen ustedes toda la razón. Si la cosa es que me pongo a dar voces y se encienden lucecitas y se oyen pitidos desagradables… no podemos decir que haya sido un gran paso para la humanidad.

Es cierto que tiene su sentido como “ejercicio”, pero de una manera muy sencilla podíais aplicarlo para AUTOMATIZAR VUESTRA CASA, la tan repetida DOMÓTICA.

Para esto necesitamos a un cacharrito que os va a encantar. El relé.

Relay principle horizontal new

Como podéis ver en este magnífico gif, cuando le aplicamos un voltaje a la bobina se convierte en un imán, que mueve esa pieza grande de metal (la armadura) y hace que los contactos amarillos se muevan. De manera que si conecto OTRO circuito a través de los contactos puedo hacer que este se abra o cierre según le pase corriente o no a la bobina. Así que mediante UN circuito, controlo OTRO circuito.

Este sería el símbolo

Rele 1c
Lo de la izquierda es la bobina y lo de la derecha los contactos. La línea discontinua simboliza esa acción magnética, NO es un cable. Por lo tanto esos dos circuitos están aislados eléctricamente y podrían funcionar a voltajes diferentes.

Lo que vamos a hacer es controlar la bobina con la baja tensión de 5V de nuestra placa, pero poner en los contactos un circuito enchufado a la electricidad de casa, a 220V.

Así, cuando con nuestra voz activemos el relé, este activará o desactivará a su vez un dispositivo doméstico cualquiera: una luz, el aire acondicionado, la lavadora, etc.

Ojo, que esto es muy sencillo, lo único que haremos será DARLE CORRIENTE a ese aparato, así que no podremos configurar sus funciones ni nada. Para la bombilla será suficiente, pero en el caso de la lavadora por ejemplo, sólo será útil si, al recibir la corriente, empezase directamente a funcionar.

De los tres contactos, usaremos sólo dos, porque queremos que esté desactivado cuando el relé está desactivado y viceversa, así que los contactos que debemos usar son el “común” y el “normalmente abierto (NO)” que en la animación serían el central y el de la derecha.

Aunque hay módulos que agrupan muchos relés para poder controlar varios aparatos a la vez y ahí habría que ver cómo se hace la comunicación con ese módulo y cómo se mandan las instrucciones para que se active un réle en particular, nosotros usaremos uno sólo que sirve para ilustrar lo que queremos contar.

Así que procedo a cambiar el LED por un relé, y compruebo que funciona. Por un lado se enciende un indicador rojo y por otro se oye un “click” (el choque de la armadura con la bobina).

Ahora sería el momento de conectar el aparato que quisiera, pero sin eliminar el control manual. Para eso tenemos que usar conexiones en paralelo. Así se hacía antiguamente la lógica con interruptores, si ponías dos en serie simbolizaba la función AND (Y), si los ponías en paralelo, la función OR (o).

Hecho con CircuitLab (no me hagáis caso a los valores, es sólo para que veáis las conexiones).

Esta sería la configuración de una lámpara normal.

Para poder seguir usando el interruptor normal y el controlado por voz, debemos poner los interruptores en paralelo, para que la corriente pueda llega a la bombilla POR UNO O POR EL OTRO.

RLY1 sería el relé que tenemos conectado con nuestra placa.

La activación de uno es independiente de la del otro, ambos sirven por separado para alimentar la bombilla, ninguno impide que el otro le dé corriente, y en caso de estar activados los dos, serán simplemente redundantes.

Os he abierto un interruptor de esos que venden con un cable para poner a una lámpara sencilla.

Se aprecia con dificultad en la foto pero, aunque los dos cables pasan por el interruptor, hay una chapa continua que conecta los dos cables azules, de forma que el único que se interrumpe es el marrón. (Si se interrumpieran los dos habría que proceder de otra manera).

Así que sería en los marrones donde habría que poner los cables que llevaremos al relé.

OJO QUE LA FOTO ES SÓLO INDICATIVA, NI ESTÁN CONECTADOS, NI SOLDADOS, NI ASEGURADOS…

Ahora nos llevaríamos esos cables al relé, como dijimos en los contactos común y normalmente abierto (NO)

Y ya estaría… como dicen los chavales.

Os preguntaréis que por qué no lo monto todo y os hago otro vídeo, dos razones.

  1. Con todo esto ya está suficientemente claro…
  2. No tengo muchas ganas…
  3. NO DEBO…

Y, ¿¿por qué no debo??

Pues porque hay que mirarse las características de los cacharrines, queridos lectores. Si miramos la parte superior de la “cajita negra” que es mi relé, vemos que, como está comprado fuera, lo han diseñado para 120V, así que paso de quemarlo para daros a vosotros un gusto 😉

CONCLUSIÓN Y RESUMEN

Hemos visto que:

Podemos usar sensores para responder a las situaciones del mundo real con facilidad porque, o bien me darán salidas sencillas para programar, o tendrán sus propias librerías.

Podemos programar con toda libertad el comportamiento que deseemos gracias a la potencialidad de los controladores, como Arduino.

Podemos activar aparatos sencillos como LEDs o zumbadores, pero que, a través de relés podemos acceder al control de sistemas de potencia en nuestra propia casa. Con la salvedad que sólo les estamos dando o quitando corriente (encendido o apagado).

Por lo tanto, tenéis la domótica a un paso y por muy poco precio, si tenéis el tiempo y las ganas…

QUEDA PENDIENTE…

Si en lugar de activarlo con voz, conectamos la placa Arduino por Bluetooth o WIFI a un móvil, por ejemplo, o a una web… ya tenéis el famoso Internet de las cosas (IoT) “up and running” para vuestro disfrute. Una plataforma sencilla de programación por bloques es MQTT, por si queréis cotillear.

AHORA, SINCERÉMONOS

Estas cosas pueden ser más o menos divertidas según el carácter o las inclinaciones de cada uno, en mi caso tienen más interés docente y divulgativo que para aplicaciones en mi vida diaria.

Todos los que trabajan con “cacharritos” ya sabéis lo jorobada que es la robótica porque junta todas las fuentes de error de muchas disciplinas:  te puede fallar la electrónica, te puede fallar la interacción de la electrónica con el MundoReal, te puede fallar la programación.

En mi caso, para este asunto, perdí tiempo porque un Arduino Nano no me funcionaba, lo descarté sin llegar a saber por qué, perdí tiempo porque no me di cuenta de que tenía que cambiar los cables para ponerlo a funcionar y, para colmo, a medio post, me dejó de funcionar el sensor sin que haya sido capaz de arreglarlo, así que, gracias a que había comprado dos, he podido terminar este artículo para vosotros.

Ays… me duele la vida.

Así que recordamos a Fernando de la Cuadra, cuando dijo “La informática no es fácil”, para decir… La robótica, tampoco.

Espero que os sirva.


Manual de Scratch. Especial para Profes y Principiantes.

2 abril 2018

Aquí os dejo el manual de Scratch que he preparado, explicando las funcionalidades con ejemplos, partiendo desde cero y haciendo cosas bastante sofisticadas. Creo que es muy buen trabajo tanto si lo usáis para aprender, como si se lo dejáis a vuestros alumnos, o si lo leéis para tomar ideas como formadores.

Se comparte con Licencia Creative Commons de atribución, no comercial y sin obra derivada.

Estoy muy a favor de compartir mi trabajo y de que quien no tenga recursos suficientes pueda acceder a material de calidad (una alegría y por eso se publica), por otra parte, tampoco hay nada malo que a quien le parezca pueda hacer una contribución de la cuantía que os parezca, para ayudar y compensar el trabajo que lleva… que ya os digo que no es poco.

Estaré encantado de escuchar vuestros comentarios y sugerencias, tampoco dudéis en contactar conmigo para cualquier problema que os surja.

Y muchas gracias a Teresa por su ayuda 😉

 


Hacer exámenes con los Formularios de Google. Especial profes

9 febrero 2018

Algunas pruebas necesitan de un humano para evaluarlas, como una redacción, pero otras pueden automatizarse, como comprobar que se ha puesto la palabra correcta en un hueco o sumar los puntos de un examen tipo test y así liberar trabajo para el que sí somos imprescindibles.

Aquí os dejo el tutorial, creo que está muy detallado y que cualquiera puede seguirlo, en todo caso me tenéis a vuestra disposición para cualquier aclaración.

Aprovecho para contaros que yo dispongo sólo de 15 ordenadores para 30 alumnos, pero que me da tiempo a hacerlo en dos “tandas” en una misma clase.

No es una quimera y te ahorrará mucho trabajo mecánico.

Sé que otros usan Moodle, Edmodo y otras plataformas, esta aproximación tiene la ventaja de que no depende de ningún sistema externo, basta un navegador, ni de manejar los usuarios en ninguna plataforma. Pero vaya, si estás en un entorno donde te lo hacen todo más fácil, mejor.

Estoy muy a favor de compartir mi trabajo y de que quien no tenga recursos suficientes pueda acceder a material de calidad (una alegría y por eso se publica), por otra parte, tampoco hay nada malo que a quien le parezca pueda hacer una contribución de la cuantía que os parezca, para ayudar y compensar el trabajo que lleva… que ya os digo que no es poco.


A %d blogueros les gusta esto: