Guía de Usuario de Arduino

Rafael Enríquez Herrador 13 de noviembre de 2009

I.T.I. Sistemas Universidad de Córdoba i52enher@uco.es

Este trabajo está publicado bajo la licencia Creative Commons Attribution-Noncommercial-Share Alike 3.0. Para ver una copia de esta licencia, visita: O envía una carta a: Creative Commons 171 Second Street, Suite 300 San Francisco, California, 94105, USA 2
http://creativecommons.org/licenses/by-nc-sa/3.0/

Índice general
1. PREFACIO 2. INTRODUCCIÓN 3. HARDWARE 7 8
8 8

2.1. ¾Qué es ARDUINO? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. ¾Por qué ARDUINO? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1. Placas E/S . . . . . . . . . . . . . . . . . . 3.2. Arduino Diecimila . . . . . . . . . . . . . . 3.2.1. Visión General . . . . . . . . . . . 3.2.2. Resumen . . . . . . . . . . . . . . . 3.2.3. Alimentación . . . . . . . . . . . . 3.2.4. Memoria . . . . . . . . . . . . . . . 3.2.5. Entrada y Salida . . . . . . . . . . 3.2.6. Comunicación . . . . . . . . . . . . 3.2.7. Programación . . . . . . . . . . . . 3.2.8. Reseteo Automático (Software) . . 3.2.9. Protección de Sobrecarga del USB . 3.2.10. Características Físicas . . . . . . . 4.1. Instalar el Software Arduino . . . . . . . 4.1.1. Windows . . . . . . . . . . . . . . 4.1.2. MAC OS X (v. 10.3.9 o posterior) 4.1.3. GNU/Linux . . . . . . . . . . . . 4.2. Introducción al Entorno Arduino . . . . 4.2.1. Barra de herramientas . . . . . . 4.2.2. Menús . . . . . . . . . . . . . . . 4.2.3. Preferencias . . . . . . . . . . . . 5.1. 5.2. 5.3. 5.4. Estructura . . . Variables . . . . Tipos de datos Aritmética . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

10 11 11 12 12 13 13 14 14 14 15 15

4. SOFTWARE

16

16 17 23 26 27 27 29 29 30 32 34 35

5. COMENZANDO CON ARDUINO

30

5.5. Constantes . . . 5.6. Control de ujo 5.7. E/S digital . . . 5.8. E/S analógica . 5.9. Tiempo . . . . 5.10. Matemáticas . . 5.11. Aleatorio . . . . 5.12. Serie . . . . . . A.1. A.2. A.3. A.4.

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

36 37 39 40 41 42 42 43

A. Ejemplos de Aplicación con Arduino
Salida digital . . . . . . . Entrada digital . . . . . . Salida PWM . . . . . . . . Entrada de potenciometro

45

45 46 46 47

B. Esquemático de Arduino Diecimila

49

4

. . .1. . . . . . . . . . . . . . Características técnicas de Arduino Diecimila . Relación valor-salida con analogWrite() . . . 41 5 . . .Índice de cuadros 3. . . . . . . . 12 5. . . . . . . . . . . . . . . .1. . .

Menú de selección de puerto del Entorno Arduino . . . . .Paso 2 . . . . . Conexión del cable USB a la placa Arduino . . de entrada digital . . .Índice de guras 3. . . . . . . . . . . . . . . . . . . . . . . . . . Entorno Arduino . . A. . . 4. . . .Paso 4 . . . .Paso 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14. A. . . . . . . . . . . . . 4. Menú de selección de puerto del Entorno Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . .2. . . 4. . . . . . . . .11. . . . 4. . . . . Administrador de Dispositivos MS-Windows . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . 11 4. Menú de selección de placa del Entorno Arduino .Paso 3 . . . . . . .15. 4. .6. . 4. . . 4. . . . . . . . . . . . . 4. . . . . . . . . . . . . . . . Asistente para Nuevo Hardware MS-Windows . . . . . . . Conexión del cable USB a la placa Arduino . . . . . .17. .4. 4. . . . . . . . . . . . 4. 4. .7. . . . . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Botón de subida de la rutina a la placa . . .10. . . . . . . . . . . . . Instalación de drivers en Mac OS-X . . . . . .1. . . . . . .1. . . . . . . . . . . .3. . . . . . . . . . . . . . . . . . . . . .16. . . . . . . . . Asistente para Nuevo Hardware MS-Windows . . . . . Entorno Arduino . . . . 17 18 18 19 19 20 21 21 22 22 22 23 24 25 25 26 26 45 46 46 47 6 . . . . . . . . . .3. . . . . . . Placa Arduino Diecimila (USB) . . . . Asistente para Nuevo Hardware MS-Windows . . . . . . . . . .8. . Esquema Esquema Esquema Esquema de salida digital . Botón de subida de la rutina a la placa . . . . de salida PWM . . de entrada de potenciometro . . . . . 4. . . Menú de selección de placa del Entorno Arduino . . . . . . . . . . . 4. . . . . . . . . . Descripción de componentes de la placa Arduino Diecimila 4. . .9. . . . . . . . . . . . . . . . . A.13. . . . . . . . . . . . . . . . 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5. . . . .12. . . . . . 4. . . . . . . . . . . A. Asistente para Nuevo Hardware MS-Windows .

se ha excluido mucha información existente en Internet y otros manuales para centrarse en los aspectos más básicos de las características y la programación de Arduino. Por esta razón y para hacerlo fácil. el texto es una traducción libre al español del documento original Arduino Programming Notebook escrito y compilado por Brian W. En general. Por último. la guía está pensada para aquellas personas que no han usado Arduino pero les gustaría iniciarse en este campo.Capítulo 1 PREFACIO Esta guía de usuario intenta ser una forma de acercarse al diseño y desarrollo de proyectos basados en Arduino para aquellas personas que nunca han trabajado con él pero que poseen un buen nivel en programación y electrónica.arduino. Otro de los objetivos de esta guía es organizar un poco la gran cantidad de información sobre este tema existente en la red. Espero que les sea de utilidad. por lo que si eres un usuario avanzado de esta plataforma no te aportará nada nuevo (sólo te servirá para repasar conceptos básicos).cc o de manuales basados en ella pero algo más estructurados. 7 . Para ello casi toda la información se ha obtenido a través de la fuente http://www. Evans.

). el software se puede descargar5 gratuitamente. por lo que eres libre de adaptarlas a tus necesidades.processing.org http://www. Parallax Basic Stamp. MaxMSP. pero ofrece algunas ventajas para profesores. Arduino recibió una mención honoríca en la sección Digital Communities del Ars Electronica Prix en 2006. 2. Las placas se pueden ensamblar a mano3 o encargarlas preensambladas4 .1. Netmedia's BX-24. El microcontrolador de la placa se programa usando el Arduino Programming Language (basado en Wiring1 ) y el Arduino Development Environment (basado en Processing2 ). ¾Por qué ARDUINO? Hay muchos otros microcontroladores y plataformas microcontroladoras disponibles para computación física. Arduino también simplica el proceso de trabajo con microcontroladores. MIT's Handyboard. como hobby y para cualquiera interesado en crear objetos o entornos interactivos. Todas estas herramientas toman los desordenados detalles de la programación de microcontrolador y la encierran en un paquete fácil de usar.org.cc/en/Main/Software 8 .cc/en/Main/USBAssembly http://www. Processing.cc/en/Main/Buy http://www. Está pensado para artistas.2. ¾Qué es ARDUINO? Arduino es una plataforma de prototipos electrónica de código abierto (open-source) basada en hardware y software exibles y fáciles de usar.arduino. motores y otros artefactos. estudiantes y acionados interesados sobre otros sistemas: 2 Más 1 Más información en información en información en información en información en 3 Más 4 Más 5 Más http://wiring.arduino.Capítulo 2 INTRODUCCIÓN 2. diseñadores. Phidgets.arduino. Los proyectos de Arduino pueden ser autonomos o se pueden comunicar con software en ejecución en un ordenador (por ejemplo con Flash. y muchas otras ofertas de funcionalidad similar. Arduino puede sentir el entorno mediante la recepción de entradas desde una variedad de sensores y puede afectar a su alrededor mediante el control de luces. Los diseños de referencia del hardware (archivos CAD) están disponibles bajo licencia open-source. etc.co http://www.

