Arduino 2
Arduino 2
Los objetivos principales de la Práctica 9 son recordar los fundamentos mínimos básicos de
regulación automática y aprender más sobre el lenguaje de Arduino, así como de sus salidas
analógicas. Para esto último realizamos dos ejercicios, uno basándonos en el uso de arrays y el
segundo para trabajar con las salidas analógicas.
El primer ejercicio se fundamenta en el visto en prácticas anteriores, las luces del coche
fantástico. En este caso para la definición de las salidas asociadas a los LEDS, utilizaremos un
array para definirlas.
El circuito empleado fue exactamente el mismo que el usado en la práctica 8, para hacer la
función de luces del capó, sin ningún tipo de pulsador ni interruptor tal y como se puede ver a
continuación.
En nuestro caso, utilizamos 7 leds, cada uno de ellos protegido por una resistencia que está
unida a su ánodo, todas ellas conectadas a uno de los pines del Arduino, en esta ocasión desde
el número 2 hasta el 8. Lo único que nos falta es conectar la protoboard a la tensión y masa de
nuestro dispositivo Arduino.
Ahora pasamos a lo serio, el código, que es muy similar al utilizado en la práctica anterior. El que
se utilizó en esta ocasión es el siguiente:
En la primera línea, designamos una variable global para indicar el valor de tiempo de un retardo
que aportaremos a cada LED para que estos se mantengan encendidos un cierto tiempo.
int temp=100;
Posteriormente, designamos una segunda variable global, en nuestro caso se trata de un array
de 7 elementos cada uno de ellos designando a cada una de las patillas empleadas para conectar
los diodos LED.
int LEDS[7]={2,3,4,5,6,7,8};
Ahora, debemos escribir todas las entradas y salidas en el comando setup(). En nuestro caso es
solamente una, el conjunto de LEDS. Para ello crearemos un bucle for que nos coja cada uno de
los elementos del array, empezando en el 0, hasta el último con paso 1.
pinMode(LEDS[led], OUTPUT);
Ahora lo único que nos falta es definir el comando loop(), indicando lo que deseamos que nos
haga el circuito en cada momento. Lo primero es que se enciendan desde el primer LED desde
la derecha hasta la izquierda y que tras un cierto tiempo se apague también de uno en uno. Para
ello definimos un bucle for que comience en el led 0 hasta el led último (el número lo define
sizeof) con paso uno. Dentro de él escribimos para que nos encienda en cada paso el LED
escogido en cada uno de los momentos, lo mantenga un cierto tiempo y se apague.
digitalWrite(LEDS[led],HIGH);
delay(temp);
digitalWrite(LEDS[led], LOW);
Ahora lo que falta es que las encienda y apague en sentido contrario, el código es el mismo, lo
único que varía es el primer elemento y el último.
for (int led=6;led>0;led=led-1){
digitalWrite(LEDS[led],HIGH);
delay(temp);
digitalWrite(LEDS[led], LOW);
Esta fue una pequeña explicación del primer ejercicio a continuación, comenzamos con la
explicación del segundo.
Para la construcción de este circuito necesitamos un LED, cuyo ánodo está conectado a una
resistencia para protegerlo y esta misma a un pin del Arduino, en este caso a la 6 (hay que fijarse
bien y utilizar una patilla con el símbolo ~ que indica que puede ser salida analógica. Además,
necesitamos dos interruptores, el de la derecha es el llamado GENERAL y el de la izquierda es el
de INTENSIDAD, ambos neutros están conectados a una resistencia y a la masa y uno de los
terminales lo está a la tensión de 5V. Ambos están conectados a su vez (antes de la resistencia
se encuentra la conexión) a un PIN para que el Arduino pueda leer su estado.
Ahora pasamos a la elaboración del código que controle el circuito diseñado anteriormente. El
resultado final fue el siguiente:
Lo primero de todo como siempre es la definición de las variables globales, en este caso son 3,
una que diga cuál es el PIN al que conectamos el diodo y las otras dos cada una de ellas asociadas
a cada uno de los interruptores, el General será el 1 y el de Intensidad será el 2.
int LED=6;
int Gen=1;
int Int=2;
Ahora ya pasamos a la sentencia setup(), en esta debemos definir dos entradas, ambos
interruptores, y una salida, el LED. Esto lo hacemos con el siguiente código:
pinMode(LED, OUTPUT);
pinMode(Gen, INPUT);
pinMode(Int, INPUT);
Una vez completado todo esto ya podemos pasar al loop() en el que definiremos lo que nuestro
Arduino debe de hacer en cada momento. Lo primero será crear dos variables locales que nos
guarde cada una de ellas el estado de cada uno de los interruptores, utilizando para ello el
comando digitalRead tal y como se muestra a continuación:
int Readgen=digitalRead(Gen);
int Readint=digitalRead(Int);
Seguidamente, para conseguir que bajo cierta condición el Arduino realice una operación u otra,
utilizamos los comandos if y else, acompañado de cada una de las condiciones asociadas a cada
proceso (que ambos interruptores estén encendidos, que lo esté uno y no el otro o que no lo
estén ambos). Para indicar la intensidad lo que debemos hacer es otorgarle a la salida en vez de
un valor de LOW O HIGH, debemos darle un valor de 0 a 255 que hará que varíe la intensidad.
En este caso hubo la necesidad de utilizar el digitalWrite en vez de analogWrite ya que por
razones desconocidas la operación de hacer que el LED brillara con media intensidad no era
capaz de ejecutarla.
if (Readgen==1 && Readint==0) {
digitalWrite(LED,127);
digitalWrite(LED,255);
else {digitalWrite(LED,0);}