[go: up one dir, main page]

0% encontró este documento útil (0 votos)
168 vistas169 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.

Cargado por

delia carrasco
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
0% encontró este documento útil (0 votos)
168 vistas169 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.

Cargado por

delia carrasco
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
Está en la página 1/ 169
Misael Saenz Flores El 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 2 4.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. 82 4.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 5 one 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 6 Puede 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 B ti // 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 4 OPERADORES 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 15 r=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 16 1.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 35 Explicacié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 38 fritzing 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 38 4.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 40 fritzing 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 41 Ahora 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 (L pinMode (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 48 4.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 44 Serial 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 45 Como 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 ANALOGICA Como 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 49 4.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 30 Circuito: 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 3 Asi 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 33 El 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 6 Explicacié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 AQ void 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