9 . Los planos para los módulos están publicados bajo licencia Creative Commons. Código abierto y hardware extensible: El Arduino está basado en microcontroladores ATMEGA8 y ATMEGA168 de Atmel. está convenientemente basado en el entorno de programación Processing. pero sucientemente exible para que usuarios avanzados puedan aprovecharlo también. Macintosh OSX y GNU/Linux.Barato: Las placas Arduino son relativamente baratas comparadas con otras plataformas microcontroladoras. La mayoría de los sistemas microcontroladores están limitados a Windows. Código abierto y software extensible: El software Arduino está publicado como herramientas de código abierto. De forma similar. y la gente que quiera entender los detalles técnicos pueden hacer el salto desde Arduino a la programación en lenguaje AVR C en el cual está basado. extendiéndolo y mejorándolo. El lenguaje puede ser expandido mediante librerias C++. La versión menos cara del modulo Arduino puede ser ensamblada a mano. Entorno de programación simple y claro: El entorno de programación de Arduino es fácil de usar para principiantes. por lo que diseñadores experimentados de circuitos pueden hacer su propia versión del módulo. Para profesores. Incluso usuarios relativamente inexpertos pueden construir la versión de la placa del módulo para entender como funciona y ahorrar dinero. Multiplataforma: El software de Arduino se ejecuta en sistemas operativos Windows. puedes añadir código AVR-C directamente en tus programas Arduino si quieres. de manera que estudiantes aprendiendo a programar en ese entorno estarán familiarizados con el aspecto y la imagen de Arduino. disponible para extensión por programadores experimentados. e incluso los módulos de Arduino preensamblados cuestan menos de 50$.

Es compatible con los dispositivos Arduino. LilyPad: Diseñada para aplicaciones listas para llevar. Placas E/S Diecimila: Esta es la placa Arduino más popular. pero aun compatible con los dispositivos. Se conecta al ordenador usando el cable Mini USB. Nota: Los diseños de referencia para Arduino se distribuyen bajo licencia Creative Commons Attribution-ShareAlike 2. y un estilo sublime. Serial Single Sided: Esta placa está diseñada para ser grabada y ensamblada a mano.Capítulo 3 HARDWARE Hay múltiples versiones de la placa Arduino. Trabaja bien en tabla de pruebas o para aplicaciones en las que prima el espacio.5. mientras que las placas más antiguas usan el ATmega8. Serial: Es una placa básica que usa RS232 como un interfaz con el ordenador para programaligeramente más grande que la Diecimila. 3. Es . 10 ción y comunicación. fábrica. Nano: Una placa compacta diseñada para uso como tabla de pruebas. La mayoría usan el ATmega168 de Atmel. Puede ser ampliada con variedad de dispositivos: placas hijas con características especícas.1. el Nano se conecta al Bluetooth: El Arduino BT contiene un modulo bluetooth que permite comunicación y programación sin cables. Se conecta al ordenador con un cable estándar USB y contiene todo lo que necesitas para programar y usar la placa. esta placa puede ser conectada en Mini: Esta es la placa más pequeña de Arduino. Esta placa es fácil de ensamblar incluso como ejercicio de aprendizaje. ordenador usando un cable USB Mini-B.

Figura 3. 11 . simplemente conéctalo a un ordenador con un cable USB o enchúfalo con un adaptador AC/DC o batería para comenzar.1: Placa Arduino Diecimila (USB) Diecimila quiere decir 10000 en italiano y fue llamado así para resaltar el hecho de que más de 10000 placas Arduino han sido fabricadas. Visión General El Arduino Diecimila es una placa microcontroladora basada en el ATmega168.2. un oscilador de cuarzo a 16MHz. una cabecera ICSP. Tiene 14 pines de entrada/salida digital (de los cuales 6 pueden ser usados como salidas PWM). y un botón de reset. Arduino Diecimila 3.3. una conexión USB. El Diecimila es el último en la serie de placas USB Arduino. 6 entradas analógicas. un conector para alimentación.2. Contiene todo lo necesario para soportar el microcontrolador.1.

2. componentes de la placa.3. Este puede venir o desde VIN a través de un regulador en la placa. para un suministro de energía externo. La entrada de tensión a la placa Arduino cuando está usando una fuente de alimenta5V. Si usa más de 12 V. La alimentación externa (no USB) puede venir o desde un adaptador AC-a-DC (wall-wart) o desde una batería. El adaptador puede ser conectado mediante un enchufe centro-positivo en el conector de alimentación de la placa.20 V Pines digitales de E/S 14 (de los cuales 6 proveen salidas PWM) Pines de entrada analógicos 6 Corriente DC por pin E/S 40 mA Corriente DC para pin 3.2. La placa puede operar con un suministro externo de 6 a 20 voltios.3 V generado por el chip FTDI de la placa. Un suministro de 3.12 V Tensión de entrada (límite) 6 . Los cables de la batería pueden insertarse en las cabeceras de los pines Gnd y Vin del conector POWER. sin embargo. si suministra tensión a través del conector de alimentación. El suministro regulado de energía usado para alimentar al microcontrolador y otros 3V3. La fuente de energía se selecciona mediante el jumper PWR_SEL: para alimentar a la placa desde la conexión USB. El rango recomendado es de 7 a 12 voltios. colocarlo en los dos pines más cercanos al conector USB. . Resumen Microcontrolador ATmega168 Voltaje de operación 5V Tensión de entrada (recomendada) 7 . Un regulador de bajo abandono proporciona eciencia energética mejorada.1: Características técnicas de Arduino Diecimila Característica Descripción 3. Los pines de alimentación son los siguientes: VIN. en los dos pines más cercanos al conector de alimentación externa. acceder a él a través de este pin. La corriente máxima es de 50 mA. el pin de 5 V puede suministrar menos de cinco voltios y la placa podría ser inestable. Si es suministrada con menos de 7 V.2. 12 ción externa (al contrario de los 5 voltios de la conexión USB u otra fuente de alimentación regulada). Puedes suministrar tensión a través de este pin. o ser suministrado por USB u otro suministro regulado de 5 V.3. Alimentación El Arduino Diecimila puede ser alimentado a través de la conexión USB o con un suministro de energía externo.3 V 50 mA Memoria Flash 16 KB (de los cuales 2 KB usados para bootloader) SRAM 1 KB EEPROM 512 bytes Frecuencia de reloj 16 MHz Cuadro 3. o. el regulador de tensión puede sobrecalentarse y dañar la placa.

Interruptores externos: 2 y 3.4.2. LED: 13. Proporcionan salida PWM de 8 bits con la función analogWriEstos pines soportan comunicación SPI. algunos pines tienen funcionalidad especializada: Hay otro par de pines en la placa: I²C: 4 (SDA) y 5 (SCL). SPI: 10 (SS). algunos pines tienen funciones especiales: Serial: 0 (Rx) y 1 (Tx).arduino. un margen creciente o decreciente.5. no está actualmente incluida en el lenguaje Arduino.html http://www. 12 (MISO). Pone esta linea a LOW para resetear el microcontrolador. cuando el pin está a LOW.GND. Voltaje de referencia para las entradas analógicas. digitalWrite() y digitalRead() 2 . la cual. Entrada y Salida Cada uno de los 14 pines digitales del Diecimila puede ser usado como entrada o salida. 6. aunque es posible cambiar el valor más alto de su rango usando el pin ARF y algún código de bajo nivel. Cada pin puede proporcionar o recibir un máximo de 40 mA y tiene una resistencia interna pull-up (desconectada por defecto) de 20-50 KOhms. 5. Estos pines pueden ser congurados para disparar un te() 4 . está apagado. Además. información en: información en: información en: información en: información en: información en: 1 Más 2 Más 3 Más 4 Más 5 Más 6 Más http://www. Memoria El ATmega168 tiene 16 KB de memoria Flash para almacenar código (de los cuales 2 KB se usa para el bootloader). Reset.cc/en/Reference http://www. Estos pines estan conectados a los pines correspondientes del chip FTDI USB-a-TTL Serie. Típicamente usada para añadir un botón de reset a dispositivos que bloquean a la placa principal.arduino. o un cambio de valor. aunque proporcionada por el hardware subyacente.cc/en/Reference/EEPROM http://www. cada una de las cuales proporciona 10 bits de resolución (por ejemplo 1024 valores diferentes). 11 (MOSI).org.cc/en/Reference/ http://www. Pines de Tierra. Usados para recibir (Rx) y transmitir (Tx) datos TTL en serie. Usado con analogReference() . el LED está encendido. Cuando el pin está a valor El Diecimila tiene 6 entradas analógicas. usando funciones pinMode(). Tiene 1 KB de SRAM y 512 bytes de EEPROM (que puede ser leida y escrita con la librería EEPROM1 ). Hay un LED empotrado conectado al pin digital 13.cc/en/Reference 13 . PWM: 3. 10 y 11.2. interruptor en un valor bajo. 9. Operan a 5 voltios. Soportan comunicación I²C (TWI) usando la libreria Wire . Además. 5 6 AREF. 3.co/reference/libraries/Wire/index. 13 (SCK).cc/en/Reference http://wiring.arduino. HIGH.arduino.arduino. 3. Por defecto miden 5 voltios desde tierra. Mirar la función attachInterrupt() 3 .

Un FTDI FT232RL en la placa canaliza esta comunicación serie al USB y los drivers FTDI (incluidos con el software Arduino) proporcionan un puerto de comunicación virtual al software del ordenador. el Arduino Diecimila esta diseñado de forma que permite ser reseteado por software en ejecución en una computadora conectada. otro Arduino. consultar el esquema del ATmega168. Esta conguración tiene otras repercusiones. El ATmega168 también soporta comunicación 12C (TWI) y SPI.2.3. Cuando esta linea toma el valor LOW. se resetea cada vez que se hace una conexión a él por software (a través de USB).arduino.8.arduino.co/reference/libraries/Wire/index.org.6. el bootloader se ejecutará en el Diecimila. El software Arduino incluye una librería Wire para simplicar el uso del bus 12C8 . cualquiera excepto una subida de código nuevo).7. Para usar la comunicación SPI. u otros microcontroladores. El ATmega168 del Arduino Diecimila viene con un bootloader 10 pregrabado que te permite subirle nuevo código sin usar un programador hardware externo.cc/en/Main/Software 10 Más información en: http://www. 3. 3. Se comunica usando el protocolo original STK500. Mientras esté programado para ignorar datos malformados (por ejemplo.cc/en/Reference/SoftwareSerial http://wiring. Comunicación El Arduino Diecimila tiene un numero de infraestructuras para comunicarse con un ordenador. Reseteo Automático (Software) En lugar de requerir una pulsación física del botón de reset antes de una subida. interceptará los primeros bytes de datos enviados a la placa despues de abrir la conexión. La version 0009 del software Arduino usa esta capacidad para permitirte cargar código simplemente presionando el botón upload en el entorno Arduino. Cuando el Diecimila esta conectado a un ordenador que ejecuta o Mac OS X o Linux.arduino. Esto signica que el bootloader puede tener un tiempo de espera más corto.2.cc/en/Tutorial/Bootloader 11 Más detalles en:http://www. la cual está disponible en los pines digitales 0 (Rx) y 1 (Tx).2.cc/en/Hacking/Programmer 8 Para información en: más detalles visitar: 7 Más 14 . El ATmega168 provee comunicación serie UART TTL (5 V).arduino. También puedes saltar el bootloader y programar el ATmega168 a través de la cabecera ICSP (In-Circuit Serial Programming)11 . Programación El Arduino Diecimila puede ser programado con el software Arduino9 . Durante el siguiente medio segundo aproximadamente. Una de las lineas de control de ujo de hardware (DTR) del FT232RL esta conectada a la linea de reset del ATmega168 a través de un condensador de 100 nF.html 9 Descargar desde: http://www. Si una rutina que se ejecuta en la placa recibe una conguración una http://www. Una libreria SoftwareSerial 7 permite comunicación serie en cualquiera de los pines digitales del Diecimila. la linea reset se mantiene el tiempo suciente para resetear el chip. mientras la bajada del DTR puede ser coordinada correctamente con el comienzo de la subida. El software Arduino incluye un monitor serie que permite a datos de texto simple ser enviados a y desde la placa Arduino.

2. 3.9. el fusible automáticamente romperá la conexión hasta que el corte o la sobrecarga sean eliminados.2. el fusible proporciona una capa de protección extra. asegurarse de que el software con el que se comunica espera un segundo después de abrir la conexión y antes de enviar estos datos. 15 . Aunque la mayoría de los ordenadores proporcionan su propia protección interna. Protección de Sobrecarga del USB El Arduino Diecimila tiene un fusible reseteable que protege tus puertos USB del ordenador de cortes y sobrecargas.1 pulgadas respectivamente. con el conector USB y el conector de alimentación que se extienden más alla de las primeras dimensiones. 3. Si más de 500 mA se aplican al puerto USB.10.7 y 2. Características Físicas La máxima longitud y anchura del Diecimila PCB son 2.vez u otros datos cuando empieza. Tres agujeros de tornillo permiten a la placa atornillarse a una supercie o caja.

16 . El Arduino Diecimila es una placa simple que contiene todo lo que necesitas para empezar a trabajar con electrónica y programación de microcontrolador. Conectar un LED. lee la información correspondiente en http://www. 1. 6. Buscar el Led que parpadea. GNU/Linux. Si tienes otra placa. por ejemplo). Subir un programa. 4. 2. Ejecutar el entorno Arduino. Instalar el Software Arduino Esta sección explica como instalar el software Arduino en un ordenador que ejecute cualquiera de los siguientes Sistemas Operativos: Windows.Capítulo 4 SOFTWARE 4. Este documento explica como conectar tu placa Arduino al ordenador y cargar tu primera rutina.cc/en/Guide/HomePage. Conectar la placa. 5. Obtener una placa Arduino y un cable. 8.Obtener una placa Arduino y un cable En este tutorial se asume que estas usando un Arduino Diecimila.arduino. 3. Instalar los drivers USB. También necesitas un cable USB estándar (del tipo que conectarías a una impresora USB. Descargar el entorno Arduino. Estos son los pasos que seguiremos: 1.1. 7. Mac OS X.

cc/en/Main/Software.com/Drivers/ VCP.Figura 4. Estos pueden encontrarse en el directorio drivers/FTDI USB Drivers de la distribución Arduino. En cualquier caso. coloca el jumper en los dos pines más cercanos al conector USB.Descargar el entorno Arduino. 17 . La última versión de los drivers se puede encontrar en http://www. coloca el jumper en los dos pines más cercanos al conector de alimentación. conecta la placa a un puerto USB de tu ordenador. Asegurate de conservar la estructura de carpetas. Cuando termine la descarga.arduino.1. Para programar la placa Arduino necesitas el entorno Arduino.1: Descripción de componentes de la placa Arduino Diecimila 4.ftdichip. Debería haber archivos y subcarpetas en su interior. La fuente de alimentación se selecciona mediante el jumper entre los conectores del USB y alimentación. necesitarás instalar los drivers para el chip FTDI de la placa. 3.htm.Instalar los drivers USB.1. En el siguiente paso (Conectar la placa). Descarga la última versión desde http://www. se mostrará el asistente para Añadir Nuevo Hardware de Windows para estos drivers. Para alimentar la placa desde una fuente externa (6-12 V). Haz doble click en la carpeta para abrirla.Conectar la placa. descomprime el archivo descargado. 4. Si estas usando un Arduino USB. Windows 2. Para alimentar la placa desde el puerto USB (bueno para controlar dispositivos de baja potencia como LEDs).

3: Asistente para Nuevo Hardware MS-Windows . Figura 4.2: Conexión del cable USB a la placa Arduino El LED de alimentación debería encenderse. 18 .Paso 1 Selecciona Instalar desde una lista o ubicación especicada (Avanzado) y haz click en siguiente. Indícale que no conecte a Windows Update y haz click en siguiente. El asistente para Añadir Nuevo Hardware debería abrirse.Figura 4.

4: Asistente para Nuevo Hardware MS-Windows . Haz click en nalizar.Paso 2 Asegurate que Buscar el mejor driver en estas ubicaciones está marcado. marca Incluir esta ubicación en la búsqueda y navega a la ubicación donde descomprimiste los drivers USB en el paso anterior.5: Asistente para Nuevo Hardware MS-Windows . 19 .Figura 4. Haz click en siguiente. desmarca Buscar dispositivos extraibles. Figura 4.Paso 3 El asistente buscará el driver y dirá que se encontró USB Serial Converter.

El Arduino Diecimila (y el Arduino NG original) tiene una resistencia incorporada y un LED en el pin 13. 7. 5. Realiza los mismos pasos. Para descubrirlo. Normalmente. Abrir la carpeta de Arduino y hacer doble click en la aplicación Arduino.Ejecutar el entorno Arduino.Figura 4. En Windows. Abrir la rutina de ejemplo de parpadeo del LED: File > Sketchbook > Examples > Digital > Blink.Subir un programa.Paso 4 El asistente para Añadir Nuevo Hardware aparecerá de nuevo. En el Arduino NG Rev. necesitarás conectar la patilla positiva (más larga) de un LED al pin 13 y la negativa (más corta) a tierra (marcada como GND). esa es la placa Arduino. el pin 13 no tiene un LED incorporado. sin embargo. Seleccionar el dispositivo serie de la placa Arduino desde el menu Herramientas > Puerto Serie. se encontrará un USB Serial Port. también necesitaras usar una resistencia con el LED. pero estas placas tienen una resistencia integrada en el pin 13. o COM3. La primera rutina que subirás a la placa Arduino hace parpadear un LED. abrir el Administrador de Dispositivos de Windows (En la pestaña Hardware o en el Panel de Control de Sistema). este debería ser COM1 o COM2 para la placa serie Arduino. C y placas Arduino pre-NG. 20 . 6. Conectar un LED (si estas usando una placa antigua). Esta vez. COM4 o COM5 para la placa USB. Buscar un USB Serial Port en la sección Puertos. En estas placas.6: Asistente para Nuevo Hardware MS-Windows .

7: Entorno Arduino Figura 4.Figura 4.8: Administrador de Dispositivos MS-Windows 21 .

simplemente haz click en el botón Upload del entorno. deberías ver el LED ámbar (amarillo) en la placa empezar a parpadear.11: Botón de subida de la rutina a la placa 8.Buscar el LED que parpadea. el mensaje Done uploading aparacerá en la barra de estado. 22 . Si lo hace ½enhorabuena! Has conseguido Arduino cargado y ejecutándose. Unos pocos segundos después de que la subida termine. Si la carga es correcta. Espera unos pocos segundos (deberías ver los LEDs Rx y Tx de la placa iluminándose). Figura 4.cc/en/Guide/Troubleshooting.10: Menú de selección de placa del Entorno Arduino Ahora.arduino.9: Menú de selección de puerto del Entorno Arduino Asegurarse de que Arduino Diecimila está seleccionada en el menú Tools > Board. Si tienes problemas.Figura 4. Figura 4. consulta http://www.

iBook.3. Haz doble click para montar la imagen del disco y ejecutar el FTDIUSBSerialDriver.4. MacBook Pro o Mac Pro.2. Si tienes un Mac más nuevo como un MacBook. Descarga la última versión desde http://www. conecta la placa a un puerto USB de tu ordenador.htm. Haz doble click en la carpeta para abrirla. Para programar la placa Arduino necesitas el entorno Arduino. Para alimentar la placa desde el puerto USB (bueno para controlar dispositivos de baja potencia como LEDs). 3.9 o posterior) 2. La última versión de los drivers se puede encontrar en http://www.cc/en/Main/Software. descomprime el archivo descargado.12: Instalación de drivers en Mac OS-X VCP. El LED de alimentación debería encenderse.ftdichip.1. Cuando termine la descarga. necesitas los drivers de Intel: FTDIUSBSerialDriver_v2_2_9_Intel.pkg incluido. MAC OS X (v. necesitarás instalar los drivers para el chip FTDI de la placa. Para alimentar la placa desde una fuente externa (6-12 V).Conectar la placa.dmg. Figura 4. Debería haber archivos y subcarpetas en su interior. coloca el jumper en los dos pines más cercanos al conector USB. Asegurate de conservar la estructura de carpetas. deberías usar los drivers PPC: FTDIUSBSerialDriver_v2_1_9. 23 . Si estas usando un Arduino USB. 10. La fuente de alimentación se selecciona mediante el jumper entre los conectores del USB y alimentación.Descargar el entorno Arduino. Si tienes un Mac más antiguo como un Powerbook.Instalar los drivers USB. coloca el jumper en los dos pines más cercanos al conector de alimentación. En cualquier caso.dmg.arduino. G4 o G5.com/Drivers/ 4. Estos pueden encontrarse en el directorio drivers de la distribución Arduino.

Conectar un LED (si estas usando una placa antigua). 7.Ejecutar el entorno Arduino. pero estas placas tienen una resistencia integrada en el pin 13. el pin 13 no tiene un LED incorporado. En estas placas. La primera rutina que subirás a la placa Arduino hace parpadear un LED. necesitarás conectar la patilla positiva (más larga) de un LED al pin 13 y la negativa (más corta) a tierra (marcada como GND). sin embargo.Subir un programa. Abrir la carpeta de Arduino y hacer doble click en la aplicación Arduino. En el Arduino NG Rev. 24 . Abrir la rutina de ejemplo de parpadeo del LED: File > Sketchbook > Examples > Digital > Blink.Figura 4.13: Conexión del cable USB a la placa Arduino 5. El Arduino Diecimila (y el Arduino NG original) tiene una resistencia incorporada y un LED en el pin 13. también necesitaras usar una resistencia con el LED. 6. C y placas Arduino pre-NG. Normalmente.

25 .15: Menú de selección de puerto del Entorno Arduino Asegurate de que Arduino Diecimila está seleccionado en el menú Tools > Board. debería ser algo con /dev/tty.usbserial. En el Mac.14: Entorno Arduino Selecciona el dispositivo de la placa Arduino desde el menú Tools > Serial Port. Figura 4.Figura 4.

1. Primero necesitas habilitar los repositorios Universe y Multiverse para que puedas acceder a todos los paquetes que necesitas.cc/en/Guide/Troubleshooting. GNU/Linux Estas instrucciones se centran en la distribución Ubuntu1 .3. el mensaje Done uploading aparecerá en la barra de estado. 2.arduino.17: Botón de subida de la rutina a la placa 8. Haz click en Añadir. Unos pocos segundos después de que la subida termine.arduino.com/ 26 . consulta http://www. 1 Más información sobre la distribución en: http://www. Figura 4. 1. Ir a Conguración > Repositorios.16: Menú de selección de placa del Entorno Arduino Ahora simplemente haz click en el botón Upload en el entorno.cc/playground/ Learning/Linux. deberías ver el LED ámbar (amarillo) en la placa empezar a parpadear. Si tienes problemas.Figura 4. para más información sobre cómo instalar el entorno Arduino en otras distribuciones visitar http://www. 4. Espera unos pocos segundos (deberías ver los LEDs Rx y Tx en la placa iluminándose).ubuntu. Si lo hace ½enhorabuena! Has conseguido Arduino cargado y ejecutándose. Si la subida es correcta. Ejecutar el Gestor de Paquetes Synaptic (en Sistema > Administración ).Buscar el LED que parpadea.

Acepta la licencia de Java. Haz click en Cerrar y click en Cerrar en el diálogo Los repositorios han cambiado. Haz click en el botón Recargar de la barra de herramientas. 27 . El entorno Arduino debería abrirse.2. Esto debería lanzar un diálogo preguntando dónde guardas los archivos de tus rutinas de Arduino.zip y arrastra la carpeta que contiene a algún lugar (por ejempl el Escritorio). 6. Haz click en Aplicar en el cuadro de diálogo. 11. Escribe sudo update-alternatives cong java y presiona Enter. Un directorio Arduino en tu carpeta home es la ubicación típica. 13. Barra de herramientas Verify/Compile Chequea el código en busca de errores. Stop Para el Serial monitor. Cierra Synaptic. Descarga la distribición de GNU/Linux de Arduino desde http://www.0-sun en él y presiona Enter. Haz click en OK. Haz doble click en arduino en el directorio de aplicación de Arduino. Marca para instalar: sun-java5-jre.Marca Software restringido por copyright o cuestiones legales (multiverse) y Software libre mantenido por la comunidad (universe) y haz click en Añadir. 8.arduino. Haz click en Aplicar en la barra de herramientas. 3. avr-libc. Haz doble click en el archivo . Esto hará de la versión de Java de Sun la predeterminada de tu sistema (necesaria porque la versión GNU todavía no soporta todo lo necesitado por el entorno Arduino). Haz click en Cerrar.cc/en/ Main/Software.5. 5. 4. 10.2. gcc-avr. 12.1. Introducción al Entorno Arduino 4. 4. 9. Teclea el número de opción que tiene java-1. 7. Ejecuta el Terminal (en Aplicaciones > Accesorios). o minimiza otros botones. Espera hasta completar la instalación: el cuadro de diálogo dirá Cambios aplicados. Esto instalará los paquetes seleccionados.

