Sunteți pe pagina 1din 49

Qu es Arduino?

Es una herramienta que permite sensar y controlar ms elementos del mundo fsico que tu computadora de
escritorio o laptop. Es una plataforma que consta de dos partes: una tarjeta de microcontrolador (parte
fisica o hardware) y un entorno de desarrollo (tambien llamado "IDE" que es el software para realizar la
programacin del arduino). sto es importante de entender ya que no hay solo una tarjeta Arduino sino que
hay diferentes tarjetas oficiales que podemos uitilizar con el IDE que es de codigo abierto y se puede
descargar gratis.

Con Arduino al igual que con otras tarjetas de microcontroladores, puedes leer variedades de entradas
(switches, botones, sensores, etc.) y controlar salidas (luces, motores, etc.). Pero a diferencia de las otras
tarjetas, utiliza lo que se llama un "bootloader" , ste es un programa que ya viene instalado en el
microcontrolador y que en este caso se encarga de grabar al microcontrolador el programa que hemos
escrito en el IDE de Arduino. sto es una gran ventaja ya que permite ahorrarse el tener que usar un
grabador(una tarjeta aparte necesaria para grabar en un microcontrolador).

Tambin permite conectarse con programas en tu computadora como Flash, Processing o MaxMSP.

El lenguaje de programacin de Arduino es una implementacin de "Wiring", una plataforma computacional


fsica similar, que est basada en el entorno de programacin multimedia "Processing".

Qu es un shield de Arduino?

Un shield viene a ser una tarjeta de expansin que se monta encima del arduino. Permite aadirle
funcionalidades como conexin ethernet (red cableada) o wi-fi (red inalmbrica) que le pueden dar acceso a
internet, comunicacin de radiofrecuencia, entre otros. Pero lo mejor es que puedes hacer tu propio shield
para aadirle la funcionalidad extra que quieras.
Qu puedo hacer con Arduino?

Como permite tanto hacer aplicaciones independientes como aplicaciones que se comuniquen con una
computadora, a travs de internet, o inalmbricamente, el lmite es la imaginacin. Las grandes ventajas de
arduino son la facilidad de uso en comparacin con otras plataformas que requieren mayor nivel de
conocimiento electrnico y su gran adopcin a nivel mundial.

Qu es lo mnimo que necesito para poder utilizar uno?

Lo mnimo que necesitas es una tarjeta de Arduino como la "Arduino UNO", un cable USB, descargar el IDE
de Arduino y una computadora para poder programarlo. En esta seccin podrs encontrar tutoriales para
hacer diversos proyectos con Arduino que te abrirn las puertas a muchas aplicaciones que no sabas que se
podas hacer tan facilmente.

Algunos trminos Importantes

Antes que nada hay que tener en cuenta algunos trminos para poder entender los tutoriales de Arduino y
no perderse, as que los definimos a continuacin.

Programa

Es una lista de instrucciones.

Sketch

Es el nombre que se le da al programa hecho en el entorno de arduino.

Compilar

Accin de traducir el sketch o programa a un lenguaje que entienda directamente un dispositivo y que ste
lo pueda ejecutar. El lenguaje en que escribimos el sketch est pensado en que sea entendible por una
persona, pero los microcontroladores como el que est en la tarjeta de Arduino entiende lo que se llama
"cdigo mquina" o "lenguaje mquina" as que tenemos que traducirlo para que pueda ser ejecutado.
Diferentes sistemas entienden diferentes "cdigos mquina" as que no es lo mismo compilar un programa
para una computadora que para un Arduino. Si el programa no est bien escrito, entonces no se va a poder
compilar.

Compilador

Aplicacin que recibe un sketch o programa escrito en texto y lo convierte a un archivo en "cdigo mquina"
que pueda entender el dispositivo de destino. En el Arduino el mismo IDE se encarga de llamar al compilador
y grabar el archivo compilado en la tarjeta.

Entrada Digital

Una entrada digital es un pin que solo puede leer un valor binario, es decir '0' o '1', LOW o HIGH. Si por
ejemplo, en el caso de un sensor magntico en una ventana (que se desactiva cuando el imn se separa del
reed switch), inicialmente estara leyendo '1' o HIGH, y una vez que se separa el imn (se abre la ventana en
la que estaba puesto), la lectura cambiara a '0' o LOW. De forma ideal en el Arduino UNO o el mega2560, el
'0' es representado por cero voltios, tierra o GND (que son lo mismo) y el '1' es representado por 5 voltios.
Pero no es la nica representacin, algunos dispositivos utilizan otros niveles de voltaje para representar los
'1's y '0's.

Entrada Analgica

Una entrada analgica es un pin que puede leer un voltaje y entregrtelo como un nmero en una escala.
Para lograr sto, el pin est conectado a lo que se llama un conversor analgico-digital o ADC, que por
diversos mtodos identifica el valor numrico equivalente en la escala basndose en un voltaje de
referencia. En el caso del Arduino UNO o el mega2560, sta referencia es 5V as que no podemos leer un
valor mayor a ste. La escala que utilizan stos Arduinos es de 0 a 1023, as que si en el pin hay 2.5V el
nmero que leeramos sera 511.

Arduino Bsico: Mnimo Elemental

ste tutorial comprende lo mnimo elemental para que un sketck o programa de Arduino compile: los
mtodos setup() y loop().

Hardware Requerido

Arduino UNO
Circuito

Slo se necesita una tarjeta Arduino conectada.

La funcin setup() se llama cuando el sketch o programa se inicia. Lo puedes utilizar para inicializar variables,
configuracin de pines, iniciar el uso de una librera, etc. sta funcin solo corre una vez despus de
encender la tarjeta o apretar el botn de reset en la tarjeta Arduino.

