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
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 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
para observar la cuenta
desde el Arduino
www.arduino.cc
Prof. Luis Zurita