Está en la página 1de 96

TALLER DE ARDUINO NIVEL I

DURACIN 16 HORAS

PROF. LUIS ZURITA

www.arduino.cc

CONTENIDO DEL CURSO


1. QU ES ARDUINO?
2. MICROCONTROLADOR ATMEGA 328P
3. RECURSOS DE LOS MICROCONTROLADORES
4. INSTALA EL IDE DE ARDUINO
5. CONOCIENDO EL ENTORNO ARDUINO
6. SALIDAS DIGITALES:
PRCTICA 1: LED BLINK
PRCTICA 2 : SEMFORO
PRCTICA 3 : DISPLAY 7 SEGMENTOS

www.arduino.cc

Prof. Luis Zurita

CONTENIDO DEL CURSO


7. ENTRADAS DIGITALES:
PRCTICA 4 : LEYENDO UN PULSADOR Y
ACTIVANDO UN LED
PRCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN
PULSADOR
PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC
DESDE DOS PULSADORES
8. ENTRADAS ANALGICAS:
PRCTICA 7 : POTENCIOMTRO COMO ENTRADA
ANALGICA

www.arduino.cc

Prof. Luis Zurita

CONTENIDO DEL CURSO


9. SALIDAS ANALGICAS:
PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)
10. COMUNICACIN SERIAL RS232/USB:
PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y
TRANSMITIENDO TEMPERATURA CON LM35
PRCTICA 10: TERMOSTTO SERIAL
PRCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIN
SERIAL
PRCTICA
12:
RECEPCIN
DE
DATOS
Y COMUNICACIN SERIAL
11. PLUS:
SIMULACIN EN PROTEUS DEL ARDUINO UNO
www.arduino.cc

Prof. Luis Zurita

QU ES ARDUINO?

Arduino es una plataforma de prototipos electrnica


de cdigo abierto (open-source) 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
microcontrolador de la placa se programa usando el
Arduino Programming Language (basado en Wiring) y
el Arduino Development Environment (basado en
Processing).
www.arduino.cc

Prof. Luis Zurita

QU ES ARDUINO?

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 mano o
encargarlas preensambladas; el software se puede
descargar 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 Electronica Prix en 2006.

www.arduino.cc

Prof. Luis Zurita

POR QU ARDUINO?
Hay muchos otros microcontroladores y plataformas de
microcontroladores disponibles para la computacin
fsica. Microchip, Parallax Basic Stamp, Netmedia de BX24, Phidgets, Handyboard del MIT, y muchos otros
ofrecen una funcionalidad similar. Todas estas
herramientas toman los detalles complicados de la
programacin de microcontroladores y se envuelve en
un paquete fcil de usar. Arduino tambin simplifica el
proceso de trabajar con los microcontroladores, pero
ofrece algunas ventajas para los profesores, estudiantes
y aficionados interesados sobre otros sistemas:
Asequible: Las placas Arduino son relativamente baratas
en comparacin con otras plataformas de
microcontroladores. La versin menos costosa del
mdulo Arduino puede ser ensamblado a mano, e
incluso los mdulos de Arduino preensamblados
cuestan menos de 50 $.

www.arduino.cc

Prof. Luis Zurita

POR QU ARDUINO?
Multiplataforma: El software de Arduino se ejecuta en
Windows, Macintosh OSX y sistemas operativos
Linux. La mayora de los sistemas de microcontrolador
se limitan a Windows.
Simple medio ambiente, programacin clara: El
entorno de programacin de Arduino es fcil de usar
para los principiantes, pero lo suficientemente
complejo para usuarios avanzados para aprovechar as
la flexibilidad. Para los profesores, se basa
convenientemente en el entorno de programacin
Processing, para que los estudiantes que estn
aprendiendo a programar en ese entorno estarn
familiarizados con la apariencia de Arduino

www.arduino.cc

Prof. Luis Zurita

POR QU ARDUINO?
El cdigo abierto y el software de Arduino extensible: se
publica como herramientas de cdigo abierto, disponible para
la extensin por programadores experimentados. El idioma se
puede ampliar a travs de bibliotecas de C ++, y la gente que
quiere entender los detalles tcnicos se puede dar el salto de
Arduino para el lenguaje de programacin AVR C en el que se
basa. Del mismo modo, puede agregar cdigo AVR-C
directamente en sus programas de Arduino si quieres.
El cdigo abierto y el hardware ampliable: El Arduino se basa
en la familia de microcontroladores
de Atmel
ATMEGA8 y ATmega168. Los planes para los mdulos estn
publicados bajo una licencia de Creative Commons, por lo que
los diseadores de circuitos con experiencia pueden hacer su
propia
versin
del
mdulo,
amplindolo
y
mejorndolo. Incluso los usuarios con poca experiencia
pueden construir la versin tablero del mdulo con el fin de
entender cmo funciona y ahorrar dinero.
www.arduino.cc

Prof. Luis Zurita

MICROCONTROLADOR ATMEGA 328P

www.arduino.cc

Prof. Luis Zurita

MICROCONTROLADOR ATMEGA 16U2

www.arduino.cc

www.arduino.cc

Prof. Luis Zurita

CARACTERSTICAS Y RECURSOS ESPECIALES


CARACTERSTICAS PIC 16F873

CARACTERSTICAS ATMEGA 328P

HASTA 20 MHZ

HASTA 20 MHZ

8K FLASH

32K FLASH

368 BYTES RAM

2K RAM

256 BYTES EEPROM

1K EEPROM

3 TIMERS

4 TIMERS

2 MDULOS PWM (10 BITS RESOLUCIN) 6 PWM (8 BITS RESOLUCIN)


5 CONVERTIDORES A/D 10 BITS
RESOLUCIN

6 CONVERTIDORES A/D 10 BITS


RESOLUCIN

COMUNICACIN I2C

COMUNICACIN I2C

COMUNICACIN SERIAL SNCRONA (SSP)

COMUNICACIN SERIAL SNCRONA