Luego de llamar a la funcin setup(), la funcin loop() se llama consecutivamente una y otra vez luego de
que termina. sto permite que el programa cambie y responda a medida que corre. El cdigo en la
funcin loop() de tu sketch es utilizada para activamente controlar la tarjeta Arduino.

Cualquier lnea que empiece con dos slashes (//) o cualquier texto que est entre slash-asterisco(/*) y
asterisco-slash(*/) no va a ser leida por el compilador, por lo que puedes escribir lo que desees despus de
stos permitiendo escribir comentarios de tu cdigo. sto es muy til para recordar lo que quisimos hacer
como para que otros puedan entender nuestro cdigo.

El cdigo a continuacin no hace nada, pero su estructura es til para copiarla y pegarla en un sketch para
empezar.

Dentro del cdigo, todo lo escrito de color plomo claro es un comentario que hacemos dentro del mismo
programa, esto se realiza por diferentes motivos como:

Ayudar a que otra persona entienda el programa.

Ayudarnos a nosotros mismos a recordar la lgica que usamos, si es que retomamos el programa
despus de largo tiempo o para programas muy largos.

Podemos reconocer un comentario fcilmente tanto por el color como por los conjuntos de smbolos que
mencionamos: /* */ o //
Cdigo:

/*

Minimo Elemental

*/

void setup() {
// escribe ac el cdigo de setup, para que corra una vez:
}

void loop() {
// escribe ac tu cdigo principal para que corra repetidamente:
}

Arduino Bsico: Parpadeo

Todas las tarjeta de Arduino tiene terminales o pines de entrada y de salida, este ejemplo muestra el
proyecto ms simple que se puede hacer con un Arduino para visualizar fsicamente el funcionamiento de
un pin de salida. Esto es el parpadeo de un LED.

Hardware Requerido:

Arduino UNO

LED

Resistencia de 220

Protoboard
Circuito:

Para construir el circuito, conectamos una resistencia de 220 al pin 13. Despus conectamos la pata larga
de un LED (la pata positiva, llamada nodo) a la resistencia. Mientras que la pata corta (la pata negativa,
llamada ctodo) a tierra( GND por las siglas en ingles de "GROUND"). Conectamos la tarjeta Arduino a la
computadora, iniciamos el programa Arduino y corremos el cdigo.

Esquemtico:

Un Esquemtico es un diagrama electrnico que representa grficamente todas las partes de tu circuito
mediante smbolos, cada componente electrnico esta representado por un smbolo, estos ya estn
definidos por convencin.
En el programa, el primer paso a realizar es inicializar el pin 13 como un pin de salida, para esto:

1. pinMode(13, OUTPUT);

En el loop principal se enciende un LED de la siguiente manera:

1. digitalWrite(13, HIGH);

Esto entrega 5 voltios al pin 13. Lo que genera una diferencia de voltaje a lo largo de los pines del LED
encendindolo. Despus se apaga el LED, de la siguiente manera:

1. digitalWrite(13, LOW);

Esto hace que el pin 13 vuelva a 0 voltios, y el LED se apague. Entre el encendido y apagado, se necesita
suficiente tiempo para que una persona distinga el cambio de luz. As que el comando delay() le dice al
Arduino no hacer nada por una cantidad de milisegundos, en ste caso son 1000 milisegundos (1 segundo):

1. delay(1000);

Hay que tener en cuenta que cuando se usa el comando delay() el arduino no hace nada ms que esperar.
Por eso una vez entendido ste tutorial, revisar el de parpadeo sin el el uso del comando delay() para
aprender como hacer un retraso(delay) mientras se realiza otras tareas.

Cdigo:

/*
Parpadeo
Enciende un LED por un segundo y despus apaga el mismo, as repetidamente.
*/

// Pin 13 tiene un LED conectado.


// asigna a la variable led el valor 13
int led = 13;

// la rutina de setup corre una vez o cuando se presiona reset


void setup() {
// inicializa el pin 13 como pin de salida
pinMode(led, OUTPUT);
}

// la rutina loop corre constantemente


void loop() {
digitalWrite(led, HIGH); // enciende el LED (HIGH es el nivel de voltaje)
delay(1000); // espera un segundo
digitalWrite(led, LOW); // apaga el LED poniendo el voltaje a LOW
delay(1000); // espera por un segundo
}

Arduino Bsico: Lectura Serial Digital

Hay distintos tipos de comunicacin serial sin embargo cuando uno habla de sta generalmente se refiere a
la ms simple que usa dos lneas. En los dispositivos al pin que transmite y al que recibe se les llama TX y RX
respectivamente. Cuando conectamos dos dispositivos el TX de una se conecta al RX de la otra y visceversa,
de ste modo lo que se transmita por el pin TX de uno ser recibido en el RX del otro. En el caso de la
comunicacin serial del arduino es lo mismo, sin embargo la diferencia es que en la computadora se emula
el puerto serial a travs de la conexin USB. En el arduino los pines utilizados para la comunicacin son 0 y 1.
Podemos ver en el Arduino UNO que stos pines tienen al costado RX y TX respectivamente.

Este tutorial muestra como monitorear el estado de un pulsador mediante el establecimiento de una
comunicacin serial entre la tarjeta Arduino y la computadora.

El IDE del Arduino nos proporciona una herramienta que nos permite enviar y visualizar los datos que se
manejan a travs del puerto Serial. Dicha herramienta se conoce como Monitor Serial y se puede encontrar
en el men de herramientas, en la opcin Monitor Serial. En el presente proyecto se usara dicha
herramienta para visualizar nuestros datos.

Hardware Requerido

Arduino UNO

Protoboard

Pulsador

Resistencia de 10K
Circuito

Esquemtico

Al presionar el interruptor o el pulsador se conectan los dos puntos. Cuando el pulsador esta abierto (no
presionado) no hay conexin entre sus 2 patas. As que el pin es conectado hacia tierra y lo lee como LOW, o
0. Cuando el pulsador esta cerrado (presionado), esto crea una conexin entre sus dos patas, conectando el
pin a 5 voltios, as que el pin lo lee como HIGH, o 1.

En el sketch, el primer paso que se debe realizar es establecer los parmetros de la comunicacin entre la
tarjeta Arduino y la computadora, en este caso 9600 bits de dato por segundo, este paso se realiza dentro
de la funcin setup.
1. Serial.begin(9600);

Luego, se inicializa el pin digital 2 como pin de entrada. Este pin podr leer la salida del pulsador.

1. pinMode(2,INPUT);

Ahora que el setup esta completo, nos dirigimos al loop principal del cdigo. Cuando el pulsador es
presionado, 5 voltios se dirigirn desde tu circuito, y cuando el pulsador no este presionado, el pin de
entrada estar conectado hacia tierra. Esto es una entrada digital, eso significa que el pulsador puede estar
solo en estado activo (visto desde el arduino como un '1', o como HIGH) o en un estado no activo (visto
desde el arduino como un '0', o como LOW).

El primer paso que se necesita hacer en el loop principal es establecer una variable que contenga la
informacin proveniente del pulsador. Esta informacin proveniente del pulsador puede ser un '1' o un '0',
se puede usar un int datatype. Llamamos a esta variable sensorValue, esto se puede lograr con una sola
lnea de cdigo:

1. int sensorValue = digitalRead(2);

Una vez que el Arduino ha ledo la entrada, hacer que imprima esta informacin en la computadora como un
valor decimal. Se puede hacer esto con el comando Serial.println() en la ultima linea del cdigo.

1. Serial.println(sensorValue);

Ahora, cuando se abra el Serial Monitor en el entorno del Arduino, se podr ver una cadena de "0"'s si el
pulsador esta presionado o una cadena de "1"'s si el pulsador no esta presionado.

Cdigo:

/*

LecturaDigitalSerial

Lee una entrada digital del pin, muestra el resultado en el monitor serial

*/

// declaracion de pulsador como una seal tipo entera y asignada al valor 2


int pulsador = 2;

// la rutina de setup corre una vez o cuando se presiona reset


void setup() {
// inicializa la comunicacin serial en 9600 bits por segundo
Serial.begin(9600);
// asigna al pin 2 como pin de entrada
pinMode(pulsador, INPUT);
}

// la rutina loop corre constantemente


void loop() {
// lee el pin de entrada
int estado_pulsador = digitalRead(pulsador);
// muestra el estado del pulsador
Serial.println(estado_pulsador);
delay(1); // retraso entre lectura y lectura, para la estabilidad
}

Arduino Bsico: Lectura Analgica Serial

Este tutorial ensea como leer una entrada analgica conectada a un potencimetro y mostrar el valor leido
en la computadora.

Un potencimetro es un simple dispositivo mecnico que proporciona un valor variable de resistencia


dependiendo de la posicin de giro en que se encuentra su eje. El potencimetro forma lo que se llama un
divisor de voltaje que son dos resistencias conectadas en serie en donde los pines del potencimetro
corresponden a los extremos de cada resistencia y el punto comn de conexin o pin central. Al girar el
potencimetro lo que estamos haciendo es variar la proporcin entre ambas resistencias. Si el
potencimetro es de 5K, al estar girado completamente en un sentido, una de las resistencias ser casi
5K y la otra casi 0. Si lo giramos completamente en el otro sentido, los valores se van a invertir. Al final lo
que interesa saber es que la suma de ambos siempre va a da 5K o el valor correspondiente del
potencimetro.

El IDE del Arduino nos proporciona una herramienta que nos permite enviar y visualizar los datos que se
manejan a travs del puerto Serial. Dicha herramienta se conoce como Monitor Serial y se puede encontrar
en el men de herramientas, en la opcin Monitor Serial. En el presente proyecto se usara dicha
herramienta para visualizar nuestros datos.

Hardware Requerido

Arduino UNO

Protoboard
Potencimetro de 5K

Circuito

La tarjeta Arduino tiene una circuito interno llamado convertidor anlogo-digital (tambin conocido como
ADC, por sus siglas en ingles Analog to Digital Converter) que lee un voltaje de 0V a 5V y devuelve un
nmero en una escala entre 0 a 1023. El comando analogRead() retorna el valor del ADC que es
aproximadamente proporcional al valor de voltaje aplicado al pin de entrada analgica.

Al conectar el potencimetro a la entrada analgica vamos a poder observar que podemos variar el voltaje
en el pin central entre 0 y 5V.

Esquemtico
En la funcin setup se inicia la comunicacin serial, a 9600 bits de informacin por segundo, entre la tarjeta
Arduino y la computadora con el comando:

1. Serial.begin(9600);

Luego, en el loop principal del cdigo, se necesita establecer una variable para almacenar el valor de la
resistencia (el cual esta entre 0 y 1023) proveniente del potencimetro.

1. int valor_sensor = analogRead(A0);

Finalmente, se necesita mostrar esta informacin usando el monitor serial. Se puede hacer esto usando el
comando Serial.println() en la ltima lnea del cdigo:

1. Serial.println(valor_sensor, DEC);

Cuando se abra el monitor serial, se deber ver una cadena de nmeros en el rango de 0 a 1023, que
cambiar cada vez que giremos el potencimetro mostrando el nmero equivalente al voltaje en la escala.

Cdigo:

/*
Lectura Analgica Serial
Leer una entrada analgica del pin 0, muestra el resultado por el Serial Monitor.
*/
// la rutina de setup corre una vez o cuando se presiona reset
void setup() {
// inicializa la comunicacin serial en 9600 bits por segundo
Serial.begin(9600);
}

// la rutina loop corre constantemente


void loop() {
// lee la entrada analgica desde el pin 0
int valor_sensor = analogRead(A0);
// muestra el valor que se ley
Serial.println(valor_sensor);
delay(1); // retraso entre lectura y lectura, para la estabilidad
}

Arduino Bsico: Atenuacin

Muestra el uso de la funcin analogWrite() en la atenuacion del brillo de un LED. La


funcin analogWrite() usa una modulacin de ancho de pulso (Conocida como PWM, por sus siglas en ingles
pulse width modulation), para crear un efecto de atenuacin.

Hardware requerido

Arduino UNO

LED

Resistencia de 220

Protoboard

Circuito
Para armar el circuito hay que conectar el nodo (la pata mas larga, la pata positiva) del LED a la resistencia y
del otro extremo de la resistencia hacia el pin 9 de la tarjeta Arduino. Luego conectar el ctodo (la pata mas
corta, la pata negativa) directamente a tierra.

Esquemtico
El primer paso es declarar al pin 9 como pin de salida, esto se realiza dentro de la funcin setup().

La funcin analogWrite() que se usara en el loop principal del cdigo requiere dos argumentos: El primer
argumento indica el pin para la escritura, y el otro indica el valor de PWM que se escribe. Los valores de
PWM aceptados por la funcin son de 0 a 255.

Con el fin de desaparecer el brillo del LED de vez en cuando. Gradualmente se incrementa el valor del PWM
desde 0(totalmente apagado) a 255(totalmente encendido), y luego se decrementa tambin gradualmente a
0 para repetir el ciclo. En el programa, el valor de PWM se ajusta mediante una variable llamada brillo. Cada
vez que se repite el ciclo, brillo se incrementa mediante el valor de otra variable llamada variacion_brillo.

Si el valor de brillo llega a alguno de los extremos (0 255), se cambia entonces variacion_brillo a su
negativa. En otras palabras, si brillo est aumentando y llega al mximo (255), entonces variacion_brillo se
vuelve negativo para que brillo empiece a disminuir. ste cambio hace que el brillo aumente o disminuya
alternando el sentido de la variacin cada vez que llega a un extremo.

La funcin analogWrite() puede cambiar el valor de PWM muy rpido. Entonces el retardo al final del
esquema controla la velocidad de atenuacin. Pruebe cambiar el valor del retardo (mediante la
funcin delay() ) y ver cmo cambia el programa.

Cdigo:

/*
Atenuacin
Este tutorial muestra como atenuar el brillo de un LED usando la funcin analogWrite().

*/
int led = 9;
int brillo = 0;

int variacion_brillo = 5;

// la rutina de setup corre una vez o cuando se presiona reset


void setup() {
// declara el pin9 como pin de salida
pinMode(led, OUTPUT);
}

// la rutina loop corre constantemente


void loop() {
// configura el brillo del pin 9
analogWrite(led, brillo);

// cambia el brillo para el siguiente ciclo

brillo = brillo + variacion_brillo;


if (brillo == 0 || brillo == 255) {
variacion_brillo = -variacion_brillo;
}
// espera por 30 milisegundos para ver el efecto de la atenuacin
delay(30);
}

Arduino Bsico: Lectura de Voltaje Analgico


En ste tutorial se muestra como leer una entrada analgica y convertir el valor desde analogRead() a la
escala de voltaje. Es similar a Lectura Analgica Serial pero con la diferencia de que mostramos en el
monitor serial el valor del voltaje en vez del nmero en la escala del ADC.

Hardware requerido

Arduino UNO

Protoboard

Potencimetro de 5K

Circuito

Esquemtico
Para cambiar el valor en el rango 0 a 1023 que nos entrega el ADC al rango que corresponde de voltaje, se
necesita crear una variable que acepte numeros con decimales, en ste caso de tipo float o punto flotante, y
hacer una simple ecuacin para escalar los nmeros entre 0.0 y 5.0:

1. float voltaje = valor_sensor * (5.0 / 1024.0);

Cdigo:

/*
Lectura de Voltaje Analgico
*/

// la rutina de setup corre una vez o cuando se presiona reset


void setup() {
// inicializa la comunicacin serial en 9600 bits por segundo
Serial.begin(9600);
}

// la rutina loop corre constantemente


void loop() {

// lee el pin de entrada analogico (pin A0)


int valor_sensor = analogRead(A0);
// Convierto la lectura analogica (la cual va desde 0 - 1023) hacia un voltaje (0 - 5V):
float voltaje = valor_sensor * (5.0 / 1023.0);
// muestra el valor
Serial.println(voltaje);
}
Arduino Digital: Parpadeo sin la funcin delay()

A veces es necesario hacer dos cosas a la vez. Por ejemplo, usted podra querer hacer parpadear un LED (o
alguna otra funcin sensible al tiempo) mientras que hace la lectura del pulsador o de otro tipo de entrada.
En este caso, no se puede utilizar la funcin delay() ya que la ejecucin en el Arduino es secuencial (una por
una se van ejecutando las instrucciones) y al llegar a delay() no se seguir avanzando hasta que la funcin
termine de ejecutarse, es decir que funciona como si pusiera en pausa la ejecucin por el tiempo que le
indicamos. Debido a sto, el programa podra perder la lectura de una entrada si ocurre durante la espera.
Este tutorial muestra cmo parpadea el LED sin usar delay().

Para lograrlo utilizaremos la funcin millis() que retorna el nmero de milisegundos desde que la tarjeta
Arduino comenzo a correr el programa actual. La utilizacin es sencilla, se toman dos lecturas y se restan
para saber el tiempo transcurrido. As evitaremos tener que poner en pausa la ejecucin de la
funcin loop().

Hardware Requerido:

Arduino UNO

Protoboard

LED

Resistencia de 220

Circuito:
Esquemtico:

Cdigo:

/*
Parpadeo sin la funcin delay()
Enciende y apaga la luz emitida por el LED, conectado a un pin digital, sin usar la funcin
delay().
*/

// asigna a la constante pin_led con el valor 13


const int pin_led = 13;

// Variables que cambiarn:


int estado_led = LOW; // estado_led usado para configurar el LED
long millis_anteriores = 0; // Almacenara la ultima vez que el LED fue actualizado

// la siguiente variable es tipo long porque representa el tiempo, medido en milisegundos.


long intervalo = 1000; // intervaloo en el cual parpadea (millisegundos)

void setup() {
// se configura el pin digital como pin de salida
pinMode(pin_led, OUTPUT);
}

void loop()
{
// aca escribes el codigo que correra repetidamente
// asigna a la varible millis_actuales el valor de la funcion millis()

unsigned long millis_actuales = millis();

if(millis_actuales - millis_anteriores > intervalo) {


// almacena la ultima vez que parpadeo el LED
millis_anteriores = millis_actuales;

// si el LED esta apagado, entonces se prende o viceversa.


if (estado_led == LOW) {
estado_led = HIGH;
} else {
estado_led = LOW;
}
// configura el LED con la variable estado_led
digitalWrite(pin_led, estado_led);
}
}

Arduino Digital: Pulsador

En ste tutorial encenderemos un LED cuando se presione el pulsador.


Hardware Requerido

Tarjeta Arduino

Protoboard

Pulsador

LED

Resistencia de 10K

Resistencia de 220

Circuito

Al presionar el pulsador se conectan los dos puntos. Cuando el pulsador esta abierto (no presionado) no hay
conexin entre sus 2 patas. As que el pin est conectado a GND y se lee como LOW, o '0'. Cuando el
pulsador esta cerrado (presionado), esto crea una conexin entre sus dos patas, conectando el pin a 5V, as
que el pin se lee como HIGH, o '1'.

Tambin conectamos una resistencia de 220 al pin 13. Despus conectamos la pata larga de un LED
(positiva) a la resistencia. Mientras que la pata corta (negativa) a GND.

Esquemtico
Cdigo:

/*
Enciende un LED cuando se presiona el pulsador.
*/

// las constantes no cambiaran su valor.


const int buttonPin = 2; // el nmero del pin, entrada del pulsador
const int ledPin = 13; // el nmero del pin, salida al LED

// declaracion de variables
int buttonState = 0;

void setup() {
// inicializamos el pin 13 como pin de salida
pinMode(ledPin, OUTPUT);
// inicializamos el pin 2 como pin de entrada
pinMode(buttonPin, INPUT);
}

void loop(){
// lee el estado del pulsador
buttonState = digitalRead(buttonPin);

// revisa si el pulsador esta presionado o no.


if (buttonState == HIGH) {
// prende el LED:
digitalWrite(ledPin, HIGH);
}
else {
// apaga el LED:
digitalWrite(ledPin, LOW);
}
}

Arduino Digital: Eliminacin de Rebote

En este ejemplo se muestra la forma de eliminacin de rebote en una entrada, lo que significa comprobar
dos veces en un corto perodo de tiempo para asegurarse de que definitivamente se presiona. Sin la
eliminacin de rebotes, al pulsar el botn una vez, puede parecer al cdigo como mltiples presionadas.
Hace uso de la funcin millis() para realizar un seguimiento de las veces que se pulsa el botn.

Hardware Requerido

Tarjeta Arduino

Pulsador

Resistencia (10k ohm)

Resistencia (220 ohm)

Protoboard

Circuito
Esquemtico

Cdigo:

/*

Eliminacin de Rebote

Cada vez que el pin de entrada va de LOW-HIGH (por ejemplo, cuando se usa un pulsador), el pin de salida se
activa de LOW-HIGH o de HIGH-LOW.

Este cdigo esta basado en Limor Fried's versin of debounce, pero la lgica es invertida para este ejemplo.
En aquel ejemplo, el pulsador retorna LOW cuando esta cerrado, y HIGH cuando esta abierto. Ac, el
pulsador retorna HIGH cuando se presiona y LOW cuando no se presiona.

*/

// declaracion de constantes. Estas son usadas para configurar el numero de pin


const int buttonPin = 2; // el nmero del pin para la entrada del pulsador
const int ledPin = 13; // el nmero de pin para la entrada del LED

// declaracion de variables:
int ledState = HIGH; // el estado actual del pin de salida
int buttonState; // la lectura actual del pin de entrada
int lastButtonState = LOW; // lectura previa del pin de entrada

long lastDebounceTime = 0; // la ultima vez que el pin de salida cambio


long debounceDelay = 50;

void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);

