Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Curso de Arduino – Uso de los pines digitales como salida (OUTPUT)

Arduino UNO

Por Félix Maocho
30/4/2016
.

Objetivo de este capítulo

Familiarizarse con la funciones que ya hemos aprendido, acostumbrarse a documentar perfectamente los programas

Material necesario

  • Tarjeta Arduino y cable de conexiones
  • Tarjeta de prototipado o “protoboard”
  • 9 Cables de conexiones macho/macho (preferiblemente 5 cables megros. 2 rojos y 2 azules
  • 4 Resistencia de 220 Ω
  • 4 Leds (preferible 2 rojoa y 2 azules

Conocimientos previos necesarios

  • Uso de la opciones básicas del Menú de inicio de Arduino, que perrnitan escribir, compilar y subir un sketch a la tarjeta Arduino
  • Uso de las funciones del sistema “pinMode”, “digitalWrite” y “delay”
  • Conocer los parámetros estandariza “void”, “OUTPUT”, “INPUT”, “HIGH” y “LOW”
  • Manejar las lineas de comentario (“//”)

Todos estos conocimientos se explican en detalle en el capitulo “Principales opciones del Menú de Inicio de Arduino”

Pines digitales

Los pines digitales son salidas de corriente programables, de forma que a través de un programa podemos hacer   que dejar salir una corriente continua de 5 V. o bien pueden impedir tal salida. En la Tarjeta Arduino Uno tal como se ve en la figura inicial se encuentran situadas en la parte izquierda de la arista superior y viene marcadas como “Digital In/Out Pins”  y tiene escritos con unos numero que van del 0 a 13, o sea que hay previstas 14 salidas programables digitales

En el capítulo anterior hicimos nuestro primer programa que enciende y apaga un led L insertado en la propia tarjeta, que está asociado a lo que ocurre en el Pin13, si por ese pin sale corriente se enciende el led y si no sale se apaga. Si creamos un circuito exterior que nazca en ese pin que contenga un led, también se iluminará y apagará sincrónicamente con el led L.

Lo primero hay que tener en cuenta, es que, aun desenchufada la Tarjeta Arduino, se conserva grabado en su memoria el último sketch que se le introdujo, o como se dice en el argot del gremio se le “subió”. Por tanto, al volver a enchufar la tarjeta a un puerto USB y recibir la corriente eléctrica, el programa que tiene grabado, se reinicia automáticamente desde el principio y vuelve a hacer lo mismo que hacia, en nuestro caso hacer parpadear el pin13.

Si del pin13 sacamos un circuito eléctrico con un led por donde pueda pasar la corriente, este led se encenderá y apagará a la vez que el led L de la tarjeta, pues por ambos lugares, pasa, o deja de pasar la electricidad a la vez. ¿Quiere verlo?

Voy a poner un esquema de lo que he montado para que lo pueda ver mas claramente y en mi opinión, debes construir también este circuito, porque solo experimentando, (y cometiendo errores), se aprende de verdad.

Sketch_1_A_Intermitente_bb

Observen. De el Pin13 parte un cable verde que termina en un punto situado en la misma línea que una de las patas del led blanco, mientras que la segunda pata del led, está pinchada en la línea paralela de la izquierda, que un poco más abajo tiene insertada una pata de una resistencia de 220 Ω mientras que la otra pata acaba en otra linea paralela en la que acaba un cable la blanco que parte de un pin que bien marcado como GND.

Tarjeta Protoboard
Para empezar, hay que saber que es la tarjeta de prototipado o tarjeta protoboard. Es una tarjeta viene plagada de perforaciones donde se pueden enchufar fácilmente los cables y componentes electrónicos sin necesidad de molestas soldaduras, lo que permite armar y modificar fácilmente los proyectos, así como desarmarlos, reciclando sin problemas todos los componentes, lo que a la larga supone un ahorro apreciable de tiempo y dinero, por lo que todos, aficionados y profesionales, montamos en estas tarjetas protoboard, nuestros proyecto y sólamente una vez probados, se trasladan a los equipos definitivos que se están proyectando.

El secreto de la tarjeta protoboard está en su interior, donde unas conexiones comunican internamente los orificios según este esquema.

breadboard_11A cada lado de la tarjeta hay dos líneas paralelas recorren las bandas a lo largo, mientras que en el centro, unas lineas mas cortas perpendiculares unen los orificios del interior en líneas paralelas quedando el centro sin conexión alguna.

Por tanto, a través de estas conexiones internas tenemos un circuito que partiendo un cable verde del Pin 13, enlaza con la pata del led blanco a través de una de las lineas de conexión vertical paralela.

Por su parte la otra pata del led blanco  conecta a través de una linea de conexión paralela a la anterior con una de las patas de una resistencia de 220Ω que con la otra pata  y a través de un linea de  conexión vertical conecta con un cable blanco que finaliza en el pin GMD, apócope de “Ground” (tierra).

O lo que es lo mismo, hemos cerrado un circuito, que parte de un punto capaz de suministrar energía a 5V y acaba en un punto de tierra o 0V.

Resistencia

¿Por qué tenemos que poner una resistencia? – La razón es que el led tiene una resistencia mínima. Si no pusiéramos la resistencia, ocurriría como cuando dos cables eléctricos se conectan sin tener nada por medio, se produce un cortocircuito.

La resistencia limita el flujo de energía. La ley fundamental de la electricidad, o Lay de Hom, indica que

V=R I

donde V es el voltaje, R la resistencia e I la intensidad de la corriente. Si mantenemos V constante, (5 voltio), aumentando R, necesariamente disminuye I. la intensidades de corriente, que así pueden ser aceptadas y absorbidas por la tarjeta. En los circuitos eléctricos que contenían bombillas de filamento tradicionales, no era necesario poner resistencias porque el propio filamento de la bombilla creaba ya la resistencia que se necesitaba para evitar el cortocircuito, pero esto no pasa con los leds.

El led tiene algo de resistencia, como lo tienen absolutamente todos los cables y componentes eléctricos, que en mayor o menor medida dificultan el paso de la corriente, pero su resistencia no es suficiente para evitar un cortocircuito que pudiera dañar la tarjeta, por ello recordar, “Todo circuito que salga de un pin que produzca 5 voltios y muera en la tarjeta en un pin GMD tiene que tener componentes electrónicos que en conjunto tenga al menos 220Ω para evitar dañar la tarjeta”.

El orden como se pongan las resistencia es indiferente porque las resistencias puestas en serie, (unas detrás de otras), suman su resistencias y ya sabemos, que el orden de los factores no cambia la suma igual da 4 +1 que 1 + 4.

suma-de-resistencias-en-serie

Independientemente del orden en que enlacemos estas resistencias el valor de la resistencia total equivalente será 1846 Ω

Suele asemejarse la electricidad a la corriente de agua. donde la diferencia de potencial viene dada por la diferencia de nivel, a mayor nivel, el agua puede realizar un mayor trabajo o tiene mas energía potencial y la resistencia seria el tubo por el que tiene que circular el agua, la resistencia que se oponeg al paso del agua, por ejemplo un tubo mas fino, Indudablemente este tubo frena la energía del agua, si solo deja pasar un fino chorrito, podrá hacer menos trabajo que si deja pasar el doble de caudal.

Aunque varían de forma, el aspecto tradicional de una resistencia es como muestra la siguiente imagen y el símbolo convencional que se utiliza en los esquemas eléctricos es una linea quebrada

Resistencia-Electricaresistencia 2

Para saber de cuantos homios, (Ω) tiene una resistencia, hay que conocer el código de colores con el que se marcan. Los códigos de colores son como siguen:

Lo primero tenemos que saber colocar de derecha a izquierda correctamente la resistencia para leer las bandas de color en el orden correcto. Hay una serie de bandas de color igualmente distanciadas y otra un poco mas separada, (en ocasiones son dos). La separada debe quedar a la derecha.

Hecho esto las líneas del lado izquierdo que son tres o cuatro, las primeras por la izquierda son cifras de acuerdo con el código de colores y la última por la derecha de la serie es el número de ceros que siguen.

Resistencias

Por ejemplo la resistencia de la imagen que pusimos mas arriba tiene las, siguientes, lineas, marrón, negro rojo y dorado que significa

  • marrón = 1
  • negro = 0
  • rojo = 00
  • dorado = 0,5%

o sea es de 1000 Ω con una tolerancia del 0,5% es decir fluctúa entre 995 Ω y 1005 Ω

La que vamos buscando son de 220 homios (aprox.), que son las suficientes en nuestro caso para rebajar los cinco voltios a tres, que son los que necesitamos. O por tanto tendrá´las siguientes bandas de color:

  • 2 = rojo
  • 2 = rojo
  • negro = Un solo 0 o sea 220 homios

y una tolerancia que puede variar según la calidad de la resistencia pero que en este caso nos es indiferente. Como ven la cosa es un poco confusa, por eso quizá más practico, al menos en nuestra etapa de principiantes , sea asegurarse que es la correcta midiendo con el polarímetro los homios que tiene, pero como de momento no tiene polarímetro se tendrá que valer de este sistema.

Yo habitualmente como reciclo todas las resistencias las suelo marcar con una etiqueta auto adhesiva tipo APLI que corto al tamaño adecuado, que indica la el valor de la resistencia en homios. no se si se aprecia en el video pero tiene unas banderolas de papel que pone que son de 220 (se sobrentiende Ω).

El polarímetro será de las cosas que entraran en la próxima lista de la compra que hagamos, pero antes de gastar más dinero, conviene saber si realmente nos entra la afición a Arduino, pues no es cuestión de comprar cosa para que terminen en un cajón, así que no se apresure a comprarlo lo dejamos en la lista de la compra pendiente y ya le indicare yo el momento adecuado para comprar mas cosas con que seguir explorando este mundo de la robótica o abandona el estudio porque no le va.

Lo más cómodo una vez identificado el valor de la resistencia es marcarla de forma más visible Yo suelo ponerlas una etiqueta autoadhesiva tipo APLI que venden en las secciones de papelería en la que claramente escribo los homios que tiene la resistencia.

Diodo

Led son las sigla de la expresión inglesa light-emitting diode, ‘diodo emisor de luz’, o sea un diodo que emite luz. Pero ¿qué es un diodo?

Pues una válvula que permite el paso de la corriente en un sentido, pero no en el otro. Algo parecido pero en digital, a la válvula de la las ruedas, permiten que el aire del compresor al interior de la rueda, pero no en dirección contraria, impidiendo con ello que el aire de la rueda se escape nuevamente.

Y ese es el uso que se suele dar en los circuitos eléctricos, permitir el paso de la corriente en una determinada dirección, pero no en la contraria. Por ejemplo, el Pin13 de nuestro ejemplo esta preparado para emitir electricidad, pero no esta preparado para recibirlo, pues le hemos puesto como OUPUT (salida) y no INPUT (entrada), si hubiera el riesgo de que por el cable que va al pin 13 pudiera circular corriente en dirección contraria, colocaríamos un diodo para evitar que pasara. Es algo muy corriente, porque en este tipo de circuitos, se generan corrientes parásitas que corren por donde pueden a poco que te descuides incluso a contramano.

Los diodos mas comunes en la actualidad, son un semiconductor conectada a dos terminales eléctricos. De forma simplificada, si el voltaje esta por debajo de cierta cantidad en una dirección se comporta como si fuera aislante (no deja pasar la corriente), y en la otra como una resistencia eléctrica muy pequeña que permite el paso de la corriente sin dificultad.

Debido a este comportamiento, se les suele denominar rectificadores, ya que son dispositivos capaces de suprimir lo que pudiéramos denominar el “retroceso” de la energía.

En esencia un diodo esta formado por dos partes en contacto de materiales diferentes, uno es de tipo P, con abundantes electrones libres en la capa externa y otra de tipo N, deficitaria de electrones libres y que por lo tanto tiende a capturarlos.

000260741

En la frontera entre los dos materiales llamada “Región de Agotamiento” se acumulan los electrones libres atraídos por los huecos existentes en el otro material, por lo cual, a los efectos el material tiene ausencia de electrones portadores por lo que el aparato en conjunto actuaría como un material mal conductor de la corriente.

diodo2

Si en estas condiciones aportamos al extremo de N electrones mediante una corriente eléctrica, parte de los huecos existentes se moverán hacia ese aporte de electrones liberando los electrones de la parte P generándose una corriente eléctrica, aunque siempre se pierda parte de la energía, de forma parecida como se pierde en una resistencia eléctrica.

diodo3

Si por el contrario la corriente eléctrica pretende atravesar por el lado P, se refuerza aún más la Región de Agotamiento y el aparato resulta a los efectos aun más aislante de la corriente.

Por tanto de un diodo debemos tener en cuenta las siguientes características que debe indicar el fabricante:

El voltaje máximo aplicable al componente, tanto para impedir el paso de corriente, (si se aplica mas voltaje, el diodo colapsa y deja pasar la corriente en ambas direcciones) y el voltaje de trabajo en la dirección favorable al paso de la corriente (VRRR máx y VR máx). que ha de ser tres veces mayor, como mínimo, que el máximo voltaje que se espera que soporte en neutro circuito.

La Intensidad de la corriente máxima tanto en sentido directo como en el contrario, que puede atravesar al componente, (IFRM máx e IF máx), que ha de ser como el doble de la máxima intensidad de corriente que se espera que soporte en neutro circuito.

Por tanto queda claro que los diodos hay que colocarlos en un sentido determinado en nuestros circuitos y superar holgadamente las perores condiciones de trabo que puedan esperarse. La corriente ha de fluir del ánodo (+) al cátodo (-). Es decir el ánodo (+) debe “mirar” en la dirección que tiene el voltaje más alto y el cátodo(-) hacia la tierra (GMD)

Por esta razón en los esquemas, su icono tiene una punta de flecha que indica la dirección en que dejan pasar la corriente, pero además tenemos que poder distinguir, como veremos que ocurre en los LED, que patilla del diodo hay que orientar hacia la corriente de 5 Voltios y cual hay que orientar hacia tierra. Para distinguirlo, los diodos suelen tener impresa una banda blanca o negra pintada en el cátodo (-) o extremo que debe apuntar a tierra (GRD) ,

diodo4200px-Dioden2

Los diodos no tienen formas tan específicas como las resistencias, pongo unas imágenes de las formas más representativas que suelen tener.

Leds

Retomamos la definición de led. Led son las sigla de la expresión inglesa light-emitting diode, ‘diodo emisor de luz’, o sea un diodo que emite luz

Como indicamos, un diodo siempre supone una cierta resistencia, o lo que es lo mimo que partee de la energía eléctrica se disipa en otra forma de energía. Los diodos habituales lo hacen en forma de calor, o sea radiaciones del espectro por debajo de las radiaciones luminosas, pero hay unos diodos específicos, los leds, que esa disipación de energía se trasforma en una radiación de una determinada longitud de onda visible característica de laa substancias con que está fabricado.

Según sea las longitudes de onda que emitan la luz emitida será de un color o de otro y está a su vez dependerá de la sustancia química que componen las partes P y N del Led. Lógicamente, para que la luz pueda escapar del led, este viene encapsulado en una sustancia transparente a la luz, generalmente de plástico, pues al emitir radiaciones luminosas, pero no infrarroja, el led es un elemento esencialmente frío y no funde el plástico.

leds de coloresCon frecuencia, los leds se encapsulan en plásticos coloridos con el color que emiten, con lo que es fácil distinguir un led blanco, (transparente), rojo , verde, naranja, …. como se ve en esta foto.

El plástico coloreado, filtra el paso de la luz solar, impide el paso de diferentes longitudes de onda, dejando pasar únicamente determinada frecuencias, con ello el plástico se ilumina de color, pero esto no es necesario en un led, porque el led únicamente produce determinadas radiaciones, por lo que su luz a diferencia de la del sol, que envía todas las longitudes de ondas que en conjunto lucen blanco, solo emite unas pocas radiaciones, las que corresponden a los materiales con los que se ha construido, por lo que ya nacen coloreadas, por eso, muchas veces, y mas aun en los led baratos, el encapsulamiento es transparente, (no filtra a luz), y cuando están apagados no hay forma de descubrir el color del led, hasta que este no comienza a emitir luz.

Los led como diodos que son, sólo dejan pasar la corriente continua en una determinada dirección del ánodo (+) al cátodo (-). En este caso no pintan una banda en el cátodo, (que seria lo razonable), sino que dejan el ánodo , ligeramente mas largo que el cátodo.

Cuando los led transparentes, yo los suelo pegar en la pata más larga, a semejanza de lo que hago con las resistencias, una pequeña banderola, hecha con una etiqueta autoadhesiva en el que escribo el color que emite, así, no solo sé cual es el color que emiten, sino la pata que tengo que poner mirando a los 5 voltios y la parta que mirara a tierra (GMD).

Cada led genera un color muy definido que es el generado por las diferentes radiaciones de onda que despiden la sustancia con la que están creados, el primero que se invento. emitía luz roja y por ejemplo, le solemos encontrar en el sensor de movimiento de los ratones ópticos, pero ha sido tan difícil conseguir encontrar leds que emitan longitudes de onda diferente, que nada menos tres físicos, fueron galardonados en el 2014 con el Nobel, por descubrir el led azul, que era uno de los que mas se resistieron.

Descubierta esta sustancia, solo fue cuestión de tiempo conseguir mezclas adecuadas en los leds que emitieran en la debida proporción los colores fundamentales, para que obtener lo largamente perseguido, leds de luz blanca, que han supuesto una revolución en el mundo de la iluminación.

En el siguiente vídeo, verán cuatro leds, aparentemente iguales cuando están apagados, sin embargo los de los extremos emiten luz roja, mientras que los dos del centro emiten luz azul, algo que se pone en evidencia, tan pronto como la corriente eléctrica pasa por su interior

En el esquemas el led se representa como lo que es un diodo al que se le añaden dos flechillas que asemejan la luz que desprende

No me resisto a poner una esquema de las partes que componen un led para que comprendas la complejidad que tiene su fabricación y lo asombros que es este mundo de lo digital, que pese a ello permite su coste no supera habitualmente los 0,3 cents de euro.

simbolo_ledcomposivcion LED

Ejercicio

A continuación les explico el programa que hace que los leds se enciendan y apaguen como se ha visto en la película. Concretamente lo que hacem las luces es lo siguiente:

* 1º Encender las luces de un extremo al otro y volver, secuencia leduno, leddos, ledtresl ledcuatro, ledtres, leddos, leduno, en colores rojo, azul, azul, rojo, azul, azul, rojo,
* 2º Encender de los extremos y luego los del centro y repetir tres veces.
* 3º Encender todos los leds uno tras otra y apagarlas en el mismo orden.

Comenzamos por poner el esquema de Hardware que he creado para ello.

Hardware necesario

Sketc_2_Juego de leds_bb

Como ven en la imagen es el mismo montaje repetido cuatro veces que vimos al inicio del programa. De los pines 6, 7, 8 y 9 parten unos cables, que van a parar a la pata más larga, (cátodo +), de un led que a su vez conecta con una resistencia de 220 Ω cuya otra pata atraviesa el centro de la protoboard, para unirse del otro lado mediante un cable al bus qye esta unido a tierra (GMD).

Se observa que cualquiera de los pin digitales marcados de o a 13 puede ser utilizado como fuente de una corriente de 5 Voltios y como cada pin se puede por programa activar o apagar, resulta sencillo tener el control de los componentes situados en el circuito que parte de estos pines. En este caso hemos utilizado como pines de salida los pines marcados como 6, 7, 8 y 9 que alimentan respectivamente dos leds rojos colocados en los extreemos y dos azules colocados en el centro.

Observen también que en este caso se pueden hacer terminar todos los circuitos unidos en un mismo pin GND, por el sencillo procedimiento de hacer acabar los diferentes circuitos en uno de los buses de la protoboard y unire este bus a un pin GND. Pudiera ser que por estos cables amarillos circulen corrientes parásitas pues cuando un led esta encendido se conecta a través del bus con los demás circuitos , pero como los leds son diodos, no dejarán pasar estas corrientes con lo que los pines abierto como OUPUT están a salvo de recibir descargas.

Software

El programa que hace lucir de esa forma los leds resulta ser tan largo que no cabe en la pantalla del Menú de Inicio de Arduino, así que lo presentaos en cuatro pantallas consecutivas, pero en la realidad está todo escrito en una única pantalla y el “ascensor” que está a la derecha de la pantalla hace “subir” el texto que queda oculto.

SKETCH 2.1
SKETCH 2.2
SKETCH 2.4

SKETCH 2.32

Lo primero que vemos es un programa mucho más largo que el anterior, pero, puedo asegurar que esto, no es nada comparado con lo que puede llegar a ser un programa de cierta complejidad, Por eso conviene ser sumamente ordenado, Pese a que parezca que perdemos el tiempo haciendo bien las cosas desde el principio nos ahorramos mucho esfuerzo.

Mírenlo sólo por encima. Quizá aun no sepan entender la mayor parte de lo que dice, porque hemos aplicado algunos cambios, que son lo que diferencian un buen programador de un chapucero. Procedamos por partes para que vaya entendiendo todo lo que pone.

Comentario de cabecera

Si quieren, vean nuevamente el video que les puse al principio y verán que el programa enciende y apaga los led de tres forma diferentes de forma consecutiva y vuelve a repetir el proceso. Por tanto lo que pretende este programa es controlar el encendido y apagados de los leds, cada uno conectado a un pin diferente, de modo que se haga de tres formas diferentes

  • 1º Encender las luces de un extremo al otro y volver hacia el otro lado de la misma forma
  • 2º Encender de los extremos y luego los del centro y repetir tres veces
  • 3º Encender todos los leds uno tras otra y apagarlas en el mismo orden

Repetir el ciclo

Es decir, exactamente lo que dicen las primeras lineas del sketch

/* Sketch 2 Juego de luces con cuatro leds
*
* 1º Encender las luces de un extremo al otro y volver
* 2º Encender de los extremos hacia el centro y volver
* 3º Encender todas una tras otra y apagarlas en el mismo orden
* Repetir el ciclo
*/

Párrafo de comentarios  */…. /*

Esto es un comentario para que lo entiendan quienes hacen los programas, los humanos y explica lo más extractado que se pueda lo que hace el programa.

Hasta ahora, habíamos visto los comentarios que se escriben con dos barra inclinadas (//), estos comentarios son para una sola línea, pero si queremos escribir un párrafo, se utiliza otro juego de caracteres para que el compilador salte lo que hay escrito ese párrafo Los juegos de caracteres en lugar de las dos barras (//) son (/*) al inicia el párrafo y (*/) para acabar.

Dentro de estos dos juegos de caracteres, se puede escribir lo que quieras sin que la máquina lo tenga en cuenta. El que cada fila comience por un asterisco (*) no es obligatorio, pues lo que hay entre (/*) y (*/) le es indiferente al programa, (i siquiera lo compila y l pasa a la tarjeta), pero se suele hacer para resaltar mas y el texto del comentario.

Lo normal es como mínimo, lo que hacemos en este caso, escribir el titulo del sketch y una pequeña descripción de lo que hace. Con frecuencia añaden otros datos que ayudan a mantener cierto orden, como el número de la versión o la fecha de la última modificación, que puedan ayudar a saber cual de las distintas versiones que tienes guardadas es la más moderna.

Os encontrareis que en poco tiempo tienes en tu ordenador montones de programas y versiones diferentes del mismo programa y te va a costar distinguir cuál es la última versión entre un montón de ficheros casi iguales. Ya veremos poco a poco lo que añadimos en esta sección, de momento, quedate con la copla de que aquí se escribe todo lo que te vendrá bien conocer cuando vuelvas a ver el programa, quizá dentro de unos años, o incluso puede que quien lo quiera comprender, sea otro diferente a quien lo hizo, como ocurre en este caso.

Área de definición de variables y parámetros

A continuación del comentario de cabecera encontramos la ya conocida línea de comentarios que encabezada por las dos barras (//), que dice

// Área de definición de variables y parámetros

Aparte de las obligatorias funciones “void” y “loop” previo a ejecutar al programa tenemos que indicar a la máquina todos aquellos parámetros y variables que vamos a utilizar.

¿Y que son parámetros y variables? – Son nombres simbólicos que adquieren valores que posteriormente se utilizan en el programa.

Parámetros

De los parámetros he hablado en el capítulo anterior al explicar lo que era una función. El parámetro era un valor que que se utilizaba en una función que hacia que esta actuar de forma diferente de acuerdo con el valor del parámetro.

Hasta ahora hemos utilizado funciones que utilizaban parámetros estándar como “HIGH” o “OUTPUT”, que no hay que explicar al sistema los que son e indican, porque son propios del sistema y números como el “13” para indicar el pin que queremos utilizar, o “1000” para indicar a la función “delay” que retarde el proceso 1000 milsegundos, pero también podíamos haber introducido un parámetro para traspasar estos valores, con tal que el parámetro tome valor antes de utilizarlo en la función.

Por ejemplo en vez de “pinMode (13, HIGH)” podíamos haber escrito:

pinMode (pinconluz , HIGH)

siempre que previamente hubiéramos informado al sistema que “pinconluz” es un numero entero al que en algún momento le asignamos el valor 13

Igualmente en vez de escribir “delay(1000)” podíamos haber escrito  delay(pausa) siempre que previamente hubiéramos informado al sistema que “pausa” es un numero entero y que en algún momento antes de utilizarlo en “delay” le asignamos el valor 1000

Función “int”

Precisamente eso es lo que hacemos en el “Área de definición de variables y parámetros”. La función “int” informa al sistema que vamos a utilizar un número entero mediante la siguiente sintaxis

int nombre = valor

Donde “int” (integer =entero) es el nombre de la función estándar que informa que el parámetro que vamos a definir es un numero entero, (otras funciones estándar similares informan de los parámetros que son de otra naturaleza como textos, (por ejemplo “apellido) o números decimales como los números pi, e), y además ese entero se encuentra comprendido entre –32,768 y 32,767, o sea entre –2^15 y (2^15) – 1.

“nombre” es el elegido por el programador para dar a ese parámetro. Puede ser cualquier nombre pero aconsejo que siempre se utilicen minúsculas y sea fácilmente relacionarle para el uso que se le va a dar.

“valor” es un numero entre cualquiera -32,768 y 32,767 que decidimos que va a tomar el parámetro

Variables

Variables, son exactamente igual que los parámetros, Su única diferencia es que mientras los parámetros conservan invariable su valor durante todo el programa, las variables, como su nombre indica, pueden variar de valor a lo largo del programa. Supongamos que un sensor toma la temperatura de un vaso con agua y la guarda en la variable “temperatura” y la introduce en el sistema para regular un termostato. Indudablemente, el valor de la variable “temperatura” puede variar y tomar cualquier valor entre los que pueda fluctuar la temperatura del agua, Para que el sistema lo comprenda definiremos la variable igual que si fuera un parámetros, y la daremos cualquier valor de inicio, pues el programa ya se ocupará de cambiarlo. (esto lo veremos mas adelante así que ahora no me complico más).

Así pues, en este “Área de definición de variables y parámetros” definiremos ”temperatura” de la que sabemos con seguridad que variara, pero siempre dentro del rango comprendido entre -32,768 y 32,767 de la siguiente forma.

int temperatura = 0

Como ven exactamente igual que si fuera un parámetro, sólo que el valor inicial que le damos, puede ser cualquiera, generalmente el valor que deba tener la primera vez que se utilice, porque el que vaya a tener se lo adjudicará el sensor de temperatura, (o termómetro), cuando mandemos al sistema leerla.

Limites de los valores de “int”

La pregunta obligada es, ¿Porque hay esos límites tan absurdos de –32,768 y 32,767? –

Como saben, la maquinas digitales solo funcionan con bits que pueden tener solo el valor 0 o 1, (realmente cargado o no cargado), por tanto, se acude a un truco para escribir números mas grandes que es descomponerlos en potencias de 2,

Cada numero solo tiene una descomposición posible. Se entiende que un O quiere decir que ese número en su descomposición, no utiliza esa potencia y un uno que si la utiliza. Pongamos un ejemplo, el numero 36, es igual a (0x1)+(0x2)+(1×4)+(0x8)+(0x16)+(1×32) o sea que solo utiliza las potencias (2^2) y (2^5) por tanto se escribirá (de derecha a izquierda, como lo árabes , y utilizamos 16 bits (o lo que es lo mismo 2 bytes u octetos) Así que el 36 se escribirá

1000000000010010

el 1 del extremo izquierdo indica que es positivo, si fuera negativo sería un 0. Así que hay dos formas de escribir el cero, pues valen lo mismo -0 que +0

00000000000000 ó 100000000000000

Igualmente los número mas bajo y el más alto que podemos escribir son:

01111111111111111 y 11111111111111111

o sea el -32,768 y 32,767

Y que hacemos cuando queremos escribir números como 47,623 pues utilizar otra función que no es int que utiliza para guardar los números 32 bits (4 bytes) y que por lo tanto puede guardar números entre –2,147.483.648 y 2.147.483.647

Claro esta también se pueden guardar un entero y muchos decimales multiplicado por cualquier potencia de 10 con lo cual no podemos directamente guardar un numero inmenso pero si una aproximación con 16 dígitos representativos.

Todo esto viene de antes cuando la memoria era muy cara y se escatimaba, hoy carece de sentido en un ordenador normal, pero la tarjeta Arduino no es un ordenador normal solo tiene 32k (32000 bits)de memoria frente a Gigas y Teras que tenes en cualquier PC por lo que aquí si conviene ahorrar de lo que se pueda. Con todo es provisional pues por ejemplo el Arduino Due, guarda por defecto todo a 32-bit (4-byte) por tanto ahí un parámetro definido con “int” soporta núneros en el rango de -2,147,483,648 a 2,147,483,647.

Todo esto lo anticipo a modo de “cultura digital” lo único que es importante es que te quedes con que en Arduino UNO, (y por “si acaso” en cualquier Arduino), “int” solo vale para parámetros que van a contener números enteros positivos o negativos menores de 30.000, lo cual por otra parte, en la mayoría de los casos es más que suficiente, (pero en una minoría de casos no lo es)

Bien, visto esto ya estamos en condiciones de entender todo el contenido del “Área de definición de variables y parámetros”. Recordemos lo que ponía

// Área de definición de variables y parámetros
int leduno = 6;
int leddos = 7;
int ledtres = 8;
int ledcuatro = 9;
int tiempo1 = 1000; // separación entre luces consecutivas
int tiempo2 = 3000; // intervalo entre cada juego de luces

Hemos definido una serie de parámetros de nombre “leduno”, “leddos”, “ledtres” y “ledcuatro” con valores 6, 7, 8, y 9 que claramente apuntan a utilizar los pines de esos números para encender los led con el color indicado y ademas dos parámetros llamados “tiempo1” y “tiempo2” que según el comentario que acompaña a la función son la separación de tiempo entre dos luces consecutivas y el intervalo entre cada juego de luces. Por ejemplo para el parámetro de parada si puede hacer falta valores mayores de 30.000, pues una hora son 60x60x1000=1.600.000 claramente superior a 30.000. en este caso necesitaríamos declarar un parámetro de doble precisión que otro día veremos como se hace.

¿Por qué se utilizan parámetros?

Y puede que te hagas otra pregunta para que voy a definir la función “delay” así;

delay (tiempo1)     si puedo definirla así     delay(1000)

pues aunque no te lo parezca, para ahorrar tiempo y evitar errores. Te pongo este caso, veras que en “loop” se utilizan repetidas veces tanto la función “delay(tiempo1)” como la función “delay(tiempo2)” Imaginate que acabamos el programa y al probarlo descubrimos que las luces van demasiado rápidas o demasiado lentas, o que la separación entre juegos de luces es confusa, basta entra en el programa y en el “Área de definición de variables y parámetros” y cambiar los valores que había por otros más pequeños o más grandes para que automáticamente la función acelere o ralentice el encendido y apagado de las luces.

Cuando tienes un programa, medianamente complicado, buscar todos los posibles sitios donde se utiliza un parámetro, no es sencillo, incluso en este programa “tiempo1” se utiliza repetidas veces, aun siendo fácil de localizar, es mas sencillo cambiar el valor en UN SOLO PUNTO que en media docena, eliminamos con ello la causa de errores y en cualquier caso, una perdida de tiempo, ten en cuanta que a la hora de ajustar definitivamente el programa puede que hagas seis o siete pruebas diferentes hasta dar con la velocidad de cambio de luces que te satisface.

Igual pasa con los pines, puede que sobre el papel todo vaya muy claro pero a la hora de la verdad al montar el aparato los cables se entrecruzan y conviene mas que lo que habíamos dicho que controlara el pin 6, lo haga el 12, y viceversa, pues lo montas como te viene bien y en el programa cambias en “Área de definición de variables y parámetros· el 6 por 12 y el 12 por el 6 y todo seguirá marchando tan bien como antes.

Sólo falta una cosa no olvidar el final de línea (;) detrás de cada una de las lineas que hemos creado. Y otra incongruencia aquí el área no se delimita con llaves ({ … }), como en el caso de las funciones. porque aquí no hay una función general que agrupe la definición de parámetros y variables.

Función “setup”

Ya debería ser capaz de comprender el significado de

// Función setup

void setup() {
// Pines abiertos como OUTPUT
pinMode(leduno, OUTPUT);
pinMode(leddos, OUTPUT);
pinMode(ledtres, OUTPUT);
pinMode(ledcuatro, OUTPUT);
}

Simplemente hemos indicado al sistema que utilizaremos los pines  que se corresponden con el valor de los parámetros  “leduno”, “leddos”, “ledtres” y “ledcuatro” de “OUTPUT” (Salida) por lo que los pines físicos que indiquen los valores de esos parámetros, (en nuestro caso 6, 7, 8 y 9), quedan capacitados para emitir energía a 5 voltios

Función loop

La función loop resulta muy larga pero es muy sencilla y deberias estar ya en condiciones de comprenderla, porque solo utilizo las funciones ya conocidas “digitalWrite” y “delay” salvo que las utilizo con parámetros que adquiriron valor en el Área de definición de variables y parámetros :

Para estudiarla mejor la vamos a dividir en tres trozos según el juego de luces que se realizado

Primer juego de luces

Hace que se enciendan y se apaguen las luces de un extremo a otro segu la secuencia  roja, azul, verde y blanca y en sentido contrario

// 1º hace ir desplazándose la luz cada timpo1 de un
// extremo al otro ida y vuelta y para después timpo2
digitalWrite(leduno, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(leddos, HIGH);
delay(tiempo1);
digitalWrite(leddos, LOW);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(ledtres, LOW);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
// vuelta
digitalWrite(ledcuatro, LOW);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(ledtres, LOW);
digitalWrite(leddos, HIGH);
delay(tiempo1);
digitalWrite(leddos, LOW);
digitalWrite(leduno, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
delay(tiempo2);

Esta parte no presenta ningún secreto, enciende y apaga cada uno de los leds del leduno a ledcuatro y vuelve encendiendo consrcutivamte los led  hasta lacabr en el led uno . Cada e led se entiene encendido un tiempo “tiempo1” ante de apagarse ydar paso al encendido del siguiente, (casi), simultáne y finalizado el proceso hace la pausa de separacion entre juegos de luches que dura “tiempo2”

2 Juego de luces

// Función loop
void loop() {
// 1º hace ir desplazándose la luz cada timpo1 de un
// extremo al otro ida y vuelta y para después timpo2
digitalWrite(leduno, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(leddos, HIGH);
delay(tiempo1);
digitalWrite(leddos, LOW);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(ledtres, LOW);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
// vuelta
digitalWrite(ledcuatro, LOW);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(ledtres, LOW);
digitalWrite(leddos, HIGH);
delay(tiempo1);
digitalWrite(leddos, LOW);
digitalWrite(leduno, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
delay(tiempo2);
// 2º enciende de los extremos hacia ay centro y vuelta
// y repite tres veces el cambio
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
digitalWrite(leddos, HIGH);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(leddos, LOW);
digitalWrite(ledtres, LOW);
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
delay(tiempo1);
// segunda vez hace lo mismo
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
digitalWrite(leddos, HIGH);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
;digitalWrite(leddos, LOW);
digitalWrite(ledtres, LOW);
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
delay(tiempo1);
// Repite la tercera vez igual
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
digitalWrite(leddos, HIGH);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
;digitalWrite(leddos, LOW);
digitalWrite(ledtres, LOW);
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
delay(tiempo2); // tiempo2 para separar los juegos de luces
// 3º Se encienden todas una detrás de otra
// y luego se apagan una detrás de otra
digitalWrite(leduno, HIGH);
delay(tiempo1);
digitalWrite(leddos, HIGH);
delay(tiempo1);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
delay(tiempo1);
digitalWrite(leddos, LOW);
delay(tiempo1);
digitalWrite(ledtres, LOW);
delay(tiempo1);
digitalWrite(ledcuatro, LOW);
delay(tiempo2);
}

Primer juego de luces.

 

// Función loop
void loop() {
// 1º hace ir desplazándose la luz cada timpo1 de un
// extremo al otro ida y vuelta y para después timpo2
digitalWrite(leduno, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(leddos, HIGH);
delay(tiempo1);
digitalWrite(leddos, LOW);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(ledtres, LOW);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
// vuelta
digitalWrite(ledcuatro, LOW);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(ledtres, LOW);
digitalWrite(leddos, HIGH);
delay(tiempo1);
digitalWrite(leddos, LOW);
digitalWrite(leduno, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
delay(tiempo2

Lo que hace es encender primero la luz roja y¡un tiempo corto, tiempo1, luego la apaga y simultáneamente enciende la luz azul, y así sigue hasta finalizar las cauro luces, comenzando la vuelta apagando el extremo y encendiendo a contigua hasta finalizar. Acabado espera y un tiempo mayor tiempo2.

Nada hasta el momento que no supiera hacer, pero que da idea de la flexibilidad del sistema para poner en marcha y parar cualquier tipo de actuador, o aparato capaz de actuar, como luces, sonidos, motores, resistencias, etc. , de ahí el nombre de tarjeta controladora, desde ella se puede centralizar el funcionamiento de muchos aparatos.

Segundo juego de luces

Enciende a la vez los dos leds de los extremos, luego los apaga y enciende las dos del centro, Repite la misma acción tres veces.

// **********************************************
// 2º enciende de los extremos hacia ay centro y vuelta
// y repite tres veces el cambio
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
digitalWrite(leddos, HIGH);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(leddos, LOW);
digitalWrite(ledtres, LOW);
// ****** segunda vez hace lo mismo
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
digitalWrite(leddos, HIGH);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
;digitalWrite(leddos, LOW);
digitalWrite(ledtres, LOW);
// ***** Repite la tercera vez igual
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
digitalWrite(leddos, HIGH);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
;digitalWrite(leddos, LOW);
digitalWrite(ledtres, LOW);
delay(tiempo2); // tiempo2 para separar los juegos de luces

No presenta ninguna dificultad solo quería resaltar que varios pins se pueden abrir y cerra (casi) simultáneamente. Y añado nuevamente casi, porque cada pin se enciende en un ciclo diferente del reloj interno que controla el procesador, por tanto, si formalmente no podemos decir que el encendido es simultáneo , prácticmente somos incapaces de apreciar la diferencia de tiempo transcurrido entre dos encendidos consecutivos.

Uso del copy/paste para programar

Al escribir un programa podemos utilizar , (y acosejo hacerlo), el copy/paste, copiar y pegar, o CtrlC/CtrV, como queramos llamarlo, para repetir párrafos o líneas sensiblemente iguales, para modificar lo que sea preciso posteriormente, pues ello permite ahorrar muchos errores de escritura, siempre claro está, que antes de copiar el párrafo, lo revisemos con cuidado para eliminar todos los errores que pudiera contener. En este caso un conjunto de funciones se repite casi igual tras veces, solo cambia el tiempo de parada final

¿Cuantos pines se pueden encender a la vez?

Este juego es muy parecido al primero pero ahora dejando encendidos dos leds. He puesto este juego para que vean las posibilidades que tiene el sistema, limitado mucho más por nuestra limitación de concebir usos, que por lo que realmente no puede hacer.

La tarjeta Arduino UNO es limitada, las hay más potentes, pero centrándonos en este modelo las especificaciones dicen que la tensión máxima que puede entregar cada pin es de 40mA, pero esto solo vale para momentos puntuales, por ejemplo para lanzar una señal de emergencia al máximo volumen, en trabajos habituales la intensidad recomendado es de 20mA, No es conveniente forzar los límites de potencia de forma prolongada, la placa podría calentarse y dañarse.

Límite de energía que se puede obtener de un pim de Arduino

El límite de 20 mA por salida significa que, para un voltaje de 5V, la resistencia del dispositivo que queramos alimentar no debe ser inferior a 200 Ω, yo , (porque así lo he visto en todas partes) si hay un led que tiene más o menos Ω de resistencia le acompaño de una resistencia de 220 Ω

Límite de la energía que se puede obtener de la tarjeta

Por otra parte hay una limitación en cuanto a la suma total de toda la energía entregada por todo tipo de salidas de la tarjeta que debe ser inferior a 300 mA.

De aquí se deducen dos limitaciones no podemos utilizar mas de 15 pines como salida a la vez, o sea los 14 digital de OUTPUT y el 5V o 3V como máximo y por otra parte un solo pin tiene potencia más que suficiente para iluminar un led, hacer funcionar un motor mínimo como un servomotor de 9g, o encender alimentar algún sensor, pero no es suficiente para alimentar cargas mayores.

¿Cuantos led puedo poner en un circuito que sales de un pin?

En los experimentos que he hecho,  si pones ademas una resistencia de 220 Ωm solo puedes conseguir que luzcan dos leds en un mismo circuito, pero podrías poner muchos mas si reduces la resistencia. He estado mirando y los led, en la dirección que dejan pasar la corriente tiene entre 3 y 5 homios, por tanto si pones una resistencia de 170 Ω puedes utilizas los 50 Ω que te has liberado para poner 10 leds en linea.

Cuando tengas el polarimetro, que te he dicho que dejamos para la siguiente lista de la compra, pones los leds que quieras en serie y una vez colocados miras con el polarímetro la resistencia que todos ellos suponen, lo que falte para 220 Ω lo complementas con una resistencia de ese valor y arreglado.

Tu próximo abeto de Navidad, va a poder tener con un mínimo desembolso en leds y cables y tu tarjeta de Arduino, 14 circuitos de leds de colores que van a hacer todo tipo de virguerias, iluminar al árbol de arriba a abajo y de abajo arriba luego en el sentido de las agujas del reloj y luego en el contrario, primero con luces todas azules y luego rojas, ¡ Lo que se te ocurra !

¿Y que hacemos para mover los motores de un robot?

rele de cuatro canalesYa lo veremos con detalle, pero adelanto que existen unos aparatos llamados “reles”, que amplifican el efecto de Arduino, así como también existen transistores que se utilizan para multiplicar la señal, que hacen algo parecido a lo que hace un amplificador de radio, recibe una señal de muy baja energía y de salida producen la misma señal pero con mucha mas potencia.

En la imagen ven un relé de cuatro canales, es decir que mediante ´él podemos controlar hasta cuatro circuitos que se alimenten de forma autónoma, en este caso con corrientes continuas hasta 12 voltios o con corriente alterna domñestica de 220 voltios,

Arduino tiene suficiente energía para poner hacer que el relé sea capaz de abrir y cerrar cualquier circuito eléctrico, desde corrientes continuas de seis voltios, producidas por cuatro baterías de 1,5V, como las que alimentan la mayoría de los juguetes y pequeños electrodomésticos, pasando por las corrientes a 12 voltios, que por ejemplo tiene una batería de automóvil, capaz de poner en marcha el motores de gasóleo, a circuitos eléctricos domésticos a 220 voltios de corriente alterna, que alimentan todos nuestros electrodomésticos e incluso con reles especializados corrientes trifásicas como las que mueven un ascensor o un motor industrial.

Por ello, Arduino puede fácilmente manejar, nuestra nevera, cocina, aire acondicionado, calefacción, lavadora, lamparas, radios, etc., etc., y en general cualquier aparato eléctrico, con solo dejarlos enchufados a la corriente y controlar el paso de corriente mediante un relé conectado Arduino. Todo esto tendrás ocasión de probarlo antes de lo que esperas. Otra de las cosas que irán en esa lista de compras que estamos elaborando es un juego de relés.

¿Como se hace la misma cosa tres veces no podíamos hacer algo para evitar escribirlo tres veces?

Me anticipo aquí como me he anticipado al explicar la existencia de los relés, ¡Si! existe un medio sencillo de indicar que un conjunto de funciones se repita un numero determinado de veces con la función condicional “for” que hace repetir tantas veces como queramos un conjunto de funciones comprendidas entre los corchetes ( {… } ),  mientras se cumpla un condición determinada. Para no mezclar conceptos, dejo su explicación para más adelante, conformándome con dejar aquí infoormacion de su existencia con un ejemplo.

ForLoopIllustrated

Esta única funcionescrita en tres lineas,  imprmiría los números del 1 al 100, pero como digo dejo para otro dia la explicacion detallada de esta función.

¡Ojo! Observa que cada linea acaba con el carácter punto y coma (;), es imprescindible para que Arduino sepa que acaba la línea. Perdona que sea tan pesado, pero es que es uno de los errores que sigo cometiendo yo pese al tiempo que llevo con esto

<Tercer juego de luces

Por último se van encendiendo todas las luces una detrás de otra, se las apaga en el orden inverso

// **********************************************
// 3º Se encienden todas una detrás de otra
// y luego se apagan una detrás de otra
digitalWrite(leduno, HIGH);
delay(tiempo1);
digitalWrite(leddos, HIGH);
delay(tiempo1);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
delay(tiempo1);
digitalWrite(leddos, LOW);
delay(tiempo1);
digitalWrite(ledtres, LOW);
delay(tiempo1);
digitalWrite(ledcuatro, LOW);
delay(tiempo2);

No creo que sea necesario explicar nada, si no entiendes lo que hace, yo creo que deberías empezar por leer el post anterior y luego volver a este. Si lo entiendes perfectamente la lección de hoy se ha acabado.

Por supuesto al finalizar la función “loop” hay que poner un “}” que indique el fin de la función.

Probar y ensayar

Nunca me cansaré a decir que hagas pruebas y ensayos, solo así y sobre todo tratando de corregir los errores que cometas es como aprendes de verdad. Para facilitarte el trabajo te pongo el programa completo de modo que lo puedas Copiar/pegar sin esfuerzo en tu Menú de Inicio de Arduino. Aun que no lo creas, pese a toda mi experiencia para llegar a que este programa funcione, ha tenido que corregir muchos errores de pequeña importancia, faltas de ortografía, olvido de parentesis y cosas por el estilo que son inevitables,

Aconsejo que copies/pegues porque escribir todo el programa y corregir todo ese tipo de errores no te va a aportar denasiado en tu aprendizaje, tiempo tendrás de aprender a depurar programas, A cambio te pido que experimentes y ensayes.

Haz cambios en el programa, los que te parezca bien, por ejemplo que se enciendan tres y se pague la del medio, o que duren mas las de los extremos que la del medio. Todo tipo de pequeñas variaciones que te haga llegar comprender por el uso la utilidad de cada parámetro y cada función que utilizamos, solo así llegaras a dominar Arduino.

Te dejo todo junto preparado para el Copia/pega sin más dificultad.  Una vez que lo hagas cambia los pines de salida, cambia los tiempos de parada inventa nuevos juegos de luces, practica, practica, practica…

/* Sketch 2 Juego de luces con cuatro leds
*
* 1º Encender las luces de un extremo al otro y volver
* 2º Encender de los extremos hacia el centro y volver
* 3º Encender todas una tras otra y apagarlas en el mismo orden
* Repetir el ciclo
*/
// Área de definición de variables y parámetros
int leduno = 6;
int leddos = 7;
int ledtres = 8;
int ledcuatro = 9;
int tiempo1 = 1000; // separación entre luces consecutivas
int tiempo2 = 3000; // intervalo entre cada juego de luces
// Función setup
void setup() {
// Pines abiertos como OUTPUT
pinMode(leduno, OUTPUT);
pinMode(leddos, OUTPUT);
pinMode(ledtres, OUTPUT);
pinMode(ledcuatro, OUTPUT);
}
// Función loop
void loop() {
// 1º hace ir desplazándose la luz cada timpo1 de un
// extremo al otro ida y vuelta y para después timpo2
digitalWrite(leduno, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(leddos, HIGH);
delay(tiempo1);
digitalWrite(leddos, LOW);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(ledtres, LOW);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
// vuelta
digitalWrite(ledcuatro, LOW);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(ledtres, LOW);
digitalWrite(leddos, HIGH);
delay(tiempo1);
digitalWrite(leddos, LOW);
digitalWrite(leduno, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
delay(tiempo2);
// **********************************************
// 2º enciende de los extremos hacia ay centro y vuelta
// y repite tres veces el cambio
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
digitalWrite(leddos, HIGH);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(leddos, LOW);
digitalWrite(ledtres, LOW);
// ****** segunda vez hace lo mismo
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
digitalWrite(leddos, HIGH);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
;digitalWrite(leddos, LOW);
digitalWrite(ledtres, LOW);
// ***** Repite la tercera vez igual
digitalWrite(leduno, HIGH);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
digitalWrite(ledcuatro, LOW);
digitalWrite(leddos, HIGH);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
;digitalWrite(leddos, LOW);
digitalWrite(ledtres, LOW);
delay(tiempo2); // tiempo2 para separar los juegos de luces
// **********************************************
// 3º Se encienden todas una detrás de otra
// y luego se apagan una detrás de otra
digitalWrite(leduno, HIGH);
delay(tiempo1);
digitalWrite(leddos, HIGH);
delay(tiempo1);
digitalWrite(ledtres, HIGH);
delay(tiempo1);
digitalWrite(ledcuatro, HIGH);
delay(tiempo1);
digitalWrite(leduno, LOW);
delay(tiempo1);
digitalWrite(leddos, LOW);
delay(tiempo1);
digitalWrite(ledtres, LOW);
delay(tiempo1);
digitalWrite(ledcuatro, LOW);
delay(tiempo2);
}

Repaso

Como repaso final te diré lo que has aprendido hoy

El objetivo del era familiarizarlos con el manejo de los pines digitales en OUPUT, adicionalmente hhan apredido

  • Qué es una resistencia y cómo se sabe cuantos Ω tiene
  • Qué es un diodo y cómo se distingue el ánodo
  • Que es un led y como distinguir el ánodo del led
  • Qué significan los párrafos de comentario y los delimitadores que tiene (/* …. */) y para que se utiliza
  • Qué es un parámetro y que es una variable
  • Que es el Área de parámetros y variables
  • Montar un circuito sencillo con un led partiendo de un pin digital y acabando en GMD
  • Para qué vale la función “int” y cual es su sintaxis
  • Que es un numero entero cual puede ser su rango de valores
  • Que es un numero entero de doble precisión cual puede ser su rango de valores
  • Que es un actuador, y el primer que hemos utilizado el led
  • Que energía en amperios se puede manejar en cada pin y en el conjunto de la tarjeta
  • Por que hay que poner en cada circuito que salga de un pin de Arduino componentes con una resistencia total que supere los 200 Ω
  • Que es un relé
  • Que hace la función for

Si alguno de los conceptos que indico, no lo tienes suficientemente claro, repasa la parte del escrito que explica el tema. Si no llega a entenderlo escríbeme y trataré de explicarlo de forma más clara.

Ejercicios para resolver

Si ha llegado a este punto con razonable aprovechamiento deberá saber resolver estos dos ejercicios que le propongo

Ejercicio 1- Simular un faro auténtico en una maqueta.

Para una maqueta nos proponemos hacer un faro que luzca con la misma cadencia del faro existente en la Ria de Ribadeo

Datos

En la página de Protección civil encontrara los destellos características de cada faro. Viene en la última columna y hay que saber interpretarlo Según el tipo de juego que proporcione la señal, podremos encontrar Grupos de destellos (GpD), que agrupa varios destellos y ocultaciones a un ritmo determinado entre sí, el Destello único (D), que se repite en todo el ciclo), Ocultaciones (Oc) y Grupo de ocultaciones (GpOc), donde los períodos de oscuridad son más frecuentes o duraderos que los de luz), o, simplemente, Luz fija (F). Luego viene un letra que es el color del faro generalmente “blanca” (B) pero a veces “verde” (V) o “roja” (R) y por último la duración del ciclo en segundos seguido de una s (20s)

Nos proponemos simular el faro situado de la Ria de Ribadeo, que tiene el siguiente ciclo GpD(3+1)B 20s o sea MAQUETA-FARO-2-costense-domus-40211un grupo de destellos en el que primero hay tres seguidos luego un espacio sin luz y un destello mas en un ciclo de 20 segundos Todos los destellos son blancos. Como no tengo información exacta de cuanto duran los destellos vamos a suponer que son como siguen:

El faro debe actuar de la siguiente forma

  • Destello de 5 décimas de segundos (500 ms)
  • Apagado 3 décimas de segundo (300 ms)
  • Destello de 5 décimas de segundos (500 ms)
  • Apagado 3 décimas de segundo (300 ms)
  • Destello de 5 décimas de segundos (500 ms)
  • Apagado 9 décimas de segundo (900 ms)
  • Destello de 10 décimas de segundos (1000 ms)
  • Apagado 16 segundo (16000 ms)

Ejercicio 2 – Simular un semáforo que regula el paso en un túnel.
semaforoPara una maqueta deseamos simular un semáforo que regule el paso en un corto túnel que no permite el cruce de dos vehículos, no hay el riesgo que los vehículos choquen, porque desde un extremo se ve la salida, por tanto si hay o no un coche en su interior, pero para regular bien el trafico se desea lo siguiente

  • 1º.- En un extremos se acaba de poner la luz en verde mientras que en el otro extremo está en rojo. Así se mantiene 25 segundos.
  • 2º.- Para estimular el paso de los últimos coches, el verde se pone parpadeante cinco veces con periodos de encendido y apagados de un segundo. o sea esta así 10 segundos más, mientras que el otro extremo esta en rojo
  • 3º.- El semáforo se pone en rojo en un extremo, pero para dar tiempo a que salgan los coches que estuvieran dentro del túnel el otro extremo también continua en rojo durante otros 10 segundos
  • Se repite el proceso, pero en este caso el es otro extremo el que se pone en verde y el inicial continúa en rojo.

Solucion a los ejemplos

En mi opinión debe saber resolver estos dos problemas sin ninguna dificultad pues no mecesitan para ello conocimientos o trucos que no hayamos aplicado exahustivamente en el ejenplo que aparece en este capítulo por lo que creo que debe tratar de resolverlo pos si nismo.

Estos dos ejemplos los presentaré resueltos próximamente. Posiblemente mi solución sea diferente a la tuya, porque hay muchas formas de hacer lo mismo. Si la tuya funciona de acuerdo con las especificaciones que he dado, tu respuesta es válida. No obstante, hay siempre una solución que es más elegante que las otras, y posiblemente esa sea la mía, porque tengo más experiencia, pero no es seguro, puede que haya quien encuentre una solución mejor.

¿Que hace que una solución sea elegante?

  • La economía de medios.- La solución más corta, que menos y mas pobres medios utiliza de la tarjeta
  • La claridad. La que es mas clara y está mejor documentada

Tenga en cuenta que lo que yo escriba, tu tienes que entenderlo, es fundamental ser claro, porque programar suele ser labor de equipo y el equipo, tiene que comunicarse perfectamente.

Con mucho gusto recibiré en mi buzón sus soluciones, mándame el texto completo de tu sketch (haga copia /pega en su email) y si es posible mandame una filmación del resultado de la prueba. Aquí tiene mi dirección e mail faocho@gmail.com.

Igualmentee recibiré con gusto nuevas propuestas de otros ejercicios y con vuestro permiso si creo que aportan algo al aprendizaje les añadiré a esta lista.También agradecerá que le manden ideas para ejercicios que se puedan resolver con estee nivel de conocimientos para desarrollarla y con vuetro permiso, añadirla a este Curso.

¿Pero como es posible?

Por último. ¿Creería posible que con solo dos lecciones y conociendo únicamente cuatro funciones pudiera simular cualquier faro del mundo y hacer un semáforo que funciona? ¿Se da cuenta a que velocidad se aprende en Arduino?

Félix Maocho

indice

30 abril 2016 - Posted by | Curso de Arduino, General, Robotica | , ,

Aún no hay comentarios.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: