You are on page 1of 17

ARDUINO UNO

ARDUINO UNO
Arduino es una placa con un microcontrolador de la marca Atmel y con toda la
circuitera de soporte, que incluye, reguladores de tensin, un puerto USB (En los
ltimos modelos, aunque el original utilizaba un puerto serie) conectado a un mdulo
adaptador USB-Serie que permite programar el microcontrolador desde cualquier PC de
manera cmoda y tambin hacer pruebas de comunicacin con el propio chip.
Un arduino dispone de 14 pines que pueden configurarse como entrada o salida y a los
que puede conectarse cualquier dispositivo que sea capaz de transmitir o recibir seales
digitales de 0 y 5 V.
Tambin dispone de entradas y salidas analgicas. Mediante las entradas analgicas
podemos obtener datos de sensores en forma de variaciones continuas de un voltaje. Las
salidas analgicas suelen utilizarse para enviar seales de control en forma de seales
PWM.
Arduino UNO es la ltima versin de la placa, existen dos variantes, la Arduino UNO
convencional y la Arduino UNO SMD. La nica diferencia entre ambas es el tipo de
microcontrolador que montan.
La primera es un microcontrolador Atmega en formato DIP.
Y la segunda dispone de un microcontrolador en formato SMD.

Nosotros nos decantaremos por la primera porque nos permite programar el chip sobre
la propia placa y despus integrarlo en otros montajes.

ARDUINO UNO con microcontrolador formato DIP

ARDUINO UNO con microcontrolador formato SMD

DATOS TECNICOS
Microcontrolador
Volataje Operativo
Voltaje de Salida
(recomendado)
Voltaje de Salida
(limite)
Pins Digital E/S
PINS PWM Digital E/S
PINS ANALOGICOS E
DC Current per I/O Pin
DC Current for 3.3V Pin
Flash Memory
SRAM
EEPROM
VELOCIDAD DE RELOJ
LARGO
ANCHO
PESO

ATmega328P
5V
7-12V
6-20V
14 (of which 6 provide PWM
output)
6
6
20 mA
50 mA
32 KB (ATmega328P)
of which 0.5 KB used by
bootloader
2 KB (ATmega328P)
1 KB (ATmega328P)
16 MHz
68.6 mm
53.4 mm
25 g

PINES DE ENTRADA Y SALIDA.


Cada uno de los 14 pines digitales se puede usar como entrada o como salida.
Funcionan a 5V, cada pin puede suministrar hasta 40 mA. La intensidad mxima de
entrada tambin es de 40 mA. Cada uno de los pines digitales dispone de una resistencia
de pull-up interna de entre 20K y 50 K que est desconectada, salvo que nosotros
indiquemos lo contrario. Arduino tambin dispone de 6 pines de entrada analgicos que
trasladan las seales a un conversor analgico/digital de 10 bits.

Pines especiales de entrada y salida:


RX y TX: Se usan para transmisiones serie de seales TTL.
Interrupciones externas: Los pines 2 y 3 estn configurados para generar una
interrupcin en el atmega. Las interrupciones pueden dispararse cuando se encuentra un
valor bajo en estas entradas y con flancos de subida o bajada de la entrada.
PWM: Arduino dispone de 6 salidas destinadas a la generacin de seales PWM de
hasta 8 bits.
SPI: Los pines 10, 11, 12 y 13 pueden utilizarse para llevar a cabo comunicaciones
SPI, que permiten trasladar informacin full dplex en un entorno Maestro/Esclavo.

I 2C: Permite establecer comunicaciones a travs de un bus I 2C. El bus I 2C es un


producto de Phillips para interconexin de sistemas embebidos. Actualmente se puede
encontrar una gran diversidad de dispositivos que utilizan esta interfaz, desde pantallas
LCD, memorias EEPROM, sensores.

ALIMENTACION
Puede alimentarse directamente a travs del propio cable USB o mediante una fuente de
alimentacin externa, como puede ser un pequeo transformador o, por ejemplo una pila
de 9V. Los lmites estn entre los 6 y los 12 V. Como nica restriccin hay que saber
que si la placa se alimenta con menos de 7V, la salida del regulador de tensin a 5V
puede dar menos que este voltaje y si sobrepasamos los 12V, probablemente daaremos
la placa.
La alimentacin puede conectarse mediante un conector de 2,1mm con el positivo en el
centro o directamente a los pines Vin y GND marcados sobre la placa.
Hay que tener en cuenta que podemos medir el voltaje presente en el jack directamente
desde Vin. En el caso de que el Arduino est siendo alimentado mediante el cable USB,
ese voltaje no podr monitorizarse desde aqu.

ENTORNO DE PROGAMACION:

El Uno se puede programar con el software de Arduino (IDE). Seleccione "Arduino /


Genuino Uno" desde el men Herramientas> Placa (de acuerdo con el microcontrolador
en su placa).
Los ATmega328 en el Uno viene preprogramado con un Boatloader (cargador de
arranque) que le permite cargar nuevo cdigo a ella sin el uso de un programador de
hardware externo. Se comunica utilizando el protocolo original STK500 (referencia,
archivos de cabecera C).

Software Arduino IDE

ESTRUCTURA DE PROGRAMA.
La estructura bsica del lenguaje de programacin de Arduino es bastante simple y se
compone de al menos dos partes. Estas dos partes necesarias, o funciones, encierran
bloques que contienen declaraciones, estamentos o instrucciones.

VOID SETUP

La funcin setup() se invoca una sola vez cuando el programa empieza. Se utiliza para
inicializar los modos de trabajo de los pins, o el puerto serie. Debe ser incluido en un
programa aunque no haya declaracin que ejecutar.

VOID LOOP
Despus de llamar a setup(), la funcin loop() hace precisamente lo que sugiere su
nombre, se ejecuta de forma cclica, lo que posibilita que el programa este respondiendo
continuamente ante los eventos que se produzcan en la tarjeta

FUNCIONES
Una funcin es un bloque de cdigo que tiene un nombre y un conjunto de estamentos
que son ejecutados cuando se llama a la funcin. Son funciones setup() y loop() de las
que ya se ha hablado. Las funciones de usuario pueden ser escritas para realizar tareas
repetitivas y para reducir el tamao de un programa. Las funciones se declaran
asociadas a un tipo de valor type. Este valor ser el que devolver la funcin, por
ejemplo 'int' se utilizar cuando la funcin devuelva un dato numrico de tipo entero. Si
la funcin no devuelve ningn valor entonces se colocar delante la palabra void, que
significa funcin vaca. Despus de declarar el tipo de dato que devuelve la funcin se
debe escribir el nombre de la funcin y entre parntesis se escribirn, si es necesario, los
parmetros que se deben pasar a la funcin para que se ejecute.

type nombreFuncin(parmetros) {
estamentos;
}

La funcin siguiente devuelve un nmero entero, delayVal() se utiliza para poner un


valor de retraso en un programa que lee una variable analgica de un potencimetro
conectado a una entrada de Arduino. Al principio se declara como una variable local, v
recoge el valor ledo del potencimetro que estar comprendido entre 0 y 1023, luego se
divide el valor por 4 para ajustarlo a un margen comprendido entre 0 y 255, finalmente
se devuelve el valor v y se retornara al programa principal. Esta funcin cuando se
ejecuta devuelve el valor de tipo entero v
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

COMANDOS MAS USADOS EN ARDUINO

HIGH/LOW
Estas constantes definen los niveles de salida altos o bajos y se utilizan para la lectura o
la escritura digital para las patillas. ALTO se define como en la lgica de nivel 1, ON,
5 voltios, mientras que BAJO es lgica nivel 0, OFF, o 0 voltios.

INPUT/OUTPUT
Estas constantes son utilizadas para definir, al comienzo del programa, el modo de
funcionamiento de los pines
INPUT= Entrada
OUTPUT= Salida

