martes, 3 de noviembre de 2015

Arduino Shield. Programa 4

Vamos a ver a continuación como generar sonidos con nuestro Shield. En él tenemos conectado un pequeño altavoz al pin 11. Es un altavoz de tipo Piezoeléctrico con una respuesta en frecuencia pequeña, pero suficiente para emitir sonidos de frecuencias comprendidas entre 1 y 5 kHz.

Para generar un sonido debemos tener en cuenta que por el pin correspondiente al altavoz hay que enviar un nivel alto, mantenerlo durante un tiempo, y después enviar un nivel bajo, manteniendolo también durante un tiempo. La inversa de la suma de ambos tiempos es la frecuencia del tono que escucharemos.

Afortunadamente el entorno de Arduino incluye una función que nos simplifica mucho la generación de sonidos. Dicha función es "tone ( )". Y al ejecutarla debemos pasarle como parámetros el pin por el que queremos generar el tono, la frecuencia de dicho tono y la duración que deseemos en milisegundos.

tone(pin, frequency, duration) 

Vamos a ver un ejemplo de como generar un tono de 1 kHz por nuestro pin 11, con una duración de 1 segundo:

// Programa 4
// Generar tono de 1 kHz por el altavoz con 1 segundo de duración

#define pin_altavoz 11              // con esta línea indicamos que pin_altavoz es 11

