lunes, 2 de enero de 2017

Ejemplos - Basics - BareMinimum





En la entrada de hoy vamos a revisar el contenido del segundo sketch de ejemplo que trae el IDE de Arduino dentro del capítulo Básico, el llamado BareMinimum.

Está disponible dentro de la opción del IDE: Ejemplos > 01.Basics > BareMinimum



Y si cargáis el Sketch veréis que se compone exclusivamente de los dos bloques básicos y mínimos que debemos de contemplar a la hora de componer nuestro sketch, la sección de la configuración inicial, o setup ( ), y la sección del código a ejecutar de forma ininterrumpida,  o loop ( ).




En donde setup() es la parte encargada de recoger la configuración y loop() es la que contiene el programa que se ejecutará cíclicamente (de ahí el término loop –bucle-). Ambas funciones son necesarias para que el programa trabaje.

La función de configuración (setup) debe contener la inicialización de los elementos y esta función sólo se ejecuta una vez justo después de hacer el reset y no se vuelve a ejecutar hasta que no haya otro reset. Es la primera función a ejecutar en el programa y se utiliza para configurar, inicializar variables, comenzar a usar librerías, etc…

La función bucle (loop) siguiente contiene el código que se ejecutará continuamente (lectura de entradas, activación de salidas, etc). Esta función es el núcleo de todos los programas de Arduino y se usa para el control activo de la placa.

La función loop se ejecuta justo después de setup.


Efectivamente, este sketch se corresponde con la mínima estructura para escribir un programa, pero incluso así, hubiera sido adecuado incluir en el mínimo, la opción de comentarios al inicio del mismo. 

Si ves algún sketch, verás partes del código que están escritas en lenguaje humano, es decir, no entendible para el IDE de Arduino. Un buen sketch va siempre acompañado de unos buenos comentarios, es decir, líneas de código que el programa ignorará y que nos servirán, por ejemplo, para describir el funcionamiento del programa de forma global, el por qué de una función, la utilización de unas determinadas variables, etc.

 Recordemos que una línea de comentario comienza por //  y termina con la siguiente línea de código. Al igual que los comentarios de bloque, los comentarios de línea son ignorados por el programa y no ocupan espacio en la memoria, por lo que son las herramientas adecuadas para poder explicar qué tipo de funcionamiento pretendemos implementar en nuestro Sketch de modo que cualquiera pueda entender con facilidad las líneas de códigos que a continuación hemos desarrollado.

Un ejemplo simple lo podemos encontrar en muchos programas disponibles en internet.

Un  par de ejemplos de comentarios en línea lo podemos ver en recuadro azul del sketch Blink mostrada a continuación.



Los comentarios de varias líneas o bloques de comentarios han de estar delimintados por /* al comienzo y por */ al final. Dentro de un bloque de comentarios no se puede especificar otro bloque de comentarios, pues éste acaba cuando se percibe el primer símbolo de cierre */.

Un ejemplo del mismo lo podemos ver en el recuadro negro del sketch Blink mostrado anteriormente.



domingo, 1 de enero de 2017

Ejemplos - Basics - AnalogReadSerial






Con esta entrada comenzaremos a repasar la serie de ejemplos que el IDE Arduino trae instalado para permitirnos aprender a usar las funciones más básicas de nuestro placa.

En este caso vamos a revisar el primer ejemplo de los considerados básicos, relacionados con la lectura de una señal de tensión analógica.


Para esta práctica vamos a necesitar repasar unas cuantas ideas que vimos anteriormente:

  1. ¿Qué es un voltaje?
  2. ¿Qué es la ley de Ohm?
  3. ¿Qué es un divisor de tensión?
  4. ¿Qué es un potenciómetro?
  5. ¿Qué es una señal analógica?
  6. ¿Qué es un convertidor analógico digital?
  7. ¿Cuántos pines tiene nuestro Arduino capaz de leer señales analógicas?

Adicionalmente vamos a necesitar introducir una señal analógica variable por uno de los pines analógicos de nuestra placa.  Para ellos usaremos vamos necesitaremos aplicar lo que hemos aprendido sobre los divisores de tensión.

Sabemos que si colocamos nuestro voltímetro entre dos resistencias conectadas a una diferencia de potencial concreto, el voltaje que mediríamos vendría dado por la formula


Y cómo aplicando la Ley de Ohm al circuito completo sabemos que V= I*(R1+R2), si despejamos I de esta ecuación no quedaría que I= V/(R1+R2), y sustituyéndolo en la ecuación anterior donde V2=I*R2, obtendremos que


Esto que estamos haciendo de forma manual con un polímetro conectado entre los extremos de la resistencia R2, también lo podríamos hacer gracias a los pines analógicos de nuestra placa Arduino.


Por ejemplo, imaginemos que no tenemos un polímetro a mano y queremos conseguir una tensión de 2.5 voltios en nuestra placa, aunque sabemos que los únicas tensiones que suministra son de 5V y de 3.3V. Para ello con lo que hemos aprendido más arriba, podría ser suficiente poner dos resistencias de igual valor (por ejemplo 10K) y coger la tensión en el punto donde se unen ambas. Con ello teóricamente obtendríamos los 2.5voltios, pero para estar seguros de que no nos hemos equivocado, como tenemos una placa Arduino con 6 pines analógicos, conectaremos esa señal a un pin analógico e intentaremos medir el valor con un programita sencillo.

Esto lo podríamos esquematizar de la siguiente manera




Ahora solo nos queda ver cómo podemos ver el valor de voltaje que está midiendo nuestro Arduino. Para ello tendremos que usar una función que se llaman analogRead(), que solo requiere que le pasemos un parámetro (el pin que estemos usando) y te devolverá un valor entero comprendido entre 0  y 1023. El 0 representará a 0 voltios y el 1023 a 5 voltios.



Para entender el porqué de esta traducción de números, es mejor que repaseis el capítulo dedicado a al convertidor analógico digital.

De forma resumida podemos decir que en los pines analógicos de nuestro Arduino UNO, tenemos unos convertidores Analógicos Digitales (ADC) de 10 bits, esto es, que son capaces de trocear los 5 voltios máximos de tensión que son capaces de medir en 2 elevado a 10, o lo que es lo mismo 1024 trocitos.

Ahora solo nos queda escribir un pequeño código para que podamos ver en pantalla, el valor que estamos registrando por el PIN analógico seleccionado (en nuestro ejemplo el A0). Que debería ser algo parecido a 511 (el valor entero más proximo a dividir 1023 entre 2).

Pues bien esto mismo que hemos aprendido aplicándolo a un divisor de tensión, lo podríamos aplicar para medir la tensión de cualquier sensor analógico que tengamos a mano. Solo necesitaríamos que nos suministrara una tensión comprendida entre 0 y 5 voltios, y conectarlo al PIN analógico donde querramos registrar los valores. Algo similar lo podemos simular reemplazando el sensor con un potenciómetro.


Por lo que si ahora conectamos un cable a un pin analógico de nuestra placa Arduino, como pudiera ser cualquiera de los marcados como "Analog In"



podremos leer la señal analógica  a través de un PIN analógico seleccionado.


Y ya sabéis, si tenéis alguna sugerencia o duda, no tenéis más que mandarnos un correo a



e intentaremos responder a vuestra pregunta lo antes que podamos.