pinMode(pin,mode)
Esta instruccin es utilizada en la parte de configuracin setup () y sirve para configurar
el modo de trabajo de un PIN pudiendo ser INPUT (entrada) u OUTPUT (salida).
pinMode(pin, OUTPUT); // configura pin como salida
Los terminales de Arduino, por defecto, estn configurados como entradas, por lo tanto
no es necesario definirlos en el caso de que vayan a trabajar como entradas. Los pines
configurados como entrada quedan, bajo el punto de vista elctrico, como entradas en
estado de alta impedancia.
Las resistencias internas normalmente se utilizan para conectar las entradas a
interruptores. En el ejemplo anterior no se trata de convertir un pin en salida, es
simplemente un mtodo para activar las resistencias interiores.
Los pins configurado como OUTPUT (salida) se dice que estn en un estado de baja
impedancia estado y pueden proporcionar 40 mA (miliamperios) de corriente a otros
dispositivos y circuitos. Esta corriente es suficiente para alimentar un diodo LED (no
olvidando poner una resistencia en serie), pero no es lo suficiente grande como para
alimentar cargas de mayor consumo como rels, solenoides, o motores. Un cortocircuito
en las patillas Arduino provocar una corriente elevada que puede daar o destruir el
chip Atmega. A menudo es una buena idea conectar en la OUTUPT (salida) una
resistencia externa de 470 o de 1000 .

digitalRead(pin)
Lee el valor de un pin (definido como digital) dando un resultado HIGH (alto) o LOW
(bajo). El pin se puede especificar ya sea como una variable o una constante (0-13).
valor = digitalRead(Pin); // hace que 'valor sea igual al estado ledo en el pin.

digitalWrite(Pin, Valor)
Enva al pin definido previamente como OUTPUT el valor HIGH o LOW (poniendo
en 1 o 0 la salida). El pin se puede especificar ya sea como una variable o como una
constante (0-13). digitalWrite(pin, HIGH); // deposita en el 'pin' un valor HIGH (alto o
1) El siguiente ejemplo lee el estado de un pulsador conectado a una entrada digital y lo
escribe en el pinde salida LED:

int led = 13; // asigna a LED el valor 13


int boton = 7; // asigna a botn el valor 7
int valor = 0; // define el valor y le asigna el valor 0
void setup() {
pinMode(led, OUTPUT); // configura el led (pin13) como salida
pinMode(boton, INPUT); // configura botn (pin7) como entrada
}
void loop() {
valor = digitalRead(boton); //lee el estado de la entrada botn
digitalWrite(led, valor); // enva a la salida ledel valor ledo
}

analogRead(pin)
Lee el valor de un determinado pin definido como entrada analgica con una resolucin
de 10 bits. Esta instruccin slo funciona en los pines (0-5). El rango de valor que
podemos leer oscila de 0 a 1023.
valor = analogRead(pin); // asigna a valor lo que lee en la entrada pin'
Nota: Los pins analgicos (0-5) a diferencia de los pines digitales, no necesitan ser
declarados como INPUT u OUPUT ya que son siempre INPUTs.