void setup()
{
pinMode(pin_altavoz,OUTPUT);
tone(pin_altavoz,

}

void loop ()
{

}

Como se puede comprobar, la función que genera el tono la hemos situado dentro de "setup ( )". Con ello conseguimos que solo se ejecute una vez al conectar el Arduino. Si quisiéramos que estuviera todo el tiempo generando el tono la situariamos en la función "loop ( )".

Prueba ahora a escribir un programa que genere continuamente un tono de 1 kHz y 1 segundo de duración, a continuación otro tono de 4 kHz y 1 segundo de duración y una pausa de 2 segundos. Recuerda que como queremos que se ejecute contínuamente debes colocar las llamadas a la función "tone ( )", y el retardo dentro de la función "loop ( )" y así consigues que esté todo el tiempo generando los tonos.



miércoles, 15 de abril de 2015

Arduino Shield. Programa 3

En este tercer programa vamos a ver como podemos enviar datos al display para generar dígitos correspondientes a números. Tal como ya hemos visto, para iluminar uno de los 8 segmentos del display basta con enviar un 1 por la salida correspondiente a dicho segmento. Si volvemos a mirar el esquema de nuestro Shield, los pines a los que se encuentra conectados nuestro display van desde el pin 3 al pin 10. Este último pin es donde va conectado el punto. Y el resto de segmentos (desde el segmento A al G) van conectados, por orden, desde el pin 3 al pin 9. Así que si por ejemplo queremos ver el dígito 1 en el display, basta con iluminar los segmentos B y C enviando un nivel alto por los pines 4 y 5 de Arduino.



El programa correspondiente para poder ver el dígito uno en el display lo tenemos a continuación:

// Prog 3

int n;

void setup() 
   {
  // Configuramos pines del 3 al 10 como salida
  for (n=3;n<11;n++)   pinMode(n, OUTPUT);
 
    }


void loop()
{
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}




Ahora, como propuesta de ejercicio, crea el programa capaz de hacer que aparezcan por el display los dígitos 1, 2 y 3 separados por una pausa de un segundo.

jueves, 9 de abril de 2015

Arduino Shield. Programa 2

Continuamos haciendo pruebas en nuestro Shield. Esta vez vamos a terminar de probar el Display. Para ello vamos a crear un programa que encienda y apague en secuencia cada uno de los segmentos que forman el Display. Y además, que esté todo el tiempo haciendo lo mismo.


Para  hacer esto más sencillo vamos a emplear una estructura de control como es el bucle FOR. Esta estructura nos permite ejecutar una tarea o varias mientras se cumpla la condición que nosotros hemos programado en el bucle. Para ello nos valemos de una variable, la iniciamos con un valor y hacemos que dicho valor cambie (se incremente o decremente) mientras este valor que toma la variable cumpla una determinada condición. En el momento que la condición programada no se cumpla, se termina de ejecutar la tarea o tareas programadas en el bucle FOR. Cada vez que la variable cambie se ejecutarán las tareas programadas.

La construcción de la estructura FOR es la siguiente:
              for (inicialización de la variable; condición ; incremento o decremento)

Esta estructura de control nos va a permitir encender y apagar los segmentos del display con unas pocas líneas de código. Si no la utilizáramos la cantidad de líneas de código sería mayor.

Así es como queda entonces nuestro programa:

/*
PROGRAMA 2
*/

void setup()
    {
       
        for (int n=3;n < 10;n++) pinMode(n, OUTPUT);
    }
   
void loop()
    {
        for (int pin=3;pin < 10;pin++)
        {
            digitalWrite(pin, HIGH);
            delay(200);
            digitalWrite(pin, LOW);
            delay(400);
        }
       
    }

   
Podemos observar que la estructura FOR la utilizamos 2 veces. La primera a la hora de configurar los pines del Arduino donde tenemos conectado el Display y la segunda dentro de la función LOOP ( ).

Como ambas estructuras de control son iguales, la única diferencia es la cantidad de tareas que ejecutan, podemos comprobar como en la inicialización también aprovechamos para declarar la variable. Así iniciamos la variable con el valor 3 (que se corresponde con el pin donde tenemos conectado el segmento "a"), la condición que debe cumplirse para que se siga en el bucle FOR es que la variable sea menor que 10, y el cambio en el valor de la variable será el incremento en una unidad. Por tanto las tareas programadas se realizarán mientras la variable sea menor que 10, y esta variable, cada vez que se ejecuten las tareas, se incrementará en una unidad comenzando por el valor 3 y terminando en el 9.


jueves, 26 de marzo de 2015

Arduino Shield. Programa 1

Vamos a comenzar las pruebas con el shield que hemos construido. Para ello nos vamos a centrar en el pulsador. Como lo hemos conectado al PIN 2, vamos a crear un programa que sea capaz de leer el estado del pulsador y dependiendo del estado de éste, iluminará un segmento del display. El segmento elegido es el correspondiente al punto del display.

Es conveniente ser ordenado en los programas, y documentar cualquier actuación nueva pues nos facilitará una futura revisión de los mismos. Teniendo esto en cuenta, declararemos unas variables que contendrán los números de pin del pulsador, el pin del punto en el display y el estado del pulsador:

    int pin_pulsador = 2;
    int pin_punto = 10;
    int pulsador;

 Una vez que hemos declarado todas las variables, pasaremos a describir los pasos necesarios para la configuración de los pines. Recordad que si vamos a utilizar un pin, debemos decirle a Arduino si queremos usarlo como entrada o como salida. Y todo ello lo situaremos en la función SETUP:

        pinMode(pin_pulsador, INPUT);
        pinMode(pin_punto, OUTPUT);

Observamos que como pretendo utilizar como entrada el pin donde está conectado el pulsador para leer su estado, lo configuro con la primera línea, y si voy a usar el pin donde está conectado el punto del display para enviar datos hacia fuera, debo configurarlo como salida.

Ya está terminada la configuración, ahora pasamos a las tareas que estará realizando continuamente ARDUINO, y que situaremos en la función LOOP:
        
        pulsador = digitalRead(pin_pulsador);
        if (pulsador == 0) digitalWrite(pin_punto, HIGH);
        else digitalWrite(pin_punto, LOW);

La primera tarea consistirá en la lectura del estado del pulsador, para ello usaremos la función "digitalRead" indicándole el pin que deseamos leer, y enviando el resultado hacia la variable pulsador.

En la siguiente línea, se emplea la primera parte de una estructura de control de tipo IF... ELSE. En esta línea se analiza el valor de la variable "pulsador" comparándola con "0" [if (pulsador = = 0)]. En caso de que se cumpla la condición, la acción a ejecutar se encuentra en la misma línea a continuación  [digitalWrite (pin_punto, HIGH)], que consistirá en enviar un estado alto hacia el pin punto del display.

En la última línea se utiliza la segunda parte de la estructura IF... ELSE. En ella colocamos, detrás de "else" la acción a ejecutar si no se cumple la condición analizada en la anterior línea. La acción que hemos elegido nosotros es la de enviar un estado bajo hacia el pin punto del display.

Como todo lo situado en la función LOOP se estará ejecutando continuamente (en un bucle), tendremos que nuestro Arduino estará todo el rato indicando mediante el led punto del display si activamos o no el pulsador.




A continuación tienes el programa completo:

    // Consulta el estado del pulsador, indicándolo mediante el segmento punto del display

    int pin_pulsador = 2;
    int pin_punto = 10;
    int pulsador;
    void setup()
    {
        pinMode(pin_pulsador, INPUT);
        pinMode(pin_punto, OUTPUT);
       
    }
   
    void loop()
    {
        pulsador = digitalRead(pin_pulsador);
        if (pulsador = = 0) digitalWrite(pin_punto, HIGH);
        else digitalWrite(pin_punto, LOW);
    }

viernes, 20 de febrero de 2015

Nueva APP para el control de un Autómata con Arduino

Ya tenemos disponible la nueva versión de la aplicación para Android con la que controlar un Autómata por Bluetooth. Toda la información está disponible dentro de Domótica en este Blog.

Puedes descargar la versión de la APP  aquí

jueves, 5 de febrero de 2015

Construcción de un Shield para Arduino, V

Y para finalizar la construcción de nuestro shield sólo nos falta, colocar en su posición el pulsador y el altavoz junto con sus respectivas resistencias R9 ( 12 k) y R11 (1k). Tambien conectaremos las pistas correspondientes a dichos elementos si es que todavía no lo hemos hecho.


Una vez que hayamos terminado será conveniente repasar por si hemos dejado algún componente sin conectar o si por error hemos provocado un cortocircuito entre dos pistas que no deben tener conexión. Para ello nos podemos ayudar de un polímetro ajustado para medir continuidad.

Si todo ha ido bien, podremos conectar el Shield a nuestro Arduino y comenzar con las pruebas para ver como funciona cada uno de los elementos incluidos.

miércoles, 21 de enero de 2015

Construcción de un Shield para Arduino, IV

Una vez que hemos colocado los conectores, llega el momento de empezar a colocar el resto de los componentes. Vamos a comenzar por el display Led.

Recordad que es muy importante colocarlo en la posición exacta según el dibujo, pues si no tendremos muchos problemas para colocar el resto de los componentes. Fijaos bien en la posición, en la siguiente imagen:


En la misma imagen se pueden ver la posición de las 8 resistencias que lleva el display, y que son de 220 ó 330 ohmios (depende del display). También, en la parte superior izquierda se aprecia la situación del potenciómetro, que será lo siguiente que conectaremos.

El procedimiento a seguir para soldar estos componentes será  el siguiente: 

Primero soldaremos cada uno de los pines del display, y después empezaremos por ir colocando las resistencias de una en una. Para después ir soldando cada resistencia, y cuando la tengamos soldada vamos a cablear las pistas para unir las patillas de cada resistencia con los lugares correspondientes. Comenzaremos por orden, es decir, primero empezaremos con las conexiones correspondientes a R1. Y finalmente terminaremos por R8.

En la siguiente figura podemos ver desde la cara de componentes, la situación de todas las pistas que necesitamos cablear. 


MUY IMPORTANTE: LAS PISTAS SE CABLEAN POR DEBAJO, POR LA CARA DE PISTAS. Y NO SE DEBEN CRUZAR UNAS PISTAS CON OTRAS SALVO QUE APAREZCA EN EL DIBUJO.

A continuación se puede ver el aspecto que debe tener todo el cableado por la cara de pistas:


Los puntos azules donde terminan las pistas son los lugares donde irá una patilla de componente. De momento basta con cablear las pistas que van al display y a las ocho resistencias que lleva.

Cuando hayamos terminado soldaremos el potenciómetro y cablearemos las pistas necesarias para las tres patillas de éste.



viernes, 9 de enero de 2015

Construcción de un shield para Arduino,III

En primer lugar vamos a ver como montar los conectores macho sobre una placa universal de 65 x 53 mm. Como partimos de unos conectores que no se han fabricado para emplear en un shield de arduino, es necesario realizarles una pequeña operación.
Así es como podemos encontrar los conectores originalmente:

Debemos desplazar uno a uno cada uno de los pines que forman el conector hacia un extremo pero sin extraerlos de la pieza guía de plástico, quedando tal y como se puede apreciar a continuación:


Una vez que hayamos conseguido que los conectores tengan los pines desplazados, la siguiente tarea será la de montar los conectores en la placa de circuito impreso. Para ello debemos poner especial cuidado en que vayan exactamente en la posición que puede apreciarse en las figuras que tienes a continuación.






A medida que vayamos colocando los conectores, iremos soldando los pines uno a uno poniendo especial cuidado en no poner mas estaño del necesario.

miércoles, 7 de enero de 2015

Construcción de un Shield para Arduino, II

Este es el aspecto que tendrá nuestra placa ya terminada:



En las próximas entradas iremos viendo como llegaremos a contruirla por completo

Construcción de un Shield para Arduino, I

Para seguir explorando las posibilidades que nos plantea nuestro Arduino vamos a construir un Shield que podemos conectar a nuestra placa Arduino. Una vez construido podremos manejar:
  • Un Display LED de 7 segmentos en el que podremos iluminar cada uno de los segmentos por separado  
  • Un pulsador con el que simular una entrada.
  • Un pequeño altavoz con el que poder emitir sonidos.
  • Un potenciómetro conectado a una entrada analógica que nos permitirá simular cualquier sensor conectado a la misma y dependiendo del valor realizar una acción con nuestro Arduino.
El esquema eléctrico lo podéis ver a continuación y próximamente iré colocando los detalles de la construcción del mismo.