Source: https://soloarduino.blogspot.com.es/2015/09/
Timestamp: 2017-08-16 23:41:25+00:00

Document:
Arduino y solo Arduino - Todo lo que necesitas lo encontrarás aquí.: septiembre 2015
Publicado por SoloArduino M&M en 17:48 No hay comentarios:
Publicado por SoloArduino M&M en 12:53 2 comentarios:
Publicado por SoloArduino M&M en 10:59 No hay comentarios:
Una vez aclaradas las diferencias básicas entre la tecnología analógica y la digital, veamos ahora cómo se efectúa el proceso de conversión de una tecnología a otra.
La tarea la realiza un componente llamado Conversor Analógico Digital ADC (Analog-to-Digital Converter - ADC en inglés) y la ejecuta en tres pasos:
1.- Muestreo de la señal analógica
Para convertir una señal analógica en digital, el primer paso consiste en realizar un muestreo (sampling en inglés) de ésta, o lo que es igual, tomar diferentes muestras de tensiones o voltajes en diferentes puntos de señal que vamos a procesar.
Cuantos más puntos tomemos mejor aproximación a la forma original podremos hacer
Es por ello por lo que a la hora de evaluar la fiabilidad de la "traducción" digital que hayamos hecho, debemos tener en cuenta siempre la frecuencia de muestreo que estamos usando. Que no es más que la cantidad de puntos que estamos tomando por unidad de tiempo.
Veamos en otro ejemplo, cómo de diferente podríamos imaginarnos la señal original dependiendo si tomamos 10, 6 ó 2 puntos para muestrearla
Entonces ¿por qué no tomar 1000 puntos y así reproducir mucho mejor la señal?
A más puntos más memoria vamos a requerir, por lo que lo inteligente es no consumir más recursos de los estrictamente necesarios para "traducir" la señal la calidad que necesitemos.
A más puntos más velocidad de captura y más velocidad de escritura, es lo que se viene a llamar ancho de banda. Ancho de banda mayores, requiere de componentes más avanzados y por lo tanto más caros. Y en este sentido, las limitaciones físicas vendrán dadas por nuestro propio Arduino.
El número de muestras por segundo se conoce en inglés como el bit-rate.
En la próxima entrada veremos el segundo paso y cómo cuantizaremos el valor de la señal en los puntos de muestreo seleccionados.
Publicado por SoloArduino M&M en 10:30 No hay comentarios:
Etiquetas: ADC, bit-rate, convertidor analógico digital, muestreo, sampling
Conversión analógica digital - Midiendo el mundo analógico
La mayor parte de los microcontroladores tienen un conversor analógico-digital (analog to digital converter, ADC en inglés) para permitirnos convertir una tensión analógica de variación continua, a la que se suele definir como señal (por ejemplo la temperatura de una habitación) en un valor digital dentro de un rango definido a una velocidad de captura concreta, llamada frecuencia de muestreo. En el ejemplo de la temperatura de nuestra habitación, sería las veces que nuestro microcontrolador mide la señal, o dicho de otro modo, la cantidad de veces por segundo que nuestro Arduino mide cuál es la temperatura de nuestro cuarto.
Así dicho no parece un parámetro importante, a fin de cuentas la temperatura no suele cambiar demasiado rápidamente a lo largo del día. Es verdad, pero si en lugar de medir la temperatura estuviéramos midiendo la deformación de un vehículo durante su impacto contra un muro, probablemente ahí todo fuera diferente, la carrocería se deforma muy rápidamente y capturar la deformación mecánica de ciertas partes del coche, antes de que se convierta en chatarra, podría hacer que los ingenieros pudieran mejorar la seguridad del mismo. Es por ello por lo que tan importante es saber identificar no solo la naturaleza y magnitud de la señal, sino como la frecuencia a la que vamos a necesitar digitalizarla: frecuencia de muestreo. Ver detalles en la entrada Conversión analógica digital - ADC - Muestreo.
El tiempo que transcurre entre una muestra y la siguiente se denomina periodo de muestreo, y es el inverso de la frecuencia de muestreo.
pero no solo es importante ver cuanto de rápido cambia la señal que quiero analizar para escoger bien la frecuencia de muestreo apropiada, también es importante saber de forma anticipada en qué rango de trabajo vamos a trabajar. No es lo mismo que queramos medir la fiebre de una persona, que a fin de cuentas sabemos que estará en el rango de 36-43 ºC, que intentar medir la variación de temperatura de un litro de agua mientras que lo voy calentando, que posiblemente esté en el rango de 0-100ºC.
En nuestro Arduino, los rangos de tensión que podemos manejar varían de una placa a otra, y en unos casos, como es el caso del Arduino UNO, la entradas analógicas permiten medir tensiones en el rango de 0 a 5 voltios, siendo, en caso de requerir medir tensiones superiores, necesario implementar soluciones del tipo divisores de tensión.
Conocer de forma anticipada el rango de trabajo en el que vamos a trabajar nos va a evitar muchos problemas graves y quizás darnos muchas alegrías, como veremos más adelante en la entrada donde explicamos como mejorar la resolución de nuestra placa.
Y es este el siguiente punto importante a tener en cuenta cuanto vamos a hacer mediciones analógicas, la resolución de la medida. Es importante definir con antelación cuál es la resolución requerida cuando vayamos a analizar una señal, no es lo requieres la misma resolución para medir la longitud de un puente, que para medir el tamaño de un pelo. En el primer caso, con una resolución de metros será suficiente, por ejemplo 136 metros, y en el segundo caso necesitarás que sea del orden de 0.01 milímetros, a fin de cuentas, el diámetro medio de un cabello en un joven es 0.1mm y en una persona anciana la mitad, por lo que si usamos como unidad de medida el metro, parecerá que todos estamos calvos, porque nos saldría 0 metros (0,00001m). Ver detalles en la entrada resolución de la medida del ADC.
Por lo que podemos resumir que, en general, hay tres cosas que nos interés para medir una señal:
Cuántas veces por segundo vamos a requerir hacer la medida: frecuencia.
Cuál es la resolución de la medida que vamos a requerir.
Cuál es el rango de trabajo de la señal que queremos medir.
En la siguiente entrada vamos a repasar uno a uno estos conceptos, para luego poder saltar a presentar el ADC (conversor analógico digital en inglés) que el microcontrolador de nuestra placa Arduino usa, así como sus ventajas y sus inconvenientes.
Publicado por SoloArduino M&M en 10:29 No hay comentarios:
Etiquetas: ADC, Arduino DUE, Arduino UNO, frecuencia de muestreo, periodo de muestreo., rango de trabajo, resolución
Publicado por SoloArduino M&M en 8:16 No hay comentarios:
Publicado por SoloArduino M&M en 19:53 No hay comentarios:
Sensor de distancia infrarrojo GP2Y0A21YK0F - Conexionado
Tras la introducción que hicimos en nuestra entrada anterior, vamos a ver ahora cómo deberíamos conectar nuestro sensor GP2YA021YK0F a la placa Arduino y qué clase de código deberíamos emplear para obtener resultados de visibles a través de nuestro monitor serie.
Lo primero es echarle un vistazo de nuevo al datasheet del sensor a ver si podemos identificar cuál es el pin-out del mismo.
En la segunda página de la hoja de características del sensor (datasheet en inglés) no solo podemos encontrar las dimensiones del mismo, sino que además vemos que se detalla qué clase de conector trae montado (del tipo PH del fabricante JST) y además define la función de cada uno de los pines.
poco después declara el tipo de alimentación (supply voltage en inglés) que recomienda. La tensión de alimentación debe encontrarse en el rango desde 4,5 voltios a 5,5 voltios.
Lo cual hace de este sensor un candidato fantástico para nuestra placa Arduino. Dado que es capaz de suministrar 5 voltios por medio de nuestras salidas digitales (aunque si quisiéramos usar una fuente externa parece ser que el mismo podría regular la tensión de algún modo gracias al propio regulador que el mismo sensor tiene embebido. Esto lo podemos ver en su diagrama de bloques, ver imagen a continuación. El diagrama de bloques básicamente es un descripción esquemática de todas las funcionalidades individuales que se han implementado en el diseño del dispositivo).
Aunque esta opción siempre es preferible dejarla como última alternativa, no creemos que pueda regular mucho más allá de un par de voltios por encima de los 5 requerido, y si la fuente que vamos a usar tampoco está regulada podríamos acabar por destruir nuestro sensor.
Pues bien, visto esto, ahora solo queda lo más sencillo, el cableado:
conectaremos el cable Vcc a un PIN de 5voltios,
conectaremos el pin GND a un PIN GND de la placa y por último
conectaremos el pin 1, el dedicado a la señal analógica que genera, a un PIN analógico de los que tengamos en nuestra placa, nosotros hemos seleccionado el PIN A0.
En la próxima entrada propondremos un sketch simple que nos permitirá evaluar los resultados que podemos obtener con este tipo de sensores.
Publicado por SoloArduino M&M en 19:08 No hay comentarios:
Etiquetas: alimentación, datasheet, diagrama de bloques, GP2Y0A21YK0F, JST, PH, sensor infrarrojo, SHARP, supply voltage
Sensor de distancia infrarrojo GP2Y0A21YK0F - Introducción
Hace ya algún tiempo que estuvimos presentando como funcionaba el sensor ultrasónico HC-SR04 y un sketch que podríamos usar para verlo en acción. Con este sensor ultrasónico, podíamos medir un rango de distancias sensible entre 3cm y 3m con una precisión de 3mm.
Y como ya explicamos en su momento, funciona del mismo modo que lo hacen los murciélagos, esto es, enviando un ultrasonido (inaudible para el oído humano por su alta frecuencia) a través de uno de la pareja de cilindros que compone el sensor (un transductor) y espera a que dicho sonido rebote sobre un objeto y vuelva, retorno captado por el otro cilindro.
Pues bien hay situaciones en las que nos podría interesar no tanto medir la distancia real a la que estamos de un obstáculo sino más bien si hay alguno lejos, cerca o muy cerca, y en función de los resultados tomar decisiones sobre la marcha de nuestro robot. Este tipo de enfoques no permitiría un procesado más rápido de la señal, y menos recursos computacionales de los datos. Debemos de tener en cuenta que para calcular la distancia a la que se encuentra un obstáculo usando el sensor ultrasónico, debemos emitir un pulso sónico, esperar el eco, y luego con sabiendo que la velocidad del sonido en el aire es de valor 340 m/s, o 0,034 cm/microseg (ya que trabajaremos con centímetros y microsegundos) y que la formula de la velocidad es
Tendremos el espacio de ida y vuelta recorrido por nuestro pulso ultrasónico,
ahora tendremos que dividirlo entre dos para saber la distancia a la que se encuentra (recordemos que el pulso va y viene, por lo que la distancia del obstáculo es la mitad de la recorrida por nuestro pulso de ida-detección-vuelta-notificación)
Además, como el pulso se genera siempre a una frecuencia dada, imaginaros si tenemos tres o cuatro sensores ultrasónicos a la vez, cada uno mirando a un lado de nuestro robot, sin duda alguna correremos el riesgo de que ciertos ecos de un sensor se reciban por otro sensor y los interprete como propios, por lo que adicionalmente a los recursos que nuestro Arduino debe emplear para el cálculo de la distancia, tendremos que implementar otros filtros a nivel de programación para identificar los falsos ecos y descartarlos.
Por todo ello, a veces solo queremos saber si hay o no hay un obstáculo y hacerlo muy deprisa. Por ejemplo si estamos diseñando un seca manos que necesita ver si un cliente tiene las manos en el rango de trabajo del secador.
Para ello podríamos pensar en buscar algún sensor que funcionara con luz en lugar de con sonido. Todos sabemos que la velocidad de la luz es casi un millón de veces más rápida que la del sonido (es la razón de que vemos primero el relámpago y luego escuchamos el trueno).
Pues bien, la empresa SHARP tiene diseñado una serie concreta para rangos de trabajo diferentes. Tres ejemplos de ellos los mostramos a continuación
De 4 a 30 cm, el GP2Y0A41SK0F
De 20 a 150 cm, el GP2YA02YKF
De 10 a 80 cm, el GP2YA021YK0F
Y hemos presentado estos tres por que son los tres que vienen con terminación en conectores de la serie PH del fabricante JST,
que nos permitiría implementar el mismo tipo de conexionado independientemente del rango de distancias y sensor que vayamos a usar. Todos ellos tienen el mismo configuración de los pines (lo que se conoce por el pin-out).
Adicionalmente y con objeto de que lo podamos usar en distintas configuraciones el propio POLULU ha diseñado diferentes escuadras para poder anclarlo en la forma que más nos apetezca
de este modo, podríamos situarlos como vemos a continuación,
O mejor, si lo colocamos encima de un servomotor, podremos con un solo sensor de infrarrojos mapear todos los obstáculos que se encuentren a nuestro alrededor.
Visto la parte mecánica, ahora echemos un vistazo a la parte eléctrica. De estos tres modelos que hemos presentado, nos vamos a centrar en el rango intermedio de 10 a 80 centímetros ofrecidos por POLULU: GP2YA021YK0F.
Rango de tensión de trabajo
5.5 – 4.5 voltios
Diferencia de tensión entre extremos
1,9 voltios (80 cm contra 10 cm)
Lo primero que nos salta a la vista es el consumo del sensor 30 mA. Si recordamos lo que vimos en entrada en la que estuvimos viendo las limitaciones de potencia eléctrica, aunque no debemos sobrepasar 40 mA en los pines digitales, lo recomendable es mantenerse en el orden de los 20 mA. Es por ello, por lo que el propio SHARP en previsión de que pueda haber algún tipo de problemas con el suministro, aconseja que se coloque un condensador de 10 µF o mayor, entre el pin de alimentación y de tierra para estabilizar la línea.
Lo segundo que vemos es que la salida es analógica, y no digital como hubiéramos esperado para este tipo de sensores. Por lo que podríamos creer que son una formula parecida a la que usamos para nuestro sensor de ultrasonido, podríamos no solo detectar el obstáculo, sino también calcular la distancia a la que se encuentra.
Como podemos ver en la gráfica que mostramos a continuación, la respuesta del sensor no es lineal más allá de los primeros centímetros,
por lo que dejaremos para otra entrada, como calcular la fórmula y hacer los ajustes necesarios para calibrar los resultados de forma adecuada.
En la próxima entrada veremos los esquemas de conexión que debemos usar y un sketch simple que nos permitirá evaluar los resultados que podemos obtener con este tipo de sensores.
Publicado por SoloArduino M&M en 15:14 No hay comentarios:
Etiquetas: GP2YA021YK0F, HC-SR04, JST, PH, PinOut, POLULU, sensor infrarrojo, sensor ultrasónico, SHARP

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución