Plataforma Arduino PDF
Plataforma Arduino PDF
Plataforma Arduino.
Saludos, soy Arduino, para empezar, har una serie de entregas en formato tutorial sobre la estupenda plataforma Arduino, un proyecto libre para la creacin de una plataforma para el prototipo de hardware con micro controladores. Y bien, que significa todo eso?, empecemos. Un micro controlador, es un circuito integrado (chip) que es una de las principales partes de una computadora, CPU, memoria, y entrada/salida. Para ello emplean una arquitectura un poco distinta a la conocida Eckert-Mauchly (mal llamada Von Neumann) que usan nuestros PC's, la arquitectura Hardware, en la que los datos (variables) y el programa, se almacenan en memorias diferentes. En el caso de los micro controladores modernos, la memoria del programa es del tipo FLASH, con lo que una vez cargado el programa, al iniciar el micro, empezara a ejecutar este programa inmediatamente, sin perder la memoria del programa al desconectarlo de la alimentacin.
Volviendo a la plataforma arduino, veamos de qu consta a nivel de hardware. El diseo principal de la placa arduino, consta de las siguientes caractersticas: Micro controlador AVR ATmega168 (Atmega8 en versiones anteriores, y Atmega328 planeado para futuras) CPU de 8 bits, hasta 20Mhz de reloj 16K de memoria de programa. 1K de RAM. 512 Bytes de EEPROM. 6 conversores analgico/digital de 10bits. Puerto serie UART, SPI. 6 canales PWD (Pulse width modulation)
De momento puede que no conozcamos estos trminos, pero iremos descubrindolos poco a poco en siguientes entregas de estos artculos. Adems, la placa Arduino tiene muchas ventajas:
1
Tiene un chip (FTDI) que se encarga de convertir el puerto serie del Atmega en un puerto serie sobre USB, con lo que tenemos conectividad USB hacia/desde un ordenador por ejemplo para programarlo o para enviar y recibir datos por l. La placa nos hace accesibles los pines del micro en conectores, para poder conectar nuestros circuitos a l. Dispone de un circuito de alimentacin para cuando no lo alimentemos por USB Conector ICSP que de momento no usaremos a no ser que desprogramemos el micro (muy poco probable y casi imposible de hacer por error).
El escenario bsico sera conectar el arduino por usb a nuestro PC, realizar un programa en el IDEArduino, mandrselo y el empezara a ejecutarlo inmediatamente, quedando guardado en su memoria FLASH sin perderlo al desconectarlo de la alimentacin, ejecutndolo cada vez que lo volvamos a conectar. Como acabareis de leer, adems, la plataforma arduino incluye un entorno de desarrollo (IDE), en el que realizar nuestros programas, compilarlos, y mandarlos al arduino. Usa un lenguaje de programacin propio, basado en C, muy sencillo de aprender, y adaptado conceptualmente a la filosofa de programacin de un micro controlador, en el que un nico programa se repite continuamente. Adems, el lenguaje incorpora varias libreras para manejar externo como pantallas LCD, matrices de LED's, memorias EEPROM. Proyecto hola mundo El proyecto Hola mundo, tratar de hacer parpadear el led con nuestra placa arduino utilizando el IDE y cargndole el cdigo a travs del USB. hardware
Placa Arduino Diecimila en alguno de los distribuidores espaoles (Bricogeek y libelium) o tambin se puede comprar una freeduino, que es
un clon de la arduino, pero ms barata. Pueden encontrar esta ltima en ebay. El precio del arduino ronda los 35 euros con portes y la freeduino 20 euros con portes, aproximadamente. 1 Led, que se compre por muy poco dinero en cualquier tienda de suministros electrnicos. Cable USB de tipo A-B, que es el mismo que suelen traer las impresoras que se conectan por USB, y es el que utilizaremos para conectar la arduino al pc
Primero debemos descargarnos el IDE para Windows (trabajaremos con windows), que trae todo, tambin el driver para que el sistema reconozca correctamente la arduino por el usb. Lo descargaremos de su web oficial. Ah, tambin est todo el IDE para linux y mac OS X: Descargamos la versin Windows Aqu Extraemos la carpeta que hay dentro del zip en el escritorio, en este caso, la carpeta arduino-0011 (el nmero depender de la versin del IDE que descarguemos) Conectamos el cable USB al arduino, y el otro extremo en el PC. Al instante, nos aparecer un cuadro notificando que windows ha reconocido un hardware nuevo. En el cuadro que nos abre, seleccionamos "No por el momento" y despus "instalar desde una lista o una ubicacin especfica" y finalmente hacemos un examinar y seleccionaremos la carpeta driver, que est dentro de la que hemos extrado en el escritorio, y lo instalar. Es posible que detecte ms cosas, pero tenemos que seguir este mismo procedimiento.
Montaje del proyecto. Vamos a ver un pequeo "Hola Mundo" Arduino y explicar de qu consta cada parte. Primero veamos un esquema del Arduino y expliquemos un poco las partes principales que vamos a usar:
Los conectores de pin superiores numeradas de 0 a 13, que son 14 Entradas/Salidas digitales, esto es, podemos ponerlas a 1 (5voltios) o a 0 (0 volts), vamos, encenderlas o apagarlas. Adems las dos primeras entradas/salidas estn conectadas al puerto serie UART del micro, con lo que podramos usarlas para comunicarnos con dispositivos externos en modo serie. Bien, una vez conectado el arduino al USB e instalado los drivers en el pc, vamos a conectar un LED a uno de los pines del arduino Un LED es un diodo, un dispositivo semiconductor que adems emite luz. Digamos que es como una pequea bombilla, pero con muy bajo consumo y que se puede alimentar con pequeo voltaje y corriente, y que adems tiene polaridad. En cualquier tienda de electrnica se puede comprar unos cuatro por un $20 o algo as, pedir que les den varios leds de 5mm de diferentes colores y podemos empezar con ello. Bien, como comento, el LED tiene polaridad, con lo que tenemos que tenerla en cuenta. Normalmente tiene una patilla ms larga, que sera el polo positivo (nodo), la ms corta la negativa (ctodo). Como hay veces que las dos patillas miden lo mismo por haber reutilizado un led o algo, pongo el esquema para que podis reconocer cada polo:
Insertaremos el nodo (patilla larga) del led en el pin digital 12 del arduino. Insertaremos el ctodo (patilla corta) en el pin etiquetado como GND que est un poco ms a la izquierda del pin 12, digamos que el pin GND siempre es como el polo negativo del circuito.
delay(1000); }
Vamos a repasar el programa que hemos escrito: La primera (y tercera) lnea entre /* y */ es un comentario, el compilador ignora totalmente lo que pongamos entre esa combinacin de simbolos, se usan para introducir anotaciones en el cdigo, para que cuando volvamos a abrir el archivo dentro de meses, sepamos para que hicimos cada cosa. En un programa tan sencillo parece trivial usarlos, pero en programas complejos se hace indispensable y es de buena costumbre usarlos siempre, as nos vamos acostumbrando. Luego tenemos int pinLED = 12; Aqu definimos una variable, pinLED, de tipo entero (int) con lo que podra guardar un nmero entero de 8 bits (entre -32768 y 32767), y la iniciamos con el valor 12, con lo que siempre que escribamos pinLED sera lo mismo que escribir 12, a no ser que modifiquemos la variable a lo largo del programa. Luego tenemos el primer bloque entre llaves " { ". Se trata de una funcin, la funcin setup(), que se usa para inicializar los puertos y datos y cualquier cosa que necesitemos antes del programa principal. Esta funcin se ejecuta una vez al iniciar el arduino. Dentro de esta funcin llamamos a pinMode(pinLED, OUTPUT); Esta funcin define el funcionamiento de los pines digitales del arduino como entradas o como salidas, aqu como vemos, le dice al arduino que configure el pin pinLED como salida (OUTPUT) con lo que pondr el pin 12 a funcionar como una salida de
6
datos. Y ahora la funcin principal de todo programa arduino, la funcin loop. Todo lo que definamos dentro de esta funcin, ser el programa principal del arduino, y se repetir indefinidamente (mientras alimentemos el arduino) Entonces llamamos a la funcin digitalWrite(pinLED, HIGH), con la que escribimos el valor digital HIGH en el pin pinLED, vamos, ponemos el pin 12, en "alto" o a 5 Voltios, con lo que circular electricidad a travs del LED conectado a esta patilla y se encender. Luego llamamos a la funcin delay(1000) que hace una pausa en el programa el tiempo en milisegundos que le digamos, en este caso 1000 milisegundos = 1 segundo. Entonces ponemos el pin 12 a 0 voltios con digitalWrite(pinLED, LOW), con lo que se apagar, y esperamos otro segundo apagado con otro delay. Volviendo al proyecto: Primero compilamos el programa dando al botn "PLAY"(el triangulo normal dentro del crculo), y si no tiene errores (done compiling) nos dira el tamao final del programa en la venta de estatus del IDE, si hay algn error nos lo mostrara. Si no hemos tenido errores al compilar, podemos darle al botn de upload, enviando el programa al arduino, que empezar a ejecutarlo despus de grabar el programa en su memoria FLASH, tenemos as, nuestro intermitente DIY.
Entonces como dijimos, el arduino volvera al inicio de la funcin loop, empezando de nuevo con el encendido del led, delay, apagado, delay... repitiendo esta secuencia hasta que desconectemos al Arduino.
ndice general
1 .Capitulo 1 2. Capitulo 2 2.1. Qu es ARDUINO? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Por qu ARDUINO? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Capitulo 2 3.1. Placas E/S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Arduino Diecimila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1. Visin General. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2. Resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.3. Alimentacin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.4. Memoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.5. Entrada y Salida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.6. Comunicacin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.7. Programacin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.8. Reseteo Automtico (Software). . . . . . . . . . . . . . . . . . . . . . . . 3.2.9. Proteccin de Sobrecarga del USB. . . . . . . . . . . . . . . . . . . . . . 3.2.10. Caractersticas Fsicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. SOFTWARE 16 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. Introduccin al Entorno Arduino. . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1. Barra de herramientas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2. Mens. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.3. Preferencias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. COMENZANDO CON ARDUINO 30 5.1. Estructura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3. Tipos de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4. Aritmtica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5. Constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6. Control de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7. E/S digital. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8. E/S analgica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 12 12 12
14 14 14 15 15 16 16 17 18 18 19 19
20 21 26 29 30 30 31 32
32 35 37 38 39 40 42 44
9
45 45 46 47
A. Ejemplos de Aplicacin con Arduino 45 A.1. Salida digital. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2. Entrada digital. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3. Salida PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4. Entrada de potencimetro. . . . . . . . . . . . . . . . . . . . . . . . . .: . . . . B. Esquemtico de Arduino Diecimila 49
48 48 49 50 51
10
Captulo 1
Esta gua de usuario intenta ser una forma de acercarse al diseo y desarrollo de proyectos basados en Arduino para aquellas personas que nunca han trabajado con l pero que poseen un buen nivel en programacin y electrnica. Por esta razn y para hacerlo fcil, se ha excluido mucha informacin existente en Internet y otros manuales para centrarse en los aspectos ms bsicos de las caractersticas y la programacin de Arduino. Otro de los objetivos de esta gua es organizar un poco la gran cantidad de informacin sobre este tema existente en la red. Para ello casi toda la informacin se ha obtenido a travs de la fuente http://www.arduino.cc o de manuales basados en ella pero algo ms estructurados. En general, el texto es una traduccin libre al espaol del documento original _Arduino Programming Notebook_ escrito y compilado por _Brian W. Evans_. Por ltimo, la gua est pensada para aquellas personas que no han usado Arduino pero les gustara iniciarse en este campo, por lo que si eres un usuario avanzado de esta plataforma no te aportar nada nuevo (slo te servir para repasar conceptos bsicos).
11
Captulo 2 INTRODUCCIN
2.1. Qu es ARDUINO? Arduino es una plataforma de prototipos electrnica de cdigo abierto (opensource) basada en hardware y software flexibles y fciles de usar. Est pensado para artistas, diseadores, como hobby y para cualquiera interesado en crear objetos o entornos interactivos. Arduino puede sentir el entorno mediante la recepcin de entradas desde una variedad de sensores y puede afectar a su alrededor mediante el control de luces, motores y otros artefactos. El micro controlador de la placa se programa usando el Arduino Programming Language (basado en Wiring1) y el Arduino Development Environment (basado en Processing2). Los proyectos de Arduino pueden ser autnomos o se pueden comunicar con software en ejecucin en un ordenador (por ejemplo con Flash, Processing, MaxMSP, etc.). Las placas se pueden ensamblar a mano3 o encargarlas preensambladas4; el software se puede descargar5 gratuitamente. Los diseos de referencia del hardware (archivos CAD) estn disponibles bajo licencia open-source, por lo que eres libre de adaptarlas a tus necesidades. Arduino recibi una mencin honorfica en la seccin Digital Communities del Ars Electrnica Prix en 2006. 2.2. Por qu ARDUINO? Hay muchos otros microcontroladores y plataformas micro controladoras disponibles para computacin fsica. Parallax Basic Stamp, Netmedia's BX-24, Phidgets, MIT's Handyboard, y muchas otras ofertas de funcionalidad similar. Todas estas herramientas toman los desordenados detalles de la programacin de micro controlador y la encierran en un paquete fcil de usar. Arduino tambin simplifica el proceso de trabajo con micro controladores, pero ofrece algunas ventajas para profesores, estudiantes y accionados interesados sobre otros sistemas:
1 2
Ms informacin en http://wiring.org.co Ms informacin en http://www.processing.org 3 Ms informacin en http://www.arduino.cc/en/Main/USBAssembly 4 Ms informacin en http://www.arduino.cc/en/Main/Buy 5 Ms informacin en http://www.arduino.cc/en/Main/Software
12
Barato: Las placas Arduino son relativamente baratas comparadas con otras plataformas micro controladoras. La versin menos cara del modulo Arduino puede ser ensamblada a mano, e incluso los mdulos de Arduino preensamblados cuestan menos de 500$. Multiplataforma: El software de Arduino se ejecuta en sistemas operativos Windows, Macintosh OSX y GNU/Linux. La mayora de los sistemas micro controladores estn limitados a Windows. Entorno de programacin simple y claro: El entorno de programacin de Arduino es fcil de usar para principiantes, pero suficientemente flexible para que usuarios avanzados puedan aprovecharlo tambin. Para profesores, est convenientemente basado en el entorno de programacin Processing, de manera que estudiantes aprendiendo a programar en ese entorno estarn familiarizados con el aspecto y la imagen de Arduino. Cdigo abierto y software extensible: El software Arduino est publicado como herramientas de cdigo abierto, disponible para extensin por programadores experimentados. El lenguaje puede ser expandido mediante librerias C++, y la gente que quiera entender los detalles tcnicos pueden hacer el salto desde Arduino a la programacin en lenguaje AVR C en el cual est basado. De forma similar, puedes aadir cdigo AVR-C directamente en tus programas Arduino si quieres. Cdigo abierto y hardware extensible: El Arduino est basado en micro controladores ATMEGA8 y ATMEGA168 de Atmel. Los planos para los mdulos estn publicados bajo licencia Creative Commons, por lo que diseadores experimentados de circuitos pueden hacer su propia versin del mdulo, extendindolo y mejorndolo. Incluso usuarios relativamente inexpertos pueden construir la versin de la placa del mdulo para entender como funciona y ahorrar dinero.
13
Captulo 3 HARDWARE
Hay mltiples versiones de la placa Arduino. La mayora usan el ATmega168 de Atmel, mientras que las placas ms antiguas usan el ATmega8. Nota: Los diseos de referencia para Arduino se distribuyen bajo licencia Creative Commons Attribution-ShareAlike 2.5.
3.1. Placas E/S Diecimila: Esta es la placa Arduino ms popular. Se conecta al ordenador con un cable estndar USB y contiene todo lo que necesitas para programar y usar la placa. Puede ser ampliada con variedad de dispositivos: placas hijas con caractersticas especficas. Nano: Una placa compacta diseada para uso como tabla de pruebas, el Nano se conecta al ordenador usando un cable USB Mini-B. Bluetooth: El Arduino BT contiene un modulo bluetooth que permite comunicacin y programacin sin cables. Es compatible con los dispositivos Arduino. LilyPad: Diseada para aplicaciones listas para llevar, esta placa puede ser conectada en fbrica, y un estilo sublime. Mini: Esta es la placa ms pequea de Arduino. Trabaja bien en tabla de pruebas o para aplicaciones en las que prima el espacio. Se conecta al ordenador usando el cable Mini USB. Serial: Es una placa bsica que usa RS232 como un interfaz con el ordenador para programacin y comunicacin. Esta placa es fcil de ensamblar incluso como ejercicio de aprendizaje. Serial Single Sided: Esta placa est diseada para ser grabada y ensamblada a mano. Es ligeramente ms grande que la Diecimila, pero aun compatible con los dispositivos. 3.2. Arduino Diecimila 3.2.1. Visin General El Arduino Diecimila es una placa micro controladora basada en el ATmega168. Tiene 14 pines de entrada/salida digital (de los cuales 6 pueden ser usados como salidas PWM), 6 entradas analgicas, un oscilador de cuarzo a 16MHz, una conexin USB, un conector para alimentacin, una cabecera ICSP, y un botn de reset. Contiene todo lo necesario para soportar el micro controlador; simplemente
14
conctalo a un ordenador con un cable USB o enchfalo con un adaptador AC/DC o batera para comenzar.
Descripcin
ATmega168 5V 7 - 12 V 6 - 20 V 14 (de los cuales 6 proveen salidas PWM) 6 40 mA 50 mA 16 KB, de los cuales 2 KB usados para bootloader 1 KB 512 bytes 16 MHz
Cuadro 3.1: Caractersticas tcnicas de Arduino Diecimila 3.2.3. Alimentacin El Arduino Diecimila puede ser alimentado a travs de la conexin USB o con un suministro de energa externo. La fuente de energa se selecciona mediante el jumper PWR_SEL: para alimentar a la placa desde la conexin USB, colocarlo en
15
los dos pines ms cercanos al conector USB, para un suministro de energa externo, en los dos pines ms cercanos al conector de alimentacin externa. La alimentacin externa (no USB) puede venir o desde un adaptador AC-a-DC (wall-wart) o desde una batera. El adaptador puede ser conectado mediante un enchufe centro-positivo en el conector de alimentacin de la placa. Los cables de la batera pueden insertarse en las cabeceras de los pines Gnd y Vin del conector POWER. Un regulador de bajo abandono proporciona eficiencia energtica mejorada. La placa puede operar con un suministro externo de 6 a 20 voltios. Si es suministrada con menos de 7 V, sin embargo, el pin de 5 V puede suministrar menos de cinco voltios y la placa podra ser inestable. Si usa ms de 12 V, el regulador de tensin puede sobrecalentarse y daar la placa. El rango recomendado es de 7 a 12 voltios. Los pines de alimentacin son los siguientes: VIN. La entrada de tensin a la placa Arduino cuando est usando una fuente de alimentacin externa (al contrario de los 5 voltios de la conexin USB u otra fuente de alimentacin regulada). Puedes suministrar tensin a travs de este pin, o, si suministra tensin a travs del conector de alimentacin, acceder a l a travs de este pin. 5V. El suministro regulado de energa usado para alimentar al micro controlador y otros componentes de la placa. Este puede venir o desde VIN a travs de un regulador en la placa, o ser suministrado por USB u otro suministro regulado de 5V. 3V3. Un suministro de 3.3 V generado por el chip FTDI de la placa. La corriente mxima es de 50 mA. GND. Pines de Tierra. 3.2.4. Memoria El ATmega168 tiene 16 KB de memoria Flash para almacenar cdigo (de los cuales 2 KB se usa para el bootloader). Tiene 1 KB de SRAM y 512 bytes de EEPROM (que puede ser leda y escrita con la librera EEPROM1). 3.2.5. Entrada y Salida Cada uno de los 14 pines digitales del Diecimila puede ser usado como entrada o salida, usando funciones pinMode(), digitalWrite() y digitalRead()2. Operan a 5 voltios. Cada pin puede proporcionar o recibir un mximo de 40 mA y tiene una resistencia interna pull-up (desconectada por defecto) de 20-50 K. Adems, algunos pines tienen funciones especiales: Serial: 0 (Rx) y 1 (Tx). Usados para recibir (Rx) y transmitir (Tx) datos TTL en serie.
16
Estos pines estn conectados a los pines correspondientes del chip FTDI USB-aTTL Serie. Interruptores externos: 2 y 3. Estos pines pueden ser configurados para disparar un interruptor en un valor bajo, un margen creciente o decreciente, o un cambio de valor. Mirar la funcin attachInterrupt()3. PWM: 3, 5, 6, 9, 10 y 11. Proporcionan salida PWM de 8 bits con la funcin analogWrite()4. SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK).Estos pines soportan comunicacin SPI, la cual, aunque proporcionada por el hardware subyacente, no est actualmente incluida en el lenguaje Arduino. LED: 13. Hay un LED empotrado conectado al pin digital 13. Cuando el pin est a valor HIGH, el LED est encendido, cuando el pin est a LOW, est apagado. El Diecimila tiene 6 entradas analgicas, cada una de las cuales proporciona 10 bits de resolucin (por ejemplo 1024 valores diferentes). Por defecto miden 5 volts desde tierra, aunque es posible cambiar el valor ms alto de su rango usando el pin ARF y algn cdigo de bajo nivel. Adems, algunos pines tienen funcionalidad especializada: IC: 4 (SDA) y 5 (SCL). Soportan comunicacin IC (TWI) usando la libreria Wire5. Hay otro par de pines en la placa: AREF. Voltaje de referencia para las entradas analgicas. Usado con analogReference()6. Reset. Pone esta linea a LOW para resetear el microcontrolador. Tpicamente usada para aadir un botn de reset a dispositivos que bloquean a la placa principal.
1 2
Ms informacin en: http://www.arduino.cc/en/Reference/EEPROM. Ms informacin en: http://www.arduino.cc/en/Reference/. 3 Ms informacin en: http://www.arduino.cc/en/Reference. 4 Ms informacin en: http://www.arduino.cc/en/Reference. 5 Ms informacin en: http://wiring.org.co/reference/libraries/Wire/index.html. 6 Ms informacin en: http://www.arduino.cc/en/Reference.
3.2.6. Comunicacin El Arduino Diecimila tiene un numero de infraestructuras para comunicarse con un ordenador, otro Arduino, u otros microcontroladores. El ATmega168 provee comunicacin serie UART TTL (5 V), la cual est disponible en los pines digitales 0 (Rx) y 1 (Tx). Un FTDI FT232RL en la placa canaliza esta comunicacin serie al USB y los drivers FTDI (incluidos con el software Arduino) proporcionan un puerto
17
de comunicacin virtual al software del ordenador. El software Arduino incluye un monitor serie que permite a datos de texto simple ser enviados a y desde la placa Arduino. Una librera SoftwareSerial7 permite comunicacin serie en cualquiera de los pines digitales del Diecimila. El ATmega168 tambin soporta comunicacin 12C (TWI) y SPI. El software Arduino incluye una librera Wire para simplificar el uso del bus 12C8. Para usar la comunicacin SPI, consultar el esquema del ATmega168. 3.2.7. Programacin El Arduino Diecimila puede ser programado con el software Arduino9. El ATmega168 del Arduino Diecimila viene con un bootloader10 pregrabado que te permite subirle nuevo cdigo sin usar un programador hardware externo. Se comunica usando el protocolo original STK500. Tambin puedes saltar el bootloader y programar el ATmega168 a travs de la cabecera ICSP (In-Circuit Serial Programming)11 3.2.8. Reseteo Automtico (Software) En lugar de requerir una pulsacin fsica del botn de reset antes de una subida, el Arduino Diecimila esta diseado de forma que permite ser reseteado por software en ejecucin en una computadora conectada. Una de las lneas de control de flujo de hardware (DTR) del FT232RL esta conectada a la lnea de reset del ATmega168 a travs de un condensador de 100 nF. Cuando esta lnea toma el valor LOW, la lnea reset se mantiene el tiempo suficiente para resetear el chip. La versin 0009 del software Arduino usa esta capacidad para permitirte cargar cdigo simplemente presionando el botn upload en el entorno Arduino. Esto significa que el bootloader puede tener un tiempo de espera ms corto, mientras la bajada del DTR puede ser coordinada correctamente con el comienzo de la subida. Esta configuracin tiene otras repercusiones. Cuando el Diecimila esta conectado a un ordenador que ejecuta o Mac OS X o Linux, se resetea cada vez que se hace una conexin a l por software (a travs de USB). Durante el siguiente medio segundo aproximadamente, el bootloader se ejecutar en el Diecimila. Mientras est programado para ignorar datos _malformados_ (por ejemplo, cualquiera excepto una subida de cdigo nuevo), interceptar los primeros bytes de datos enviados a la placa despus de abrir la conexin. Si una rutina que se ejecuta en la placa recibe una configuracin una vez u otros datos cuando empieza, asegurarse de que el software con el que se comunica espera un segundo despus de abrir la conexin y antes de enviar estos datos.
18
7 8
Ms informacin en: http://www.arduino.cc/en/Reference/SoftwareSerial. Para ms detalles visitar: http://wiring.org.co/reference/libraries/Wire/index.html. 9 Descargar desde: http://www.arduino.cc/en/Main/Software. 10 Ms informacin en: http://www.arduino.cc/en/Tutorial/Bootloader. 11 Ms detalles en:http://www.arduino.cc/en/Hacking/Programmer.
3.2.9. Proteccin de Sobrecarga del USB. El Arduino Diecimila tiene un fusible reseteable que protege tus puertos USB del ordenador de cortes y sobrecargas. Aunque la mayora de los ordenadores proporcionan su propia proteccin interna, el fusible proporciona una capa de proteccin extra. Si ms de 500 mA se aplican al puerto USB, el fusible automticamente romper la conexin hasta que el corte o la sobrecarga sean eliminados. 3.2.10. Caractersticas Fsicas La mxima longitud y anchura del Diecimila PCB son 2.7 y 2.1 pulgadas respectivamente, con el conector USB y el conector de alimentacin que se extienden ms all de las primeras dimensiones. Tres agujeros de tornillo permiten a la placa atornillarse a una superficie o caja.
19
Captulo 4 SOFTWARE
4.1. Instalar el Software Arduino Esta seccin explica como instalar el software Arduino en un ordenador que ejecute cualquiera de los siguientes Sistemas Operativos: Windows, Mac OS X, GNU/Linux. Este documento explica como conectar tu placa Arduino al ordenador y cargar tu primera rutina. Estos son los pasos que seguiremos: 1. Obtener una placa Arduino y un cable. 2. Descargar el entorno Arduino. 3. Instalar los drivers USB. 4. Conectar la placa. 5. Conectar un LED. 6. Ejecutar el entorno Arduino. 7. Subir un programa. 8. Buscar el Led que parpadea. 1. Obtener una placa Arduino y un cable. Se asume que estas usando un Arduino Diecimila. Si tienes otra placa, lee la informacin correspondiente en http://www.arduino.cc/en/Guide/HomePage. El Arduino Diecimila es una placa simple que contiene todo lo que necesitas para empezar a trabajar con electrnica y programacin de micro controlador. Tambin necesitas un cable USB estndar (del tipo que conectaras a una impresora USB, por ejemplo).
4.1.1. Windows 2. Descargar el entorno Arduino. Para programar la placa Arduino necesitas el entorno Arduino. Descarga la ltima versin desde http://www.arduino.cc/en/Main/Software. Cuando termine la descarga, descomprime el archivo descargado. Asegrate de conservar la estructura de carpetas. Haz doble click en la carpeta para abrirla. Debera haber archivos y subcarpetas en su interior. 3. Instalar los drivers USB. Si estas usando un Arduino USB, necesitars instalar los drivers para el chip FTDI de la placa. Estos pueden encontrarse en el directorio drivers/FTDI USB Drivers de la distribucin Arduino. En el siguiente paso (_Conectar la placa_), se mostrar el asistente para Aadir Nuevo Hardware de Windows para estos drivers. La ltima versin de los drivers se puede encontrar en http://www.ftdichip.com/Drivers/VCP.htm. 4. Conectar la placa. La fuente de alimentacin se selecciona mediante el jumper entre los conectores del USB y alimentacin. Para alimentar la placa desde el puerto USB (bueno para controlar dispositivos de baja potencia como LEDs), coloca el jumper en los dos pines ms cercanos al conector USB. Para alimentar la placa desde una fuente externa (6-12 V), coloca el jumper en los dos pines ms cercanos al conector de alimentacin. En cualquier caso, conecta la placa a un puerto USB de tu ordenador.
21
El LED de alimentacin debera encenderse. El asistente para Aadir Nuevo Hardware debera abrirse. Indcale que no conecte a Windows Update y haz click en siguiente.
Figura 4.3: Asistente para Nuevo Hardware MS-Windows - Paso 1 Selecciona Instalar desde una lista o ubicacin especificada (Avanzado) y haz click en siguiente.
Figura 4.4: Asistente para Nuevo Hardware MS-Windows - Paso 2 Asegrate que Buscar el mejor driver en estas ubicaciones est marcado; desmarca Buscar dispositivos extrables; marca Incluir esta ubicacin en la bsqueda y navega a la ubicacin donde descomprimiste los drivers USB en el paso anterior. Haz click en siguiente.
22
Figura 4.5: Asistente para Nuevo Hardware MS-Windows - Paso 3 El asistente buscar el driver y dir que se encontr USB Serial Converter. Haz click en finalizar.
Figura 4.6: Asistente para Nuevo Hardware MS-Windows - Paso 4 El asistente para Aadir Nuevo Hardware aparecer de nuevo. Realiza los mismos pasos. Esta vez, se encontrar un USB Serial Port. 5. Conectar un LED (si estas usando una placa antigua). La primera rutina que subirs a la placa Arduino hace parpadear un LED. El Arduino Diecimila (y el Arduino NG original) tiene una resistencia incorporada y un LED en el pin 13. En el Arduino NG Rev. C y placas Arduino pre-NG, sin embargo, el pin 13 no tiene un LED incorporado. En estas placas, necesitars conectar la patilla positiva (ms larga) de un LED al pin 13 y la negativa (ms corta) a tierra (marcada como GND). Normalmente, tambin necesitaras usar una resistencia con el LED, pero estas placas tienen una resistencia integrada en el pin 13.
23
6. Ejecutar el entorno Arduino. Abrir la carpeta de Arduino y hacer doble click en la aplicacin Arduino. 7. Subir un programa. Abrir la rutina de ejemplo de parpadeo del LED: File > Sketchbook > Examples > Digital > Blink Seleccionar el dispositivo serie de la placa Arduino desde el men Herramientas > Puerto Serie. En Windows, este debera ser COM1 o COM2 para la placa serie Arduino, o COM3, COM4 o COM5 para la placa USB. Para descubrirlo, abrir el Administrador de Dispositivos de Windows (En la pestaa Hardware o en el Panel de Control de Sistema). Buscar un USB Serial Port en la seccin Puertos; esa es la placa arduino.
24
Figura 4.9: Men de seleccin de puerto del Entorno Arduino Asegurarse de que Arduino Diecimila est seleccionada en el men Tools > Board.
Figura 4.10: Men de seleccin de placa del Entorno Arduino Ahora, simplemente haz click en el botn Upload del entorno. Espera unos pocos segundos (deberas ver los LEDs Rx y Tx de la placa iluminndose). Si la carga es correcta, el mensaje Done uploading aparecer en la barra de estado.
8. Buscar el LED que parpadea. Unos pocos segundos despus de que la subida termine, deberas ver el LED mbar (amarillo) en la placa empezar a parpadear. Si lo hace enhorabuena! Has conseguido Arduino cargado y ejecutndose. Si tienes problemas, consulta http://www.arduino.cc/en/Guide/Troubleshooting 4.1.2. MAC OS X (v. 10.3.9 o posterior) 2. Descargar el entorno Arduino. Para programar la placa Arduino necesitas el entorno Arduino. Descarga la ltima versin desde http://www.arduino.cc/en/Main/Software. Cuando termine la descarga, descomprime el archivo descargado. Asegrate de conservar la estructura de carpetas. Haz doble click en la carpeta para abrirla. Debera haber archivos y subcarpetas en su interior. 3. Instalar los drivers USB. Si estas usando un Arduino USB, necesitars instalar los drivers para el chip FTDI de la placa. Estos pueden encontrarse en el directorio drivers de la distribucin Arduino. Si tienes un Mac ms antiguo como un Powerbook, iBook, G4 o G5, deberas usar los drivers. PPC: FTDIUSBSerialDriver_v2_1_9.dmg. Si tienes un Mac ms nuevo como un MacBook, MacBook Pro o Mac Pro, necesitas los drivers de Intel: FTDIUSBSerialDriver_v2_2_9_Intel.dmg. Haz doble click para montar la imagen del disco y ejecutar el FTDIUSBSerialDriver.pkg incluido.
26
La ltima versin de los drivers se puede encontrar en http://www.ftdichip.com/Drivers/VCP.htm. 4. Conectar la placa. La fuente de alimentacin se selecciona mediante el jumper entre los conectores del USB y alimentacin. Para alimentar la placa desde el puerto USB (bueno para controlar dispositivos de baja potencia como LEDs), coloca el jumper en los dos pines ms cercanos al conector USB. Para alimentar la placa desde una fuente externa (6-12 V), coloca el jumper en los dos pines ms cercanos al conector de alimentacin. En cualquier caso, conecta la placa a un puerto USB de tu ordenador. El LED de alimentacin debera encenderse.
Figura 4.13: Conexin del cable USB a la placa Arduino 5. Conectar un LED (si estas usando una placa antigua). La primera rutina que subirs a la placa Arduino hace parpadear un LED. El Arduino Diecimila (y el Arduino NG original) tiene una resistencia incorporada y un LED en el pin 13. En el Arduino NG Rev. C y placas Arduino pre-NG, sin embargo, el pin 13 no tiene un LED incorporado. En estas placas, necesitars conectar la patilla positiva (ms larga) de un LED al pin 13 y la negativa (ms corta) a tierra (marcada como _GND_). Normalmente, tambin necesitaras usar una resistencia con el LED, pero estas placas tienen una resistencia integrada en el pin 13. 6. Ejecutar el entorno Arduino. Abrir la carpeta de Arduino y hacer doble click en la aplicacin Arduino. 7. Subir un programa. Abrir la rutina de ejemplo de parpadeo del LED: File > Sketchbook > Examples > Digital >Blink.
27
Figura 4.14: Entorno Arduino Selecciona el dispositivo de la placa Arduino desde el men Tools > Serial Port. En el Mac, debera ser algo con /dev/tty.usbserial.
Figura 4.15: Men de seleccin de puerto del Entorno Arduino Asegrate de que Arduino Diecimila est seleccionado en el men Tools> Board.
28
Figura 4.16: Men de seleccin de placa del Entorno Arduino Ahora simplemente haz click en el botn Upload en el entorno. Espera unos pocos segundos (deberas ver los LEDs Rx y Tx en la placa iluminndose). Si la subida es correcta, el mensaje Done uploading aparecer en la barra de estado.
Figura 4.17: Botn de subida de la rutina a la placa 8. Buscar el LED que parpadea. Unos pocos segundos despus de que la subida termine, deberas ver el LED mbar (amarillo) en la placa empezar a parpadear. Si lo hace enhorabuena! Has conseguido Arduino cargado y ejecutndose. Si tienes problemas, consulta http://www.arduino.cc/en/Guide/Troubleshooting. 4.1.3. GNU/Linux Estas instrucciones se centran en la distribucin Ubuntu1, para ms informacin sobre cmo instalar el entorno Arduino en otras distribuciones visitar http://www.arduino.cc/playground/Learning/Linux. 1. Ejecutar el Gestor de Paquetes Synaptic (en Sistema > Administracin). 2. Primero necesitas habilitar los repositorios _Universe_ y _Multiverse_ para que puedas acceder a todos los paquetes que necesitas. Ir a Configuracin > Repositorios. Haz click en Aadir.
1
Marca Software restringido por copyright o cuestiones legales (multiverse) y Software libre mantenido por la comunidad (universe) y haz click en Aadir. Haz click en Cerrar y click en Cerrar en el dilogo Los repositorios han cambiado. 3. Haz click en el botn Recargar de la barra de herramientas. 4. Marca para instalar: sun-java5-jre, gcc-avr, avr-libc.
29
5. Haz click en Aplicar en la barra de herramientas. 6. Haz click en Aplicar en el cuadro de dilogo. Esto instalar los paquetes seleccionados. 7. Acepta la licencia de Java. 8. Espera hasta completar la instalacin: el cuadro de dilogo dir _Cambios aplicados_. Haz click en Cerrar. 9. Cierra Synaptic. 10. Descarga la distribucin de GNU/Linux de Arduino desde http://www.arduino.cc/en/Main/Software. Haz doble click en el archivo .zip y arrastra la carpeta que contiene a algn lugar (por ejemplo el Escritorio). 11. Ejecuta el Terminal (en Aplicaciones > Accesorios). 12. Escribe sudo update-alternatives config java y presiona Enter. Teclea el nmero de opcin que tiene java-1.5.0-sun en l y presiona Enter. Esto har de la versin de Java de Sun la predeterminada de tu sistema (necesaria porque la versin GNU todava no soporta todo lo necesitado por el entorno Arduino). 13. Haz doble click en arduino en el directorio de aplicacin de Arduino. Esto debera lanzar un dilogo preguntando dnde guardas los archivos de tus rutinas de Arduino. Un directorio Arduino en tu carpeta home es la ubicacin tpica. Haz click en OK. El entorno Arduino debera abrirse. 4.2. Introduccin al Entorno Arduino 4.2.1. Barra de herramientas. Verify/Compile Chequea el cdigo en busca de errores. Stop
Crea una nueva rutina. Open Muestra un men con todas las rutinas de tu _sketchbook_. Save
30
Carga tu cdigo a la placa Arduino I/O. Asegrate de guardar o verificar tu rutina antes de cargarla. Serial Monitor
Muestra datos serie enviados desde la placa Arduino (placa serie o USB). Para enviar datos a la placa, introduce el texto y haz click en el botn Send o presiona Enter. Elige la velocidad de transmisin de datos desde el desplegable que asigna la velocidad pasada al Serial.being en tu rutina. 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. Puedes comunicarte tambin con la placa desde Processing, Flash, MaxMSP, etc (consultan http://www.arduino.cc/playground/Main/Interfacing para ms detalles). Tab Menu Permite gestionar las rutinas con ms de un archivo (cada uno de los cuales aparece en su propia pestaa). Estos pueden ser: Archivos de cdigo de Arduino (sin extensin). Archivos de C (extensin .c). Archivos de C++ (extensin .cpp). Archivos de cabecera (extensin .h).
4.2.2. Mens Sketch Verify/Compile: Comprueba tu rutina para errores. Import Library: Utiliza una librera en tu rutina. Trabaja aadiendo #include en la cima de tu cdigo. Esto aade funcionalidad extra a tu rutina, pero incrementa su tamao. Para parar de usar una librera, elimina el #include apropiado de la cima de tu rutina. Show Sketch Folder: Abre la carpeta de rutinas en tu escritorio. Add File... : Aade otro _chero fuente a la rutina. El nuevo archivo aparece en una nueva pestaa en la ventana de la rutina. Esto facilita y agranda proyectos con mltiples archivos fuente. Los archivos pueden ser eliminados de una rutina usando el Tab Menu. Tools Auto Format: Esto formatea tu cdigo amigablemente.
31
Copy for Discourse: Copia el cdigo de tu rutina al portapapeles de forma conveniente para postear en un foro, completa con resaltado de sintaxis. Board: Selecciona la placa que estas usando. Esto controla la forma en que tu rutina es compilada y cargada as como el comportamiento de los elementos del men Burn Bootloader. Serial Port: Este men contiene todos los dispositivos series (reales o virtuales) de tu mquina. Debera actualizarse automticamente cada vez que abres el nivel superior del men Tools. Antes de subir tu rutina, necesitas seleccionar el elemento de este men que representa a tu placa Arduino. En el Mac, esto es probablemente algo como /dev/tty.usbserial-1B1 (para la placa USB), o /dev/tty.USA19QW1b1P1.1 (para una placa Serie conectada con un adaptador USB-a-Serie Keyspan). En Windows, es probablemente COM1 o COM2 (para una placa Serie) o COM4, COM5, COM7 o superior (para una placa USB) para descubrirlo, busca USB serial device en la seccin puertos del Gestor de dispositivos de Windows. Burn Bootloader: Los elementos en este men te permiten grabar un bootloader en tu placa con una variedad de programadores. Esto no es necesario para uso normal de una placa Arduino, pero puede ser til si encargas ATmegas adicionales o ests construyendo una placa por tu cuenta. Asegurate que has seleccionado la placa correcta del men Boards de antemano. Para grabar un bootloader con el AVR ISP, necesitas seleccionar el elemento que corresponde a tu programador del men Serial Port. 4.2.3. Preferencias Algunas preferencias pueden ser ajustadas en el dilogo Preferences (se encuentra bajo el men Arduino en el Mac, o File en Windows y GNU/Linux). El resto se puede encontrar en los archivos de preferencias.
32
33
Funciones Una funcin es un bloque de cdigo que tiene un nombre y un grupo de declaraciones que se ejecutan cuando se llama a la funcin. Podemos hacer uso de funciones integradas como void setup() y void loop() o escribir nuevas. Las funciones se escriben para ejecutar tareas repetitivas y reducir el desorden en un programa. En primer lugar se declara el tipo de la funcin, que ser el valor retornado por la funcin (int, void...). A continuacin del tipo, se declara el nombre de la funcin y, entre parntesis, los parmetros que se pasan a la funcin. type functionName(parameters) { statements; } La siguiente funcin int delayVal(), asigna un valor de retardo en un programa por lectura del valor de un potencimetro. int delayVal() { int v; //crea una variable temporal 'v' v = analogRead(pot); //lee el valor del potencimetro v /= 4; //convierte 0-1023 a 0-255 return v; //devuelve el valor final de v } Llaves {} Las llaves definen el comienzo y el final de bloques de funcin y bloques de declaraciones como void loop() y sentencias for e if. Las llaves deben estar balanceadas (a una llave de apertura {debe seguirle una llave de cierre }). Las llaves no balanceadas provocan errores de compilacin. void loop() { statements; } El entorno Arduino incluye una prctica caracterstica para chequear el balance de llaves. Slo selecciona una llave y su compaera lgica aparecer resaltada. Punto y coma ; Un punto y coma debe usarse al _nal de cada declaracin y separa los elementos del programa. Tambin se usa para separar los elementos en un bucle for.
34
int x = 13; //declara la variable 'x' como el entero 13 Nota: Olvidar un punto y coma al _nal de una declaracin producir un error de compilacin. Bloques de comentarios /*...*/ Los bloques de comentarios, o comentarios multilnea, son reas de texto ignoradas por el programa y se usan para grandes descripciones de cdigo o comentarios que ayudan a otras personas a entender partes del programa. Empiezan con /* y terminan con */ y pueden abarcar mltiples lneas. /* 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 generosamente y tambin pueden usarse para _comentar_ bloques de cdigo con propsitos de depuracin. Comentarios de lnea // Comentarios de una lnea empiezan con // y terminan con la siguiente lnea de cdigo. Como el bloque de comentarios, son ignorados por el programa y no toman espacio en memoria. // este es un comentario de una lnea Comentarios de una lnea se usan a menudo despues de declaraciones vlidas para proporcionar ms informacin sobre qu lleva la declaracin o proporcionar un recordatorio en el futuro. 5.2. Variables. Una variable es una forma de llamar y almacenar un valor numrico para usarse despus por el programa. Como su nombre indica, las variables son nmeros que pueden cambiarse continuamente al contrario que las constantes, cuyo valor nunca cambia. Una variable necesita ser declarada y, opcionalmente, asignada al valor que necesita para ser almacenada. int inputVariable = 0; inputVariable = analogRead(2); //declara una variable y asigna el valor a 0 //ajusta la variable al valor del pin //analgico 2
35
Una vez que una variable ha sido asignada, o reasignada, puedes testear su valor para ver si cumple ciertas condiciones, o puedes usarlo directamente. if(inputVariable < 100) //comprueba si la variable es menor que 100 { inputVariable = 100; //si es cierto asigna el valor 100 } delay(inputVariable); //usa la variable como retardo Declaracin de variable Todas las variables tienen que ser declaradas antes de que puedan ser usadas. Declarar una variable significa definir su tipo de valor, como int, long, float, etc., definir un nombre especfico, y, opcionalmente, asignar un valor inicial. Esto slo necesita hacerse una vez en un programa pero el valor puede cambiarse en cualquier momento usando aritmtica y varias asignaciones. int inputVariable = 0; Una variable puede ser declarada en un nmero de posiciones en todo el programa y donde esta definicin tiene lugar determina que partes del programa pueden usar la variable. mbito de la variable Una variable puede ser declarada al comienzo del programa antes del void setup(), localmente dentro de funciones, y algunas veces en un bloque de declaracin, por ejemplo bucles for. Donde la variable es declarada determina el mbito de la variable, o la habilidad de ciertas partes de un programa de hacer uso de la variable. Una variable global es una que puede ser vista y usada por cualquier funcin y declaracin en un programa. Esta variable se declara al comienzo del programa, antes de la funcin setup(). Una variable local es una que se de_ne dentro de una funcin o como parte de un bucle for. Slo es visible y slo puede ser usada dentro de la funcin en la cual fue declarada. Adems, es posible tener dos o ms variables del mismo nombre en diferentes partes del programa que contienen diferentes valores. int value; //'value' es visible por cualquier funcin void setup() { //no se necesita setup } void loop()
36
{ for(int i=0; i<20;) //'i' es slo visible dentro del bucle for { i++; } float f; //'f' es slo visible dentro de loop } 5.3. Tipos de datos Byte Byte almacena un valor numrico de 8 bits sin puntos decimales. Tienen un rango de 0 a 255. byte someVariable = 180; //declara 'someVariable' como un tipo byte int Enteros son los tipos de datos primarios para almacenamiento de nmeros sin puntos decimales y almacenan un valor de 16 bits con un rango de -32,768 a 32,767. int someVariable = 1500; //declara 'someVariable' como tipo int long Tipo de datos de tamao extendido para enteros largos, sin puntos decimales, almacenados en un valor de 32 bits con un rango de -2,146,483,648 a 2,147,483,647. long someVariable = 90000; //declara 'someVariable' como tipo long Float Un tipo de datos para nmeros en punto flotante, o nmeros que tienen un punto decimal. Los nmeros en punto flotante tienen mayor resolucin que los enteros y se almacenan como valor de 32 bits con un rango de -3.4028235E+38 a 3.4028235E+38. float someVariable = 3.14; //declara 'someVariable' como tipo float
37
Arrays Un array es una coleccin de valores que son accedidos con un ndice numrico. Cualquier valor en el array debe llamarse escribiendo el nombre del array y el ndice numrico del valor. Los arrays estn indexados a cero, con el primer valor en el array comenzando con el ndice nmero 0. Un array necesita ser declarado y opcionalmente asignarle valores antes de que puedan ser usados. int myArray[] = {value0, value1, value2...}; Asimismo es posible declarar un array declarando el tipo del array y el tamao y luego asignarle valores a una posicin del ndice int myArray[5]; //declara un array de enteros con 6 posiciones myArray[3] = 10; //asigna a la cuarta posicin del ndice el valor 10 Para recibir un valor desde un array, asignamos una variable al array y la posicin del ndice: x = myArray[3]; //x ahora es igual a 10 5.4. Aritmtica Los operadores aritmticos incluyen suma, resta, multiplicacin y divisin. Retornan la suma, diferencia, producto o cociente (respectivamente) de dos operandos. y = y+3; x = x-7; i = j*6; r = r/5; La operacin es llevada a cabo usando del tipo de datos de los operandos, as 9/4 devuelve 2 en lugar de 2.25. Si los operandos son de tipos diferentes, el tipo mayor es usado para el clculo. Nota: Usar el operador cast, por ejemplo (int) myFloat para convertir un tipo de variable a otro al vuelo. Asignaciones compuestas Las asignaciones compuestas combinan una operacin aritmtica con una asignacin de variable. Estas son muy frecuentemente encontradas en bucles for. Las asignaciones compuestas ms comunes incluyen: x++; x--; x += y; //lo mismo que x = x+1 //lo mismo que x = x-1 //lo mismo que x = x+y
38
x -= y; //lo mismo que x = x-y x *= y; //lo mismo que x = x*y x /= y; //lo mismo que x = x/y
Operadores de comparacin Las comparaciones de una variable o constante con otra se usan a menudo en declaraciones if para comprobar si un condicin especfica es cierta. x == y; //x es igual a y x != y; //x no es igual a y x < y; //x es menor que y x > y; //x es mayor que y x <= y; //x es menor o igual que y x >= y; //x es mayor o igual que y Operadores lgicos Los operadores lgicos son normalmente una forma de comparar dos expresiones y devuelven TRUE o FALSE dependiendo del operador. Hay tres operadores lgicos, AND, OR y NOT, que se usan a menudo en declaraciones if. //AND lgico: if(x>0 && x<5) //verdadero slo si las dos expresiones son ciertas //OR lgico: if(x>0 || y>0) //verdadero si al menos una expresin es cierta //NOT lgico: if(!(x>0)) //verdadero slo si la expresin es falsa 5.5. Constantes El lenguaje Arduino tiene unos cuantos valores predefinidos que se llaman constantes. Se usan para hacer los programas ms legibles. Las constantes se clasifican en grupos. true/false Estas son constantes Booleanas que de_nen niveles lgicos. FALSE se de_ne como 0 (cero) mientras TRUE es 1 o un valor distinto de 0. if(b == TRUE) { doSomething; } high/low
39
Estas constantes definen los niveles de pin como HIGH o LOW y se usan cuando se leen o se escriben los pines digitales. HIGH esta definido como el nivel 1 lgico, ON 5 V, mientras que LOW es el nivel lgico 0, OFF 0 V. digitalWrite(13, HIGH); input/output Constantes usadas con la funcin pinMode() para de_nir el modo de un pin digital como INPUT u OUTPUT. pinMode(13, OUTPUT);
5.6. Control de flujo If Las sentencias if comprueban si cierta condicin ha sido alcanzada y ejecutan todas las sentencias dentro de las llaves si la declaracin es cierta. Si es falsa el programa ignora la sentencia. if(someVariable ?? value) { doSomething; } Nota: Cudate de usar = en lugar de == dentro de la declaracin de la sentencia if. if. . . else if. . . else permite tomar decisiones este - o este. if(inputPin == HIGH) { doThingA; } else { doThingB; } else puede preceder a otra comprobacin if, por lo que mltiples y mutuas comprobaciones exclusivas pueden ejecutarse al mismo tiempo.
40
if(inputPin < 500) { doThingA; } else if(inputPin >= 1000) { doThingB; } else { doThingC; } for La sentencia for se usa para repetir un bloque de declaraciones encerradas en llaves un nmero especfico de veces. Un contador de incremento se usa a menudo para incrementar y terminar el bucle. Hay tres partes separadas por punto y coma (;), en la cabecera del bucle. for(inicializacin; condicin; expresin) { doSomething; } La inicializacin de una variable local, o contador de incremento, sucede primero y una sola una vez. Cada vez que pasa el bucle, la condicin siguiente es comprobada. Si la condicin devuelve TRUE, las declaraciones y expresiones que siguen se ejecutan y la condicin se comprueba de nuevo. Cuando la condicin se vuelve FALSE, el bucle termina. for(int i=0; i<20; i++) { digitalWrite(13, HIGH); delay(250); digitalWrite(13, LOW); delay(250); } While El bucle while se repetir continuamente, e infinitamente, hasta que la expresin dentro del parntesis se vuelva falsa. Algo debe cambiar la variable testeada, o el bucle while nunca saldr. //declara i, comprueba si es menor //que 20, 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
41
Esto podra estar en tu cdigo, como por ejemplo una variable incrementada, o una condicin externa, como un sensor de comprobacin. while(someVariable ?? value) { doSomething; } while(someVariable < 200) //comprueba si es menor que 200 { doSomething; //ejecuta las sentencias encerradas someVariable++; //incrementa la variable en 1 } do. . . while El bucle do. . . while es un bucle que trabaja de la misma forma que el bucle while, con la excepcin de que la condicin es testeada al final del bucle, por lo que el bucle do. . . while siempre se ejecutar al menos una vez. do { doSomething; }while(someVariable ?? value); do { x = readSensors(); delay(50); }while(x < 100); 5.7. E/S digital pinMode(pin, mode) Se usa en void setup() para con_gurar un pin espec_co para que se comporte o como INPUT o como OUTPUT. pintMode(pin, OUTPUT); //ajusta 'pin' como salida
Los pines digitales de Arduino estn ajustados a INPUT por defecto, por lo que no necesitan ser declarados explcitamente como entradas con pinMode(). Los pines configurados como INPUT se dice que estn e un estado de alta impedancia. Hay tambin convenientes resistencias de pull-up de 20KOhm, integradas en el chip ATmega que puede ser accedida por software. A estas resistencias pull-up integradas se accede de la siguiente manera.
42
Las resistencias de pull-up se usaran normalmente para conectar entradas como interruptores. Los pines configurados como OUTPUT se dice que estn en un estado de baja impedancia y pueden proporcionar 40 mA a otros dispositivos/circuitos. Nota: Cortocircuitos en los pines de Arduino o corriente excesiva pueden daar o destruir el pin de salida, o daar el chip ATmega. A menudo es una buena idea conectar un pin OUTPUT a un dispositivo externo en serie con una resistencia de 470Ohm o 1KOhm. digitalRead(pin) Lee el valor desde un pin digital especificado con el resultado HIGH o LOW. El pin puede ser especificado o como una variable o como una constante (0 - 13). value = digitalRead(Pin); digitalWrite(pin, value) Devuelve o el nivel lgico HIGH o LOW a (activa o desactiva) un pin digital especificado. El pin puede ser especificado como una variable o constante (0 13). digitalWrite(pin, HIGH); //ajusta 'pin' a HIGH //ajusta 'value' igual al pin de entrada
//Ejemplo de programa int led = 13; //conecta 'led' al pin 13 int pin = 7; //conecta 'pushbutton' al pin 7 int value = 0; //variable para almacenar el valor ledo void setup() { pinMode(led, OUTPUT); pinMode(pin, INPUT); } void loop() { value = digitalRead(pin); digitalWrite(led, value); }
//ajusta 'value' igual al pin de entrada //ajusta 'led' al valor del boton
43
5.8. E/S analgica analogRead(pin) Lee el valor desde un pin analgico especificado con una resolucin de 10 bits. Esta funcin slo trabaja en los pines analgicos (0 - 5). Los valores enteros devueltos estn en el rango de 0 a 1023.
value = analogRead(pin); //ajusta 'value' igual a 'pin' Nota: Los pines analgicos al contrario que los digitales, no necesitan ser declarados al principio como INPUT u OUTPUT. analogWrite(pin, value) Escribe un valor pseudo analgico usando modulacin por ancho de pulso (_PWM_ en ingls) a un pin de salida marcado como PWM. En los Arduinos ms nuevos con el chip ATmega168, esta funcin trabaja en los pines 3, 5, 6, 9, 10 y 11. Los Arduinos ms antiguos con un ATmega8 slo soportan los pines 9, 10 y 11. El valor puede ser especificado como una variable o constante con un valor de 0 a 255. analogWrite(pin, value); //escribe 'value' al 'pin' analogico 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: Relacin valor-salida con analogWrite() El valor de salida vara de 0 a 5 V segn el valor de entrada (de 0 a 255) en funcin del tiempo de pulso. Si t es el tiempo de pulso, la tabla 5.1 muestra la equivalencia entre el valor y la salida en funcin del tiempo. Como esta es una funcin hardware, el pin generar una onda esttica despus 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). int led = 10; int pin = 0; int value; 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
44
void loop() { value = analogRead(pin); //ajusta 'value' igual a 'pin' value /= 4; //convierte 0-1023 a 0-255 analogWrite(led, value); //saca la seal PWM al led } 5.9. Tiempo delay(ms) Pausa tu programa por la cantidad de tiempo especi_cada en milisegundos, donde 1000 es igual a 1 segundo. delay(1000); //espera por un segundo millis() Devuelve el nmero de milisegundos desde que la placa Arduino empez a ejecutar el programa actual como un valor long sin signo. value = millis(); //ajusta 'value' igual a millis() Nota: Este nmero se desbordar (resetear de nuevo a cero), despus de aproximadamente 9 horas. 5.10. Matemticas min(x,y) Calcula el mnimo de dos nmeros de cualquier tipo de datos y devuelve el nmero ms pequeo. value = min(value, 100); //asigna a 'value' al ms pequeo de 'value' o 100, //asegurndose que nunca superara 100.
max(x,y) Calcula el mximo de dos nmeros de cualquier tipo de datos y devuelve el nmero ms grande. value = max(value, 100); //asigna a 'value' al ms grande de 'value' o 100, //asegurndose que es al menos 100.
45
5.11. Aleatorio randomSeed(seed) Asigna un valor, o semilla (_seed_ en ingls), como el punto de partida para la funcin random().
randomSeed(value);
Como el Arduino es incapaz de crear un nmero verdaderamente aleatorio, randomSeed te permite colocar una variable, constante, u otra funcin dentro de la funcin random, lo cual ayuda a generar ms nmeros random aleatorios. Existen una variedad de diferentes semillas, o funciones, que pueden ser usadas en esta funcin incluyendo millis() o incluso analogRead() para leer ruido elctrico a travs de un pin analgico. random(max) random(min, max) La funcin random te permite devolver nmeros pseudo aleatorios en un rango especificado por los valores min y max. value = random(100, 200); //asigna a 'value' un nmero aleatorio //entre 100 y 200. Nota: Usar esto despus de usar la funcin randomSeed(). int randNumber; int led = 10; //variable para almacenar el valor //aleatorio //LED con una resistencia de 220 //En el pin 10 //setup no es necesario
void setup(){} void loop() { randomSeed(millis()); randNumber = random(255); analogWrite(led, randNumber); delay(500); }
//asigna millis() como semilla //numero aleatorio de 0 a 255 //salida de la seal PWM
46
5.12. Serie Serial.begin(rate) Abre el puerto serie y asigna la tasa de baudios para la transmisin de datos serie. La tpica tasa de baudios para comunicarse con el ordenador es 9600 aunque otras velocidades estn soportadas. void setup() { Serial.begin(9600);
} Nota: Cuando se usa la comunicacin serie, los pines digitales 0 (Rx) y 1 (Tx) no pueden ser usados al mismo tiempo. Serial.println(data) Imprime datos al puerto serie, seguido de un retorno de carro y avance de lnea automticos. Este comando toma la misma forma que Serial.print(), pero es ms fcil para leer datos en el Serial Monitor1. Serial.println(analogValue); void setup() { Serial.begin(9600); } //enva el valor de 'analogValue' //Ejemplo de aplicacin
void loop() { Serial.println(analogRead(0)); //enva valor analgico delay(1000); //pausa por 1 segundo }
47
Figura A.1: Esquema de salida digital Este es el programa bsico _hola mundo_ usado simplemente para activar o desactivar algo. En este ejemplo, un LED est conectado al pin 13, y parpadea cada segundo. La resistencia puede omitirse en este pin ya que el Arduino tiene una integrada. int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } //LED en el pin digital 13 //ejecutar una vez //asigna al pin 13 como salida
void loop() //ejecutar una y otra vez { digitalWrite(ledPin, HIGH); //activa el LED delay(1000); //pausa 1 segundo digitalWrite(ledPin, LOW); //desactiva el LED delay(1000); //pausa 1 segundo }
Figura A.2: Esquema de entrada digital Esta es la forma ms simple de entrada con slo dos estados posibles: ON u OFF. Este ejemplo lee un interruptor simple o pulsador conectado al pin 2. Cuando el interruptor est cerrado el pin de entrada leer HIGH y activar un LED.
48
int ledPin = 13; int inPin = 2; void setup() { pinMode(ledPin, OUTPUT); pinMode(inPin, INPUT); } void loop() { if(digitalRead(inPin == HIGH) { digitalWrite(ledPin, HIGH); delay(1000); //pausa 1 segundo digitalWrite(ledPin, LOW); delay(1000); } } A.3. Salida PWM
//comprueba si la entrada esta a HIGH //activa el LED //desactiva el LED //pausa 1 segundo
Figura A.3: Esquema de salida PWM La modulacin de ancho de pulso (PWM) es una forma de falsificar una salida analgica por la salida pulsante. Esto podra usarse para atenuar e iluminar un LED o posteriormente controlar un servomotor. El siguiente ejemplo ilumina y atena lentamente un LED usando bucles for. int ledPin = 9; void setup(){} void loop() { for(int i=0; i<=255; i++) { analogWrite(ledPin, i); delay(100); //pausa 100 ms } for(int i=255; i>=0; i--) { analogWrite(ledPin, i); delay(100); //pausa 100 ms } } //pin PWM para el LED
49
Figura A.4: Esquema de entrada de potencimetro Usando un potencimetro y una de los pines de conversin analgico-digital (ADC) de Arduino es posible leer valores de 0 a 1024. El siguiente ejemplo usa un potencimetro para controlar una frecuencia de parpadeo de un LED. int potPin = 0; int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(analogRead(potPin)); digitalWrite(ledPin, LOW); delay(analogRead(potPin)); //pin de entrada para el potencimetro //pin de salida para el LED
50
51
52
Fuentes Consultadas.
Pagina consultada. http://creativecommons.org/licenses/by-ncsa/3.0/, Whit licensee Creative Commons AttributionNoncommercial-Share Alike 3.0. http://www.yousk.com/?s=arduino
53