Arduino é unha plataforma de hardware e software libre, baseada nunha placa cun microcontrolador e un contorno de desenvolvemento (IDE), deseñada para facilitar o uso da electrónica en proxectos multidisciplinares.
O hardware consiste nunha placa cun microcontrolador Atmel AVR e portos de entrada/saída. Os microcontroladores máis usados son o Atmega168, Atmega328, Atmega1280, ATmega8 pola súa sinxeleza e baixo custo que permiten o desenvolvemento de múltiples deseños. Doutra banda o software consiste nun contorno de desenvolvemento que pon en funcionamento a linguaxe de programación con Processing e Wiring e o cargador de arranque (boot loader) que corre na placa.
Arduino pódese utilizar para desenvolver obxectos interactivos autónomos ou pode ser conectado a software do computador (por exemplo: Macromedia Flash, Processing, Max/MSP, Pure Data). As placas pódense montar a man ou adquirirse. O contorno de desenvolvemento integrado libre pódese descargar gratuitamente.
Ao ser open-hardware, tanto o seu deseño como a súa distribución é libre. É dicir, pode utilizarse libremente para o desenvolvemento de calquera tipo de proxecto sen adquirir ningunha licenza.
O proxecto Arduino recibiu unha mención honorífica na categoría de Comunidades Dixital no Prix Ars Electronica de 2006. Historia En 2005, en Ivrea (Italia), no Interaction Design Institute (fundado por Olivetti e Telecom Italia), iniciouse o proxecto para facer un dispositivo controlador programable construído por estudantes de deseño para proxectos interactivos de baixo custo para sistemas de prototipado. Os fundadores Massimo Banzi e David Cuartielles chamaron ao proxecto despois Arduin de Ivrea, tomando o nome dun bar que o tomara a súa vez de Arduino de Ivrea, primeiro rei de Italia en 1002. "Arduino" é tamén un nome de home, que en italiano significa "amigo valente".
O proxecto Arduino é unha plataforma de código aberto (IDE) para plataformas (Linux, Mac e Windows). O artista colombiano e programador Hernando Barragán creouno como tese no Interaction Design Institute Ivrea baixo a supervisión de Massimo Banzi e Casey Reas. Wiring baséase en Processing e a súa contorna de desenvolvemento integrado, que fora creado por Casey Reas e Ben Fry.
Grazas á base de software común, dos creadores do proxecto para a comunidade Arduino foi posible desenvolver programas para conectar con este hardware máis ou menos calquera obxecto electrónico, ordenador, sensores, pantallas e actuadores. Despois de anos de experimentación, agora é posible beneficiarse dunha ampla base de datos e información.
Hardware Placas Arduino Unha placa Arduino consta dun microcontrolador de 8-bit Atmel AVR con compoñentes complementarios para facilitar a programación e a incorporación noutros deseños. Un aspecto importante de Arduino é a forma estándar na que dispóñense os conectores, permitindo que a placa da CPU poida ser conectada a unha variedade de módulos intercambiables adicionais coñecidos como shields. Algúns comunícanse cos shields da placa Arduino directamente cos diferentes pins, pero moitos shields son individualmente direccionables a través dun bus I²C de serie, o que permite que moitos shields poidan apílarse e empregarse en paralelo. As placas Arduino oficias empregan a serie de circuítos integrados megaAVR, especificamente o ATmega8, ATmega168, ATmega328, ATMEGA1280 e Atmega2560. Un feixe doutros procesadores compatibles foron empregados por Arduino. A maioría das placas inclúen un regulador lineal de 5 voltios e un oscilador de 16 MHz de reloxo (ou oscilador de cuarzo nalgunhas variantes), aínda que algúns deseños, tales como o LilyPad son a 8 MHz e prescinde do regulador de tensión integrado na placa, debido a restricións determinadas polo deseño. Un microcontrolador Arduino está tamén pre-programado cun xestor de arranque que simplifica a carga de programas na memoria flash do chip, en comparación con outros dispositivos que normalmente necesitan un programador externo ou hardware adicional.
A nivel conceptual, cando utilízase a pila de software de Arduino, todas as placas prográmanse a través dunha conexión RS-232, pero a forma en que isto faise varía segundo a versión do hardware. As placas serie Arduino conteñen un circuíto inversor simple para converter entre o nivel RS-232 e os sinais de nivel TTL. As actuais placas Arduino prográmanse a través de portos USB, posto en funcionamento a través do USB circuítos FT232 FTDI. Algunhas variantes, como o Mini Arduino e o non oficial Boarduino, empregan un cable de datos USB, Bluetooth ou outros métodos. (Cando emprégase con ferramentas para microcontroladores tradicionais en vez do IDE Arduino, emprégase o estándar de programación AVR ISP).
A maioría das placa Arduino conectan os pins do microcontrolador como Entradas/Saídas para o seu uso por outros circuítos. O Diecimila, Duemilanove, e o actual Uno proporcionan 14 pins E/S dixitais, seis dos cales poden producir pulsos de ancho variable, e seis entradas analóxicas (PWM). Estes pins atópanse na parte superior do taboleiro, a través de conectores femia de 0,1 polgadas. Varias aplicacións shields Plug-in tamén están dispoñibles comercialmente.
O Arduino Nano, e Arduino son compatibles coa unión Bare Bones e placas Boarduino podendo proporcionar pins macho na parte inferior da placa para colocarse en placas universais sen soldadura.
Especificacións técnicas
Existen varias placas e deseños baseados en Arduino:
Arduinoplaca Procesador Frecuencia Voltaxe FlashkB EEPROMkB SRAMkB DixitalI/O pins ...conPWM Input analóxpins USBtipo deInterface OutrasI/O Dimensiónspolgadasmm 150px ADK ATmega2560 16 MHz 5 V 256 4 8 54 14 16 8U2 MAX3421EUSB Host 4 in × 2.1 in101.6 mm × 53.3 mm150px BT (Bluetooth) ATmega328 16 MHz 5 V 32 1 2 14 4 6 Non Bluegiga WT11 Bluetooth 150px Diecimila ATmega168 16 MHz 5 V 16 0.5 1 14 6 6 FTDI 2.7 in × 2.1 in68.6 mm × 53.3 mm Due ATMEL SAM3U 96 MHz 256 0 50 54 16 16 AT91SAM3U4Eatmel.com 150px Duemilanove ATmega168/328P 16 MHz 5 V 16/32 0.5/1 1/2 14 6 6 FTDI 2.7 in × 2.1 in68.6 mm × 53.3 mm 150px Ethernet ATmega328 16 MHz 5 V 32 1 2 14 4 6 Non Wiznet Ethernet 150px Fio ATmega328P 8 MHz 3.3 V 32 1 2 14 6 8 Non 1.6 in × 1.1 in40.6 mm × 27.9 mm 150px Leonardo Atmega32u4 16 MHz 5 V 32 1 2 14 6 12 32u4 2.7 in × 2.1 in68.6 mm × 53.3 mm 150px LilyPad ATmega168V ou ATmega328V 8 MHz 2.7-5.5 V 16 0.5 1 14 6 6 Non 2 in ⌀50 mm ⌀ Mega ATmega1280 16 MHz 5 V 128 4 8 54 14 16 FTDI 4 in × 2.1 in101.6 mm × 53.3 mm 150px Mega2560 ATmega2560 16 MHz 5 V 256 4 8 54 14 16 8U2/16U2 4 in × 2.1 in101.6 mm × 53.3 mm 150px Nano ATmega168 ou ATmega328 16 MHz 5 V 16/32 0.5/1 1/2 14 6 8 FTDI 1.70 in × 0.73 in43 mm × 18 mm 150px Uno ATmega328P 16 MHz 5 V 32 1 2 14 6 6 8U2/16U2 2.7 in × 2.1 in68.6 mm × 53.3 mm Micro ATmega32u4 16 MHz 5 V 32 1 2.5 20 7 12
Ademais das placas e hardware oficial hai outros deseños fabricados por empresas e usuarios que son empregados en proxectos variados.
Linguaxe de programación Arduino
A plataforma Arduino prográmase mediante o uso dunha linguaxe propia baseada na popular linguaxe de programación de alto nivel Processing. Con todo, é posible utilizar outras linguaxes de programación e aplicacións populares en Arduino."Interfacing Arduino to other languages", Proxecto Arduino. http://www.arduino.cc/playground/main/interfacingwithsoftware Algúns exemplos son:
Java Flash (mediante ActionScript) Processing Pure Data MaxMSP (contorna gráfica de programación para aplicacións musicais, de son e multimedia) VVVV (síntese de vídeo en tempo real) Adobe Director Python Ruby C C++ (mediante libSerial ou en Windows) C# Cocoa/Objective-C (para Mac OS X) Linux TTY (terminais de Linux) 3DVIA Virtools (aplicacións interactivas e de tempo real) SuperCollider (síntese de son en tempo real) Instant Reality (X3D) Liberlab (software de medición e experimentación) BlitzMax (con acceso restrinxido) Squeak (posta en funcionamento libre de Smalltalk) Mathematica MATLAB Minibloq (Contorna gráfica de programación, corre tamén en OLPC) Isadora (Interactividade audiovisual en tempo real) Perl Visual Basic .NET VBScript Gambas
Isto é posible debido a que Arduino comunícase mediante a transmisión de datos en formato serie que é algo que a maioría das linguaxes anteriormente citadas soportan. Para os que non soportan o formato serie de forma nativa, é posible utilizar software intermediario que traduza as mensaxes enviadas por ambas as partes para permitir unha comunicación fluída. É bastante interesante ter a posibilidade de interactuar Arduino mediante esta gran variedade de sistemas e linguaxes posto que dependendo de cales sexan as necesidades do problema que imos resolver poderemos aproveitarnos da gran compatibilidade de comunicación que ofrece.
Funcións básicas e operadores Arduino esta baseado en C e soporta todas as funcións do estándar C e algunhas de C++."Language Reference (estendede)", Proxecto Arduino. http://arduino.cc/en/reference/extended A continuación móstrase un resumo con tódalas estruturas da linguaxe Arduino:
Sintaxe básica Delimitadores: ;, {} Comentarios: //, /* */ Cabeceiras: #define, #include Operadores aritméticos: +, -, *, /, % Asignación: = Operadores de comparación: ==, !=, <, >, <=, >= Operadores Booleanos: &&, ||, ! Operadores de acceso a punteiros: *, & Operadores de bits: &, |, ^, , <<, >> Operadores compostos: Incremento/decremento de variables: ++, -- Asignación e operación: +=, -=, *=, /=, &=, |=
Estruturas de control Condicionais: if, if...else, switch case Bucles: for, while, do... while Bifurcaciones e saltos: break, continue, return, goto
Variables En canto ao tratamento das variables tamén comparte un gran parecido coa linguaxe C.
Constantes HIGH / LOW: niveis alto e baixo en pines. Os niveis altos son aqueles de 3 voltios ou máis (ata 5 voltios, tecnoloxía TTL). INPUT / OUTPUT: entrada ou saída true / false (verdadeiro/falso)
Tipos de datos void, boolean, char, unsigned char, byte, int, unsigned int, word, long, unsigned long, float, double, string, array
Conversión entre tipos Estas funcións reciben como argumento unha variable de calquera tipo e devolven unha variable convertida no tipo desexado.
char(), byte(), int(), word(), long(), float()
Cualificadores e ámbito das variables static, volatile, const
Utilidades sizeof()
Funcións Básicas En canto ás funcións básicas da linguaxe atopámonos coas seguintes:
E/S dixital pinMode(pin, modo) digitalWrite(pin, valor) int digitalRead(pin)
E/S analóxica analogReference(tipo) int analogRead(pin) analogWrite(pin, valor)
E/S avanzada shiftOut(dataPin, clockPin, bitOrder, valor) unsigned long pulseIn(pin, valor)
Tempo unsigned long millis() unsigned long micros() delay(ms) delayMicroseconds(microsegundos)
Matemáticas min(x, e), max(x, e), abs(x), constrain(x, a, b), map(valor, fromLow, fromHigh, toLow, toHigh), pow(base, expoñente), sqrt(x)
Trigonometría sin(rad), cos(rad), tan(rad)
Números aleatorios randomSeed(semente), long random(máx), long random(mín, máx)
Bits e bytes lowByte(), highByte(), bitRead(), bitWrite(), bitSet(), bitClear(), bit()
Interrupcións externas attachInterrupt(interrupción, función, modo) detachInterrupt(interrupción)
Interrupcións interrupts(), noInterrupts()
Comunicación por porto serie As funcións de manexo do porto serie deben ir precedidas de "Serial." aínda que non necesitan ningunha declaración na cabeceira do programa. Por isto considéranse funcións basee da linguaxe."Serial", Proxecto Arduino. http://arduino.cc/en/reference/serial
begin(), available(), read(), flush(), print(), println(), write()
Manipulación de portos