// inicializa el estado del LED


digitalWrite(ledPin, ledState);
}

void loop() {
// lee el estado del pulsador y lo asigna a una variable local
int reading = digitalRead(buttonPin);

// revisa si el pulsador fue presionado


// (ejemplo, la entrada fue de LOW-HIGH), y tu estas esperando
// suficiente tiempo desde la ltima pulsacin para ignorar el ruido:

// si el pulsador cambia, debido al ruido o a la pulsacin:


if (reading != lastButtonState) {
// resetea el tiempo de rebote
lastDebounceTime = millis();
}

if ((millis() - lastDebounceTime) > debounceDelay) {


// cualquiera que sea la lectura que ha estado ah por mas tiempo
// que el retardo de entrada se toma como el estado actual real:

// si el estado del pulsador cambia:


if (reading != buttonState) {
buttonState = reading;
// solo se cambia el estado del LED si el estado del pulsador el HIGH
if (buttonState == HIGH) {
ledState = !ledState;
}
}
}

digitalWrite(ledPin, ledState);

// guarda la lectura. En el siguiente ciclo,


// este se convertir en el estado anterior del pulsador:
lastButtonState = reading;
}

Arduino Digital: Deteccin de cambio de estado (deteccin de bordes)

Una vez que se tiene un pulsador funcionando, a menudo se quiere hacer algo de accin basado en las veces
que se pulsa el botn. Para ello, es necesario saber que el botn cambia el estado de apagado a encendido,
y contar el nmero de veces que ocurre este cambio de estado. Esto se conoce como deteccin de cambio
de estado o deteccin de bordes.

El IDE del Arduino nos proporciona una herramienta que nos permite enviar y visualizar los datos que se
manejan a travs del puerto Serial. Dicha herramienta se conoce como Monitor Serial y se puede encontrar
en el men de herramientas, en la opcin Monitor Serial. En el presente proyecto se usara dicha
herramienta para visualizar nuestros datos.

Hardware Requerido

Tarjeta Arduino

Pulsador

Resistencia (10K ohm)

Protoboard

LED
Resistencia (220 ohm)

Circuito

Conectar los tres cables a la tarjeta Arduino. Los dos primeros cables, rojo y negro, se conectan hacia las filas
verticales en un lado del protoboard para proporcionar una fuente de 5 voltios y tierra. El tercer cable se
conecta desde el pin digital 2 hacia una pata del pulsador. La otra pata del pulsador se conecta hacia hacia la
fuente de 5 voltios y la resistencia, donde esta ultima se conecta a tierra. Al presionar el pulsador se
conectan los dos puntos. Cuando el pulsador esta abierto (no presionado) no hay conexin entre sus 2
patas. As que el pin es conectado hacia tierra y lo lee como LOW, o 0. Cuando el pulsador esta cerrado
(presionado), esto crea una conexin entre sus dos patas, conectando el pin a 5 voltios, as que el pin lo lee
como HIGH, o 1.

Tambin conectamos una resistencia de 220-ohm al pin 13. Despus conectamos la pata larga de un LED (la
pata positiva, llamada nodo) a la resistencia. Mientras que la pata corta (la pata negativa, llamada ctodo)
a tierra.

Esquemtico
Cdigo:

/*
Deteccin de cambio de estado (deteccin de bordes)
A menudo, no es necesario conocer el estado de una entrada digital todo el tiempo, pero usted slo tiene
que saber cuando la entrada cambia de un estado a otro. Por ejemplo, usted quiere saber cuando un botn
pasa de OFF a ON. Esto se conoce como deteccin de cambio de estado, o la deteccin de bordes.

Este ejemplo muestra como detectar cuando un pulsador cambia de OFF a ON y de OFF a ON
*/

// las constantes no cambiaran su valor.


const int buttonPin = 2; // el nmero del pin, entrada del pulsador
const int ledPin = 13; // el nmero del pin, salida al LED

// declaracion de variables
int buttonPushCounter = 0; // contador para el numero de pulsadas
int buttonState = 0; // estado actual del pulsador
int lastButtonState = 0; // estado anterior del pulsador

void setup() {
// inicializa el pin 2 como pin de entrada
pinMode(buttonPin, INPUT);
// inicializa el pin 13 como pin de salida
pinMode(ledPin, OUTPUT);
// inicializa la comunicacin serial
Serial.begin(9600);
}

