0 calificaciones 0% encontró este documento útil (0 votos) 168 vistas 169 páginas Curso Basico de Arduino
El libro 'Curso Básico de Arduino' de Misael Saenz Flores ofrece una introducción a la programación y el uso de Arduino, incluyendo la instalación del software y conceptos básicos de electrónica. A través de varios capítulos, se presentan proyectos prácticos que permiten aplicar lo aprendido, desde el uso de actuadores y sensores hasta la comunicación y control de dispositivos. La obra está bajo una licencia Creative Commons y se agradece a la comunidad de Arduino por su contribución al desarrollo del contenido.
Descripción mejorada con IA
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido,
reclámalo aquí .
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Ir a elementos anteriores Ir a los siguientes elementos
Guardar Curso Basico de Arduino para más tarde Misael Saenz FloresEl autor del libro de Curso Basico de Arduino: Misael Saenz Flores
Proyectos y textos elaborados por: Misael Saenz Flores
Correccién de texto:
© Mecatrénica LATAM
© Méndez Goerne Erick Oswaldo
© Montecillo Torres Magnolia Angelina.
Disefio y direccién de arte: Misael Saenz Flores e Imagenes libres de la red pertenecientes a sus
respectivos creadores
MeArm desarrollado por Ben Gracy
Circuitos elaborados por: Misael Saenz Flores
Software para la elaboracién de circuitos:
Fritzing - http://fritzing.org
Obra basada en
Curso Basico de Arduino en YouTube - https://g00.gl/L5FIGx
En el capitulo 1 parte de este estd basado en el texto de Fco. Javier C.
Agradecimiento:
Quiero dar las gracias a toda la comunidad de Arduino por la contribucién que realiza
constantemente, gracias a ello también se pudo realizar esta obra, también doy gracias a las
personas de mi vida personal que me apoyaron durante todo este tiempo en que se escribié esta
obra.
El logotipo y nombre de Arduino son marcas de Arduino, registradas en U.S.A yel resto del mundo.
La mencién de otros productos y nombre de compafifas dentro del libro son marcas de sus
respectivas compafiias.
El texto y todo el libro estan bajo una licencia Creative Commons Reconocimiento- NoComercial-
Compartirigual 4.0 del 2018.
Atribuelén-NoComercial-SinDerivadas 4.0 Internacional
@©@O8O
Este libro por ningun motivo debe venderse o modificarse sin permiso del autor.INTRODUCCION......
CAPITULO 1. INTRODUCCION A LA PROGRAMACION.
1.0 ELEMENTOS DEL LENGUALE....
1.1 CARACTERES EN C..
1.2 TIPOS DE DATOS...
1,3 COMENTARIOS.
1.4 DECLARACION DE CONSTANTES SIMBOLICA:
1.5 DECLARACION DE UNA VARIABLE.
wo 2
1.6 OPERADORES.
1.7 SENTENCIAS DE CONTROL.scssnnnninntinnnnninnnnnesnes LT
CAP/TULO 2. SOFTWARE PARA EL. FUNCIONAMIENTO.
2.0 DESCARGA E INSTALACION DEL SOFTWARE.
2.1 DESCARGA DEL IDE ARDUINO... wo 2.
2.2 INSTALACION DEL IDE.... 24
CAPITULO 3. INTRODUCCION AL ARDUINO. senses BS
3.0 2QUE ES ARDUINO?.
3.1 ESTRUCTURA DE ARDUINO...
3.2 CONCEPTOS BASICOS.
3.1 IDE DE ARDUINO.....
CAPITULO 4, PRYECTOS CON ARDUINO.
4.0 ACTUADORES DIGITALE!
4.0.1 MI PRIMER PROGRAMA EN ARDUINO.
4.0.2 PARPADEO DE DOS LED:
re]
IMISAEL SAENZ FLORES 24.0.3 SECUENCIA DE LEDS... 34
4.1 SENSORES DIGITALES... 2 36
4.1.1 SENSANDO UN PULSADOR. 38
4.1.2 PULSADOR COMO INTERRUPTOR. oe AO
4.1.3 OPTOINTERRUPTOR. 42
4.1.4 OTROS SENSORES DIGITALES... 44
4.2 SENSORES ANALOGICOS.....csne 46
4.2.1 POTENCIOMETRO... we AT
4.2.2 SENSOR DE TEMPERATURA L335... 50
4.2.3 SENSOR IR TCRTSO00. 52
4,3 ACTUADORES ANALOGICOS. 54
4.3.1 FADE DE UN LED. 56
4.3.2 FADE DE UN LED CON POTENCIOMETRO... 57
4.3.3 FADE DE UN LED CON POTENCIOMETRO Y MAP...
4.3.4 CONTROL DE LED RGB... oo 61
4.4 CONTROL Y MANEJO DE CARGAS.... 1 6B
4.4.1 USO DEL TRANSISTOR... 67
4.4.2 PWM CON TRANSISTOR. 1 69
4.4.3 USO DEL RELEVADOR CON ARDUINO....:sssennennesse TL
4.4.4 USO DEL OPTOACOPLADOR. 72
4.4.4.1 OPTOACOPLADOR COMO ACTUADOR.. rss 73
4.4.4.2 LEER SENALES DE MAS DE 5V.. oon 4
4.5 USO Y MANEJO DE MOTORES... TT
4.5.1 USO DEL SERVOMOTOR. 80
4.5.2 MOTOR DC CON TRANSISTOR. 824.5.3 MOTOR CON PUENTE H.....
4.5.4 USO DEL MOTOR A PASOS BIPOLAR.......
4.6 COMUNICACION CON Y DESDE ARDUINO. 89
4.6.1 IMPRIMIR DATOS POR EL MONITOR SERIAL...
4.6.2 RECIBIR DATOS POR EL PUERTO SERIAL. 92
4.6.3 COMUNICACION SERIAL CON BLUETOOTH. 1 9B
4.7 DESPLEGANDO INFORMACION CON ARDUINO.... 1 95
4.7.1 USO DE LA LCD DE 16 X 2... 97
4.7.2 MOSTRAR DATOS EN LA LCD... 1 99
4.7.3 MOSTRAR DATOS EN DISPLAY DE 7 SEGMENTOS. 101
CAPITULO 5. PROYECTOS AVANZADOS. .107
5.1 BRAZO ROBOTICO. 107
5.1.1 ARMADO DE LA BASE. 108
5.1.2 LADO IZQUIERDO.... 119
5.1.3 LADO DERECHO. 127
5.1.4 PARTE CENTRAL Y EL “CERDO”. 132
5.1.5 PARTE CENTRAL wsessncnnnninnsnnnnannnnsnie 138
5.1.6 ANTEBRAZO IZQUIERDO Y DERECHO. 143
5.1.7 MANO... 146
5.1.8 CIRCUITO DEL BRAZO... 1 158
5.2 TEMPORIZADOR CON ARDUINO... 161
CONCLUSION ssssosensnsennensonansennennenenensn seston nevenes 168
Nota: Al final de cada capitulo o entre los capitulos habré un icono del sitio web YouTube, esto indica un
video tutorial como apoyo al capitulo correspondiente.INTRODUCCION
ee
El Capitulo 1 describe una introduccién a la programacién y conocer los antecedentes necesarios
para poder aplicarlos a los siguientes capitulos, asi mismo se ven conceptos basicos sobre qué
son las variables, los tipos de datos, condicionales, ciclos, etc., esto se realizara en lenguaje C ya
que es muy parecido al lenguaje que usa la plataforma Arduino.
El Capitulo 2 inicia con la descarga e instalacion de los softwares necesarios para la programacion
de nuestra tarjeta Arduino, mediante ilustraciones gréficas se seguird paso a paso la descarga de
cada uno de los programas, esto permite al lector una guia simple y completa.
El Capitulo 3 presenta una breve explicacién sobre electrénica basica y las tarjetas de desarrollo,
especificamente sobre la tarjeta Arduino UNO y sus caracteristicas, ademas se proporcionan
consejos muy utiles para el correcto funcionamiento de ésta.
El Capitulo 4 inicia con ejercicios basicos para poder comprender el funcionamiento de nuestra
tarjeta de desarrollo Arduino. También cabe recalcar que es indispensable, pero no necesario
disponer de alguna tarjeta de desarrollo ya sean las versiones Arduino UNO, Arduino
Duemilanove, Arduino NANO, Arduino Mega, etc., también es necesario seguir en orden cada
una de las prdcticas para poder entender los conceptos y practicas que se muestran mas adelante,
ya que cada vez serdn més extensas, pero no muy dificiles de entender.
El Capitulo 5 presenta algunos proyectos donde se pondré en practica lo aprendido en los
capitulos anteriores y asi poder completar con gran éxito los proyectos necesarios, para su
trabajo y/o escuela.
IMISAEL SAENZ FLORES 5one
INTRODUCCION A LA PROGRAMACION
1.0 ELEMENTOS DEL LENGUAJE
En este capitulo se verdn los elementos que aporta el lenguaje C (caracteres, secuencias de escape, tipos
de datos, operadores, etc.) para escribir un programa. Considere este capitulo como soporte para el resto
de los capitulos.
1.1 CARACTERES EN C
Los caracteres del lenguaje en C pueden agruparse en letras, digitos, espacios en blanco, caracteres
especiales, signos de puntuacién y secuencias de escape.
LETRAS, DIGITOS, ETC
Estos caracteres son utilizados para former las constantes, los identificadores y las palabras clave del
lenguaje C. Son los siguientes:
‘+ Las letras mayéisculas del alfabeto inglés:
© ABCDEFGHIJKLMNOPQRSTUVWXYZ
* Las letras minisculas del alfabeto inglés:
© abcdefghijkimnoparstuvwxyz
‘© Digitos enteros
© 0123456789
* Carécter de subrayado"_”
jlador trata las letras mayisculas y mindsculas como caracteres diferentes. Por ejemplo los
identificadores de la constante de Euler e y £ son diferentes.
ESPACIOS EN BLANCO
Los espacios en blanco, el tabulador (todos los tipos), avance de pagina y nueva linea, son caracteres
denominados en blanco, debido a que la labor que desempefian es la misma que la del espacio en blanco:
actuar como separadores, lo cual permite escribir un programa mucho més limpio y legible. Por ejemplo:
main() { print£("Hola Mundo.\n"); }
IMISAEL SAENZ FLORES 6Puede escribirse de una forma més legible as:
main() ¢
printf ("Hola Mundo.\n");
Los espacios en blanco en exceso son ignorados.
CARACTERES ESPECIALES Y SIGNOS DE PUNTUACION
Este grupo de caracteres se utilizan de diferentes formas, para indicar que un identificador es una funcién
© una matriz; para especificar una determinada operacién aritmética logica 0 de relacién, etc. Son los
siguientes:
er CV CT LY t; // y= 1 (verdadero) porque r es mayor que t
e
"
re]
IMISAEL SAENZ FLORES Bti // y = 1 (verdadero) porque r no es igual a t
Un operador de relacién equivale a una pregunta relativa sobre como son dos operandos entre si. Por
ejemplo, la expresién r == t equivale a la pregunta éx es exactamente igual a y? Una respuesta si equivale
aun valor verdadero (1) y una respuesta no equivale a un valor falso (0).
OPERADORES LOGICOS
El resultado de una operacién Idgica (AND, OR, XOR y NOT) es un valor booleano verdadero 0 falso (1.0
0}. Las expresiones que dan como resultado valores booleanos (véanse los operadores de relacién)
pueden combinarse para formar expresiones booleanas utilizando los operadores légicos indicados a
continuacién.
Los operandos deben ser expresiones que den un resultado verdadero o falso.
Operador enc
AND. Da como resultado verdadero si al evaluar
cada uno de los operandos el resultado es
verdadero. Si uno de ellos es falso, el resultado es
falso. Si el primer operando es falso, el segundo
‘operando no es evaluado.
OR. El resultado es falso si al evaluar cada uno de
los operandos el resultado es falso. Si uno de ellos
es verdadero, el resultado es verdadero. Si el
primer operando es verdadero, el segundo
operando no es evaluado.
NOT. El resultado de aplicar este operador es falso
si al evaluar su operando el resultado es
verdadero, y verdadero en caso contrario.
XOR. Da como resultado verdadero si al evaluar
cada uno de los operandos el resultado de uno es
verdadero y el del otro falso; en otro caso el
resultado es falso.
El resultado de una operaci6n l6gica es de tipo int o booleana. Por ejemplo:
into- 10, p-0, 4-0;
0) && (p != 0); // q = 0 (falso)
Los operandos del operador && son: o != Oy p I= 0. El resultado de la expresién o /= Oes verdadero porque
ovale 10 yp !=0es falso porque p es 0. Por lo tanto, el resultado de verdadero && falso es falso.
re]
IMISAEL SAENZ FLORES 4OPERADORES UNARIOS
Los operadores unarios se aplican a un solo operando y son siguientes: !, -,~, + y
hemos visto y los operadores ++ y - los veremos mas adelante.
Operador
lg
n
Complemento a 1 (cambia los ceros por unos y
unos por ceros). El cardcter ~ es el ASCII 126. El
operando debe de ser de un tipo primitivo entero.
Cambia el signo al operando (esto es, se calcula el
complemento a dos que es el complemento 1 més
1). El operando puede ser de un tipo primitive
entero o real.
El siguiente ejemplo muestra cémo utilizar estos operadores:
int a= 2, b=0,c=0
c= -a; // resultado c =
c= ~b; // resultado c
OPERADORES A NIVEL DE BITS
Estos operadores permiten realizar con sus operandos las operaciones AND, OR, XOR y desplazamientos,
bit por bit. Los operandos tienen que ser enteros.
(crs ee
Operacién AND a nivel de bits.
Operacién OR a nivel de bits.
Operacién XOR a nivel de bits.
Desplazamiento a la izquierda rellenando con
ceros por la derecha.
Desplazamiento a la derecha rellenando con el bit
de signo por la izquierda.
Los operandos tienen que ser de un tipo primitivo entero.
int a = 255, r = 0, m= 32;
x =a & 017; //r = 15. Pone a cero todos los bits de a excepto los
4 bits de menor peso.
IMISAEL SAENZ FLORES 15r=r|m// r= 47, Pone a1 todos los bits de r que estén a 1 en
r= a & ~07; // xr = 248, Pone a 0 los 3 bits de menor peso de a.
ts a la derecha.
r= a>> 7; // r= 1. Desplazamiento de 7 b:
®
n
B
<< 1; // © = 64. Equivale ar -m* 2
®
=a>> 7; // c= 16. Eqiivalear-=m/2
OPERADORES DE ASIGNACION
El resultado de una operacién de asignacién es el valor almacenado en el operando izquierdo, ldgicamente
después de que la asignacién se ha realizado. EI valor que se agina es convertido implicitamente 0
explicitamente al tipo del operando de la izquierda.
Operador (recrciy
Decremento.
Multiplicacién més asignacién.
Acontinuacién se muestran algunos ejemplos con estos operandos.
int x= 10, y= 1;
x++; // Incrementa el valor de n en 1
x--; // Decrementa el valor de n en 1
y ++2 // Realiza la operacién i = i + 2
re]
IMISAEL SAENZ FLORES 161.7 SENTENCIAS DE CONTROL
En esta parte se aprenderd a escribir cédigo para que un programa tome decisiones y sea capaz de
ejecutar bloques de sentencias repetidas veces.
SENTENCIA IF
La sentencia if permite tomar una decisién para ejecutar una accién u otra, esta decisién es del tipo
booleana ya sea verdadero 0 falso y la sintaxis es la siguiente.
if (condicién)
sentencia 1;
else
sentencia 2];
donde la condicién es una expresién légica o relacional y sentencia 1 y sentencia 2 representan el cédigo
que quieren que se ejecute.
Una sentencia if se ejecuta de la forma siguiente:
Se evaluia la expresi6n condicién.
Si el resultado de la evaluacién de la condicién es verdadera se ejecutaré la sentencia 2.
Si el resultado de la condicién es falso se ejecutara la sentencia 2.
Si el resultado de la condicién es falso y no se ha puesto la cldusula else, la sentencia 1 seré
ignorara.
A continuacién se exponen algunos ejemplos de cémo se utiliza la sentencia if.
if(a < b){
printf ("a es mei
que b
Jelse{
printf ("a no es menor que b");
}
En este ejemplo, la condicién esta impuesta por una expresién de relacién. Si al evaluar la condicién se
cumple que a es menor que b lo cual es falso, entonces imprimiré un mensaje el cual es “a es menor que
b”, como sabemos que la condicién es falsa se ejecuta la sentencia dos que imprime el mensaje “a no es
menor que b”.
Con esto queda por visto la sentencia de control if
ee]ESTRUCTURA ELSE IF
Esta estructura else if es una estructura consecuente de la sentencia if, en la cual se evaliian diferentes
casos, su forma general es:
if(condicién 1)
sentencia 1;
else if(condicién 2)
sentencia 2;
else if(condicién 3)
sentencia 3;
else
sentencia nz
Laestructura els
en la sentencia 1 y si no se cumple se examina secuencialmente los siguientes casos (condiciones) hasta
llegar al Ultimo else if. Si ninguna condicién es verdadera entonces se ejecutara la sentencia n que
corresponde al itimo else. El siguiente ejemplo se muestra cémo funciona:
se evaliia asi: Sise cumple el primer caso (condicién 1), se ejecuta lo que se encuentra
0, b=5,c=1
print menor que b”)
Jelse if(a
printf£("a es igual que
jelse > ert
printf
es mayor que c”)
jelse{
printf (*Ningén caso es verdadero”);
)
re]En este ejemplo podemos observar que las condiciones son falsas porque asi lo hemos hecho, pero
bhasta
primero se evalua la condicién 1 que es a 1; pinled--) {
// Pone el pinked en HIGH encendiendo el led
digitalWrite(pinled, HIGH);
delay (pausa) ;
// Pone el pinked en LOW apagando el led
digitalWrite (pinled, LOW);
)
delay (pausa) ;
Circuito:
fritzing
(Hay un error en este diagrama el cable azul debe estar en el nodo)
IMISAEL SAENZ FLORES 35Explicacién:
Como habrén notado tenemos unas cuantas modificaciones muy interesantes, primero creamos una
variable global del tipo entero llamada pausa con un valor de 50, esta variable nos servird para cambiar el
tiempo en que cambian de estado los leds, si disminuimos el valor aumenta la velocidad cuando prenden
y se apagan, o sea se “mueven” mas répido, si aumentan el valor es més lento.
Lo siguiente es configurar los pines como salida y aqui vemos Io interesante, no usamos la palabra
reservada define para darle un alias a cada pin de Arduino, donde conectamos los leds, los usaremos
como ntimeros y los configuraremos de “golpe” como salidas, esto lo hacemos con un for que ya se vio su
funcionamiento en un capitulo anterior, este inicia en el pin 2 y en la condicién 1 ponemos que nuestra
variable sea menor que 7 ya que seré de 2 a 6 los pines a utilizar, y en la condicién 2 hacemos el
increment en 1, dentro del for usamos el pinMode() y le pasamos la variable del for, la ponemos como
OUTPUT y es asi como configuramos los pines como salida de “golpe” .
Ahora en el loop ponemos nuestro programa de ejecucién, de nuevo usamos un for como el del setup(),
y adentro del for ponemos la sentencia que hace que prenda el led con digitalWrite(), a esta funcién le
pasamos como primer pardmetro la variable del for y enviamos un alto, el led prenderé durante el tiempo
de la variable pausa y después de ese tiempo se apagaré ese mismo pin, asi sucesivamente, después se le
da un tiempo con un delay(), de nuevo le pasamos como pardmetro la variable pausa y esto servird para
darle un tiempo para hacer el cambio al segundo for.
En este segundo for hacemos lo mismo pero ahora al revés, empezamos en el led conectado en el pin 6 y
asi seguimos hasta el led 2, para que esto funcione en la condicién 1 usamos un > y en la condi
hace un decremento, esto ya se vio en un ejemplo de un capitulo anterior.
Muy bien, ya pasaste el primer capitulo sobre actuadores digitales, ya puedes manejar cualquier actuador
digital que reciba sefales de 0 0 Sv.
You
Video [tutorial]: (Curso Arduino Basico - #3] Actuadores Digitales
4.1 SENSORES DIGITALES
Bien, ya vimos actuadores digitales, aprendimos como escribir/enviar sefiales digitales de 0 0 Sv. Ahora
veamos como leer sefiales de 0 0 Sv con nuestro Arduino.
'* Los sensores digitales pueden estar abiertos 0 cerrados, o sea pueden tener el valor de 0 0 Sv.
© Laentrada de lectura serd de 5 0 0 volts.
© Esto seria: 1.00 logicos.
© Para saber su estado utilizaremos la funcién:
© digitalRead{Inumpin/alias));
‘© Nos devolverd un valor légico/booleano.
"= HIGH/1 ~Si esté cerrado = 5 volts 0 mayor a 3 volts.
= LOW/0—Si esta abierto = 0 volts o menor a 2 volts.La lectura que se hace con di
italRead|) y ésta se tiene que almacenar en una variable del tipo natural, 0
6sea byte o int, para poder usar ese valor, usando las sentencias if, switch, etc.
‘Tenemos algunas cuestiones antes de comenzar para que no haya algin error cuando se hace la lectura
de cualquier sensor digital:
‘+ Siel sensor no esté bien conectado:
‘© Tendremos un pun pin “flotante” con valores de lectura aleatorios entre 0 y 1.
‘+ Esnecesario conectarlo bien:
© Atierra, con una resistencia pull-down.
(© ASvolts, con una resistencia pull-up.
© Leer la hoja de datos del sensor para ver las especificaciones.
‘+ Elpin 13 no es recomendable usarlo en la tarjeta para lectura:
© Tiene une resistencia propia fisica.
Ahora veremos qué es una resistencia pull-down y pull-up y como se usara,
Las resistencias pull-up o pull-down se usan para establecer el estado ldgico de la lectura que haremos de
nuestro sensor y ésta sea correcta, como es el caso si usamos pulsadores, dip switch, sensores IR, etc.
Como bien lo dice su nombre, dependiendo de la configuracién que hagamos tendremos un estado alto
por default o un estado bajo también por default, cuando nuestro sensor esté en reposo y cuando
activemos el sensor cambiar el estado de éste y se usan resistencias de 1k a 10k, y esto se explicé
anteriormente.
En la configuracién de resistencia pull-up en el estado de reposo tendremos un estado de SV (HIGH), en
cambio cuando activamos nuestro sensor se deriva toda la corriente a tierra y la cafda de tencién es de Ov
(Low).
En la configuracién de resistencia pull-down en el estado de reposo tendremos un estado de OV (LOW),
en cambio cuando activamos nuestro sensor dejaré pasar la corriente y tendremos una diferencia de
potencial de Sv (LOW).
‘Aqui mostramos la conexi6n de cada un
wv EY sv wv
Rt Rt |
on om i a mela
sem ena. ra
senAL Fo sent
a & I om’ h
Configuracion Pull-down ‘Configuracién Pull-up_Esta configuracién sirve solo para sensores donde solo tenemos dos estados ALTO 0 BAIO.
4.1.1 SENSANDO UN PULSADOR
En nuestra primera practica vamos a leer un pulsador y por medio de una condicién vamos a prender y
apagar un led, esta primera practica serd la base para poder leer cualquier otro sensor con solo dos
estados que son ALTO 0 BAJO y poder utilizarlo dependiendo de nuestras necesidades, abajo se muestra
el cédigo, material y explicacién de la préctica.
MATERIALES.
ARDUINO
LED de Smm
Resistencia de 2200
1 Pulsador de 4 pines 0 2 pines
1 Resistencia de 10k
Protoboard
Jumpers
define LED 2 //|
define Push 3 //Damos el alias a nue:
jos el alias a nuestro pin 2.
byte Push_lee =
void setup() {
pinMode (LED, OUTPUT); //Definimos el pin LED como s.
pinMode (Push, INPUT); //Definimos el pin Push como entrada.
)
da.
void loop () {
//Definimos nue
Push_lee = digitalRead (Push); //Almacenamos en la variable la lectura
del pull
if (Push_lee
e
nemos el valor de 1 entra en
1){ //Condicién que si t
digitalWrite(LED,H1GH); //Se manda un ALYO al LED
jelse{ //Condicién que se cumple si no se cumple el i
digitalWrite(LED,LOW); //Mandamos un BAJO al LED.
}
MISAEL SAENZ FLORES 38fritzing
Explicacion:
Podemos ver en nuestro circuito que hemos conectado un led al pin 2 y un pulsador al pin 3, en la
programacién definimos un alias para cada uno respectivamente usando #define, ademas que al led lo
ponemos como salida usando pinMode() , al pulsador como entrada ya que leeremos lo que mande, este
pulsador lo hemos conectado en modo de pull-down, esto nos quiere decir que siempre enviaré un estado
légico de BAJO estando en reposo y cuando pulsemos enviaré un ALTO, este valor se almacenaré en la
variable Push_lee, pero para leer la sefial que el pulsador manda usamos la funcién digitalRead(), ese
valor se almacena en la variable anteriormente mencionada, todo esto dentro de loop ya que es nuestro
programa de ejecucién, después con el uso de una condicional if tendremos la ldgica “Si presionamos el
pulsador este enviaré un valor I6gico ALTO o 1, entonces prende el led sino se pulsa, entonces apaga el
ed”, por eso el if si tenemos un valor ALTO 0 1 en nuestra variable Push_lee y hacemos la comparacién,
esto ya se ha explicado en el primer capitulo, entonces entra dentro del if y envia un alto al LED y este
prenderé, sino entra en el else ya que no se tiene un uno de lectura sino un cero, entonces envfa un bajo
al LED y este permanece apagado Unicamente si no se pulsa el pulsador. ¥ es as{ como leemos valores
digitales.
En la siguiente practica veremos cémo usar estas lecturas con un poco de légica de programacién para
poder hacer que un led permanezca prendido, cabe mencionar que no es necesario que sea un pulsador
el que mande la sefial como lo veremos més adelante, si no puede ser cualquier sensor que solo envie dos
estados, ALTO 0 BAJO,
IMISAEL SAENZ FLORES 384.1.2 PULSADOR COMO INTERRUPTOR
Como se mencioné anteriormente se hard una préctica, la cual consta de que al momento de presionar
un pulsador este prenderé un led hasta que se vuelva a presionar, convirtiendo este pulsador a un
interruptor con programacién, esto no solo nos serviré con pulsadores sino con muchos otros
componentes, abajo se muestra el cédigo, material y explicacién de la préctica.
MATERIALES.
ARDUINO
LLED de Smm
1 Resistencia de 2209
1 Pulsador de 4 pines 0 2 pines
L Resistencia de 10k
Protoboard
Jumpers
define LED 2
#define push 3
int push_lee = 0;
int estadoLed = 0;
int estadoAnterior = 0;
void setup() {
pinMode (LED, OUTPUT) +
pinMode (push, INPUT);
void loop() {
push_lee ~ digitalRead (push);
if ({push_lee -- 1) && (estadoAnterior
estadoLed = 1 - estadoled;
delay (10);
)
estadoAnterior = push_lee;
if (estadoLed == 1) {
digitalWrite (LED, HIGH);
} else {
digitalWrite (LED, LOW);
re]
MISAEL SAENZ FLORES 40fritzing
Explicacion:
Como pueden ver el cédigo que hemos escrito ya no tiene comentarios y esto se elimind porque ya hemos
avanzado y aprendido cémo funcionan las cosas bdsicas, asi como definir y darle alias a los pines y
ponerlos como entrada o salida, lo cual hacemos con el pin 3 y pin 2 respectivamente.
Creamos tres variables del tipo int, una para almacenarla lectura del pulsador que es push_lee, estadoLed
Para almacenar el estado que entrar en el if para que prenda o apague el led, incluso cualquier otro
actuador que veremos mds adelante.
La variable estadoAnterior almacenaré el estado anterior del pulsador, estas tres variables se igualan 2
cero para tener un valor por defecto, ya en el setup() se configuran los pines como entrada y salida
respectivamente, ahora viene lo més interesante que es nuestro programa de ejecucién que sirve para
usar un pulsador como un switch,
Primero almacenamos en push_lee la lectura que se le hace al pulsador, ahora escribiremos un if en el
cual tendremos dos condiciones unidas por un AND o sea un &&, la primera condicién nos dice que al
estado de push_lee debe ser uno y se hace la comparacién ademas de que este estado debe ser verdadero
yy esto se cumple cuando presionamos el pulsador, la segunda condicién dice que el estado anterior debe
ser cero y esto es verdad ya que al principio nosotros le dimos un valor de cero, después tiene una
operacién muy interesante la cual es estadoLed = 1 - estadoLed, esta se explicaré mas adelante.
Después dentro del if viene un delay(), es un pequefio tiempo llamado antirrebote y es el tiempo en que
tardamos presionando el pulsador, al terminar este if se le asigna a la variable estadoAnterior el valor de
push_lee.
re]
IMISAEL SAENZ FLORES 41Ahora bien, explicaremos la operacién estadoLed = 1 - estadoLed, como el pulsador estén en modo pull-
downn al presionar nosotros el pulsador el valor de la variable push_lee cambia a uno, después entra al
if donde las dos condiciones se evalian y se encuentran verdaderas ya que se cumple la primera al
presionar el pulsador y la segunda se cumple pues le dimos el valor de cero, por consiguiente entra al if
donde tenemos la operacién estadoLed = 1 — estadoLed.
Como la variable estadoled tiene valor cero porque asi lo hemos puesto al principio entonces tenemos
que estadoLed = 1 ~ 0, eso nos da el valor de uno en estadoLed, y ahora en la variable estadoAnterior
fuera delif tiene un valor cero ya que el valor de uno lo toma Gnicamente cuando presionamos el pulsador
y cuando se suelta toma el valor de cero nuevamente, después de esto entra el segundo if, como el
estadoLed vale uno y no se ha cambiado este valor permanece en ese if y prende el led hasta que se
‘vuelva a presiona el pulsador cambiard de estado porque ahora se tendré: estadoLed = 1-1, que es cero
yentra en el else ya que no se cumple la primera condicién y se apaga el led, y asi es como se hace para
que un pulsador funcione como switch, como ya se mencioné esto no sirve solo para pulsadores, sino
para muchas més aplicaciones que se verén més adelante,
Muy bien, ahora ya saben controlar mejor las sefiales de entrada con programacién.
4.1.3 OPTOINTERRUPTOR
Ya vimos como leer sensores digitales, ahora haremos una practica bastante simple que serd la base para
hacer muchos proyectos, el cual es saber manejar y leer los datos que nos manda un optointerruptor,
estos se usan en las cajas del supermercado en la banda trasportadora que al bloquear la sefial se detiene
pero si es una sefal limpia avanza la banda o también para tener un conteo se personas u objetos, abajo
se muestra el cédigo, material y explicacién de la préctica
MATERIALES.
ARDUINO
LLED de Smm
2 Resistencia de 2200
1 Diodo emisor de Smm IR
L Resistencia de 10k
1 Fototransistor
Protoboard
Jumpers
define LED 2
define opto 3
int Opto_le:
void s
PO {
pinMode (LpinMode (Opto, INPUT);
)
void loop() {
opto_lee = digitalRead (opto)
if (Opto_lee == 1) {
digitalWrite (LED, HIGH);
} else {
digitalWrite (LED, LOW);
fritzing
Explicaci6n:
Muy bien, el funcionamiento es muy simple, definimos dos pines, el led y el optointerruptor al led lo
Ponemos como OUTPUT y para el optointerruptor lo ponemos como INPUT, también creamos una
variable del tipo entero que almacenaré el valor enviado por el fototransistor al pin 3, después en el loop
hacemos nuestro programa de ejecucién, usando digitalRead leemos el valor del pin 3 y lo almacenamos
en la variable Opto_lee, después con un if hacemos una comparacién légica, si el valor digital es 1
enciende el led usando digitalWrite, en caso de que sea un valor distinto a 1 permaneceré apagado.
Como vimos este es el funcionamiento de un optointerruptor que nos serviré para hacer muchos
proyectos, desde una banda trasportadora hasta un seguidor de lineas.
IMISAEL SAENZ FLORES 484.1.4 OTROS SENSORES DIGITALES
Ya vimos los sensores més simples que solo envian una sefial por accién ya sea un 1.0 un 0 digital, ahora
veremos otros sensores digitales que funcionan similarmente. Este ejemplo se hard con el sensor
ultrasénico HC-SR04, aqui se verdn una cuantas funciones nuevas que se explicaran més adelante cuando
se explique el funcionamiento del cédigo, abajo se muestra el cédigo, material y explicacién de la préctica.
Explicacién del ultrasénico:
El funcionamiento interno del sensor ultrasénico es bastante complejo, pero explicaremos lo mas simple.
El sensor envia un pulso durante un tiempo (especificado en la hoja de datos), ese pulso sale por medio
de un piezo que genera una onda ultrasénica, ésta choca con algiin objeto y rebota, esta misma onda viaja
a través del aire y es recibida por el otro “piezo” del sensor llamado eco y usando formulas bastantes
simples con algtin microcontrolador, en esta caso Arduino, podremos saber la distancia a la cual se
encuentra el objeto en que la onda reboté, se puede apreciar un ejemplo grafico en la imagen de abajo,
Poulso de inicio
es
-—sI
Pulse de Tiempode Eco =
Fu ico
Todos estos datos se encuentran en la hoja de datos del sensor, se recomienda buscarla y leerla
detenidamente.
MATERIALES
ARDUINO
LHC-SRO4
Protoboard
Jumpers,
define TRIG 2
define ECHO 3
long Tiempo;
float Distancia;
void setup() {
re]
MISAEL SAENZ FLORES 44Serial begin (9600);
pinMode (TRIG, OUTPUT);
pinMode (ECHO, INPUT);
)
void loop() {
digitalWrite (TRIG, HIGH);
delayMicroseconds (10);
digitalWrite (TRIG, Low);
Tiempo = (pulseIn (ECHO, HIGH) /2);
Distancia ~ float (Tiempo * 0.0343);
Serial.printin (Distancia);
delay (1000);
Circuito:
fritzing
Explicacion:
Ahora explicaremos cémo funciona el cédigo junto al sensor para poder medir la distancia.
Primero definimos los dos pines del sensor TRIG y ECHO, después definimos dos variables, en una se
almacenaré el tiempo de regreso de la onda ultrasénica que viaja por el aire y en la otra almacenard la
distancia. En el setup ponemos los pines tanto de entrada y salida respectivamente, ademés escribimos
Serial.begin(9600), esto nos serviré para iniciar la comunicacién serial para poder ver la distancia, mas
adelante se explicaré la comunicacién Serial con profundidad.
re]
IMISAEL SAENZ FLORES 45Como dice la hoja de datos del sensor, necesitamos enviar un pulso por 10 microsegundos por el TRIG,
ahora lo que hacemos es usar digitalWrite y enviar un pulso alto por el pin del TRIG por 10us, esto se hace
mediante el delayMicroseconds, después apagamos ese pulso con un LOW.
Después, como se dijo en la explicacién del ultrasénico esa onda regresaré y seré leida por el ECHO, para
esto usaremos la funcién pulseln, esta funcién lo que hace es contar el tiempo en que hay un pulso, ya
sea alto 0 bajo, este tiempo se divide entre 2 ya que lo dice la hoja de datos de nuestro sensor, esto es el
tiempo que tarda el sonido en ir y volver.
Ahora calcularemos la distancia, sabiendo que el espacio es igual a la velocidad por el tiempo y que la
velocidad del sonido es de 343m/s donde el tiempo lo tenemos en millonésimas de segundo, hacemos la
operacién matemética de multiplicar el tiempo por la velocidad del sonido y esto nuevamente viene en la
hoja de datos del sensor, después simplemente ese valor se almacena en la variable Distancia
Después con la funcién Serial.printin, imprimimos el valor de Ia distancia, ahora solo queda abrir el
monitor serial en Herramientas > Monitor Serie.
Bien, con esto terminamos el tema de sensores digitales, ya sabes leer sefiales digitales se 0 0 Sv, a
continuacién veremos el uso de sensores analégicos.
You
GID Video ttutorial}: [Curso Arduino Basico - #4] Sensores Digitales
4.2 SENSORES ANALOGICOS
Ya vimos el uso de los sensores digitales y aprendimos como recibir sefiales digitales de 0 0 Sv, ahora
veamos cémo leer sefiales analégicas con nuestro Arduino.
© Digital:
© Solo tiene dos valores 0 0 5 volts.
© Ejempio: 0 - 1, HIGH ~ LOW.
© Analégico:
© Valores continuos en un rango.
‘© Ejemplo: Todos los valores entre Oy 5 volts.
Enla siguiente imagen tenemos una representacién grafica de valores digitales contra valores anal6gicos.
SENAL ANALOGICAComo bien ya explicamos Arduino es un dispositivo digital, pero ahora leeremos valores analégico que se
encuentran en rangos continuos y es necesario convertir el valor analégico a digital, pero esto Arduino lo
hard por nosotros.
* Arduino UNO tiene 6 puertos analégicos:
© ADAlAS
© Son puertos de entrada analégica y/o entrada y salida digital.
© El microcontrolador tiene un transductor que convierte la sefial analégica a digital.
Laentrada del valor analégico tiene que estar entre 0 y 5 volts, gracias al transductor los valores continuos
entre 0 y 5 voltios son convertidos a un nimero entero, gracias al bootloader Arduino esté pre configurado
a un resolucién de 10 bits, eso quiere decir que, si tienes 0 volts tendremos un valor de 0, y si tenemos 5
volts tendremos un valor de 1023, esto nos quiere decir que el valor de 2.5 volts es 512.
Podemos cambiar el valor del voltaje de referencia por un valor menor a SV conectando ese valor al pin
AREF y con la funcién analogReference(), y esto nos sirve por ejemplo si tienen un sensor analégico que
funciona a 3.3 volts,
Para poder sensar los valores analdgicos ya comentamos deberos de conectar el sensor a cualquier pin
desde AO al AS y ya en el cédigo para leer esos valores tendremos que usar lo siguiente:
Para leer un pin analégico usamos:
‘© analogRead({numpin/alias));
‘© Nos regresa un valor entre 0 y 1023.
‘© Usamos la comunicacién serial para ver su valor.
Como se mencioné nos regresard un valor entre 0 y 1023, esto gracias a la conversién de 10 bits. En el
‘tema anterior vimos el uso del Serial para ver los datos y lo volveremos a hacer con los sensores analdgicos.
A continuacién se veran algunas practicas que como ya se mencioné seran la base para realizar muchos
proyectos uniendo lo ya visto
4.2.1 POTENCIOMETRO
En esta primera préctica veremos cémo sensar un potenciémetro, esto nos ayudaré més adelante a
controlar el pwm y también a mover servomotores con un potenciémetro, asi que esto seré la base para
los sensores analégicos y su uso, abajo se muestra el cédigo, material y explicacién de la practica.
Primero explicaremos un poco cémo funciona la conversién analégico digital.
Como bien se coments la resolucién de Arduino es de 10 bits eso quiere decir que tenemos un valor
10, entre una mayor resolucién mas exacta sera el
maximo de 1024, esta resolucién es 2" conn
resultado del sensor.Por ejemplo, si tenemos un voltaje de 2.5 volts tendremos un valor en resolucién de 10 bits de 512, se
preguntarén como sabemos eso, bien tenemos la siguiente formula:
ValAnalog * Vref
2-1
Si despejamos al formula tendremos:
ve@r-)
ValAnalog Vref
Como se coments el voltaje de referencia de Arduino por default es de 5 volts, la resolucién es de 10 bits
0 sea 2° = 1024, y queremos saber el valor para 2.5 volts, entonces tendremos:
25+ (1024-1)
ValAnalog = <>" = 5115 ~ 512
50
Esto es lo que Arduino hace internamente para realizar la conversién analégico/digital, ahora bien para
saber el voltaje aplicamos la primera formula, esto nos servira para el uso de muchos sensores, claro
aplicando lo que dice la hoja de datos del sensor, esto se ver més adelante con el LM35.
MATERIALES
ARDUINO
1 Potenciémetro de 10k
Protoboard
Jumpers
define POT AQ
void setup() {
Serial. begin (9600);
pinMode (POT, INPUT)
void loop () {
analogRead (POT);
println (LeePot) ;Circuito:
fritzing
Explicacién:
La explicacién es bastante simple, primero definimos los pines que usaremos y las variables para
almacenar los valores, esto ya se ha hecho muchas veces anteriormente asi que no se enterard en detalles.
Después en el setup inicializamos el pin como entrada, muchos no hacen eso ya que por default los pines
analégicos ya estén configurados como entrada, pero recordemos que tenemos que aprender 2
rogramar limpia y correctamente, también cargamos el Serial para la comunicacién y poder ver el valor
del potenciémetro.
Dentro del loop usamos la funcién analogRead para poder leer los valores analégicos del pin donde hemos
conectado Ia salida del potenciémetro, ese valor se almacena en la variable LeePot, una vez hecho eso
imprimimos el valor usando Serial.printin paséndole la variable LeePot como parémetro, solo queda por
abrir el monitor serial para visualizar los valores que aparecen al mover el potenciémetro.
Estos valores estan en la resolucién de 10 bits, para ver el voltaje que nos da simplemente aplicamos la
primera formula que vimos e imprimimos los valores.
Con esto queda por visto como leer valores analégicos que van de 0 a5 volts, en la siguiente practica se
muestra cémo aplicar ldgica de programacién ademas de matematicas para poder obtener los datos
deseados,
IMISAEL SAENZ FLORES 494.2.2 SENSOR DE TEMPERATURA LM35
Muy bien, ahora veremos cémo sensar un LM35 y cuando llegue a una temperatura hacer que prenda un
led, esto serviré para controlar la temperatura de algiin objeto y cuando llegue a un temperatura alta
accione un ventilador o algin otro actuador, es muy importante que lean la hoja de datos del LM3S ya
que alli viene descrito su funcionamiento, abajo se muestra el cédigo, material y explicacién de la préctica.
MATERIALES
ARDUINO
1 Potenciémetro de 10k
Protoboard
Jumpers
#define LM35 AO
define LED 2
float Temperatura;
float Valse
void setup() {
Serial.begin (9600);
pinMode (LM35, INPUT) ;
pinMlode (LED, OUTPUT) ;
void loop() {
Valsen = analogRead (LM35)
Temperatura = (valSen * 5.0 * 100.0) / 1023.
if(Temperatura > 35) {
digitalWrite (LED, HIGH) ;
Jelse{
digitalWrite (LED, Low) ;
Serial .printin (Temperatura)
delay (30);
MISAEL SAENZ FLORES 30Circuito:
Explicacién:
Primero definimos los pines que usaremos y las variables para almacenar los valores, esto ya se ha hecho
muchas veces anteriormente, se definen dos variables, una donde almacenaremos los valores del ADC y
otra para almacenar la temperatura.
Como bien se mencioné anteriormente, se recomienda leer Ia hoja de datos del sensor, ya que aqui viene
importante la cual nos dice que nos dard 10mV por cada grado centigrado, esto es
fundamental para el funcionamiento, veamos un ejemplo.
Pensemos que tenemos la temperatura de 20.5 grados centigrados, entonces esto nos dice que hay
205mV como resultado de 10mV * 20.5 = 20SmV, ahora hacemos la conversién a voltaje que son 0.205
voltios y ahora aplicaremos nuestras férmulas anterior mente vistas:
0.205 * (1024-1)
5.0
ValAnalog = = 41.943
As{ obtenemos el valor analdgico que es la conversién de 10 bits equivalente a 41.943, ahora aplicando la
primera férmula pero multiplicando por 100 para convertir el resultado a grados, entonces nos queda:
41.943 = 5.0 = 100.0
1024-1
T 20.5°
Recordemos que 5.0 es el valor del voltaje de referencia o sea 5 voltios, 41.943 el valor analégico que
entregaré el ADC y bueno lo demas ya se ha explicado con anterioridad.
SE
IMISAEL SAENZ FLORES 3Asi es como obtenemos la temperatura usando el sensor LM35, solo aplicamos estos cdlculos en la
programacién, usamos analogRead para leer el valor que envia el sensor al Arduino y lo almacenamos en
la variable ValSen, después aplicando la férmula anterior obtendremos la temperatura y esta la
almacenamos en la variable Temperatura, una vez hecho eso creamos una condicional que si la
‘temperatura llega a ser mas de 35 grados se prenderd el led lo que ustedes quieran accionar, en caso
contrario el led permanece apagado, después imprimimos la temperatura por medio del Serial y la
visualizamos en nuestro monitor serial.
4.2.3 SENSOR IR TCRTS000
‘Ya vimos como leer sensores analégicos e incluso aplicar los datos de sus hojas de datos para poder
hacerlos funcionar correctamente, ahora la ultima practica de sensores analégicos sera censar con el
sensor TCRT5000 el cual es un sensor infrarrojo, estos sensores son usados en los seguidores de lineas
para distinguir del color blanco y negro.
Los valores de estos sensores nunca serdn iguales aunque sean hechos por la misma empresa, un sensor
puede dar el valor de 800 y otro de 900 cuando detecten el color blanco, aclaro que esto es un ejemplo,
abajo se muestra el cédigo, material y explicaci6n de la practica
MATERIALES
ARDUINO
Resistencia de 10k
Resistencia de 220 Ohms
1 TeRTS000
Protoboard
define 7
RT AO
void setup() {
Serial.begin(9600);
pinMode(TCRT, INPUT) ;
void loop()
valor = analogRead(TCRT) ;
sprint ("Valor: ");
+print (valor);
sprint (" | Color: ");
or < 800)
Serial.print1n ("Blanco")j else {
Serial.printin ("Negro");
)
delay (300);
fritzing
Referencia del sensor:
Explicacién:
El sensor se conecta en modo pull-down, también se puede usar como digital pero esta vez lo empleamos
como analégico, al hacer la conexién como pull-down creamos un divisor resistivo y obtenemos un valor
dependiendo de cuanta luz recibe del emisor, y todo esto se envia al pin andlogo AO de nuestro Arduino.
re]
IMISAEL SAENZ FLORES 33El cédigo es bastante simple, definimos el pin AO como entrada, creamos una variable del tipo entero para
almacenar los datos del sensor. En el setup inicializamos el pin como entrada y cargamos el serial para
visualizar los datos,
En el loop usamos analogRead y ese valor lo almacenamos en la variable valor, usando el Serial.printin
imprimimos el valor que nos arroja el sensor ademas el “color” que ve, lo cierto es que no ve ningtin color,
sino que el blanco o negro refleja més o menos luz IR del emisor que llega al fototransistor.
Después, por medio de una condicional if y un valor de comparacién random en este caso 800, se
identificard de qué color se trata, si es menor de 800 imprimira que es blanco, en otro caso sera negro.
Con esta ultima préctica queda finalizado el tema de sensores analégicos, como se vio, solo es aplicar
férmulas ademas de seguir las indicaciones de las hojas de datos de nuestros sensores analégicos a usar,
enel siguiente tema veremos actuadores analdgicos que serén pwm, que junto con manejo de cargas més
adelante podran controlar muchisimas cosas.
You
GID Video ttutorial}:
(Curso Arduino Basico - #5] Sensores Analogicos
4.3 ACTUADORES ANALOGICOS
Ya vimos como censar valores analégicos, pero ahora veremos como “escribir” valores analégicos, 0 sea
enviar valores analégicos.
Qué es algo analégico?
© Analégico:
© Valores continuos en un rango.
© Ejemplo: Todos los valores entre 0 y 5 volts, esto en resolucién de 10 bits serdn valores
entre 0a 1024.
Time (t)Arduino no tiene salidas propiamente analégicas ya que los microcontroladores son dispositivos digitales.
* Se utiliza PWM, Modulacién por Ancho de Pulso que es:
© Una sefial cuadrada entre 0 y 5 volts.
© Esta sefial cambia répidamente entre esos dos valores.
© Simula voltajes analégicos entre 0 y 5 volts.
© Tiene una resolucién de 8 bits.
En la siguiente imagen se muestra una grafica de los ciclos de PWM
Pulse Width Modulation
0% Duty Cycle - analogWrite(0)
Sv
ov
25% Duty Cycle - analogWrite(64)
Sv
ov
50% Duty Cycle - analogWrite(127)
Sv
ov
75% Duty Cycle ~ analogWrite(191)
Sv
ov
100% Duty Cycle - analogWrite(255)
sv
ov
El Arduino UNO tiene 6 salidas PWM, las cuales son los pines 3, 5, 6, 9, 10, 11 y estan marcados con PWM
Para escribir con estos pines usamos la funcién analogWrite([pin/alias},[valor/variable));, en valor 0
variable como bien comentamos solo recibe valores que estén entre 0 y 255.
‘A continuacién haremos unas practicas que seran como siempre se ha mencionado, la base para poder
hacer proyectos mas avanzados como por ejemplo control de luces RGB o intensidad de luminiscencia.4.3.1 FADE DE UN LED
Ya hemos visto sensores analégicos, ahora en esta practica enviaremos valores analégicos para poder
controlar la luminiscencia de un led, abajo se muestra el cédigo, material y explicacién de la préctica.
MATERIALES
ARDUINO
LED de Smm
Resistencia de 2200
Protoboard
Jumpers
#define LED 3
void setup() {
pinMode (LED, OUTPUT) ;
)
void loop() (
for(int i= 1; i <= 255; it4){
analogiirite (LED, i);
delay (10);
)
delay (1000);
for(int i = 255; i >= 1;
analogWrite (LED, i);
delay (10);
)
delay (1000) ;
)
Circuito:
fritzing
SS
IMISAEL SAENZ FLORES 6Explicacién:
El funcionamiento es muy simple primero se define el pin para el LED, después en el setup se pone el LED
como salida, en el loop se crea un for que ira desde 0 a 255, recordemos que la resolucién del PWM es de
8 bits.
Dentro del for usamos analogWrite, donde recibe como pardmetro el LED y los valores del for que ira
incrementando de uno en uno y esto se almacena en el la variable i, se le da un delay de 10, ésea que
cada 10 milisegundo se ira incrementando la variable i
Se da un segundo delay de 1000 que seré el tiempo en que se le da una pausa al LED, para que cambie el
asegundo for, que hard casi lo del primer for, pero esta vez decrementa dsea, que empieza desde el 255
y termina en 0, recordamos que la sentencia for se vio en capitulos anteriores.
Gracias a los dos for verios como incrementa y decrementa el brillo del led, si usamos un multimetro,
veremos cémo aumenta y disminuye el voltaje entre los rangos de 0 a 5 volts.
Yes asi como manejamos el PWM, lo que hace es que envia pulsas muy rapidos y eso hace que se emule
un valor analégico y eso se hace como ya vimos con analogWt
En la siguiente practica se unira lo que se vio en sensores analégicos.
4.3.2 FADE DE UN LED CON POTENCIOMETRO
Ya se vio como aumentar o disminuir el brillo de un led con PWM y con el uso de una sentencia for, ahora
lo haremos usando un potenciémetro, la explicacién del circuito seré muy simple y vaga ya que la mayoria
de lo que se usa se vio en temas anteriores.
Como en sensores analégicos ya se vio como leer los valores de un potenciémetro y almacenarlos en una
variable para su uso posterior y en la practica anterior ya se vio el uso de PWM con analogWrite, recuerde
que para usar el PWM solo se deben de conectar los actuadores en los pines mencionados al principio de
este tema, abajo se muestra el cédigo, material y explicacién de la préctica.
MATERIALES.
ARDUINO
LED de Smm
1 Resistencia de 2200
1 Potenciometro de 10k
Protoboard
Jumpers
define LED 3
#define POT AQvoid setup() {
Serial.begin(9600)
pinMode (POT, INPUT) ;
pinMode (LED, OUTPUY) ;
void loop() (
int valor = analogRead (P01);
Serial.print ("Valor POT: ");
Serial.print (valor);
Serial.print(" | Valor PWM: ");
Serial.println(valor/4);
analogirite (LED, valor/4) ;
delay (100);
fritzing
Explicaci6n:
La explicacién es bastante simple, se definieron los pines a usar, en este caso el 3 y AO, se creé una variable
para almacenar los datos del potenciémetro, en el setup inicializamos los pines y cargamos el Serial para
visualizar los datos.
En el loop leemos los datos del potenciémetro y se almacenan en la variale valor, después con el uso del
Serial.printin imprimimos esos valores. Y se preguntarén, épor qué se divide entre 4?, es muy simple,
recuerden que la resolucién del Arduino para el ADC es de 10 bits asi que nos entregaré un maximo de
23
55,
1024 - 1, pero la resolucién del PWM es de 8 bits y acepta un valor maximo de 255, asi que “=
SS
IMISAEL SAENZ FLORES 38
También podría gustarte 74645632851 PDF
Aún no hay calificaciones
74645632851
2 páginas
GUIA Arduino PDF
Aún no hay calificaciones
GUIA Arduino
45 páginas
SYM168 PDF
Aún no hay calificaciones
SYM168
52 páginas
SE443 PDF
Aún no hay calificaciones
SE443
120 páginas
Tutorial PCB PDF
Aún no hay calificaciones
Tutorial PCB
37 páginas
Arduino PDF
Aún no hay calificaciones
Arduino
110 páginas
Guia Basica PDF
Aún no hay calificaciones
Guia Basica
112 páginas