analogWrite(pin,valor)
Esta instruccin sirve para escribir un pseudo-valor analgico utilizando el
procedimiento de modulacin por ancho de pulso (PWM) a uno de los pins de Arduino
marcados como pin PWM. El ms reciente Arduino, que implementa el chip
ATmega168, permite habilitar como salidas analgicas tipo PWM los pines 3, 5, 6, 9, 10
y 11.
Los modelos de Arduino ms antiguos que implementan el chip ATmega8, solo tiene
habilitadas para esta funcin los pines 9, 10 y 11. El valor que se puede enviar a estos
pines de salida analgica puede darse en forma de variable o constante, pero siempre
con un margen de 0-255.
analogWrite(pin, valor); // escribe 'valor' en el 'pin' definido como analgico
Si enviamos el valor 0 genera una salida de 0 voltios en el pin especificado; un valor de
255 genera una salida de 5 voltios de salida en el pin especificado. Para valores de entre
0 y 255, el pin saca tensiones entre 0 y 5 voltios - el valor HIGH de salida equivale a 5v
(5 voltios). Teniendo en cuenta el concepto de seal PWM , por ejemplo, un valor de 64
equivaldr a mantener 0 voltios de tres cuartas partes del tiempo y 5 voltios a una cuarta
parte del tiempo; un valor de 128 equivaldr a mantener la salida en 0 la mitad del
tiempo y 5 voltios la otra mitad del tiempo, y un valor de 192 equivaldr a mantener en
la salida 0 voltios una cuarta parte del tiempo y de 5 voltios de tres cuartas partes del
tiempo restante.
Nota: Las salidas analgicas a diferencia de las digitales, no necesitan ser declaradas
como INPUT u OUTPUT.
El siguiente ejemplo lee un valor analgico de un pin de entrada analgica, convierte el
valor dividindolo por 4, y enva el nuevo valor convertido a una salida del tipo PWM o
salida analgica:

int led = 10; // define el pin 10 como led


