Date post: | 24-Sep-2015 |
Category: |
Documents |
Upload: | lmzurita2008 |
View: | 23 times |
Download: | 7 times |
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
www.arduino.cc Prof. Luis Zurita
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
CONTENIDO DEL CURSO
www.arduino.cc Prof. Luis Zurita
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
CONTENIDO DEL CURSO
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 BX-24, 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
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.
POR QU ARDUINO?
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 NO POSEE
www.arduino.cc 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
CONECTOR USB
CONECTOR ALIMENTACIN
9-12VDC
CONECTOR ICSP
PINES COMUNICACIN
SERIAL
PINES ENTRADAS/SALIDAS DIGITALES
PINES ENTRADAS ANALGICAS
ATMEGA328P
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
PULSADOR RESET
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
ZONA DE ESTADO Y MENSAJES DE ERROR
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
REA DE TRABAJO
Sketch: Bosquejo, esquema, croquis
ESTRUCTURA DE UN PROGRAMA
void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: } www.arduino.cc Prof. Luis Zurita
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 seccin del cdigo en el loop ( ) se utiliza para controlar activamente la placa Arduino.
ESTRUCTURA DE UN PROGRAMA
ESTRUCTURA DE UN PROGRAMA
void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: } www.arduino.cc Prof. Luis Zurita
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 que puedes escribir lo que quieras despus de ella. Al comentar su cdigo como este puede ser particularmente til para explicar, tanto a s mismo y a otros, cmo funciona su programa paso a paso.
ESTRUCTURA DE UN PROGRAMA
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 Sin valor nulo Ninguno
www.arduino.cc Prof. Luis Zurita
www.arduino.cc Prof. Luis Zurita
www.arduino.cc Prof. Luis Zurita
www.arduino.cc Prof. Luis Zurita
CONECTOR USB
CONECTOR ALIMENTACIN
9-12VDC
CONECTOR ICSP
PINES COMUNICACIN
SERIAL
PINES ENTRADAS/SALIDAS DIGITALES
PINES ENTRADAS ANALGICAS
ATMEGA328P
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
PULSADOR RESET
www.arduino.cc
PRCTICA 1: LED BLINK
Sin resistencia (Solo con el pin 13)
Prof. Luis Zurita
Con resistencia
www.arduino.cc Prof. Luis Zurita
PRCTICA 1: LED BLINK
Diagrama de flujo (Planificacin)
Abra el ejemplo LED Blink: Archivo> Ejemplos> 1.Basics> Blink .
Prof. Luis Zurita www.arduino.cc
PRCTICA 1: LED BLINK
www.arduino.cc Prof. Luis Zurita
//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) }
PRCTICA 1 : LED BLINK A
SIG
NA
CI
N
VA
RIA
BLE
S C
ON
FIG
UR
AC
IN
P
UER
TOS
E/S
PR
OG
RA
MA
P
RIN
CIP
AL
www.arduino.cc Prof. Luis Zurita
Seleccione su tarjeta
PRCTICA 1: LED BLINK
www.arduino.cc Prof. Luis Zurita
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.
PRCTICA 1: LED BLINK
www.arduino.cc Prof. Luis Zurita
Compila el Programa Blink
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:
Ahora, simplemente haga clic en el botn verificar en el IDE.
PRCTICA 1: LED BLINK
www.arduino.cc Prof. Luis Zurita
Carga el Programa Blink
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.
Ahora, simplemente haga clic en el botn cargar en el IDE.
PRCTICA 1: LED BLINK
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
R1
330R
R2
330R
R3
330R
D1
D1
D1GND
ROJO
AMARILLO
VERDE
PRCTICA 2 : SEMFORO
Diagrama de flujo (Planificacin)
www.arduino.cc Prof. Luis Zurita
PRCTICA 2 : SEMFORO
www.arduino.cc Prof. Luis Zurita
// 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);
}
PRCTICA 2 : SEMFORO A
SIG
NA
CI
N
VA
RIA
BLE
S C
ON
FIG
UR
AC
IN
P
UER
TOS
E/S
www.arduino.cc Prof. Luis Zurita
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);
}
PRCTICA 2 : SEMFORO P
RO
GR
AM
A
PR
INC
IPA
L
www.arduino.cc Prof. Luis Zurita
a
f
b
g
e
c
d
CATODO COMUN
a
f
e
d DP
c
g b
PRCTICA 3 : DISPLAY 7 SEGMENTOS
www.arduino.cc Prof. Luis Zurita
a
f
AC
e d
DP
c
g
b
AC
LTS4710AR
7= a 8= b 9= c 10= d 11= e 12= f 13= g
PRCTICA 3 : DISPLAY 7 SEGMENTOS
www.arduino.cc Prof. Luis Zurita
7= a 8= b 9= c 10= d 11= e 12= f 13= g
a f
AC e d DP c
g b AC
HDSP-515L
PRCTICA 3 : DISPLAY 7 SEGMENTOS
www.arduino.cc Prof. Luis Zurita
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); }
ASI
GN
AC
IN
V
AR
IAB
LES
CO
NFI
GU
RA
CI
N
PU
ERTO
S E/
S FU
NC
IN
D
E D
ISP
LAY
www.arduino.cc Prof. Luis Zurita
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
PR
OG
RA
MA
P
RIN
CIP
AL
www.arduino.cc Prof. Luis Zurita
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
PR
OG
RA
MA
P
RIN
CIP
AL
www.arduino.cc Prof. Luis Zurita
R11k
R21k
GND
VCC
SALIDA
VCC
SALIDA
GND
Divisor de tensin especfico. Lee el estado lgico sin ambigedades
PRCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED
PullUp PullDown
www.arduino.cc 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
/* 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); }
PRCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED
ASI
GN
AC
IN
V
AR
IAB
LES
CO
NFI
GU
RA
CI
N
PU
ERTO
S E/
S P
RO
GR
AM
A
PR
INC
IPA
L
www.arduino.cc Prof. Luis Zurita
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
PRCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED
www.arduino.cc Prof. Luis Zurita
Rel electromecnico
Q12N3904
R3
1k
D11N4004
RL1RLY-SPCO
GND
VCC
PIN10
Circuito Elctrico
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.
PRCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN PULSADOR
www.arduino.cc Prof. Luis Zurita
Rel de estado slido
1
2
6
4
U1
MOC3021
R4
330R
GND
PIN uC
R5
1k
U2BT136
12
HACIA LA CARGA 110VAC
PRCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN PULSADOR
Optoacoplador (Optotriac)
TRIAC
www.arduino.cc Prof. Luis Zurita
Montaje en el Arduino
PRCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN PULSADOR
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
// 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);}
PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC DESDE DOS PULSADORES
ASI
GN
AC
IN
V
AR
IAB
LES
CO
NFI
GU
RA
CI
N
PU
ERTO
S E/
S P
RO
GR
AM
A
PR
INC
IPA
L
www.arduino.cc Prof. Luis Zurita
else { digitalWrite(LED, LOW); MEMO=0; delay(20);} } 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);} } } }
PRCTICA 6 : ACTIVANDO UNA CARGA 110 VAC DESDE DOS PULSADORES
CO
NTI
NU
AC
IN
DE
PR
OG
RA
MA
PR
INC
IPA
L
www.arduino.cc Prof. Luis Zurita
PINES ENTRADAS ANALGICAS
ATMEGA328P
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)
PRCTICA 7 : POTENCIOMTRO COMO ENTRADA ANALGICA
www.arduino.cc Prof. Luis Zurita
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.
PRCTICA 7 : POTENCIOMTRO COMO ENTRADA ANALGICA
www.arduino.cc Prof. Luis Zurita
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.
PRCTICA 7 : POTENCIOMTRO COMO ENTRADA ANALGICA
www.arduino.cc Prof. Luis Zurita
PRCTICA 7 : POTENCIOMTRO COMO ENTRADA ANALGICA
www.arduino.cc Prof. Luis Zurita
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); }
PRCTICA 7 : POTENCIOMTRO COMO ENTRADA ANALGICA
ASI
GN
AC
IN
V
AR
IAB
LES
CO
NFI
GU
RA
CI
N
PU
ERTO
S E/
S
www.arduino.cc Prof. Luis Zurita
void loop() { // Lee el valor del Potenciometro: valor = analogRead(POTEN); delay(100); if (valor
www.arduino.cc Prof. Luis Zurita
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.
PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)
Amplitud
www.arduino.cc Prof. Luis Zurita
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.
PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)
0 volts
5 volts
0 volts
5 volts
0 volts
5 volts 3.75 volts
2.5 volts
1.0 volts
20% 80%
50% 50%
80% 20%
www.arduino.cc Prof. Luis Zurita
PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)
www.arduino.cc Prof. Luis Zurita
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.
PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)
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
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 }
PRCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM)
www.arduino.cc Prof. Luis Zurita
Dispositivo Externo
C
TX
TX
RX
RX
GND
TX
RX
C
PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA
ARDUINO
Mdulo USB
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.
www.arduino.cc Prof. Luis Zurita
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
DATO LSB MSB
PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA
www.arduino.cc Prof. Luis Zurita
PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA
www.arduino.cc Prof. Luis Zurita
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.
PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA
www.arduino.cc Prof. Luis Zurita
Algunas instrucciones y/o funciones de la comunicacin serial:
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.
PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA
www.arduino.cc Prof. Luis Zurita
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:
PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA
www.arduino.cc Prof. Luis Zurita
PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA
Tipo de Dato
Print Print Print Print Print Print (valor) (valor,DEC) (valor,BYTE) (valor, HEX) (valor,OCT) (valor,BIN)
char A 65 A 41 101 1000001 int 65 65 A 41 101 1000001 long El formato de long es el mismo que el entero float 65.00 Formato no es soportado para valores de punto flotante double 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);
Serial.println(intValue,DEC); Serial.println(intValue,HEX); Serial.println(intValue,OCT); Serial.println(intValue,BIN); Serial.println("floatValue: "); Serial.println(floatValue);
www.arduino.cc Prof. Luis Zurita
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:
PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA
www.arduino.cc Prof. Luis Zurita
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");
PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA
www.arduino.cc Prof. Luis Zurita
//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 }
PRCTICA 9 : COMUNICACIN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA
ASI
GN
AC
IN
V
AR
IAB
LES
CO
NFI
GU
RA
CI
N
PU
ERTO
S E/
S P
RO
GR
AM
A
PR
INC
IPA
L
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
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"); }
PRCTICA 10: TERMOSTTO SERIAL
www.arduino.cc Prof. Luis Zurita
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 );
PRCTICA 10: TERMOSTTO SERIAL
else { digitalWrite(outPin, LOW); Serial.println("ALARMA DESACTIVADA"); } delay(1000); // Delay de 1 segundo }
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; int Boton = 10; 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); }
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; int Boton =10; 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() { 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; }
Problemas con rebote
PRCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIN SERIAL
www.arduino.cc Prof. Luis Zurita
Presione el Monitor Serial una vez cargado el programa para observar la cuenta desde el Arduino Uno
PRCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIN SERIAL
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
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); }