Estos pueden ser: Archivos de código de Arduino (sin extensión). Para enviar datos a la placa. MaxMSP. Serial Monitor Muestra datos serie enviados desde la placa Arduino (placa serie o USB).New Crea una nueva rutina.cc/playground/Main/Interfacing para más detalles). Archivos de C++ (extensión . Asegúrate de guardar o vericar tu rutina antes de cargarla. Open Muestra un menú con todas las rutinas de tu sketchbook. Archivos de cabecera (extensión .being Tab Menu Permite gestionar las rutinas con más de un archivo (cada uno de los cuales aparece en su propia pestaña).arduino.h ). Upload to I/O board Carga tu código a la placa Arduino I/O. Save Guarda tus rutinas. introduce el texto y haz click en el botón Send o presiona Enter. Puedes comunicarte también con la placa desde Processing.c ). Flash. 28 . etc (consulta http://www. Archivos de C (extensión . Serial. Recuerda que en Mac o GNU/Linux. la placa Arduino se reiniciará (vuelve a ejecutar tu rutina desde del principio) cuando conectes con el Serial monitor.cpp ). Elige la velocidad de transmisión de datos desde el desplegable que asigna la velocidad pasada al en tu rutina.

Board: Selecciona la placa que estas usando. busca USB serial device en la sección puertos del Gestor de dispositivos de Windows. El resto se puede encontrar en los archivos de preferencias. Esto no es necesario para uso normal de una placa Arduino. pero incrementa su tamaño. Esto añade funcionalidad extra a tu rutina. El nuevo archivo aparece en una nueva pestaña en la ventana de la rutina.2. Esto facilita y agranda proyectos con múltiples archivos fuente. necesitas seleccionar el elemento que corresponde a tu programador del menú Serial Port. Los archivos pueden ser eliminados de una rutina usando el Tab Menu.3. /dev/tty. Menús Sketch Verify/Compile: Comprueba tu rutina para errores. es probablemente o (para una placa Serie) o .1 COM4 COM5 COM7 /dev/tty. Asegurate que has seleccionado la placa correcta del menú Boards de antemano. Tools Auto Format: Esto formatea tu código amigablemente.USA19QW1b1P1. necesitas seleccionar el elemento de este menú que representa a tu placa Arduino. . o File en Windows y GNU/Linux). Antes de subir tu rutina. Esto controla la forma en que tu rutina es compilada y cargada así como el comportamiento de los elementos del menú Burn Bootloader.4. : Añade otro chero fuente a la rutina. completa con resaltado de sintaxis. Para grabar un con el AVR ISP. pero puede ser útil si encargas ATmegas adicionales o estás construyendo una placa por tu cuenta. elimina el apropiado de la cima de tu rutina.. Preferencias Algunas preferencias pueden ser ajustadas en el diálogo Preferences (se encuentra bajo el menú Arduino en el Mac. Trabaja añadiendo en la cima de tu código.2. Copy for Discourse: Copia el código de tu rutina al portapapeles de forma conveniente para postear en un foro. esto es probablemente algo como (para la placa USB).2. Add File. bootloader 4. o superior (para una placa USB) . Para parar de usar una librería. Debería actualizarse automáticamente cada vez que abres el nivel superior del menú Tools. En Windows. Serial Port: Este menú contiene todos los dispositivos serie (reales o virtuales) de tu máquina. Import Library: Utiliza una librería en tu rutina.usbserial-1B1 COM1 COM2 bootloader Burn Bootloader: Los elementos en este menú te permiten grabar un en tu placa con una variedad de programadores.. o (para una placa Serie conectada con un adaptador USB-a-Serie Keyspan). #include #include Show Sketch Folder: Abre la carpeta de rutinas en tu escritorio.para descubrirlo. En el Mac. 29 .

void setup() { statements. //ajusta 'pin' como salida } loop() La función loop se ejecuta a continuación e incluye el código que se ejecuta contínuamente leyendo entradas. 30 . Esta función es el núcleo de todos los programas Arduino y hace la mayor parte del trabajo.Capítulo 5 COMENZANDO CON ARDUINO 5. etc. } Ambas funciones son requeridas para que el programa funcione. activando salidas. void setup() { pinMode(pin. setup() La función setup debería contener la declaración de cualquier variable al comienzo del programa. OUTPUT). Es la primera función a ejecutar en el programa. } void loop() { statements. Estructura La estructura básica del lenguaje de programación Arduino es bastante simple y se organiza en al menos dos partes o funciones que encierran bloques de declaraciones. es ejecutada una vez y es usada para asignar pinMode o inicializar las comunicaciones serie.1.

//Activa 'pin' delay(1000). type functionName(parameters) { statements.).. asigna un valor de retardo en un programa por lectura del valor de un potenciómetro. } //crea una variable temporal 'v' //lee el valor del potenciómetro //convierte 0-1023 a 0-255 //devuelve el valor final de v llaves {} Las llaves denen el comienzo y el nal de bloques de función y bloques de declaraciones como void loop() y sentencias for e if. //espera un segundo digitalWrite(pin. Las funciones se escriben para ejecutar tareas repetitivas y reducir el desorden en un programa. } La siguiente función int delayVal(). 31 ..void loop() { digitalWrite(pin. HIGH). //Desactiva 'pin' delay(1000). entre paréntesis. v = analogRead(pot). que será el valor retornado por la función (int. v /= 4. A continuación del tipo. Las llaves deben estar balanceadas (a una llave de apertura { debe seguirle una llave de cierre }). void loop() { statements. return v. los parámetros que se pasan a la función. //espera un segundo } funciones Una función es un bloque de código que tiene un nombre y un grupo de declaraciones que se ejecutan cuando se llama a la función. se declara el nombre de la función y. En primer lugar se declara el tipo de la función. } El entorno Arduino incluye una práctica característica para chequear el balance de llaves. Las llaves no balanceadas provocan errores de compilación. Podemos hacer uso de funciones integradas como void setup() y void loop() o escribir nuevas. Sólo selecciona una llave y su compañera lógica aparecerá resaltada. void. int delayVal() { int v. LOW).

//ajusta la variable al valor del pin //analógico 2 32 . int inputVariable = 0. Variables Una variable es una forma de llamar y almacenar un valor numérico para usarse después por el programa. bloques de comentarios /*. 5. opcionalmente. //declara la variable 'x' como el entero 13 Nota: Olvidar un punto y coma al nal de una declaración producirá un error de compilación. asignada al valor que necesita para ser almacenada. Una variable necesita ser declarada y. Como el bloque de comentarios. Como su nombre indica. // este es un comentario de una línea Comentarios de una línea se usan a menudo despues de declaraciones válidas para proporcionar más información sobre qué lleva la declaración o proporcionar un recordatorio en el futuro.*/ Los bloques de comentarios. o comentarios multilínea.. son areas de texto ignoradas por el programa y se usan para grandes descripciones de código o comentarios que ayudan a otras personas a entender partes del programa.punto y coma . son ignorados por el programa y no toman espacio en memoria. las variables son números que pueden cambiarse continuamente al contrario que las constantes. También se usa para separar los elementos en un bucle for. int x = 13. //declara una variable y asigna el valor a 0 inputVariable = analogRead(2). Empiezan con /* y terminan con */ y pueden abarcar multiples lineas. comentarios de línea // Comentarios de una línea empiezan con // y terminan con la siguiente línea de código.2. Un punto y coma debe usarse al nal de cada declaración y separa los elementos del programa. cuyo valor nunca cambia. /* este es un bloque de comentario encerrado no olvides cerrar el comentario tienen que estar balanceados! */ Como los comentarios son ignorados por el programa y no ocupan espacio en memoria deben usarse generósamente y también pueden usarse para comentar bloques de código con propositos de depuración..

33 . if(inputVariable < 100) //comprueba si la variable es menor que 100 { inputVariable = 100. antes de la función setup().Una vez que una variable ha sido asignada.. Una variable global es una que puede ser vista y usada por cualquier función y declaración en un programa. int inputVariable = 0. denir un nombre especíco. y. Donde la variable es declarada determina el ámbito de la variable. puedes testear su valor para ver si cumple ciertas condiciones. Declarar una variable signica denir su tipo de valor. opcionalmente. Una variable local es una que se dene dentro de una función o como parte de un bucle for. o reasignada. como int. asignar un valor inicial. i<20. Esto sólo necesita hacerse una vez en un programa pero el valor puede cambiarse en cualquier momento usando aritmética y varias asignaciones. Sólo es visible y sólo puede ser usada dentro de la función en la cual fue declarada. oat. etc. Una variable puede ser declarada en un número de posiciones en todo el programa y donde esta decinición tiene lugar determina que partes del programa pueden usar la variable. o la abilidad de ciertas partes de un programa de hacer uso de la variable. es posible tener dos o más variables del mismo nombre en diferentes partes del programa que contienen diferentes valores. ámbito de la variable Una variable puede ser declarada al comienzo del programa antes del void setup(). //usa la variable como retardo declaración de variable Todas las variables tienen que ser declaradas antes de que puedan ser usadas. long. Esta variable se declara al comienzo del programa. y algunas veces en un bloque de declaración. //'value' es visible por cualquier función void setup() { //no se necesita setup } void loop() { for(int i=0. localmente dentro de funciones. o puedes usarlo directamente. int value. Además. //si es cierto asigna el valor 100 } delay(inputVariable). por ejemplo bucles for.) //'i' es sólo visible dentro del bucle for { i++.

Cualquier valor en el array debe llamarse escribiendo el nombre del array y el índice numérico del valor. float someVariable = 3.767.4028235E+38 a 3. con el primer valor en el array comenzando con el índice número 0. //'f' es sólo visible dentro de loop 5. sin puntos decimales. Los números en punto otante tienen mayor resolución que los enteros y se almacenan como valor de 32 bits con un rango de -3.. Tienen un rango de 0 a 255. //declara 'someVariable' como tipo int long Tipo de datos de tamaño extendido para enteros largos.} } float f.147. value1. long someVariable = 90000. Un array necesita ser declarado y opcionalmente asignarle valores antes de que puedan ser usados.}. //declara 'someVariable' como tipo float arrays Un array es una colección de valores que son accedidos con un índice numérico.483.483.647.768 a 32. //declara 'someVariable' como un tipo byte int Enteros son los tipos de datos primarios para almacenamiento de números sin puntos decimales y almacenan un valor de 16 bits con un rango de -32. int myArray[] = {value0. Los arrays están indexados a cero. almacenados en un valor de 32 bits con un rango de -2. Tipos de datos byte Byte almacena un valor numérico de 8 bits sin puntos decimales.4028235E+38.146. o números que tienen un punto decimal.648 a 2. Asimismo es posible declarar un array declarando el tipo del array y el tamaño y luego asignarle valores a una posición del índice. byte someVariable = 180.14. 34 . value2..3. //declara 'someVariable' como tipo long oat Un tipo de datos para números en punto otante. int someVariable = 1500.

j*6. >= y. Las asignaciones compuestas más comunes incluyen: x++. diferencia. < y.int myArray[5]. r/5. y. asignamos una variable al array y la posición del índice: x = myArray[3]. y. x x x x x x == y. Nota: asignaciones compuestas Las asignaciones compuestas combinan una operación aritmética con una asignación de variable. por ejemplo (int)myFloat para convertir un tipo de variable a otro al vuelo. > y. Aritmética Los operadores aritméticos incluyen suma. operadores de comparación Las comparaciones de una variable o constante con otra se usan a menudo en declaraciones if para comprobar si un condición especíca es cierta. //asigna a la cuarta posición del índice el valor 10 Para recibir un valor desde un array. x-7.25. x--. //x //x //x //x //x //x es no es es es es igual a y es igual a y menor que y mayor que y menor o igual que y mayor o igual que y 35 . y. el tipo mayor es usado para el cálculo. y x i r = = = = y+3. Usar el operador cast. //declara un array de enteros con 6 posiciones myArray[3] = 10. Estas son muy frecuentemente encontradas en bucles for. La operación es llevada a cabo usando del tipo de datos de los operandos. //x ahora es igual a 10 5.4. != y. x += x -= x *= x /= //lo //lo //lo //lo //lo //lo mismo mismo mismo mismo mismo mismo que que que que que que x x x x x x = = = = = = x+1 x-1 x+y x-y x*y x/y y. producto o cociente (respectivamente) de dos operandos. Si los operandos son de tipos diferentes. resta. <= y. Retornan la suma. así 9/4 devuelve 2 en lugar de 2. multiplicación y división.

Se usan para hacer los programas más legibles. pinMode(13. AND.5. ON ó 5 V.operadores lógicos Los operadores lógicos son normalmente una forma de comparar dos expresiones y devuelven TRUE o FALSE dependiendo del operador. FALSE se dene como 0 (cero) mientras TRUE es 1 o un valor distinto de 0. true/false Estas son constantes Booleanas que denen niveles lógicos. que se usan a menudo en declaraciones if. OUTPUT). digitalWrite(13. 36 . mientras que LOW es el nivel lógico 0. if(b == TRUE) { doSomething. OFF ó 0 V. Constantes El lenguaje Arduino tiene unos cuantos valores predenidos que se llaman constantes. Las constantes se clasican en grupos. HIGH esta denido como el nivel 1 lógico. OR y NOT. //AND logico: if(x>0 && x<5) //OR logico: if(x>0 || y>0) //NOT logico: if(!(x>0)) //verdadero sólo si las dos expresiones son ciertas //verdadero si al menos una expresion es cierta //verdadero sólo si la expresión es falsa 5. HIGH). input/output Constantes usadas con la función pinMode() para denir el modo de un pin digital como INPUT u OUTPUT. } high/low Estas constantes denen los niveles de pin como HIGH o LOW y se usan cuando se leen o se escriben los pines digitales. Hay tres operadores lógicos.

if.6. if(someVariable ?? value) { doSomething. if(inputPin < 500) { doThingA. . if(inputPin == HIGH) { doThingA. else if. else permite tomar decisiones este . . } else { doThingC. } Nota: Cuídate de usar = en lugar de == dentro de la declaración de la sentencia if. por lo que multiples y mutuas comprobaciones exclusivas pueden ejecutarse al mismo tiempo. .o este. } else puede preceder a otra comprobación if. Si es falsa el programa ignora la sentencia. . Control de ujo if Las sentencias if comprueban si cierta condición ha sido alcanzada y ejecutan todas las sentencias dentro de las llaves si la declaración es cierta. } 37 . } else { doThingB.5. } else if(inputPin >= 1000) { doThingB.

. } //declara i. comprueba si es menor //que 20. HIGH). delay(250). hasta que la expresión dentro del paréntesis se vuelva falsa. por lo que el bucle do. Esto podría estar en tu código. i<20. Hay tres partes seperadas por punto y coma (. o el bucle while nunca saldrá. LOW). Cuando la condición se vuelve FALSE. como por ejemplo una variable incrementada. sucede primero y una sola una vez. Algo debe cambiar la variable testeada.for La sentencia for se usa para repetir un bloque de declaraciones encerradas en llaves un número especíco de veces. while El bucle do. con la excepción de que la condición es testeada al nal del bucle. } while(someVariable < 200) { doSomething. el bucle termina. ). while(someVariable ?? value) { doSomething. . } La inicialización de una variable local. } //comprueba si es menor que 200 //ejecuta las sentencias encerradas //incrementa la variable en 1 do. Si la condición devuelve TRUE. delay(250). condicion. for(inicializacion. e innitamente. o una condición externa. en la cabecera del bucle. Un contador de incremento se usa a menudo para incrementar y terminar el bucle. Cada vez que pasa el bucle. digitalWrite(13. o contador de incremento. while es un bucle que trabaja de la misma forma que el bucle while. . for(int i=0. la condición siguiente es comprobada. . expresion) { doSomething. 38 . i++) { digitalWrite(13. incrementa i en 1 //activa el pin 13 //pausa por un 1/4 de segundo //desactiva el pin 13 //pausa por un 1/4 de segundo while El bucle while se repetirá continuamente. . . como un sensor de comprobación. las declaraciones y expresiones que siguen se ejecutan y la condición se comprueba de nuevo. while siempre se ejecutará al menos una vez. someVariable++.

integradas en el chip ATmega que pueden ser accedidas por software.7. OUTPUT). El pin puede ser especicado o como una variable o como una constante (0 . Los pines congurados como INPUT se dice que están e un estado de alta impedancia. por lo que no necesitan ser declarados explícitamente como entradas con pinMode(). pinMode(pin. pintMode(pin. Los pines congurados como OUTPUT se dice que están en un estado de baja impedancia y pueden proporcionar 40 mA a otros dispositivos/circuitos. Cortocircuitos en los pines de Arduino o corriente excesiva puden dañar o destruir el pin de salida. //ajusta 'value' igual al pin de entrada 39 . E/S digital pinMode(pin. delay(50). //ajusta 'pin' como salida Los pines digitales de Arduino estan ajustados a INPUT por defecto. }while(someVariable ?? value). A menudo es una buena idea conectar un pin OUTPUT a un dispositivo externo en serie con una resistencia de 470Ohm o 1KOhm. A estas resistencias pull-up integradas se accede de la siguiente manera. //ajusta 'pin' como entrada //activa la resistencia de pull-up Las resistencias de pull-up se usarían normalmente para conectar entradas como interruptores. INPUT). value = digitalRead(Pin). digitalWrite(pin. mode) Se usa en void setup() para congurar un pin especíco para que se comporte o como INPUT o como OUTPUT. HIGH). //asigna el valor de readSensors() a x //pausa de 50 milisegundos //repite si x es menor que 100 5. Hay también convenientes resistencias de pull-up de 20KOhm. o dañar el chip ATmega. }while(x < 100).13). do { x = readSensors().do { doSomething. Nota: digitalRead(pin) Lee el valor desde un pin digital especicado con el resultado HIGH o LOW.

} //ajusta el pin 13 como salida //ajusta el pin 7 como entrada void loop() { value = digitalRead(pin). 6. OUTPUT). //conecta 'pushbutton' al pin 7 = 0.13). 10 y 11. value) Escribe un valor pseudo analógico usando modulación por ancho de pulso (PWM en inglés) a un pin de salida marcado como PWM. //escribe 'value' al 'pin' analogico 40 .8.digitalWrite(pin. analogWrite(pin. digitalWrite(pin. value) Devuelve o el nivel lógico HIGH o LOW a (activa o desactiva) un pin digital especicado. value = analogRead(pin). En los Arduinos más nuevos con el chip ATmega168. no necesitan ser declarados al principio como INPUT u OUTPUT. 5. 9. digitalWrite(led. E/S analógica analogRead(pin) Lee el valor desde un pin analógico especicado con una resolución de 10 bits. HIGH). Los Arduinos más antiguos con un ATmega8 sólo soporta los pines 9. analogWrite(pin. //Ejemplo int led = int pin = int value //ajusta 'pin' a HIGH de programa 13. //ajusta 'value' igual a 'pin' Nota: Los pines analógicos al contrario que los digitales. Esta función sólo trabaja en los pines analógicos (0 . value). Los valores enteros devueltos están en el rango de 0 a 1023. } //ajusta 'value' igual al pin de entrada //ajusta 'led' al valor del boton 5. value). esta función trabaja en los pines 3.5). INPUT). El pin puede ser especicado como una variable o constante (0 . pinMode(pin. 10 y 11. El valor puede ser especicado como una variable o constante con un valor de 0 a 255. //variable para almacenar el valor leido void setup() { pinMode(led. //conecta 'led' al pin 13 7.

Si t es el tiempo de pulso. //espera por un segundo millis() Devuelve el número de milisegundos desde que la placa Arduino empezó a ejecutar el programa actual como un valor long sin signo. int led = 10. void setup(){} //LED con una resistencia de 220ohm en el pin 10 //potenciometro en el pin analogico 0 //valor para lectura //setup no es necesario void loop() { value = analogRead(pin). la tabla 5. int value.1: Relación valor-salida con analogWrite() El valor de salida varía de 0 a 5 V según el valor de entrada (de 0 a 255) en función del tiempo de pulso. //saca la señal PWM al led } 5. donde 1000 es igual a 1 segundo. //ajusta 'value' igual a 'pin' value /= 4.Valor Nivel de salida 0 0 V (t ) 64 0 V (3/4 de t ) y 5 V (1/4 de t ) 128 0 V (1/2 de t ) y 5 V (1/2 de t ) 192 0 V (1/4 de t ) y 5 v (3/4 de t ) 255 5 V (t ) Cuadro 5.1 muestra la equivalencia entre el valor y la salida en función del tiempo. int pin = 0.9. 41 . Tiempo delay(ms) Pausa tu programa por la cantidad de tiempo especicada en milisegundos. //ajusta 'value' igual a millis() Nota: Este número se desbordará (resetear de nuevo a cero). después de aproximadamente 9 horas. delay(1000). //convierte 0-1023 a 0-255 analogWrite(led. value). value = millis(). el pin generará una onda estática después de una llamada a analogWrite en segundo plano hasta la siguiente llamada a analogWrite (o una llamada a digitalRead o digitalWrite en el mismo pin). Como esta es una función hardware.

y) Calcula el mínimo de dos números de cualquier tipo de datos y devuelve el número más pequeño. //asegurandose que nunca superara 100. constante. random(max) random(min. value = max(value. o semilla (seed en inglés). //asigna a 'value' al más grande de 'value' o 100. //variable para almacenar el valor //aleatorio //LED con una resistencia de 220ohm //en el pin 10 42 . max) La función random te permite devolver números pseudo aleatorios en un rango especicado por los valores min y max. int randNumber. Nota: Usar esto después de usar la función randomSeed().10. u otra función dentro de la función random. value = random(100. //asigna a 'value' un número aleatorio //entre 100 y 200. randomSeed(value). int led = 10. que pueden ser usadas en esta función incluyendo millis() o incluso analogRead() para leer ruido eléctrico a través de un pin analógico. 200). Matemáticas min(x. //asegurandose que es al menos 100. o funciones. value = min(value.y) Calcula el máximo de dos números de cualquier tipo de datos y devuelve el número más grande. como el punto de partida para la función random(). //asigna a 'value' al más pequeño de 'value' o 100. randomSeed te permite colocar una variable. //asigna 'value' como la semilla aleatoria Como el Arduino es incapaz de crear un número verdaderamente aleatorio. lo cual ayuda a generar mas números random aleatorios. 100). Aleatorio randomSeed(seed) Asigna un valor.5. 5. Existen una variedad de diferentes semillas. max(x.11. 100).

//salida de la señal PWM delay(500). los pines digitales 0 (Rx) y 1 (Tx) no pueden ser usados al mismo tiempo. Serie Serial. } 1 Más //envia el valor de 'analogValue' //ajusta al serie a 9600 bps //envia valor analogico //pausa por 1 segundo información en: 4.begin(9600). Este comando toma la misma forma que Serial.begin(rate) Abre el puerto serie y asigna la tasa de baudios para la transmisión de datos serie. Serial.12. seguido de un retorno de carro y avance de línea automáticos. } 5. //asigna millis() como semilla randNumber = random(255).println(analogRead(0)). //Ejemplo de aplicacion void setup() { Serial. } void loop() { Serial.begin(9600).println(data) Imprime datos al puerto serie. } //abre el puerto serie //ajusta la tasa de datos a 9600 bps Nota: Cuando se usa la comunicación serie.2 Introducción al Entorno Arduino 43 . Serial. delay(1000). void setup() { Serial.print(). pero es más fácil para leer datos en el Serial Monitor 1 . //numero aleatorio de 0 a 255 analogWrite(led.void setup(){} //setup no es necesario void loop() { randomSeed(millis()). randNumber). La típica tasa de baudios para comunicarse con el ordenador es 9600 aunque otras velocidades están soportadas.println(analogValue).

(última modicación.wiring. Marzo 2006). [2] SANTO ORCERO. Hardware Libre. Todo Linux. (última modicación. (última modicación. [6] WIRING. (2007). (2007) Arduino Programming Notebook. (última modicación. Disponible en: http://www.org. David.cc [5] ARDUINO . Brian W. Junio 2008).co 44 . Julio 2008)..wikipedia. the free encyclopedia. [3] ARDUINO .org/wiki/Arduino [4] ARDUINO : Homepage.Wikipedia. Madrid: Studio Press.Bibliografía [1] EVANS. Disponible en: http://www. Disponible en: http://en. Disponible en: http://www.Homepage.cc/es/ arduino. Marzo 2008). arduino. Pp: 12-17.

y parpadea cada segundo. //pausa 1 segundo } 45 . OUTPUT). La resistencia puede omitirse en este pin ya que el Arduino tiene una integrada. //pausa 1 segundo digitalWrite(ledPin. int ledPin = 13. LOW).1. void setup() { pinMode(ledPin.1: Esquema de salida digital Este es el programa básico hola mundo usado simplemente para activar o desactivar algo. un LED está conectado al pin 13. //activa el LED delay(1000). HIGH). En este ejemplo. Salida digital Figura A. } //LED en el pin digital 13 //ejecutar una vez //asigna al pin 13 como salida void loop() //ejecutar una y otra vez { digitalWrite(ledPin. //desactiva el LED delay(1000).Apéndice A Ejemplos de Aplicación con Arduino A.

3: Esquema de salida PWM 46 .2: Esquema de entrada digital Esta es la forma más simple de entrada con sólo dos estados posibles: ON u OFF. } } //pin de salida para el LED //pin de entrada (para un interruptor) //declara LED como salida //declara el interruptor como entrada //comprueba si la entrada esta a HIGH //activa el LED //pausa 1 segundo //desactiva el LED //pausa 1 segundo A. Este ejemplo lee un interruptor simple o pulsador conectado al pin 2. int inPin = 2. OUTPUT). Entrada digital Figura A. HIGH). delay(1000). Salida PWM Figura A.A. void setup() { pinMode(ledPin. pinMode(inPin. delay(1000). INPUT). int ledPin = 13.2. Cuando el interruptor está cerrado el pin de entrada leerá HIGH y activará un LED. LOW).3. digitalWrite(ledPin. } void loop() { if(digitalRead(inPin == HIGH) { digitalWrite(ledPin.

} } //pin PWM para el LED //incrementa el valor para i //asigna el nivel de brillo a i //pausa 100 ms //decrementa el valor para i //asigna el nivel de brillo a i //pausa 100 ms A. } for(int i=255. OUTPUT). El siguiente ejemplo usa un potenciometro para controlar una frecuencia de parpadeo de un LED. Esto podría usarse para atenuar e iluminar un LED o posteriormente controlar un servomotor. int ledPin = 13. //pin de entrada para el potenciometro //pin de salida para el LED //declara ledPin como OUTPUT 47 . i++) { analogWrite(ledPin. delay(100). El siguiente ejemplo ilumina y atenua lentamente un LED usando bucles for. Entrada de potenciometro Figura A.4.La modulación de ancho de pulso (PWM) es una forma de falsicar una salida analógica por la salida pulsante. i<=255.4: Esquema de entrada de potenciometro Usando un potenciometro y una de los pines de conversión analógico-digital (ADC) de Arduino es posible leer valores de 0 a 1024. i--) { analogWrite(ledPin. void setup(){} void loop() { for(int i=0. delay(100). i). int ledPin = 9. int potPin = 0. i>=0. i). void setup() { pinMode(ledPin.

HIGH). //desactiva ledPin delay(analogRead(potPin)). //pausa el programa digitalWrite(ledPin.} void loop() { digitalWrite(ledPin. //pausa el programa } 48 . LOW). //activa ledPin delay(analogRead(potPin)).

Apéndice B Esquemático de Arduino Diecimila 49 .

Sign up to vote on this title
UsefulNot useful