(SSP)

COMUNICACIN SERIAL ASNCRONA


(USART)

COMUNICACIN SERIAL ASNCRONA


(USART)

COMUNICACIN PUERTO PARALELO


www.arduino.cc

NO POSEE
Prof. Luis Zurita

PRIMEROS PASOS CON


ARDUINO EN WINDOWS

www.arduino.cc

Prof. Luis Zurita

1. Obtener una placa Arduino y un cable.

www.arduino.cc

Prof. Luis Zurita

PINES ENTRADAS/SALIDAS DIGITALES


PULSADOR
RESET

PINES
COMUNICACIN
SERIAL

CONECTOR
USB

CONECTOR
ICSP
ATMEGA328P
CONECTOR
ALIMENTACIN
9-12VDC

PINES ENTRADAS ANALGICAS


Los pines 0,1,2,3,4,5,6,7,8,9,10,11,12,13 se pueden utilizar como entradas o salidas digitales
Si realizamos transmisiones a travs de TX/RX estos pines quedan inutilizados para E/S
Los pines 3,5,6,9,10,11 se pueden utilizar como salidas analgicas tipo PWM

www.arduino.cc

Prof. Luis Zurita

2. Descargar el entorno Arduino.


http://arduino.cc/en/Main/Software
Adicionalmente puedes encontrar amplia
informacin sobre Arduino, tutoriales, ejemplos
en
su
pgina
web
oficial:
http://arduino.cc/en/Guide/HomePage
3. Conectar la placa.
El Arduino Uno, Mega, Duemilanove y
Arduino Nano muestran automticamente la
alimentacin de la conexin USB a la
computadora o mediate una fuente de
alimentacin externa.
Conecte la placa Arduino al ordenador
mediante el cable USB. El LED verde de
alimentacin (etiquetado PWR ) debe
continuar.

www.arduino.cc

Prof. Luis Zurita

PRIMERA CONEXIN ARUINO

www.arduino.cc

Prof. Luis Zurita

PRIMERA CONEXIN ARUINO

www.arduino.cc

Prof. Luis Zurita

4. Instalar los drivers USB.


Instalacin de controladores para el Arduino
UNO o Arduino Mega 2560 con Windows 7,
Vista o XP:
Conecte su tarjeta y espere a que Windows
para comenzar es el proceso de instalacin del
controlador. Despus de unos momentos, el
proceso fallar, a pesar de sus mejores
esfuerzos
Haga clic en el men Inicio y abra el Panel de
control.
Mientras que en el Panel de control, vaya a
Sistema (System). A continuacin, haga clic en
Sistema. Una vez que la ventana del sistema se
ha terminado, abra el Administrador de
dispositivos (Device Manager).
www.arduino.cc

Prof. Luis Zurita

4. Instalar los drivers USB.