void loop() {
// lee el estado del pulsador
buttonState = digitalRead(buttonPin);

// compara el estado del pulsador con el estado previo del mismo


if (buttonState != lastButtonState) {
// si el estado cambio, el contador incrementa
if (buttonState == HIGH) {
// si el estado actual es HIGH entonces el pulsador

// cambio de OFF a ON
buttonPushCounter++;
Serial.println("on");
Serial.print("numero de pulsadores presionados: ");
Serial.println(buttonPushCounter);
}
else {
// si el estado actual del pulsador es LOW entonces el pulsador

// cambio de ON a OFF
Serial.println("off");
}
}
// guarda el estado actual como el ultimo estado,
lastButtonState = buttonState;

// el LED se enciende cada cuatro pulsadas


if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}

Arduino Digital: Entrada Pull-up serial


Este ejemplo demuestra el uso de INPUT_PULLUP con la funcin pinMode(). Esto monitorea el estado del
pulsador por establecimiento de la comunicacin serial entre la tarjeta Arduino y la computadora.
Adicionalmente, cuando la entrada esta en HIGH, un LED conectado al pin 13 se enciende; cuando esta en
LOW, el LED se apaga.

El IDE del Arduino nos proporciona una herramienta que nos permite enviar y visualizar los datos que se
manejan a travs del puerto Serial. Dicha herramienta se conoce como Monitor Serial y se puede encontrar
en el men de herramientas, en la opcin Monitor Serial. En el presente proyecto se usara dicha
herramienta para visualizar nuestros datos.

Hardware Requerido

Tarjeta Arduino

Pulsador

Protoboard

LED

Resistencia (220 ohm)