int analog = 0; // define el pin 0 como analog
int valor; // define la variable valor
void setup(){} // no es necesario configurar entradas y salidas
void loop() {
valor = analogRead(analog); // lee el pin 0 y lo asocia a la variable valor
valor /= 4; / /divide valor entre 4 y lo reasigna a valor
analogWrite(led, value); // escribe en el pin10 valor

delay(ms)
Detiene la ejecucin del programa la cantidad de tiempo en ms que se indica en la
propia instruccin. De tal manera que 1000 equivale a 1seg.
delay(1000); // espera 1 segundo

millis()
Devuelve el nmero de milisegundos transcurrido desde el inicio del programa en
Arduino hasta el momento actual. Normalmente ser un valor grande (dependiendo del
tiempo que est en marcha la aplicacin despus de cargada o despus de la ltima vez
que se puls el botn reset de la tarjeta).
valor = millis(); // valor recoge el nmero de milisegundos
Nota: Este nmero se desbordar (si no se resetea de nuevo a cero), despus de
aproximadamente 9 horas.

min(x,y)
Calcula el mnimo de dos nmeros para cualquier tipo de datos
devolviendo el nmero ms pequeo.
valor = min(valor, 100); // asigna a valor el ms pequeos de los
dos nmeros especificados.
Si 'valor' es menor que 100 valor recoger su propio valor si valor
es mayor que 100 valor pasara a valer 100.

max(x,y)
Calcula el mximo de dos nmeros para cualquier tipo de datos devolviendo el nmero
mayor de los dos.
valor = max(valor, 100); // asigna a valor el mayor de los dos nmeros 'valor' y 100.
De esta manera nos aseguramos de que valor ser como mnimo 100.

randomSeed(seed)
Establece un valor, o semilla, como punto de partida para la funcin random().
randomSeed(valor); // hace que valor sea la semilla del random
Debido a que Arduino es incapaz de crear un verdadero nmero aleatorio, randomSeed
le permite colocar una variable, constante, u otra funcin de control dentro de la funcin

random, lo que permite generar nmeros aleatorios "al azar". Hay una variedad de
semillas, o funciones, que pueden ser utilizados en esta funcin, incluido millis () o
incluso analogRead () que permite leer ruido elctrico a travs de un pin analgico.

random(max)
random(min,max)
La funcin random devuelve un nmero aleatorio entero de un intervalo de valores
especificado entre los valores min y max
valor = random(100, 200); // asigna a la variable 'valor' un numero aleatorio
comprendido entre 100-200.
Nota: Use esta funcin despus de usar el randomSeed().
El siguiente ejemplo genera un valor aleatorio entre 0-255 y lo enva a una salida
analgica PWM.
int randNumber; // variable que almacena el valor aleatorio
int led = 10; // define led como 10
void setup() {} // no es necesario configurar nada.
void loop() {
randomSeed(millis()); // genera una semilla para aleatorio a partir
de la funcin millis()
randNumber = random(255); // genera nmero aleatorio entre 0255
analogWrite(led, randNumber); // enva a la salida led de tipo
PWM el valor
delay(500); // espera 0,5 seg.
}

Serial.begin(9600)
Abre el puerto serie y fija la velocidad en baudios para la transmisin de datos en serie. El valor
tpico de velocidad para comunicarse con el ordenador es 9600, aunque otras velocidades
pueden ser soportadas.
void setup() {
Serial.begin(9600); // abre el Puerto serie
} // configurando la velocidad en 9600 bps

Nota: Cuando se utiliza la comunicacin serie los pins digital 0 (RX) y 1 (TX) no puede
utilizarse al mismo tiempo.

Serial.println(datos)
Imprime los datos en el puerto serie, seguido por un retorno de carro automtico y salto
de lnea. Este comando toma la misma forma que Serial.print (), pero es ms fcil para
la lectura de los datos en el Monitor Serie del software.
Serial.println(analogValue); // enva el valor 'analogValue' al puerto
Nota: Para obtener ms informacin sobre las distintas posibilidades de Serial.println ()
y Serial.print () puede consultarse el sitio web de Arduino.
El siguiente ejemplo toma de una lectura analgica pin0 y enva estos datos al
ordenador cada 1 segundo.
void setup() {
Serial.begin(9600); // configura el puerto serie a 9600bps
}
void loop() {
Serial.println(analogRead(0)); // enva valor analgico
delay(1000); // espera 1 segundo
}

ARDUINO Y JAVA

Arduino, una poderosa plataforma de hardware libre, ideal para poyectos de electrnica
que van desde el encendido de un LED hasta un complejo sistema de domtica para
controlar una casa entera. Java, uno de los lenguajes de programacin ms extendidos
del mundo.
1. No se puede programar Arduino utilizando el lenguaje Java
Arduino y Java son dos entes independientes. Arduino es una plataforma de hardware
libre con su propio lenguaje, mientras que Java es un lenguaje de programacin de alto
nivel. Java necesita para su ejecucin la Mquina Virtual de Java, la cual, hasta ahora no
puede ser ejecutada desde Arduino.

Sin embargo esto no significa que no podamos crear programas en Java que le enven
instrucciones a Arduino entregndonos el control de circuitos electrnicos desde una
interfaz en la computadora.

2. Arduino se comunica con la computadora por medio de Comunicacin Serial


Esta es la forma ms sencilla de comunicacin que existe entre Arduino y la
computadora, ya que aprovecha el puerto USB por medio de un convertidor USB-Serie.
Resulta que para poder comunicar nuestras aplicaciones en Java con Arduino debemos
aprovechar la comunicacin serial, lo cual es perfectamente posible si se implementan
las libreras adecuadas.

3. Para permitirle a Java establecer comunicacin con el Puerto Serie se


requiere instalar los drivers de la librera RXTX
La librera RXTX es una compilacin de cdigo que le permite a los programadores en
Java establecer comunicacin con el Puerto Serie.
4. Usar la librera RXTX es un poco difcil ya existe una librera especial para
Arduino en Java
La librera Arduino para Java es una compilacin de cdigo que facilita mucho la
comunicacin Arduino-Java, Java-Arduino.
Es posible lograr esta comunicacin utilizando la librera RXTX, Sin embargo, si
hacemos un anlisis comparativo entre lo que se requiere con una u otra librera, nos
damos cuenta que la diferencia es muy marcada. la librera Arduino para Java esta
diseada a partir de la RXTX creando algunos mtodos que comprimen los comandos
que se requieren para establecer una conexin, enviar y recibir datos.
Para poder lograr esta comunicacin, es necesario importar ambas libreras, la Arduino
y la RXTX ya que la primera depende de la segunda.

5. Al crear un programa en Java y establecer comunicacin con Arduino, se est


remplazando el Monitor Serial por una interfaz grfica

Cuando se crea un programa en Arduino que requiera de la intervencin del usuario por
medio del Monitor Serial lo que hacemos es enviarle caracteres, sean letras o nmeros.
Estos caracteres se leen en Arduino, se interpretan y devuelven un resultado, si es
necesario.
Un ejemplo de esto es cuando encendemos un LED desde el teclado de la computadora.
En dicho cdigo se lee un caracter. Si el caracter recibido es un 1, se enciende un LED.
De lo contrario, se apaga.
Para lograr el mismo resultado con un programa en Java, pues se crea una interfaz con
dos botones, uno para encender y otro para apagar. Cuando se presiona el botn de
encender, se le indica a Java que enve un 1 a Arduino. La librera Arduino cuenta con
un mtodo, SendData(), con el cual es posible hacer esto. En el botn de apagado, se
enva un 0 o cualquier otro caracter. Al presionar cualquiera de los dos botones,
estamos emulando lo que haramos con el Monitor Serial, enviando un 1 o un 0 para
encender o apagar.
La ventaja de las interfaces? Tenemos botones grficos estilizados, lo que hace
nuestros proyectos ms interesantes, interactivos y profesionales.

6. . Para cada tipo de comunicacin existen mtodos especiales


Se pueden dar tres tipos de situaciones
1. Cuando se necesita transmitir datos de Java a Arduino
2. Cuando se necesita transmitir datos de Arduino a Java
3. Cuando se necesita enviar y recibir datos entre Arduino y Java
Para

esto,

la

librera

Arduino

conexiones: ArduinoRX(),solamente

para
para

Java

posee
recibir

tres

tipos

datos

de
en

Java. ArduinoTX(), solamente para transmitir datos en Java ArtuinoRXTX(), para


transmitir y recibir datos en Java
Los tres mtodos tienen parmetros que se deben establecer a la hora de utilizarlos. En
todos hay que establecer el puerto COM al que est conectado Arduino (ejemplo:
COM6), el baudRate (que debe ser igual al establecido en el Serial.begin() en
Arduino), un timeOut (tiempo de espera entre el inicio de la conexin y el
envo/recepcin de datos) y en algunos casos un SerialPortEventListener para detectar
cuando se han enviado datos de Arduino a Java.

7. Java se da cuenta cada vez que Arduino le enva datos

Cuando

es

necesario enviar

datos

de

Arduino a

Java,

se

utiliza

un SerialPortEventListener, el cual requiere de la implementacin de un mtodo


abstracto, SerialEvent().

El SerialEvent() se ejecuta cada vez que se recibe un dato en el Puerto Serie. Los datos
en el Puerto Serie se reciben caracter por caracter, lo que significara un problema ya
que si enviamos un mensaje de texto, recibiremos el mensaje letra a letra. Usando el
mtodo ReceiveData() obtenemos estos caracteres. Sin embargo, tambin existe el
mtodo MessageAvailable() que devuelve un valor true cuando se haya finalizado la
recepcin de cualquier mensaje enviado desde Arduino con el mtodo Serial.println().

Cuando el mtodo MessageAvailable() devuelve un valor true, entonces se recibe el


mensaje con PrintMessage(). El mensaje ser recibido como un String y podr ser
usado como desee el usuario dentro de Java.

8.

En Java es posible graficar los datos que leemos en los


sensores conectados a Arduino

Existe la librera JFreeCharts. Podemos crear una interfaz que recibe, procesa y grafica
los datos en tiempo real.

Como vemos al conectar Arduino con Java obtenemos una mayor utilidad y versatilidad
en los diversos proyectos que realicemos.
Las posibilidades que nos brinda la programacin en Java para interactuar con Arduino
son infinitas. Est en cada quien desarrollar sus capacidades en programacin y
electrnica para empezar a crear proyectos ms y ms exigentes.