Busque debajo Puertos (COM y LPT). Usted debe ver a un
puerto abierto llamado "Arduino UNO ( COMxx ) ". Si no
hay una seccin de LPT, COM y busque en la seccin
"Otros dispositivos" para "Dispositivo desconocido".
Haga clic derecho en el "UNO Arduino ( COMxx ) "puerto
y elegir la opcin" Actualizar software de controlador ".
A continuacin, seleccione la opcin "Buscar software de
controlador".
Por ltimo, busque y seleccione el archivo controlador
llamado "arduino.inf" , ubicado en la carpeta "Drivers"
de la descarga del software de Arduino (no el "de los
controladores USB FTDI" sub-directorio). Si est
utilizando una versin antigua del IDE (1.0.3 o anterior),
seleccione
el
archivo
del
controlador
Uno
llamado "Arduino UNO.inf"

www.arduino.cc

Prof. Luis Zurita

Windows terminar la instalacin del


controlador de all.
5. Inicie la aplicacin Arduino.
Haga doble clic en la aplicacin Arduino. (Nota:
si se carga el software de Arduino en un idioma
incorrecto, puede cambiarlo en el dilogo de
preferencias.

www.arduino.cc

Prof. Luis Zurita

CAMBIO DE IDIOMA
Seleccione: Archivo Preferencias

www.arduino.cc

Prof. Luis Zurita

CONOCIENDO EL ENTORNO ARDUINO

REA DE
TRABAJO

Qu es un Sketch?
Es el nombre que
usa Arduino para un
programa.
Es la unidad de
cdigo que se sube
y ejecuta en la placa
Arduino
Sketch: Bosquejo,
esquema, croquis

ZONA DE
ESTADO Y
MENSAJES
DE ERROR

www.arduino.cc

Prof. Luis Zurita

ESTRUCTURA
DEUN
UN PROGRAMA
ESTRUCTURA
DE
PROGRAMA
La funcin void setup ( ) se utiliza cuando se inicia un
boceto (Sketch). Se usa para inicializar variables, modos
de pines, uso de libreras, etc La funcin de setup slo se
ejecutar una vez, despus de cada arranque o reinicio
de la placa Arduino.
Despus de crear la funcin setup ( ), la funcin void
loop ( ) no hace exactamente lo que su nombre indica, y
se ejecuta bucles de forma consecutiva, lo que permite al
programa cambiar y responder mientras se ejecuta. La
void setup() {
seccin del cdigo
ensetup
el code
loophere,
( )tose
para controlar
// put your
run utiliza
once:
} placa Arduino.
activamente la

www.arduino.cc

void loop() {
// put your main code here, to run
repeatedly:
}

Prof. Luis Zurita

ESTRUCTURA
DEUN
UN PROGRAMA
ESTRUCTURA
DE
PROGRAMA
Los comentarios se pueden realizar de dos maneras:
Por bloque de lneas:
/*
Comentario del programa
*/
Por lneas:
// Comentario del
// Programa
Los comentarios no son ledos por el compilador, por lo
void setup() {
que puedes escribir
lo que
quieras
despus de ella. Al
// put your setup
code here,
to run once:
}
comentar su cdigo
como este puede ser particularmente
void loop()tanto
{
til para explicar,
a s mismo y a otros, cmo
// put your main code here, to run
funciona su programa
repeatedly: paso a paso.
www.arduino.cc

Prof. Luis Zurita

ESTRUCTURA DE UN PROGRAMA
Variables:
Una variable es un lugar donde se almacena un dato.
Posee un nombre, un tipo y un valor. Por ejemplo, la lnea
del sketch Blink declara una variable con el nombre led, de
tipo int, y con el valor inicial 13. Esta siendo utilizada para
indicar que pin de Arduino se conecta al LED. Cada vez que
el nombre led aparece en el cdigo, su valor ser utilizado.
En este caso, la persona que escribi el cdigo podra no
haberse molestado en definir la variable led y utilizar
simplemente 13 en todas las partes en que debiese
especificar el nmero del pin.
www.arduino.cc

Prof. Luis Zurita

ESTRUCTURA DE UN PROGRAMA
La ventaja de utilizar una variable es que se hace mucho
ms fcil mover el LED a un pin diferente: solo necesitas
editar la lnea en que se asigna el valor inicial a la variable.
Con frecuencia, el valor de una variable cambiar a
medida que se ejecuta el sketch.
int led = 13; // Pin 13 tiene un LED conectado en la
// mayora de las placas Arduino
// darle un nombre: El mensaje " Pin 13 tiene un LED
// conectado en la mayora de las placas Arduino " es un
// comentario.

www.arduino.cc

Prof. Luis Zurita

TIPOS DE DATOS.
Arduino trabaja con los siguientes tipos de variables:
Especificacin Significado
Tamao
Rango
int

entero

2 bytes

-32768 to 32767

unsigned int

Entero positivo

2 bytes

0 a 65536 (sin signo)

long

Entero de 32 bits

4 bytes

-2147483648 a
2147483647

unsigned long

Entero de 32 bits
positivo

4 bytes

0 a 4294967295

float

Coma flotante

4 bytes

3.4028235E+38 to
-3.4028235E+38

double

Coma flotante

4 bytes

Mismo que float

boolean

Booleano

1 byte

false (0) or true (1)

char

Carcter

1 byte

-128 to 127

byte

Entero 8 bits

1 byte

0 to 255

string

Cadena de caracteres usados para textos

void
www.arduino.cc

Sin valor

nulo

Ninguno
Prof. Luis Zurita

www.arduino.cc

Prof. Luis Zurita

www.arduino.cc

Prof. Luis Zurita

www.arduino.cc

Prof. Luis Zurita

PINES ENTRADAS/SALIDAS DIGITALES


PULSADOR
RESET

PINES
COMUNICACIN
SERIAL

CONECTOR
USB

CONECTOR
ICSP
ATMEGA328P
CONECTOR
ALIMENTACIN
9-12VDC

PINES ENTRADAS ANALGICAS


Los pines 0,1,2,3,4,5,6,7,8,9,10,11,12,13 se pueden utilizar como entradas o salidas digitales
Si realizamos transmisiones a travs de TX/RX estos pines quedan inutilizados para E/S
Los pines 3,5,6,9,10,11 se pueden utilizar como salidas analgicas tipo PWM

www.arduino.cc

Prof. Luis Zurita

PRCTICA 1: LED BLINK


Con resistencia
Sin resistencia (Solo con el pin 13)

www.arduino.cc

Prof. Luis Zurita

PRCTICA 1: LED BLINK


Diagrama de flujo
(Planificacin)

www.arduino.cc

Prof. Luis Zurita

PRCTICA 1: LED BLINK

Abra el ejemplo LED Blink: Archivo> Ejemplos>


1.Basics> Blink .

www.arduino.cc

Prof. Luis Zurita

PROGRAMA
PRINCIPAL

CONFIGURACIN ASIGNACIN
PUERTOS E/S
VARIABLES

PRCTICA 1 : LED BLINK


//INTERMITENTE
ledPin = 13; / / Definicin de la salida en el PIN 13
void setup() //Configuracin
{
pinMode(ledPin, OUTPUT); // designa la salida digital al
PIN 1
}
void loop() // bucle de funcionamiento
{
digitalWrite(ledPin, HIGH); // activa el LED
delay(1000); // espera 1 seg. (tiempo encendido)
digitalWrite(ledPin, LOW); // desactiva el LED
delay(1000); // espera 1 seg. (tiempo apagado)
}

www.arduino.cc

Prof. Luis Zurita

PRCTICA 1: LED BLINK


Seleccione su tarjeta

www.arduino.cc

Prof. Luis Zurita

PRCTICA 1: LED BLINK


Seleccione el Puerto Serie:
Seleccione el dispositivo de
serie de la placa Arduino
desde el men Tools | Serial
Port. Esto es probable que
sea COM3 o superior
(COM1
y
COM2
son
generalmente
reservados
para los puertos serie de
hardware). Para averiguarlo,
se puede desconectar la placa
Arduino y vuelva a abrir el
men; la entrada que
desaparece debe ser la placa
Arduino. Vuelva a conectar el
tablero y seleccionar ese
puerto serie.
www.arduino.cc

Prof. Luis Zurita

PRCTICA 1: LED BLINK


Compila el Programa Blink
Ahora, simplemente haga clic en el botn
verificar en el IDE.

En la parte inferior se verificar que el programa est


compilado correctamente, en caso contrario se mostrar
la lnea en donde se encuentra el error:

www.arduino.cc

Prof. Luis Zurita

PRCTICA 1: LED BLINK


Carga el Programa Blink
Ahora, simplemente haga clic en el botn
cargar en el IDE.

Espere unos segundos para que pueda observar el led


parpadeando.
Si la carga se realiza correctamente, el mensaje carga
terminada" aparecer en la barra de estado. Unos
segundos despus de que finalice la carga, debera ver el
pin 13 (LED) en la tarjeta que empieza a parpadear (en
naranja). Si es as has logrado completar tu primer
programa en Arduino.
www.arduino.cc

Prof. Luis Zurita

PRCTICA 1 : LED BLINK

Salidas Digitales (Instrucciones relacionadas)


pinMode(pin, mode);
N pin modo

INPUT (entrada)
OUTPUT (salida)

digitalWrite(pin, value);
digitalWrite(pin, HIGH); //coloca en el pin un valor HIGH (alto 1)
digitalWrite(pin, LOW); //coloca en el pin un valor LOW (bajo 0)
delay() hace a Arduino esperar por el numero especificado de
milisegundos antes de continuar con la siguiente lnea. Hay
1000 milisegundos en un segundo, por lo que la linea:
delay(1000);
// esperar un segundo
www.arduino.cc

Prof. Luis Zurita

PRCTICA 2 : SEMFORO
Diagrama de flujo
(Planificacin)
R1

D1

ROJO
330R

R2

D1

AMARILLO
330R

R3
VERDE

D1
GND

330R

www.arduino.cc

Prof. Luis Zurita

PRCTICA 2 : SEMFORO

www.arduino.cc

Prof. Luis Zurita

CONFIGURACIN
PUERTOS E/S

ASIGNACIN
VARIABLES

PRCTICA 2 : SEMFORO
// Encedido y apagado de 3 LEDs Del semforo
int ROJO= 6; // Define las salidas de los LEDs
int AMARILLO = 7;
int VERDE= 8;
void setup() { // Configura las SALIDAS
pinMode(ROJO, OUTPUT); // declarar LEDs como SALIDAS
pinMode(AMARILLO, OUTPUT);
pinMode(VERDE, OUTPUT);
digitalWrite(ROJO, LOW); // Apaga los LEDs
digitalWrite(AMARILLO, LOW);
digitalWrite(VERDE, LOW);
}

www.arduino.cc

Prof. Luis Zurita

PROGRAMA
PRINCIPAL

PRCTICA 2 : SEMFORO
void loop(){ //Bucle de Funcionamiento
digitalWrite(ROJO, HIGH);
// Apaga y enciende los leds
//cada 200 ms
delay(3000);
digitalWrite(ROJO, LOW);
digitalWrite(AMARILLO, HIGH);
delay(1000);
digitalWrite(AMARILLO, LOW);
digitalWrite(VERDE, HIGH);
delay(3000);
digitalWrite(VERDE, LOW);
}

www.arduino.cc

Prof. Luis Zurita

PRCTICA 3 : DISPLAY 7 SEGMENTOS

a
f

DP

c
d
CATODO COMUN

www.arduino.cc

Prof. Luis Zurita

PRCTICA 3 : DISPLAY 7 SEGMENTOS


LTS4710AR
a

AC

AC

g
c
e

www.arduino.cc

DP
d

7= a
8= b
9= c
10= d
11= e
12= f
13= g Prof. Luis Zurita

PRCTICA 3 : DISPLAY 7 SEGMENTOS


HDSP-515L
g f AC a b

7= a
8= b
9= c
10= d
11= e
12= f
13= g
www.arduino.cc

e d AC c DP

Prof. Luis Zurita

CONFIGURACIN ASIGNACIN
VARIABLES
PUERTOS E/S
FUNCIN
DE DISPLAY

int pausa=1000; // Variable que define el intervalo


// de tiempo entre cada digito
void setup()
{
pinMode(7, OUTPUT); // Asignacin de las salidas digitales
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void display (int a, int b, int c, int d, int e, int f, int g)
// Funcion del display
{
digitalWrite (7,a); //Se reciben 7 variables y se asignan
digitalWrite (8,b); //a cada una de las salidas
digitalWrite (9,c);
digitalWrite (10,d);
digitalWrite (11,e);
digitalWrite (12,f);
digitalWrite (13,g);
}

www.arduino.cc

Prof. Luis Zurita

PROGRAMA
PRINCIPAL

void loop() //Funcion principal


// Dependiendo de cada dgito, se enva a la funcin display
// los estados (0 y 1) a cada uno de los segmentos
{
display (0,0,0,0,0,0,1); //escribe 0 para display nodo comn
delay(pausa);
display (1,0,0,1,1,1,1); //escribe 1 para display nodo comn
delay(pausa);
display (0,0,1,0,0,1,0); //escribe 2 para display nodo comn
delay(pausa);
display (0,0,0,0,1,1,0); //escribe 3 para display nodo comn
delay(pausa);
display (1,0,0,1,1,0,0); //escribe 4 para display nodo comn
delay(pausa);
display (0,1,0,0,1,0,0); //escribe 5 para display nodo comn
delay(pausa);
display (0,1,0,0,0,0,0); //escribe 6 para display nodo comn
delay(pausa);
display (0,0,0,1,1,1,1); //escribe 7 para display nodo comn
delay(pausa);
display (0,0,0,0,0,0,0); //escribe 8 para display nodo comn
delay(pausa);
display (0,0,0,1,1,0,0); //escribe 9 para display nodo comn
delay(pausa);
}
PARA NODO COMN

www.arduino.cc

Prof. Luis Zurita

PROGRAMA
PRINCIPAL

void loop() //Funcion principal


// Dependiendo de cada dgito, se enva a la funcin display
// los estados (0 y 1) a cada uno de los segmentos
{
display (1,1,1,1,1,1,0); //escribe 0 para display ctodo comn
delay(pausa);
display (0,1,1,0,0,0,0); //escribe 1 para display ctodo comn
delay(pausa);
display (1,1,0,1,1,0,1); //escribe 2 para display ctodo comn
delay(pausa);
display (1,1,1,1,0,0,1); //escribe 3 para display ctodo comn
delay(pausa);
display (0,1,1,0,0,1,1); //escribe 4 para display ctodo comn
delay(pausa);
display (1,0,1,1,0,1,1); //escribe 5 para display ctodo comn
delay(pausa);
display (1,0,1,1,1,1,1); //escribe 6 para display ctodo comn
delay(pausa);
display (1,1,1,0,0,0,0); //escribe 7 para display ctodo comn
delay(pausa);
display (1,1,1,1,1,1,1); //escribe 8 para display ctodo comn
delay(pausa);
display (1,1,1,0,0,1,1); //escribe 9 para display ctodo comn
delay(pausa);
}
PARA CTODO COMN

www.arduino.cc

Prof. Luis Zurita

PRCTICA 4 : LEYENDO UN PULSADOR Y


ACTIVANDO UN LED
VCC

GND

R1

R2

1k

1k

SALIDA

SALIDA

PullUp
GND

www.arduino.cc

PullDown
VCC

Divisor de tensin especfico.


Lee el estado lgico sin ambigedades

Prof. Luis Zurita

PRCTICA 4 : LEYENDO UN PULSADOR Y


ACTIVANDO UN LED
Diagrama de flujo
(Planificacin)

www.arduino.cc

Prof. Luis Zurita

PRCTICA 4 : LEYENDO UN PULSADOR Y


ACTIVANDO UN LED

www.arduino.cc

Prof. Luis Zurita

PROGRAMA CONFIGURACIN ASIGNACIN


PRINCIPAL
PUERTOS E/S
VARIABLES

PRCTICA 4 : LEYENDO UN PULSADOR Y


ACTIVANDO UN LED
/* Pulsador
Detecta si el botn ha sido presionado o no y enciende el LED el o no.
*/
int ledPin = 13; // PIN del LED
int inPin = 10; // PIN del pulsador
int value = 0; // Valor del pulsador
void setup() {
pinMode(ledPin, OUTPUT); // Inicializa el pin 13 como salida digital
pinMode(inPin, INPUT); // Inicializa el pin 10 como entrada digital
}
void loop() {
value = digitalRead(inPin); // Lee el valor de la entrada digital
digitalWrite(ledPin, value);
}

www.arduino.cc

Prof. Luis Zurita

PRCTICA 4 : LEYENDO UN PULSADOR Y


ACTIVANDO UN LED

Salidas Digitales (Instrucciones relacionadas)


pinMode(pin, mode);
N pin modo

INPUT (entrada)
OUTPUT (salida)

digitalRead(pin);
valor=digitalRead(pin); //La lectura del pin es guardado en valor

www.arduino.cc

Prof. Luis Zurita

PRCTICA 5 : ACTIVANDO UNA CARGA 110 VAC


SIN PULSADOR

Rel electromecnico

el Rel es un dispositivo, que funciona


como un interruptor controlado por un
circuito elctrico en el que, por medio de
un electroimn, se acciona un juego de
uno o varios contactos que permiten abrir
o cerrar otros circuitos elctricos
independientes.

Circuito Elctrico
VCC

RL1
D1

RLY-SPCO

1N4004

R3

Q1
2N3904

PIN10
1k

GND

www.arduino.cc

Prof. Luis Zurita

PRCTICA 5 : ACTIVANDO UNA CARGA 110 VAC


SIN PULSADOR

Rel de estado slido


R4

U1

PIN uC 330R

R5
1k

U2

BT136

MOC3021

1
2
HACIA LA CARGA 110VAC

GND

Optoacoplador
(Optotriac)
www.arduino.cc

TRIAC
Prof. Luis Zurita

PRCTICA 5 : ACTIVANDO UNA CARGA 110 VAC


SIN PULSADOR

Montaje en el Arduino

www.arduino.cc

Prof. Luis Zurita

PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC


DESDE DOS PULSADORES

MEMO es una
variable para
memorizar
el estado del
LED

www.arduino.cc

Prof. Luis Zurita

PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC


DESDE DOS PULSADORES

www.arduino.cc

Prof. Luis Zurita

PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC


DESDE DOS PULSADORES

PROGRAMA
PRINCIPAL

CONFIGURACIN ASIGNACIN
PUERTOS E/S
VARIABLES

// MANDO DESDE DOS PULSADORES DE UNA CARGA


int LED = 4; // PIN del LED
int PULSADOR1 = 7; // PIN del pulsador
int PULSADOR2 = 8; // PIN del pulsador
int MEMO= 0; // BANDERA
int VALOR=0;
void setup() {
pinMode(LED, OUTPUT); // Inicializa el pin 4 como salida digital
pinMode(PULSADOR1, INPUT); // Inicializa el pin 10 como entrada digital
pinMode(PULSADOR2, INPUT); // Inicializa el pin 10 como entrada digital
}
void loop() {
VALOR = digitalRead(PULSADOR1); // lee el valor de la entrada digital pin 7
if (VALOR==1){
while (VALOR==1){
VALOR = digitalRead(PULSADOR1); // lee el valor de la entrada digital pin 7
delay(20);}
if (MEMO==0){
digitalWrite(LED, HIGH);
MEMO=1;
delay(20);}
www.arduino.cc
Prof. Luis Zurita

PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC


DESDE DOS PULSADORES
else {
digitalWrite(LED, LOW);
MEMO=0;
delay(20);}

CONTINUACIN DE
PROGRAMA PRINCIPAL

}
else {
VALOR = digitalRead(PULSADOR2); // lee el valor de la entrada digital pin 8
if (VALOR==1){
while (VALOR==1){
VALOR = digitalRead(PULSADOR2); // lee el valor de la entrada digital pin 8
delay(20);}
if (MEMO==0){
digitalWrite(LED, HIGH);
MEMO=1;
delay(20);}
else {
digitalWrite(LED, LOW);
MEMO=0;
delay(20);}
}
}
}
www.arduino.cc
Prof. Luis Zurita

PRCTICA 7 : POTENCIOMTRO COMO


ENTRADA ANALGICA
PINES ENTRADAS ANALGICAS

Existen 6 canales de
entradas analgicas:
AN0 .. AN5.
Las entradas
analgicas deben
variar entre 0 y 5v.
La conversin se
realiza con una
precisin de 10 Bits
(0 a 1024)
www.arduino.cc

ATMEGA328P

Prof. Luis Zurita

PRCTICA 7 : POTENCIOMTRO COMO


ENTRADA ANALGICA
El uso de un potencimetro y uno de los pines de
entrada analgica/digital de Arduino (ADC) permite leer
valores analgicos que se convertirn en valores dentro
del rango de 0-1024.
Es posible utilizar un potencimetro simular una entrada
analgica o bien un sensor de tipo resistivo. Es posible
tambin conectar Sensores cuya salida sea de 0 a 5v.

www.arduino.cc

Prof. Luis Zurita

PRCTICA 7 : POTENCIOMTRO COMO


ENTRADA ANALGICA
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 pines analgicos (0-5) a diferencia de los
pines digitales, no necesitan ser declarados como
INPUT u OUTPUT porque son siempre INPUTs.
www.arduino.cc

Prof. Luis Zurita

PRCTICA 7 : POTENCIOMTRO COMO


ENTRADA ANALGICA

www.arduino.cc

Prof. Luis Zurita

CONFIGURACIN
PUERTOS E/S

ASIGNACIN
VARIABLES

PRCTICA 7 : POTENCIOMTRO COMO


ENTRADA ANALGICA
int POTEN = 0; // seleccionamos el pin de entrada para el
//potencimetro
int LEDV = 2; // seleccionamos los pines de los leds
int LEDA = 3;
int LEDR = 4;
int valor; // variable para almacenar el valor del potencimetro
void setup() {
// declaramos los Pines de los leds como OUTPUT:
pinMode(LEDV, OUTPUT);
pinMode(LEDA, OUTPUT);
pinMode(LEDR, OUTPUT);
digitalWrite(LEDR, LOW);
digitalWrite(LEDA, LOW);
digitalWrite(LEDV, LOW);
}

www.arduino.cc

Prof. Luis Zurita

PRCTICA 7 : POTENCIOMTRO COMO


ENTRADA ANALGICA

PROGRAMA
PRINCIPAL

void loop() {
// Lee el valor del Potenciometro:
valor = analogRead(POTEN);
delay(100);
A: Sigue aqu
if (valor <= 400)
else if (valor<=749){
{
digitalWrite(LEDR, LOW);
digitalWrite(LEDR, LOW);
digitalWrite(LEDA, HIGH);
digitalWrite(LEDA, LOW);
digitalWrite(LEDV, LOW);
digitalWrite(LEDV, HIGH);
}
}
else{
Sigue en A:
digitalWrite(LEDR, HIGH);
digitalWrite(LEDA, LOW);
digitalWrite(LEDV, LOW);
}
}
www.arduino.cc
Prof. Luis Zurita

PRCTICA 8 : CONTROL DE INTENSIDAD


DE UN LED (PWM)
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 pines de Arduino
marcados como pin PWM. 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.
Amplitud

www.arduino.cc

Prof. Luis Zurita

PRCTICA 8 : CONTROL DE INTENSIDAD


DE UN LED (PWM)
Debido a que esta es una funcin de hardware, en el pin de salida
analgica (PWN) se generar una onda constante despus de
ejecutada la instruccin analogWrite hasta que se llegue a ejecutar
otra instruccin analogWrite (o una llamada a digitalRead o
digitalWrite en el mismo pin).
Nota: Las salidas analgicas a diferencia de las digitales, no necesitan
ser declaradas como INPUT u OUTPUT.
5 volts

3.75 volts

0 volts
80% 20%
5 volts
2.5 volts

0 volts
50% 50%
5 volts

1.0 volts

0 volts

www.arduino.cc

20% 80%

Prof. Luis Zurita

PRCTICA 8 : CONTROL DE INTENSIDAD


DE UN LED (PWM)

www.arduino.cc

Prof. Luis Zurita

PRCTICA 8 : CONTROL DE INTENSIDAD


DE UN LED (PWM)

La siguiente prctica 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, esto se debe a que la conversin
analgica proveniente del potencimetro es de 10 bits, es
decir estar entre 0 a 1023 y la escritura analgica
mediante la PWM es de 8 bits, es decir estar entre 0 a
255.
POTENCIOMETRO A VALOR =

VALOR
4

(0 1023)
4

= (0 255)

SALIDA= map(valor,mino,maxo,mind,maxd); // Funcin Escalar

SALIDA= map(valor,0,1023,0,255); // Cambia el rango. Funcin Escalar


www.arduino.cc

Prof. Luis Zurita

PRCTICA 8 : CONTROL DE INTENSIDAD


DE UN LED (PWM)

int led = 9;
// define el pin 10 como led
int POTEN = 0;
// define el pin 0 como POTEN
int valor;
// define la variable valor
void setup( ) {
// no es necesario configurar entradas y salidas
}
void loop()
{
valor = analogRead(POTEN); // lee el potencimetro y
//lo guarda en valor
valor= valor/4; //divide valor entre 4 y lo reasigna a valor
analogWrite (led, valor); // escribe en el pin10 valor
}
www.arduino.cc

Prof. Luis Zurita

PRCTICA 9 : COMUNICACIN SERIAL.


MIDIENDO Y TRANSMITIENDO TEMPERATURA
En los sistemas con microcontroladores puede existir
la necesidad de conectarse con el mundo exterior, y
esto se logra mediante las comunicaciones seriales y
paralelas.
TX

RX
C

TX

RX

RX

TX
GND

Dispositivo
Externo

Mdulo
USB

ARDUINO
www.arduino.cc

Prof. Luis Zurita

PRCTICA 9 : COMUNICACIN SERIAL.


MIDIENDO Y TRANSMITIENDO TEMPERATURA

PROTOCOLO RS-232
Este protocolo es el utilizado por Arduino.
Cada dato se enva independientemente de los
dems.
Consta de 8 bits de datos
Consta de 1 bit de Inicio (START)
Consta de 1 bit de Parada (STOP)

BIT INICIO

BIT PARADA
LSB

www.arduino.cc

DATO

MSB

Prof. Luis Zurita

PRCTICA 9 : COMUNICACIN SERIAL.


MIDIENDO Y TRANSMITIENDO TEMPERATURA

www.arduino.cc

Prof. Luis Zurita

PRCTICA 9 : COMUNICACIN SERIAL.


MIDIENDO Y TRANSMITIENDO TEMPERATURA
El sensor de temperatura LM35 produce un voltaje
analgico directamente proporcional a
la
temperatura medida con una salida de 1 milivoltio
por cada 0.1C (10 mV por grado)
El sketch convierte el valor del sensor (analogRead) a
milivoltios y lo divide por 10 para obtener los grados.
La precisin del sensor ronda los 0.5 C, y en muchos
casos podremos usar recursos en lugar de clculos
matemticos de puntos flotantes.

www.arduino.cc

Prof. Luis Zurita

PRCTICA 9 : COMUNICACIN SERIAL.


MIDIENDO Y TRANSMITIENDO TEMPERATURA
Algunas instrucciones
comunicacin serial:

y/o

funciones

de

la

Serial.begin(9600); //9600 baud

Establece la velocidad de comunicacin deseada.


Baud (Baudios) es una medida del nmero de bits
transmitidos por segundo.
Se pueden elegir otros rangos de velocidad entre
ms bajos y ms altos (300 a 115,200 baudios),
pero hay que asegurarse de que ambos lados
utilicen la misma velocidad. Para estas prcticas
trabajaremos a 9600 baudios.
www.arduino.cc

Prof. Luis Zurita

PRCTICA 9 : COMUNICACIN SERIAL.


MIDIENDO Y TRANSMITIENDO TEMPERATURA
Serial.print("Coloca tu texto= ");
Con esta instruccin puedes enviar una lnea de
texto y/o cadena de caracteres (String). Para tal fin
se considerar una cadena de caracteres todo lo que
este entre las comillas (" ") . Se considera un
mensaje esttico o constante pues no cambiar su
valor una vez transmitido.
Serial.print(Variable);
Con esta instruccin se puede enviar un dato
variable tipo entero. Para otros formatos
tendramos:
www.arduino.cc

Prof. Luis Zurita

PRCTICA 9 : COMUNICACIN SERIAL.


MIDIENDO Y TRANSMITIENDO TEMPERATURA
Tipo de
Dato
char
int
long
float
double

Print
Print
Print
Print
Print
Print
(valor) (valor,DEC) (valor,BYTE) (valor, HEX) (valor,OCT) (valor,BIN)
A
65
A
41
101
1000001
65
65
A
41
101
1000001
El formato de long es el mismo que el entero
65.00 Formato no es soportado para valores de punto flotante
65.00 El formato de double es el mismo que el float

char asciiValue = 'A'; // ASCII A has a value of 65


char chrValue = 65; // an 8 bit character, this also is ASCII 'A'
int intValue = 65; // a 16 bit integer set to a value of 65
float floatValue = 65.0; // float with a value of 65

Serial.println("chrValue: ");
Serial.println(chrValue);
Serial.println(chrValue,BYTE);
Serial.println(chrValue,DEC);
Serial.println("intValue: ");
Serial.println(intValue);
Serial.println(intValue,BYTE);
www.arduino.cc

Serial.println(intValue,DEC);
Serial.println(intValue,HEX);
Serial.println(intValue,OCT);
Serial.println(intValue,BIN);
Serial.println("floatValue: ");
Serial.println(floatValue);
Prof. Luis Zurita

PRCTICA 9 : COMUNICACIN SERIAL.


MIDIENDO Y TRANSMITIENDO TEMPERATURA
Serial.println("Texto" o variable)
Con esta instruccin se puede enviar una cadena de
caracteres o una variable tipo entero, con la
diferencia de que las letras ln permiten el cambio
automtico de lnea hacia una nueva lnea.
Se pueden combinar ambas funciones para escribir
un mensaje variable. Por ejemplo, si se desea
enviar:
La Temperatura es= xxx Grados Centgrados, donde
xxx es la variable medida.
Podemos hacerlo de dos formas:
www.arduino.cc

Prof. Luis Zurita

PRCTICA 9 : COMUNICACIN SERIAL.


MIDIENDO Y TRANSMITIENDO TEMPERATURA
Por lneas separadas:
Serial.print(" La Temperatura es= ");
Serial.print(valor);
Serial.println( Grados Centgrados");//cambio de lnea
Otra forma de escribir lo mismo en una misma lnea:
Serial.print(" La Temperatura es= "); Serial.print(valor); Serial.println( Grados Centgrados");

www.arduino.cc

Prof. Luis Zurita

CONFIGURACIN ASIGNACIN
PUERTOS E/S
VARIABLES
PROGRAMA
PRINCIPAL

PRCTICA 9 : COMUNICACIN SERIAL.


MIDIENDO Y TRANSMITIENDO TEMPERATURA

//lm35 sketch
//Muetra la temperatura en el monitor serial
int inPin = 0; // pin del sensor analgico
void setup()
{
Serial.begin(9600); // Establece la velocidad de comunicacin
}
void loop()
{
int value = analogRead(inPin);
Serial.print(value); Serial.print(" > ");
float millivolts = (value / 1024.0) * 5000;
float celsius = millivolts / 10; // salida del sensor es 10mV por
grado celsius
Serial.print(celsius);
Serial.print(" grados Celsius, ");
Serial.print( (celsius * 9)/ 5 + 32 ); // convierte a fahrenheit
Serial.println(" grados Fahrenheit");
delay(1000); // espera un segundo
}

www.arduino.cc

Prof. Luis Zurita

PRCTICA 9 : COMUNICACIN SERIAL.


MIDIENDO Y TRANSMITIENDO TEMPERATURA
Presione el Monitor Serial
una vez cargado el programa
para observar la temperatura
desde el Arduino UNO

www.arduino.cc

Prof. Luis Zurita

PRCTICA 10: TERMOSTTO SERIAL

www.arduino.cc

Prof. Luis Zurita

PRCTICA 10: TERMOSTTO SERIAL


const int inPin = 0; // LM35 conectado al pin analgico
const int outPin = 13; // Pin de alarma
const int umbral= 25; // Los grados Celsius que dispararn el pin de
alarma
void setup()
{
Serial.begin(9600);
pinMode(outPin, OUTPUT);
}
void loop()
{
int value = analogRead(inPin);
long celsius = (value * 500L) /1024; // 10 mV por grados Celsius
Serial.print(celsius);
Serial.print(" grados Celsius: ");
if(celsius > umbral)//compara lectura del sensor con el margen de
disparo
{
digitalWrite(outPin, HIGH);
Serial.println("ALARMA ACTIVADA");
}
www.arduino.cc

Prof. Luis Zurita

PRCTICA 10: TERMOSTTO SERIAL


else
{
digitalWrite(outPin, LOW);
Serial.println("ALARMA DESACTIVADA");
}
delay(1000); // Delay de 1 segundo
}
El sketch usa enteros largos de 32 bits (long integers) para calcular el
valor. La letra L despus del nmero ocasiona que el clculo sea
optimizado usando matemticas de entero largo.
As que la multiplicacin de la mxima temperatura (500 para 5V de
Arduino) y el valor leido de la entrada analgica no desbordar el
formato de 32 bits.
Si se necesitan los valores en Fahrenheit, podremos convertir el valor
usando la siguiente frmula:
float f = (celsius * 9)/ 5 + 32 );
www.arduino.cc

Prof. Luis Zurita

PRCTICA 11: CONTADOR DE EVENTOS


Y COMUNICACIN SERIAL

www.arduino.cc

Prof. Luis Zurita

PRCTICA 11: CONTADOR DE EVENTOS


Y COMUNICACIN SERIAL

www.arduino.cc

Prof. Luis Zurita

int LED = 13; PRCTICA 11: CONTADOR DE EVENTOS


int Boton = 10;
Y COMUNICACIN SERIAL
int valor = 0;
int contador = 0;
void setup(){
Serial.begin(9600); // Configura velocidad de transmisin a 9600
pinMode(LED, OUTPUT); // inicializa como salida digital el pin 13
pinMode(Boton, INPUT); // inicializa como entrada digital el 7
}
void loop()
{
valor = digitalRead(Boton); // lee el valor de la entrada digital pin 7
digitalWrite(LED, valor);
while(valor==0){
digitalWrite(LED, LOW);
valor = digitalRead(Boton);
}
digitalWrite(LED, HIGH);
delay(20);
while(valor==1){
digitalWrite(LED, HIGH);
valor = digitalRead(Boton);
}
contador++;
Serial.println(contador);
}
www.arduino.cc

Prof. Luis Zurita

PRCTICA 11: CONTADOR DE EVENTOS


Y COMUNICACIN SERIAL

www.arduino.cc

Prof. Luis Zurita

int LED = 13; PRCTICA 11: CONTADOR DE EVENTOS


int Boton =10;
Y COMUNICACIN SERIAL
int valor = 0;
int contador = 0;
int estadoanteriorboton = 0;
void setup()
{
Serial.begin(9600); // Configura velocidad de transmisin a 9600
pinMode(LED, OUTPUT); // inicializa como salida digital el pin 13
pinMode(Boton, INPUT); // inicializa como entrada digital el 7
}
void loop()
Problemas con rebote
{
valor = digitalRead(Boton); // lee el valor de la entrada digital pin 7
digitalWrite(LED, valor);
if(valor != estadoanteriorboton){
if(valor == 1){
contador++;
Serial.println(contador);
}
}
estadoanteriorboton = valor;
}www.arduino.cc
Prof. Luis Zurita

PRCTICA 11: CONTADOR DE EVENTOS


Y COMUNICACIN SERIAL
Presione el Monitor Serial
una vez cargado el programa
para observar la cuenta
desde el Arduino Uno

www.arduino.cc

Prof. Luis Zurita

PRCTICA 12: RECEPCIN DE DATOS


Y COMUNICACIN SERIAL
/*
* Sketch de recepcin serial
* Blink al LED proporcional al valor del dgito recibido + ON/OFF manual
*/
const int ledPin = 13; // Conectamos el LED a este pin
int blinkRate=0; // Rata (tiempo) del blink es almacenado en esta variable
int memo=0; //memoriza y mantiene activado o no el blink
void setup()
{
Serial.begin(9600); // Inicializa el puerto serial para enviar y recibir a 9600 baudios
pinMode(ledPin, OUTPUT); // Se coloca este pin como salida
}
void loop()
{
if ( Serial.available()||memo==1) // chequea para ver si hay un caracter disponible
{
char ch = Serial.read();
if(ch >= '0' && ch <= '9') // Pregunta si es un dgito ASCII entre 0 y 9?
{
blinkRate = (ch - '0'); // Valor ASCII convertido a Valor numrico
blinkRate = blinkRate * 100; // Inicialmente el blink es 100 mS
}

www.arduino.cc

Prof. Luis Zurita

PRCTICA 12: RECEPCIN DE DATOS


Y COMUNICACIN SERIAL
//Modificacin 'o' apaga el led
if(ch=='o'){
digitalWrite(ledPin,LOW);
memo=0;}
if(ch=='p'){
digitalWrite(ledPin,HIGH);
memo=0;}
if(ch=='a'){
memo=1;}
if(ch=='d'){
memo=0;}
if (memo==1){
blink();
}
}
}
// blink sobre el LED con tiempo on y off determinado por blinkRate
void blink()
{
digitalWrite(ledPin,HIGH);
delay(blinkRate); // delay depende del valor sobre el blinkrate
digitalWrite(ledPin,LOW);
delay(blinkRate);
}

www.arduino.cc

Prof. Luis Zurita

También podría gustarte