Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Arduino – Instalar el entorno de desarrollo de programas IDE

Por Félix Maocho
18/12/2012

Objetivo de este post:

Enseñar a instalar en nuestro ordenador el programa IDE que nos permita escribir los programas con las instrucciones que ejecutará la tarjeta controladora, y aprender a cargar en la tarjeta un programa

_________________

El IDE de Arduino es un conjunto de programas diseñados específicamente para que los no familiarizadas con el desarrollo de software, puedan crear los programas de control de la tarjeta. Es una aplicación escrita en Java por lo que siendo independiente del sistema operativo, vale para todos los ordenadores ordenadores cuyos sistemas operativos soportan Java, que son muchos y desde luego todos los ordenadores personales moderno , El IDE de Arduino deriva de la programación IDE del lenguaje Processing.

Este conjuntos de programas Incluye un editor de código, para escribir los programas, que es en esencia, un procesador de texto especializado en escribir programas, con características específicas para esa labor como resaltado de los nombbres de los comandos o el sangrado automático,,

Otro programa traduce automáticamente, el programa escrito o fuente, en un programa en lenguaje máquina, (si no encuentra errores de sintaxis en el programa fuente)   Este trabajo se demomina técnicamente “compilar” los programas,. Los programas en lenguaje máquina, (muy dificil de comprender para los humanos) , son los únicos que entiende el pequeño procesador con que va equipado la tarjeta compiladora.

Si el programa compilador detecta un error de sintaxis, para la compilación y emite un mensaje de error con un posible motivo de error, para que lo corrijamos, Ocurre con frecuencia, que el error se puede deber a múltiples motivos posibles y el mensaje no guarda relacion con el autñentico error cometido al escribir el programa. Debemos tener claro por tanto que un mensaje de error del compilador, denota un error de sintaxis que no ha permitido seguir compilando y que posiblemente la causa es la que indica el error, sin embargo conviene tener claro y en cuenta que este mensaje, no es siempre correcto, por lo que solo debe tomarse como una posibilidad, pues estos mensajes muchas veces nos despistarán en nuestro cometido de depurar de errores el programa si los tomamos al pié de la letra..

Si todo va bien, una vez finalizada la compilacion , el programa en lenguaje máuina, es transferido al procesador de la tarjeta Arduino que automáticamente se pondra en marcha siguiendo las instrucciones que le hayamos introducido. La tarjeta Arduino procesará las instucciones de este programa en bucle una y otra vez, en tanto tenga energía electrica, Si apretamos el botón RESET. arrancará  de nuevo el programa desde el principio. Por tanto la única forma de parar el funcionamiento de la tarjeta Arduino una vez arrancada, es desconectar la energía electrica.

El IDE de Arduino trae una biblioteca escrita en C++ llamada “Wiring”  que hacen mas fácil escribir en los programas. Una bblioteca es un conjunto de rutinas previamente programadas con Las instrucciones habituales de entrada/salida a de modo de cajas negras, cuyo funcionamiento interno es transparente para nosostros, que lo único que sanbenios es que introduciendo unos valores en un orden adecuado obtenemos la resp

uesta que corresponda a los calculos y acciones que efectúa la funcion, Ello facilifta a los nos expertos la construcción de programas.  que conecten estas cajas negras de forma que los respuestas que produzcan unas cajas negras, sean los pará metros de entrada de otras cajas negras,

Todos estos asuntos técnicos pueden parecerle al profano en informática  eleidos muy complejos, pero son absolutamente transparentes para el usuario no especializado ,  que sólo necesitan aprenderse de memoria unos cuantos nombres en ingés para definir dos funciones para hacer un programa ejecutable:

  • void setup () – La función que se ejecuta una sola vez y que fundamentalmente define el hardware que va a entrqr en funcionamiento
  • void loop () – La función que contine fundamentalmente las ordenes de encender y apagar y comprobqar el estado de las diferentes entradas y salidas que componen Arduino. que se repite en bucle indefinidamente.

Instalar el Programa IDE

Procedemos pues a instalar el programa IDE, para ello seguimos las instrucciones de la misma página escrita por Alonsojpd   que ya utilizamos en el post anterior sobre a Arduino en este Blog   en el que explicábamos como instalar los “drivers” de la tarjeta controladora

Buscar el fichero  “arduino.exe”

Abrimos un explorador de ficheros. Para ello uso el programa estándar “Explorador de Windows” (Windows Explorer) y con el abrimos la carpeta donde descomprimimos los ficheros, en mi caso la carpeta “2º Post de arduino”, pero para quien haya seguido mis consejos simplemente se llamará “Arduino”

Ejecutar “arduino.exe”

Ponemos el ratón sobre el fichero “arduino.exe” y clikamos con el botón derecho del ratón. Y seleccionamos  “Ejecutar como administrador” (no es necesario, pero así evitamos posibles problemas de limitaciones de Microsoft Windows 7). Aunque yo tengo Windows Vista se hace exactamente igual En poco tiempo se abre una ventana del programa Arduino que es donde trabajaremos para todo lo relacionado con la tarjeta.

Definir el modelo de tarjeta y el puerto serie

En el IDE de desarrollo de Arduino, en primer lugar seleccionaremos el tipo de dispositivo (Board). Para ello pulsaremos en el menú “Tools” – “Board” y seleccionaremos “Arduino Uno” (o el que hayamos adquirido):