Circuito
Se conecta un cable de color negro de la tierra a una de las patas del pulsador. El cable de color azul se
conecta del pin 2 a la otra pata del pulsador.

Al presionar el pulsador se conectan los dos puntos. Cuando el pulsador esta abierto (no presionado) no hay
conexin entre sus 2 patas. Dado que el pull-up interno del pin 2 esta activado y conectado a 5V, se lee
como HIGH. Cuando el pulsador esta cerrado (presionado), el Arduino lo lee como LOW porque la conexin
a tierra esta completa.

Esquemtico
http://arduino.cc/en/Tutorial/InputPullupSerial

Cdigo:

/*
Input Pullup Serial
Este ejemplo muestra el uso de pinMode(INPUT_PULLUP). Esto lee una
entrada digital del pin 2 y muestra los resultados por el Serial Monitor

En el siguiente programa, el primer paso es configurar la comunicacin serial entre el Arduino y la


computadora.

Serial.begin(9600);

se inicializa el pin digital 2 como un pin de entrada con el resistencia en pull-up activada.

pinMode(2,INPUT_PULLUP);

En el loop principal, cuando el pulsador no es presionado, la resistencia pull-up interna se conecta a 5 voltios.
En este caso, la tarjeta de Arduino reporta '1' o HIGH. Cuando el pulsador es presionado, el Arduino es
conectado a tierra, causando que el Arduino reporte '0' o LOW.
El primer paso que se necesita hacer en el loop principal es declarar una variable para almacenar la
informacin del pulsador. Se puede usar int datatype. Llamamos a esta variable sensorValue, y le asignamos
el valor del pin digital 2.

int sensorValue = digitalRead(2);

Una vez que el Arduino lee la entrada, esta se muestra en la pantalla como un valor decimal. Se puede hacer
esto usando el comando Serial.println().

Serial.println(sensorValue, DEC);

Cuando se abre el Serial Monitor desde el entorno Arduino, se podr ver una cadena de 0s si el pulsador
esta cerrado y 1s si el pulsador esta abierto.
*/

void setup(){
//inicializa la conexion serial
Serial.begin(9600);
// configura al pin2 como pin de entrada y habilita la resistencia interna en pull-up.
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);

void loop(){
//asigna la entrada del pulsador a la variable sensorVal
int sensorVal = digitalRead(2);
//muestra el resultado
Serial.println(sensorVal);

if (sensorVal == HIGH) {
digitalWrite(13, LOW);
}
else {
digitalWrite(13, HIGH);
}
}

Arduino Digital: Tono


Este ejemplo muestra como usar la funcin tone() para generar notas. Reproduce una pequea melodia.

Hardware Requerido

Tarjeta Arduino

Speaker

Resistencia (100 ohm)

Protoboard

Circuito
Conectar uno de los terminales del speaker directamente al pin GND (tierra). Seguidamente conectar el pin
8 la resistencia y desde la otra pata de la resistencia al terminal libre del speaker.

Esquemtico
Cdigo:

/*
Melodia
El siguiente cdigo usa un archivo extra: pitches.h
Este archivo contiene todos los valores de las frecuencias de las notas tpica. Por ejemplo, NOTE_C4 es una C
media. NOTE_FS4 es F aguda, y as sucesivamente. Esta tabla de notas fue originalmente escrita por Brett
Hagman, en el que est basada la funcin tone(). La encontrars util cada vez que tengas que reproducir
notas musicales.
*/

// se declara la libreria pitches.h


#include "pitches.h"

// se define las notas que se reproduciran


int melody[ ] = {
NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

// duracion de las notas: 4 = cuarto de nota, 8 = octavo de nota, etc.:


int noteDurations[] = {
4, 8, 8, 4,4,4,4,4 };

void setup() {
// reproduce las notas de la melodia:
for (int thisNote = 0; thisNote < 8; thisNote++) {

// para calcular la duracion de la nota toma un segundo


// divido por el tipo de nota
//ejemplo cuarto de nota = 1000 / 4, octavo de nota = 1000/8, etc.
int noteDuration = 1000/noteDurations[thisNote];
tone(8, melody[thisNote],noteDuration);

// para distinguir las notas, se configura un tiempo entre nota y nota


int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// si se desea detener el tono usa el comando: noTone(8)
}
}

void loop() {
// solo se reproduce una vez la nota.
}

/*
Para crear el documento pitches.h
Lo primero es estar dentro del entorno del IDE de Arduino. Despues se debe teclear Ctrl+Mayus+N.
En ese instante se abre una ventana en la parte inferior del IDE de Arduino.
Seguidamente se coloca el nombre del nuevo archivo, en nuestro caso: pitches.h.
Este documento contiene informacin de la frecuencia asociada a cada nota musical. Se deber tener en
cuenta que la declaracin de estas variables se puede hacer en el archivo principal, pero para que nuestro
cdigo principal no se vea muy extenso, se realiza de esta forma.

Dentro de la nueva ventana, se debe pegar el siguiente cdigo, este nuevo documento se asociara por
defecto al programa principal.
*/

#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978

Arduino Digital: Seguidor de tono usando la funcin tone()

Este ejemplo muestra como usar el comando tone() para generar un tono que sigue el valor de una entrada
analgica.

Hardware Requerido
Tarjeta Arduino

Speaker

Fotoresistencia

Resistencia (4.7k ohm)

Resistencia (100 ohm)

Protoboard

Circuito

Conectar una de las patas de la fotoresistencia a 5 voltios y conectar la otra pata a la resistencia de 4.7K. Por
ltimo, la pata libre de la resistencia se conecta a tierra.

Conectar uno de los terminales del speaker al pin GND (tierra). Seguidamente conectar el pin 9 la resistencia
de 100 ohms y desde la otra pata de la resistencia al otro terminal del speaker.
Esquemtico

Cdigo:

/*
Seguidor de tono
Reproduce un tono que cambia basado en los cambios de una entrada analogica

El cdigo para este ejemplo es very simple. Solo se toma la entrada analogica y ubica sus valores en un rango
de tonos audibles. Los seres humanos pueden escuchar de 20 - 20 000 Hz, pero de 120-1500, por lo general,
funciona bastante bien para este ejemplo.
*/

void setup() {
// inicializa la comunicacion serial
Serial.begin(9600);
}

void loop() {
// lectura del sensor
int sensorReading = analogRead(A0);
// muestra la lectura del sensor para conocer el rango
Serial.println(sensorReading);
// ubica la entrada analogica en un rango (en este caso, 400 - 1000)
// para la salida del tono en un rango (120 - 1500Hz)
int thisPitch = map(sensorReading, 400, 1000, 120, 1500);

// reproduce el tono
tone(9, thisPitch, 10);
delay(1); // retraso entre lectura y lectura, para la estabilidad
}

Arduino Digital: Reproduccin de tonos con distintas salidas

Este ejemplo muestra como usar el comando tone() para reproducir diferentes notas en mltiples salidas.

El comando tono() usando uno de los temporizadores internos del ATmega, configurndolo con la frecuencia
que deseas, y usando el temporizador para enviar pulsos a travs del pin de salida. Como solo usa un
temporizador, solo puedes reproducir una nota a la vez. Sin embargo, puedes producir tonos en mltiples
pines secuencialmente. Para hacerlo, necesitas apagar el temporizador en un pin para moverlo al siguiente.

Hardware Requerido

Tres speakers

Tres resistencias (100 ohm)

Protoboard

Circuito
Esquemtico
Cdigo:

/*

El siguiente programa reproduce un tono en cada uno de los altavoces en secuencia, apagando el primer
altavoz primero. Ten en cuenta que el tiempo de duracin de cada tono vienen determinado por el retraso
que hay justo despues de el.

*/
void setup() {
}

void loop() {
// apaga la funcion tone() para el pin 8:
noTone(8);
// reproduce una nota desde el pin 6 por 200 ms:
tone(6, 440, 200);
delay(200);

// apaga la funcion tone() para el pin 6:


noTone(6);
// reproduce una nota desde el pin 7 por 500 ms:
tone(7, 494, 500);
delay(500);

// apaga la funcion tone() para el pin 7:


noTone(7);
// reproduce una nota desde el pin 8 por 500 ms:
tone(8, 523, 300);
delay(300);

Arduino Analgico: Entrada analgica y salida serial

Este ejemplo muestra como leer una entrada analgica, ubicar el resultado en un rango de 0 a 255, y
usamos ese resultado para configurar una seal PWM que va hacia el LED.

El IDE del Arduino nos proporciona una herramienta que nos permite enviar y visualizar los datos que se
manejan a travs del puerto Serial. Dicha herramienta se conoce como Monitor Serial y se puede encontrar
en el men de herramientas, en la opcin Monitor Serial. En el presente proyecto se usara dicha
herramienta para visualizar nuestros datos.

Hardware Requerido

Tarjeta Arduino

Potenciometro

LED

Resistencia (220 ohm)

Protoboard

Circuito

El primero paso es conectar uno de los pines extremos del potencimentro a 5 voltios. El segundo paso es
conectar el otro pin extremo del potencimetro a la resistencia, la cual se conecta a tierra . El tercer paso es
conectar el pin analgico 2 al pin medio del potencimetro.

Por ltimo, se conecta el LED a la tarjeta Arduino.


Esquemtico

Cdigo:

/*

En el siguiente programa, despus de declarar los pines de salida, entradada (pin analgico 0 para el
potencimetro y pin digital 9 para el LED) y dos variables, SensorValue y OutputValue, lo nico que se hace
dentro de la funcin setup es comenzar la comunicacin serial.

A continuacin, en el bucle principal del cdigo, sensorValue se asigna para almacenar el valor analgico (sin
procesar el potencimetro). Debido a que el comando analogRead tiene una resolucion de 0-1023, y
analogWrite una resolucin de 0 a 255, este dato debe ser reducidos antes de uasrlo para atenuar el brillo
del LED. Con el fin de ampliar este valor, se utiliza una funcin llamada map ().
outputValue = map(sensorValue, 0, 1023, 0, 255);

El nuevo valor asignado a outputValue es la salida al LED, la cual vara segun el giro del potenciometro.

Entrada analgica, salida analgica y salida serial

Se lee una entrada analgica, el resultado se ubica dentro del rango 0 a 25

y se usa el resultado como una seal PWM al pin de salida

Tambin se muestra el resultado en el Serial Monitor


*/
// Declaracion de constantes
const int analogInPin = A0;
const int analogOutPin = 9;

int sensorValue = 0; // valor leido desde el potenciometro


int outputValue = 0; // valor de la salida PWM (salida analgica)

void setup() {
// inicializa la comunicacion serial con 9600 bits por segundo
Serial.begin(9600);
}
void loop() {
// lectura de la entrada analgica
sensorValue = analogRead(analogInPin);
// ubica el valor de la entrada en el rango de la salida analgica
outputValue = map(sensorValue, 0, 1023, 0, 255);
// cambia el valor de salida analgica
analogWrite(analogOutPin, outputValue);
// muestra el resultado en el Serial Monitor:
Serial.print("sensor = " );
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);

// espera 2 milisegundos antes del siguiente ciclo


delay(2);
}

S-ar putea să vă placă și