Una diferencia en mi ordenador en este caso es que posiblemente por haber cargado una versión más avanzada de programas, el menú de desarrollo de Arduino ha identificado automáticamente el idioma por defecto de mi ordenador y ya aparecen los menús en correcto castellano, Algo que no se si ocurrirá en todos los casos, por tanto en vez de “Tools”, abrimos la pantalla que dice “Herramientas” y seleccionamos “Tarjeta” en vez de “Board”.

Con ello se despliega una colección de diferentes tarjetas Arduino. La nuestra “Arduino UNO” aparece en primer lugar y es la que seleccionamos.

tarjeta arduino UNO

Seleccionaremos también el puerto serie asignado al controlador de Arduino (en nuestro caso COM16), que dijimos que anotaran cuando instalaron los drivers de la tarjeta, puede que en su caso sea otro. Para ello accederemos al menú “Tools” – “Serial Port” – “COM3”:

En nuestro caso se presento en primera instancia una diferencia preocupante, Al acceder al menú ´”Herramientas” – “Puerto serial “ solo aparecía COM3 como respuesta posible y yo tenía que seleccionar (COM16). Esto ocurrió porque no había conectado la tarjeta Arduino,  Como indicamos los “drivers” simulan que una entrada USB es una entrada COM, pero para que ello ocurra tiene que estar enchufada la tarjeta. Si buscamos los puertos cuando la tarjeta está enchufada aparecerá también el puerto COM simulado que como indico en mi caso es el (COM16), seleccionamos este puerto y hemos acabado la instalación correcta del IDE.

Puerto com

Seleccionar el programa estandar “Blink”.

EL softvare IDE tiene incluidos múltiples programas ya escritos de demostración. Con el fin de comprobar que todo funciona correctamente, vamos a cargar en la tarjeta el programa  “Blink” (Parpadear), que lo que hace es encender y apagar repetidas veces un led. Es un programa muy sencillo que nos va a valer para tener un primer contacto con la programación de la tarjeta y estudiar la forma como se carga un programa en la tarjeta controladora.

Tomaremos un LED, (no importa de que color sea), y conectaremos la pata más larga (positivo ó cátodo) al ping digital 13 de Arduino y la pata más corta al ping GND ( negativo o ánodo de la tarjeta), que se encuentra a su lado.

El LED lo conectamos directamente a la placa, aunque lo habitual sería usar la “protoboard” (placa prototipo) y conectar ahí el LED y, a su vez, conectar la placa al Arduino con sus cables correspondientes.

¡Ojo!, este parrafo es incorrecto , Lleer las actualizaciones

El PIN13 tiene una característica que lo diferencia de los demás y es que funciona a 3 voltios mientras que los otros funcionan a 5 voltios, la razón es muy sencilla, este PIN tiene conectado en serie una pequeña luz que actúa de resistencia que reduce el voltaje, como se ve en la figura, que no tiene los demás . Por tanto aunque hemos incluido un Led para que la prueba sea mas visible, no hubiera hecho falta porque el Led del ppin13 lucira de todas formas..

Como los LED que tenemos funcionan a 3 vol, podemos conectarlo directamente en al PIN13 , pero si tratamos de  conectarlo a otro, tendríamos que conectar en serie una resistencia de 200n homios para reducir el voltaje de 5 Voltios que es la salida estandard a 3 voltios  Si quisiéramos usar otro PIN, por ejemplo el PIN12 usaríamos la placa colocando la resistencia en serie y montaríamos algo como esto:

Actualización  al  21/12 /21012 

Un amable comunicante me expuso que firma ionhs me comunicó que el que el PIN13 no incorporaba la resistencia que decía y que eso solo era un “hoax”, (bulo), que como leyenda urbana) corre por Internet debido a que en una placa inical existio esa resistencia en el PIN13. El problema de Arduino, es que para economizar no añaden a la placa que te venden ningúna documentacion , pues se supone que esa documentación existe en Internet, si a eso se añade que los desarrollos no están protegidas por ley, pues todos son proyectos Open Source, y por tanto que se pueden fabricar y modificar libremente puede ocurrir que en mercado existan tarjetas Arduino que tengan una resistencia asociada al PIN13· y otras que no la tengan.

Ante la duda de que es lo que ocurría con la mía he estudiado la documentación más fiable a mi juicio en especial la procedente de la matriz de Arduino para el model UNO (que es la tarjeta que yo tengo.

Alli encontré  las  especificaciones oficiales de la instrucción digitalWrite()  el siguiente texto que copio y traduzco a continuación :

NOTE: Digital pin 13 is harder to use as a digital input than the other digital pins because it has an LED and resistor attached to it that’s soldered to the board on most boards. If you enable its internal 20k pull-up resistor, it will hang at around 1.7 V instead of the expected 5V because the onboard LED and series resistor pull the voltage level down, meaning it always returns LOW. If you must use pin 13 as a digital input, use an external pull down resistor.

NOTA: El pin digital 13 es más difícil de usar como entrada digital que los demás pines digitales porque tiene un LED y una resistencia unidas a él soldada en la placa en la mayoría de los tableros. Si activa en su interior 20k de resistencia, lo que reducirá alrededor de 1,7 V en lugar de los 5V que espera porque el LED y resistor serie tire hacia abajo el nivel de tensión, lo que significa que siempre retorna a BAJO. Si tiene que usar el pin 13 como entrada digital, utilice una resitencia en  “pull down”, (o lo que es lo mismo una resitencia que “recuerde ” que estñá a cero cuando no hay carga en el pin, Yase vertá eso m`´as adelante.

También en otro lugar absolutamente fiable BricoGeek que son los principales importadores de Arduino para España encontré un tutorial de a Arduino que explica gráficamente lo que hemos estado haciendo en este y el anterior post sobre ARduino, por lo que aconsejo que se vea, y que en el minuto 7:40 con firma de forma clara que la T tarjeta Arduino Duemilanove. igual que la UNO, pero algo más potente tiene en el PIN13 asociada una resistencia, por ello y como no he encontrado en ningun sitio que hable especificamente en sentido contrario, sobre el voltaje del PIN 13, doy de momento por definitivo que el PIN13 tiene asociado una resistencia y que eso es una característica de este PIN y no del resto.

l  

Lo que es posible es que esta característica del PIN13 no se de en todas las placas, por lo que en otra si haya que colocar una resistencia en serie con el LED, si el lector tiene una diferente a la UNO o la Duemilanove, le dejo en la duda de cual será el voltaje de ese pin y mi recomendacion es no utilizarlo hasta tener la seguridad de cual es el voltaje correcto y utilizar los restantes sabiendo que su voltaje es 5 voltios.

Fin de  la actualización

Actualización  al  22/12 /21012 

Con el fin de zanjar la discusión ionhs ha ido a su laboratorio y con un polarímetro ha medido el voltaje de salida del PIN13 y le ha dado un valor muy próximo a 5V, con lo que queda zanjada la discusión, el PIN13 igual que el resto de los PIN  tiene de salida 5 Voltios, por tanto de colocar directamente un LED pensado para trabajar a 3,Volts, directamente entre el PIN13 y el PIn de mas marcado como GND corre el riesgo de quemar el LED y quizá el PIN. (aunque a mi no me pasara), por lo que aconsejo utilizar para la experiencia una resistencia puesta en serie con el cátodo del LED, (la pata  larga, bien directamente como indica la figura que pongo a continuación, o bien, mas correcto,  haciendo un montaje en la protoboard parecido al que se muestra algo más arriba.

Fuera de que se deba añadir una resistencia al circuito, algo que no se refleha ni en el esquema y ni en las fotografías el resto del post no necesita mas cambios, el software es correcto.

Quien desee seguir la conversacion entre ionhs  y un servidor, puede leer los comentarios que estan debajo de este post. Aprovecho para invitar a todos a expresar en los comentarios sus dudas y observaciones sobre lo escrito en el post.

Fin de  la actualización

Cargar el progarma Blink en la Tarjeta Arduino

Una vez creado el circuito, (por esta vez solo colocar el LED vamos a introducir en la tarjeta un programa que le haga encenderse y apagarse como si fuera un intermitente.

Para ello abriremos el IDE de desarrollo de Arduino, y buscamos un programa que trae de ejemplo que hace esto mismo y se llama “Blink”  (Parpadear), para ello accederemos al menú “File” – “Examples” – “Basics” – “Blink”: En nuestro caso al estar ya traducido , (en parte), lo que abrimos es “Archivo” – “Ejemplos” – “Basics” – “Blink”   _

buscar programa

Al hacer clic en “Blinck” Se abrirá el siguiente programa, que de comentaremos posteriormente.

Que en nuetro caso, por ser una version posterior es ligeramente diferente y presenta un texto tal como el que sigue

/*

    Blink

    Turns on an LED on for one second, then off for one second, repeatedly.

     This example code is in the public domain.

*/

    // Pin 13 has an LED connected on most Arduino boards.

    // give it a name:

    int led = 13;

    // the setup routine runs once when you press reset:

void setup() {

    // initialize the digital pin as an output.

    pinMode(led, OUTPUT);

}

// the loop routine runs over and over again forever:

void loop() {

    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)

    delay(1000);               // wait for a second

    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW

    delay(1000);               // wait for a second

}

Verficar y comprobar el programa

La tarjeta como cualquier máquina digital, no puede comprender este programa, por lo que hay que traducirlo a lenguaje máquina, que es lo único que puede entender. Ese proceso se llama compilar, y lo hace automáticamente el entorno IDE con solo que se lo mandemos hacer.

Aparte si lo que hubiéramos cometido algún error de escritura, por ejemplo que no hubiéramos cerrado un paréntesis, o que hubiéramos escrito “pinmode” en lugar de “pinMode”, al compilar detectaría ese error y daría un aviso. Como este programa está más que probado, eso no va a pasar.

Oprimimos la opción del menú “Verify”  (“Verificar” en neutra versión),  que es la primera tecla del menú superior.

Si todo ha ido bien en la banda azul inferior aparece el mensaje  “Done compiling“, ( en nuestro caso aparece en español “compilacuión terminada”) y en la banda negra una nota que nos informa del tamaño del programa que hemos realizado

Que como es natural en nuestra versuib sakle en español:

Tamaño binario del Sketch: 1.084 bytes (de un máximo de 32.256 bytes)

Que nos indica que solo ocupa un Kilobyte de los 32 Kb que tiene le procesador de la tarjeta o sea que cabe muy holgadamente,

Cargar el programa compilado en la tarjeta

Tenemos ahora que mandar el programa escrito en “lenguaje máquina” resultado de la compilación a la tarjeta. Para ello pulsamos el botón Upload , el situado más a la derecha y si todo va bien, (el puerto es el adecuado), x

Y si todo va bien, (el envío se realiza en el puerto adecuado, en nuestro caso el COM!&) el envío por el puerto establecido se realiza correctamente la carga de la tarjeta Arduino, y en la parte inferior mostrará “Done uploading”:

Y a partir de entonces  se encenderá y apagará la bombilla al ejecutarse el loop

Acaba con ello el objetivo que nos trazamos para este post. no obstante como anticipo de lo que será el siguiente estudiamos que compone el programa que hemos instalado.

Explicacion del programa

La estructura de un básica de un programa de Arduino se divide en dos secciones “setuup” (instalar y “loop” (bucle). La Funcion “setup” solo se realiza una vez al comienzo del programa y constituye la preparacion. La funcion “loop” por el contrario se ejecucion dal programa y se repite continuadamente.

Hay una parte que son el coódigo del programa en donde los diferentes funciones finalizan con  “;”

Aparte hay los comentarios del programa que no hacen nada a efectos de programacion pero simplifican a los humanos la comprension del programa. Estos comentarios son de dos tipos Bloques de comentario que se marcan con /*  texto */ y lineas de comentario que comienzqan por //

Cabecera del Programa

/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/

El programa comuienza xon unbloque de comentario  el mandato Abrir comentario /*  y cerrar comentario =/. Esta barra inclinada a la derecha corresponde en el teclado al 7 mayuscula y la estrlla al + mayuscula

Se suele iniciar (no es obligatorio) el programa dando el nombre del programa con que le vamos a guardar y despues se añade una somera explicacion de lo que se hace añadiendo el cierre del comentario “*/”

En la primera fila despues de “/*”  se suele poner el mobre e del programa en este caso “Blink” (Parpadear)

A continuación se pone un texto que explique que es lo que hace el programa  (traduzco)

Enciende un LED por un segundo y luego se apaga por un segundo, repetidamente.
      Este código de ejemplo está en el dominio público

El poner este tipo de comentarios facilita mucho a otras personas la comprensión de lo que hace el programa, (como ocurre en este caso), pero incluso para nosotros mismos será útil cuando vayamos a utilizar un programa escrito hace tiempo.

Definición de variables y parametros

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

Dentro ya de la zona del programa cualquier línea que comience con  //  es considerada un comentario, como en el caso anterior los comentarios explican el funcionamiento del programa  y no “pesan” a la hora de compilar pues esas lineas se saltan a la hora de generar el lenguaje máquina

Traduzco las dos lineas de comentario

// Pin 13 tiene un LED conectado en la mayoría de las placas Arduino.
// Darle un nombre:

Para la rueba hemos colocado un LED en la salida 13, sin embargo no hubiera hecho falta por que el pin 13 tiene incluido en la tarjeta un pequeño LED

Debajo del comentrio (si lo hay) se suele situar la zona de declaracion de variables y parámetros, Se denomina variable a aquellos valores que a lo largo del funcionamiento del programa cambian de valor, supongamos que estamos contando la gente que pasa por un sitio, cada vez que el sensor detecte el paso de una persona, en algun sitio del programa un contador sumara 1 a la cantidad que arrastre hasta entonces, ese contador es una variable.

Parametro es una variable que se la da un valor inicialmente y no cambia en todo el programa, el caso tipico son los mensajes del programa, si queremos que en una pantalla aparezcan mensajes del tipo “Finalizado” “error” o cosas por el estilo cargaremos esos mensajes en Variables que n mostraremos cuando corresponda. A un parametro le podemos pasar un m numero entero

Cualquier variable o parametro que use el programa ha de ser definida  indicando su naturaleza, numero entero, (int), byte, número entero muy grande (long), o con coma flotante (float)

En este caso, vamos a cargar antes de “void Setap ()” el parámetro que llamamos “led” con el valor 13 para decir mas abajo donde corresponda que encienda le PIN13 eso lo hacemos con esta sentencia. Con ello conseguimos que tenga valor a lo largo de todo el programa (parámetro global) y puede ser utilizada por cualquier función del programa,  si se carga en otro sitio solo tiene valor local, si se declara dentro de un bloque o incluso dentro de una función, en cuyo caso solo tiene valor para esa función en concreto.

int led = 13; y solo la utiliza

  • int                indica que vamos inixcializar un parámetro que es un numero entero corto 8 bits (entre  -32.767 y 32768)
  • led                es el nombre que hemos dado al parámetro. podía ser cualquiera
  • = 13             indica que le demos el valor 13

Función void  setup()

Acontinuacion viene una de las dos funciones que obligatoriamente tiene cualquier porgrama o Sketch de Arduino “setuo” y “loop”.Cualquier d funcion tiene la siguiente sintaxis grnral

“(parametros de entda) Nomnre de la funcion (parametros de salida)el”

La función setup(), (instalar)  se ejecuta solo una vez al arrancar el programa  o cuando se da la tecla de RESET de la placa Arduino., Se usa para inicializar variables, modos de pines, enlazar bibliotecas de funcionesm , definir los protocolos de comunicaciones que se fana a utilizar etc.

Esta funcion “setup ” nunca tiene parámetros de entrada, lo que se indica con la plabra “void” ni tampoco proporciona parámetros de salida por lo que se deja sin contenido entre los parentesis de la derecha de la funcion  “void Setup ()”  por tanto a esta vuncion ni hay uqe proveerla de valores de entrada ni entrega ningún valor. Feneralmente en ella solo se dfine que partes de Arduino vamoa a utilizar, en este caso solamente el pin 23 como salida.

En este caso la vamos a utilizar solo para indicar que el PIN 13 lo vamos a utilizar como salida. Podríamos poner directamente la sentencia

pinMode(13, OUTPUT);  que hace lo mismo que     pinMode(led, OUTPUT);   puesto que al al parámetro led le hemos dado el valor 13,

¿Por que lo hacemos entonces? – Porque es una buena opractica,, en este programa no tiene mucho sentido pues es de muy pocas líneas, pero pensemos un pprograma complejo de tres folios donde se enciende y se apaga el led que está unido al pin 13 en diversos piuntos, si por la razón que fuera quisieramos cambiar en nuetro modelo físisco el pin 13 por el 8 porque por ejemplo no tenemos a mano un cable suficientemente largo para llegar al pin 13, si no hemos tenido la precaudion a de asignar el pin de salida con un parámetro, deberemos leer todo el programa y sustituir 13 por 8 alli donde se use, con el consiguiente riego de errores. encambi si al pin le asignamos un parámetro como “led”, basta cambiar en un solo sitio el valr que asignamos al parámetro led para que cambie en todo el programa por largo y complicado que sea.

Iguaklmente el parametrizar las funciones hace que sea facil su reciclado en otros programas una funcion ya probada y sin defectos se puede utilizar en otro programa para hacer lo mimo contal de cambiar los parámetros que tiene en el programa original por los valores que deba tener en el nuevo programa. Ello nos dará mas rapidez y seguridad a la hora de construir nuestros programas..

 En conclusion ”   pinMode(led, OUTPUT)”  quiere decir que vamos a utilizar el pin indicado por el parametro “lesd” de Saloda (OUTPUT) es decir para enviar o no energia por ese pin

Comienza este sector con un comentario que indica que solo se ejecurta una vez por ser una funcion setup

// the setup routine runs once when you press reset:

// La rutina de instalación se ejecuta una vez cuando se pulsa reset:

void setup() {

// initialize the digital pin as an output.  (// Inicializa el pin digital como salida.)

pinMode(led, OUTPUT);

}

La instrución void setup()  se inicia con un parentesis “(” y hace todo lo contenido hasta que se cierre el parentesis “)”. En este caso lo único que hacemos es poner el PIN indicado con el paramentro “led” en modo OUTPUT (SALIDA) Cada instruccion que haya diferente se acaba con  ; y tiene una forma muy rígida de composicion que suele ser como en este caso  Un nombre concreotn  del que hay que respetar las minúsculas y mayusculas ” pinMode”, a continuación abriendo paréntesis, los parametros adecuados en un orden concreto. Para pinMode los parámetros son el número de pin y si es de salida OUTPUT o entrada INPUT  l La instruccion acaba con “;” u la funcion cerrando los corchetes con el que se abrió “}”

Función void  loop()

La función loop(), (bucle) , se repite en tanto no encuemtre una condición que la mande parar. en este caso esta condición no se ha puesto, por lo que actuaría indefinidamente.¨Como la funcion “setup” no tiene par´çametros de entrada ni de salida.

Mndato digitalWrite()

Este mandato coloca  el circuito que esta unido al PIN (que previamete hemos marcado como OUPUT (SALIDA) a un voltaje HIGH, (ALTO  dependiendo del tipo de tarjeta de 5 Voltios, por ejemplo en Arduino UNO, o de 3,3 voltios en tarjetas que funcionan a ese voltaje), o LOW (BAJO  0 voltios).

En este caso el loop (bucle) va a hacer en cada uno de sus pasos, como en el anterior lo comprendido entre los corchetesabierto “{” y cerrado”}” y ello es  que el pin 13 que ya hemos definido como de salida adquira el maximo voltaje (HIGH). lo mantenemos asi un segundo haciendo pararse un instante, (delay 0 retrasar). cuya duración es 1000  milisegundos, luego ponemos el voltaje al nivel inferor, (LOW), y lo mantenemos por segundo dando fin al ciclo que se repetirá indefinidamente

// the loop routine runs over and over again forever:

// Bucle ejecuta la rutina una y otra vez para siempre:

void loop() {

digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level (// Encender el LED (ALTO es el nivel voltaje)

delay(1000);               // wait for a second  (// Espera por un segundo)

digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW  (// Apargar el LED haciendo el voltaje BAJO)

delay(1000);               // wait for a second (// Espera por un segundo)

Como ven esto de programasr no es tan complicado solo basta conocer algunas palabras “mágicas”

Félix Maocho

Todos los post de arduino aparecerán en Robótica bajo el subepigrafe Arduino

Anuncios

18 diciembre 2012 - Posted by | Robotica |

26 comentarios »

  1. Primero comentarte que el artículo está muy bien escrito y es interesante. Pero he encontrado algunos algunos detalles que creo que no son del todo correcto.

    He mirado el esquema en eagle y el pin 13 saca 5v no 3v. Ya que el pin del micro está directamente conectado a la salida y en paralelo han puesto una resistencia y diodo a masa. Creo que en la primera versión, o en la duomilanove ni que tenían lo que comentabas pero creo que eso está superado. Por el mismo motivo es peligroso poner el diodo conectado al 13 y a masa porque puedes quemar el pin 13 del micro. Igual que en todos los demás hay que poner una resistencia.

    Más abajo comentas que ocupa 1Mega y creo que es un 1K de 32K que tiene.

    Míralo, como te he dicho antes, está muy interesante.

    Comentario por ionhs | 20 diciembre 2012 | Responder

    • Ante todo gracias por colaborar a corregir errores, pues como he indicado soy absolutamente nuevo en el uso de Arduino y escribo a la vez que experimento con él por lo que es muy probale que d además de mis habituales errores debido a despistes, se añadan los errores debidos a la ignorancia que tengo.

      Debido a despiste es el decir que la tarjeta es de 32 Megas, cundo evidentemente es evidente que es de 32 Kilobytes. Correh giré el error inmediatamente.

      En cambio lo que no es un error es que el PIN13 del Arduino UNO trabajoa a 3 voltios y que por tanto se puede poner un LED sin ayuda de una resistencia a este PIN , (algo que no puede hacerse en los otros pines, donde becesita añadirse una resistencia de 200 Homios para evitar que se quemen los componentes. Le copio el parrafo de donde he sacado de las especificaciones de la instrucción digitalWrite() http://arduino.cc/en/Reference/digitalWrite

      NOTE: Digital pin 13 is harder to use as a digital input than the other digital pins because it has an LED and resistor attached to it that’s soldered to the board on most boards. If you enable its internal 20k pull-up resistor, it will hang at around 1.7 V instead of the expected 5V because the onboard LED and series resistor pull the voltage level down, meaning it always returns LOW. If you must use pin 13 as a digital input, use an external pull down resistor.

      NOTA: El pin digital 13 es más difícil de usar como entrada digital que los demás pines digitales porque tiene un LED y una resistencia unidas a él soldada en la placa en la mayoría de los tableros. Si activa en su interior 20k de resistencia, lo que reducirá alrededor de 1,7 V en lugar de los 5V que espera porque el LED y resistor serie tire hacia abajo el nivel de tensión, lo que significa que siempre retorna a BAJO. Si tiene que usar el pin 13 como entrada digital, utilice un ¿pull down resistor?.

      Lo que es posible es que esta característica del PIN13 no se de en todas las placas, por lo que en otra si haya que colocar una resistencia en serie con el LED.

      Saludos

      Comentario por felixmaocho | 20 diciembre 2012 | Responder

    • He estado mirando distintos esquemas de placas antiguas y por lo que he podido entender en la placa Arduino NG es donde por el pin13 sale menos de 5v porque hay en serie 2 resistencias http://arduino.cc/en/uploads/Main/arduino_NG_schematic.png

      Te lo comentaba porque he leido muchos artículos donde comentan lo de los 3v y se ha propagado como si fuera la norma. Sin embargo creo que es solo en unos modelos muy antiguos donde ocurría eso. Salu2

      Comentario por ionhs | 20 diciembre 2012 | Responder

      • Pues realmente me haces dudar. Voy a ver si encuentro algo que confirme o no lo que mantengo. La información que te transcribí es directamente de la web de los diseñadores de Arduino, pero puede que este algo anticuada. Miraré si encuentro confirmacion o no a esta informacion en alguna otra fuente fiable.

        Comentario por felixmaocho | 20 diciembre 2012

      • Después de estudiar el asunto, cada vez tengo mayor confusión por el asunto, pues si bien yo he utilizado en mis pruebas el pin13 sin resistencia y nada ha se ha roto, (creo), he encontrado en la propia web de Arduino, información en los dos sentidos, con lo que realmente no se que a que atenerme. Como por otra parte, mi tarjeta en concreto no tiene una manual, no puedo saber si mi tarjeta tiene 5 o 3,3 voltios de salida en el PIN13, puesto que no tengo (de momento ) forma de medirlo.
        Asi que voy a poner una actualizzacion de aviso para el que lea mi blog explicando el asunto y lo cambiarñé cuando sepa algo concreto y seguro.

        Comentario por felixmaocho | 20 diciembre 2012

      • Por conectar un diodo a un pin sin resistencia es dificil que se rompa el pin (no imposible). El año pasadohaciendo un ejercicio con mis alumnos a un par de ellos se les olvido poner la resistencia y no paso nada. Y no era un diodo solo eran 8 diodos. Otra cosa es conectarle un motor entnces seguro que te quedas sin pin.

        Comentario por ionhs | 20 diciembre 2012

      • Me alegro haber dado con alguien que sabe de esto. Yo estoy muy interesado en aprender, pero no se nada, Si lo deseas, te invito a escribir en este blog, post con temas o ejercicios que se puedan estar a un nivel de aficionado primerizo. Y por supuesto te agradecerá que revises todo lo que yo escriba sobre el tema.

        Comentario por felixmaocho | 21 diciembre 2012

      • Te agradezco la invitación pero ando un poco liado administrando el blog de mi cole. Si quieres puedes coger cualquier artículo que hemos publicado sobre Arduino en el siempre que nombres la fuente. Salu2

        Comentario por ionhs | 21 diciembre 2012

      • Por mi parte agradecido por tu ofrecimiento y creo que en el futuro hara uso de él, pues ne he dado una vuelta por tu blog y tienes modelos sencillos que pueden ser muy interesantes para un principiante. Para estar al tanto de lo que escribes me he suscrito a tu blog.

        Respecto del PIN13 sigo en ela idea que tien en las versiones de a Arduino UNO y Duemilanove una resistencia unida al pin, lo que hace que el voltaje de ese pin sea de 3,3 v. La causa es el viedeo de Bricogeek que he puesto en el post, Hacia el minuto 7:40 comentan claramente que el PIN13 tiene una resistencia asociada que no tiene el resto.

        Bricogeek es quizá la empresa importadora de Arduino más importante y soy de la opinión que en eso no se equivocan.

        Un saludo y muchas gracias por tu intervención, Espero que me comentes los sigueientes post que escriba sobre este tema.

        Comentario por felixmaocho | 21 diciembre 2012

  2. ¿Por qué no conectas antes de nada un multímetro digital al PIN, mides directamente el voltaje real y te quitas de riesgos de quemar placa o LED?

    Comentario por Maocho Jr | 22 diciembre 2012 | Responder

    • Porque no lo tengo ni creo que llegase a reentabilizar nunca, ni la inversión de comprarlo, ni el esfuerzo de llegar a entender su funcionamiento. soy un amateur un poco zarrapastroso, ya lo sé.

      Comentario por felixmaocho | 22 diciembre 2012 | Responder

      • He hecho lo que comenta Maocho Jr, sabía que lo podía hacer pero me daba pereza porque en navidades tengo todo recogido. http://img542.imageshack.us/img542/3887/20121222160008a.jpg He metido un poco de photoshop para que se vieran mejor los números pero da 4,9v. He hecho la prueba una una UNO R2 pero en la R3 me parece que daría lo mismo.

        Ahora te voy a dar caña, el polímetro es fundamental para poder trabajar con arduino. Cuando todo va bien, no hay problema pero como haya problemas sin polímetro no hay manera de arreglar los problemas. Los tienes desde 6 euros (no los recomiendo) hasta los 25 euros. Piensa que un polímetro vale para todo, desde medir la tensión que tienes en los enchufes de casa, hasta para ver si las pilas las tienes descargadas, pasando por Arduino por supuesto.

        Otro de los elementos imprescindibles son las board, protoboard, breadboard… cada uno lo llama de diferente manera. Pero es esto http://2.bp.blogspot.com/_fbaDrYse9kU/TJd_FjH26tI/AAAAAAAAABY/xJW9ST5wajo/s1600/protoboard.jpg los hay de diferentes tamaños. Sin este elemento no hay manera de montar un triste circuito en condiciones.

        Comentario por ionhs | 22 diciembre 2012

      • Bien. Primero, lamento haberte desordenado tu laboratorio en fechas tan señaladas. Segundo, agradecerte sinceramente el trabajo que te has tomado, ese argumento es definitivo y para mi zanja la cuestión. Tendré que poner una nueva Y espero última actualización al post.

        En terecer lugar lo cometaré con Bricogeek y en Arduino, (con ayuda de Google Traslate), pues creo que es un punto que quienes deben ser autoridad deben aclararlo con rotundidad, porque si no, ¿en quién vamos a confiar los que no sabemos ni donde tenemos el cátodo?.

        Respecto al polarímetro, todo se andará, pero de momento el Arduino, supone mi auto regalo de Reyes, (aunque llegados algo antes de fecha prvista), y me he gastado en ello el presupuesto que tenía para este tipo de auto premios. El posible aumento de este capítulo, no se contempla, pues. no me quejo, porque muchos están en el paro, por lo que en estas circunstancias ser un jubilado es todo un privilegio, pero viviendo de una pensión no actualizada y con subida inminente de todo, (empezando por la electricidad), y con la muy probable perspectiva de tener que ayudar a algún hijo, hay que andarse con mucha prudencia a la hora de gastar.

        No obstante la protoboard, breadboard, (o placa de agujeritos), la tengo. Es pieza fundamental del kit de aprendizaje que me compré yo (por orden de los Reyes Magos, naturalmente), lo que pasa, es que en este caso que “supuestamente” era solo colocar un LED, no merecía la pena hacer tal despliegue de medios, pero esa es la excepción y no la regla general donde los circuitos se harán en la protoboard, uno de los temas que tengo previsto explicar en el siguiente post.

        Estos diálogos me recuerdan la genial obra de teatro italiana, (como Arduino), “Así es si, así os parece”, donde el autor Pirandello, juega con los espectadores, haciéndoles cambiar de parece sobre un asunto, cada vez que entra en escena un nuevo personaje y cuenta su versión sobre el suceso. Debe ser que estos bandazos de opinión para n el exsectador, están arraigados en la tradición cultural italiana.

        Felice fiestas a todos, si hemos pasado sin problemas el día del Fin del Mundo, no tendremos dificultad en torear con el voltaje del PIN13. Un cordial saludo

        Comentario por felixmaocho | 22 diciembre 2012

  3. salida de voltaje de mi arduino UNO rev 3 2,2- 2,3 voltios. Ahí queda eso. Saludos

    Comentario por manuel | 7 febrero 2013 | Responder

  4. corrijo 3,5v

    Comentario por manuel | 7 febrero 2013 | Responder

  5. Los 2,2-2,3 voltios me los daba en un led conectado directamente al pin 13 y su GND de al lado y conectando el multímetro a las patillas del led. Saludos

    Comentario por manuel | 7 febrero 2013 | Responder

    • La caida de tension en un diodo es unos 2v mas o menos. Creo que eso estas leyendo con el polimetro. Nosotros comentabamos sacando eldiodo y midiendo desde la salida del pin13 a la masa. Salu2

      Comentario por ionhs | 7 febrero 2013 | Responder

  6. Uno de los problemas de los productos Copyleft es que nunca encuentras en un sitio de acceso publico documentos fiables al 100% de aquello que tienes en tu poder,, porque por su misma esencia, cualquiera puede haberlos copiado, pero con cambios y tu no tienes forma de saber si tu objeto es tal cual era el original, o cualquiera de las copia derivadas que hayan aparecido..

    Puede ser que los tres tengamos un Ardunino UNO y los tres tengamos un objeto ligeramente diferente, ¿Cómo saber que la descripción que encuentro en Internet sobre Arduino UNO se corresponde al aparato que yo tengo en mi poder?

    He encontrado lugares donde aseguran que el PIN 13 tiene asociado en la placa un LED y una resistencia, por lo que a diferencia de los demás PIN trabaja a 3,5 cuando el resto lo hace a 5 volts y sitios que no hacen especial distinción del PIN 13.

    Lo único que se me ocurre es medir con el polarímetro la diferencia de potencial entre la salida de de un circuito que parte de un PIN distinto del PIN 13 que manda HIGH y la llegada en el PIN de tierra y repetir la experiencia exactamente igual, pero haciéndolo partir el circuito del PIN 13.

    Si la medida da el mismo voltaje aproximadamente, ambos trabajan a el mismo voltaje y si en el primer caso se registra más voltaje que en el segundo, será porque los PIB diferenttes dek 13 trabajan a más voltaje que este.

    Si ocurre los contrario entonces francamente ceso de trabajar con e objetos CC.

    Desgraciadamente no estoy en Madrid y no tengo la posibilidad de hacer este pequeño experimento eb este momento.
    .

    Comentario por felixmaocho | 8 febrero 2013 | Responder

  7. Hola Felix: He tratado de bajar el software pero tengo dificultad, quizás sea la velocidad u otro problemas. Si me sugieres como hacerlo te lo agradezco,

    Comentario por Jose | 7 mayo 2013 | Responder

    • No entiendo por qué motivo no se te descargua correctamente el software, a mi, se me descargó al primer intento, hace dos meses cuando me compre Arduino..
      Yo volveria a intentarlo siguiendo al pié de la letra las instrucciones que doy en el post llamado “Arduino – Bajar el software e instalar los drivers de Arduino” que tiene esta URL https://felixmaocho.wordpress.com/2012/12/08/15465/..

      Si te falla este segundo intento, sinceramente no se que aconsejarte, como último último recurso puedo intentar mandarte por correo la carpeta que yo me descargué.con todos los ficheros. Saludos.

      Comentario por felixmaocho | 7 mayo 2013 | Responder

  8. Hola! lo primero darte las gracias por las explicaciones que estás dando sobre el arduino. Me están siendo de gran utilidad. Yo tengo que hacer un detector de mentiras para la universidad y me gustaría saber como programarlo así. Lo he buscado siguiendo como ejemplo el que pones en esta página, pero no lo he conseguido. ¿Podrías ayudarme? Muchas gracias!!

    Comentario por Lucía | 4 junio 2014 | Responder

    • El problema es que no tengo ni idea de como funciona un detector de mentiras, No sabría programarlo porque no tengo ni idea en que principio se basan. Supongo que se amplifican ondas cerebrales, pero desconozco si la sensibilidad de Arduino es suficientemente fina para captar las diferencias de intensidad o potencial de esas ondas, pero además no se que caracerísticas específicas que se producen al decir una mentira, que no se producen al decir una verdad. En estas condiciones no estoy en estado de poderte ayudar.

      Comentario por felixmaocho | 5 junio 2014 | Responder

      • En la universidad nos han dado un capítulo donde te explica como hacerlo, este es el enlace: http://es.scribd.com/doc/223878750/30-Proyectos-Con-Arduino
        Es el proyecto 26, en la página 145 del libro. Solo necesito saber que tipo de ejemplo seguir, igual que tú has hecho con el Blink. Gracias.

        Comentario por Lucía | 5 junio 2014

      • El ejemplo esta perfeectamente claro en el libro si tienes tiempo lo escribo en un post explicado paso a paso pero tiene toda la informacion que se necesita, El primer paso pesra poner en tu ordenador todo el entorno de programmacion que p necesitas para construir un sketch de Arduino eso lo encontrartas con bastante detalle en este post
        https://felixmaocho.wordpress.com/2012/12/08/15465/ luego comprar lo necesario, que es aparte de lo que te indican en el texto una tarjeta protoboard para poder montar todos los componentes (es una especie de regla llena de agujeros y un conjunto de cables de colores variados para poder unir los componentes. Si no tienes intención de seguir con Arduino solo debes comprar lo imprescindible y lo mejor es que lo hagas en las tiendas que indico pues ahí te venden una sola resisitencia si lo necesitas, si quieres seguir explorando las posibilidades de Arduino compra por internet en Dealer Expres pues tiene precios imbatibles pero hace compra en cantidad pues no te va a mandar una resitencia de 0,10 euros desde China. Los envçios tardan unos 15 dias. la información la tienes aqUi https://felixmaocho.wordpress.com/2013/11/23/curso-de-arduino-la-utilidad-de-saber-arduino/ Tambien te aconsejo que leas el como funciona basicamente Arduino en este programa . posiblemente entiendas después como funciona el programa que pretendes hacer. Todo esto te va a llevar varis días espero tener tiempo para explicar tucon detalle tu programa en un post.

        Saludos.

        Comentario por felixmaocho | 5 junio 2014

  9. mi arduino kuando kiero subir programa me dice esto
    Tamaño binario del Sketch: 1.084 bytes (de un máximo de 32.256 bytes)
    pero no se sube el progrmak , y no me deja guardar otro, ya le oprime al boton de reset de la placa y nada :s

    Comentario por Luis Angel Solis | 24 julio 2014 | Responder

    • Esun problema que no me ha ocurrido a mi. Hace el efecto que compiló el sketch sin problemas pues indica que termino y que su tamaño es aceptable. pero que no se carga por algún motivo en la placa. Emn mi opinión es que puede ser por un problema físico como que el cable de conexion haga mal contacto, (Yo probaría a ponerlo en otra salida USB, o un problema de Drivers, quiza antes de compilar deberias de comprobar que el puerto COM para el que compilas es el que se asignó a la hora de crear los drivers. Ya indiquñe en su momento que “Es importante que anotemos el nombre asignado al puerto COM para Arduino, en el caso del ejemplo ha sido el COM3, y en mi caso el (COM16) pues este dato nos sera pedido por los programas de manejo del Arduino (IDE de desarrollo de Arduino).”

      Comentario por felixmaocho | 24 julio 2014 | Responder


Responder

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: