SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
Participante: .
Facilitador: Ing. Mario Platero
INSAFORP
INTRODUCCIÓN A LA PLATAFORMA
ARDUINO.
INTRODUCCIÓN.
El siguiente manual ha sido desarrollado para desarrollar los conocimientos básicos de Arduino. El material
presenta ejercicios a desarrollar y retos a seguir para lograr identificar el funcionamiento de la plataforma. El
contenido del material también presenta una documentación técnica, que necesita un poco más de tiempo
para su compresión, que ayuda a visualizar los alcances que se podrían obtener al seguir estudiando más a
fondo la plataforma Arduino, esto sería una introducción a cursos posteriores.
OBJETIVOS DEL MÓDULO
Al finalizar el módulo, las personas participantes serán capaces de:
• Identificar los tipos de señales básicas en electrónica de baja potencia.
• Identificar los elementos básicos que se encuentran en cualquier tarjeta electrónica.
• Identificar los controles y herramientas del entorno de programación.
• Utilizar sintaxis de programación de Arduino.
• Efectuar lectura y escritura en pines digitales y análogos.
• Aplicar procedimientos y funciones de Arduino.
• Implementar pulsadores, teclados, motores DC y servo motores.
• Efectuar lectura de sensores.
• Implementar pantallas LCD.
• Interactuar entre dos Arduino.
• Interactuar entre Arduino y computadora
• Efectuar lectura y control de sensores y actuadores.
CONTENIDOS DEL MÓDULO.
No Contenido Tiempo No Contenido Tiempo
1 Generalidades de electrónica. 3 horas 6 Pulsadores y teclados. 2 horas
2 Entorno de programación. 1 hora 7 Motores. 2 horas
3 Sintaxis de programación. 6 horas 8 Lectura de sensores. 3 horas
4 Utilización de pines. 3 horas 9 Pantalla LCD 4 horas
5
Funciones y procedimientos en
Arduino.
2 horas 10
Protocolos de
comunicación
4 horas
1 GENERALIDADES DE ELECTRÓNICA.
Muchas veces se comete el error de querer utilizar Arduino sin ninguna base de electrónica, se cree que con
la compra de los elementos el sistema ya está armado y funcionando, pero no es así, es necesaria tener una
base de electrónica y una base de programación.
1.1 ¿POR QUÉ ELECTRÓNICA?
En todo el mundo, muchas personas han iniciado con diferentes proyectos basados en Arduino. Arduino
ayudó a que las personas se fueran familiarizando de una manera sencilla con los términos de mecánica,
electrónica y programación; esto quiere decir, que muchas personas con un conocimiento básico de estos
temas lograron hacer proyectos reales que benefician a la sociedad.
Iniciaremos nuestro curso con una introducción a la electrónica básica, logrando identificar los componentes
básicos que lleva un circuito, las señales eléctricas presentes en ese tipo de dispositivos, los conceptos que
ayudarán a analizarlo y realizar algunas mediciones para comprobar los resultados.
1.2 CONCEPTOS BÁSICOS.
En electricidad como en electrónica hay tres conceptos básicos que debemos de conocer: Voltaje, Corriente
y Resistencia. Estos parámetros eléctricos los hemos utilizado en nuestra casa, el voltaje del televisor, la
resistencia de la cocina eléctrica, la corriente del aparato de sonido.
Estos parámetros se relacionan fácilmente por la Ley de Ohm. Donde V es de voltaje, I es de corriente y R de
resistencia. Esta relación se puede observar mejor en la siguiente figura.
1.2.1 Medición de parámetros eléctricos por multímetro o tester.
Comenzaremos por conocer uno de los instrumentos más utilizados como multímetro (o tester en inglés que
significa probador). Este aparato nos ayuda a realizar las siguientes mediciones:
• Medir resistencias, las cuales están integradas, aplicadas en el campo de la robótica y en nuestro
mundo actual.
• Medir voltaje especialmente el de las baterías, adaptadores o fuentes de voltaje.
• Medición de diodos emisores de luz (o los famosos LED), que vemos actualmente.
Existen muchas formas y marcas de multímetros en nuestro medio; la ventaja de esto es que todos trabajan
de la misma forma, solo varían en las escalas de medición y los niveles máximos soportados.
Ejercicio 01 – Reconocimiento del multímetro.
Parte I - Completa la siguiente tabla con los parámetros mas importantes mostrados en el multímetro.
SÍMBOLO SIGNIFICADO ESCALA MENOR ESCALA MAYOR
Ω
V
V
A
A
Parte II – Identifica las terminales de conexión del multímetro.
Las terminales de conexión del multímetro nos indican que se puede medir con cada terminal. La terminal
COM es la terminal de color negro y se mantiene común a cada medición; es decir, que no se mueve de lugar
para realizar mediciones.
Las otras terminales de color rojo tienen identificado que mediciones se pueden realizar con ellas, también
tienen identificado los niveles máximos permitidos en medición de voltaje y corriente, si se sobrepasan esos
niveles, se puede generar un daño en el equipo y en el peor de los casos, en su persona.
Dibuja las terminales de conexión del multímetro, indicado que mediciones se pueden realizar en cada
terminal y los niveles máximos de voltaje y corriente soportada por el multímetro. La palabra FUSED en el
multímetro, indica que es el valor máximo que posee el fusible de protección.
1.3 RESISTENCIA ELÉCTRICA.
Se le denomina resistencia eléctrica, a la oposición al flujo de electrones al moverse a través de un conductor.
La unidad de resistencia en el Sistema Internacional es el ohmio, que se representa con la letra griega omega
(Ω), en honor al físico alemán Georg Simon Ohm.
Símbolo de resistencia Ejemplo de diferentes tipos de resistencia
Las resistencias se usan para limitar la corriente en un circuito, se pueden construir con diferentes tipos de
material, los más comunes son carbón, grafito o concreto; también, las resistencias poseen diferentes valores
óhmicos de medición y varían entre valores muy pequeños (1Ω) hasta valores muy grandes (1,000,000Ω =
1MΩ).
Las resistencias es uno de los elementos más comunes en los circuitos electrónicos y se escogen por su valor
óhmico y su capacidad de controlar corriente. Diseñar un circuito electrónico puede llegar a ser una tarea
muy compleja; pero con Arduino, esta dificultad no presentará mayor problema, porque hay muchas tarjetas
electrónicas diseñadas para funcionar con Arduino, que solo es necesario saber cómo funciona y conectarlo
para hacerlo funcionar.
Lo que, si es necesario con las resistencias, es conocer su valor óhmico, para ello existen dos formas, uno es
por medio del código de colores y el otro es medirlo con el óhmetro.
SIEMPRE REVISE LAS TERMINALES DE MEDICIÓN Y LOS NIVELES DE TOLERANCIA DE SU EQUIPO DE
MEDICIÓN, PARA EVITAR ELEMENTOS DAÑOS O LESIONES.
1.3.1 Código de colores.
Este código de colores fue creado los primeros años de la década de 1920 en Estados Unidos. En un principio
se optó por pintar con colores el cuerpo, el lado y un punto, de un código de colores representando las cifras
del 0 al 9, basado en la escala del arco iris para que fuera más fácil de memorizar, por la ventaja que
representaba para los componentes electrónicos el poder pintar su valor sin tener que imprimir ningún texto.
Resistencia 1 – 4 badas Resistencia 2 – 5 bandas
El valor de una resistencia viene determinado por un código de colores. Vemos en la figura anterior varias
resistencias, y como las resistencias vienen con unas franjas o bandas de colores. Estas franjas, mediante un
código, determinan el valor de la resistencia.
Ejercicio 02 - Medición de resistencias por el código de colores.
Para el siguiente ejercicio el facilitador entregará 4 resistencias de diferentes valores a los participantes, el
participante llenará la siguiente tabla identificando primero la cantidad de bandas de colores que posee la
resistencia, luego cada color de banda para obtener la medición de resistencia.
Ítem
Banda 1 Banda 2
Banda 3
Multiplicador
Banda 4
Tolerancia
Valor de
resistencia.
Color Valor Color Valor Color Valor Color Valor
R1 Rojo 2 Amarrillo 4 Café X10 Plata 10% 240±10% Ω
R2
R3
R4
R5
Ejercicio 03 - Medición de resistencias por uso de multímetro – óhmetro.
1) Encender el multímetro
2) Colocar las puntas en los bornes de medición como lo indica la figura.
3)
Seleccionar la escala del óhmetro en el multímetro, indicará con 1 a la
izquierda lo que muestra que está midiendo una resistencia infinita.
4)
Colocar las puntas del multímetro en los terminales de la resistencia
tratando de no tocar sus extremos con los dedos.
La medición realizada estará en ohmios representada por la letra Ω.
Ahora realiza la medición con el multímetro de cada resistencia medida en el ejercicio 01.
Ítem Valor de resistencia – código de colores Valor de resistencia – código de colores
R1 240±10% Ω 235 Ω
R2
R3
R4
R5
Contesta las siguientes preguntas.
¿El valor obtenido con el código de colores es igual al valor obtenido con el multímetro?
Falso Verdadero
Explica con tus propias palabras ¿Cuál es la diferencia entre las dos mediciones?
.
1.4 DIODO EMISOR DE LUZ (LED)
La palabra LED viene del inglés Light Emitting Diode que enl español es Diodo Emisor de Luz. Los LED son
semiconductores que permiten el paso de la corriente en un solo sentido o dirección. En sentido contrario no
dejan pasar la corriente. Los LED cuando permiten el paso corriente por él, emite luz; a esto se le conoce
como polarización en directa. El caso contrario, se le llama polarización en inversa y no emite luz.
Los LED tienen dos terminales, el más largo es el ánodo (A) y el corto
es el cátodo (K). Cuando se conecta un LED positivo en el ánodo y
negativo en el cátodo, este emite una luz, como se mencionó
anteriormente, a esto se le identifica como polarización en directa.
Los LED trabajan a tensiones cercana a los 2V (dos voltios). Si queremos conectarlos a otra tensión diferente
deberemos conectar una resistencia en serie con él para que parte de la tensión se quede en la resistencia y
al LED solo le queden los 2V.
Led de Muchos Colores o RGB
Los LED RGB son diodos que tienen 3 LED, cada uno con un color diferente.
Los colores son los colores primarios el rojo, el verde y el azul. Si controlamos
esta mezcla de colores, podemos obtener una gama inmensa de colores en
los LEDS. Para controlar los colores solo hace falta hacer pasar más o menos
corriente por uno u otro LEDr.
Por ejemplo, si solo pasa corriente por el rojo y por el verde el color que
obtenemos será el amarillo. LED RGB
Ejercicio 04 – comprobación de un Diodo LED
1) Reconocer la polaridad de nuestro led.
2)
Seleccionamos la escala correspondiente a la
medición de diodos y continuidad.
3)
Conectamos terminales en el LED:
Rojo en el ánodo o positivo y Negro en el cátodo o
negativo.
Si está bien conectado el LED se iluminará y el
multímetro nos indicará una medición, como se
muestra en la figura.
A continuación, se le entregarán tres diodos emisores de luz, completa los datos que se te piden en la tabla a
continuación.
Ítem Color Medición que indica el multímetro.
LED 1
LED 2
LED3
1.5 BREADBOARD, PLACA BASE O PROTOBOARD.
La Breadboard es usada para conectar circuitos eléctricos y electrónicos básicos, sin necesidad de realizar
soldadura, este posee conexiones internas como se muestran en la figura siguiente.
Estas conexiones internas se utilizan para logar puntos de conexión entre los diferentes elementos del
circuito. Conocer las conexiones internas nos ayudará a realizar circuitos de manera más práctica y sencilla,
pero hay que tener un gran cuidado porque una mala conexión puede generar un cortocircuito, dañando el
equipo y en el peor de los casos, dañándonos a nosotros mismos.
Ejercicio 05 – Comprobación de conexiones internas en La Breadboard.
1) Seleccionamos la escala correspondiente a la medición de diodos y
continuidad.
2) Identificar en las figuras del ejercicio 6 (6.A, 6.B y 6.C) los puntos de conexión
dentro de la Breadboard. Conteste las siguientes preguntas:
Existe continuidad entre los puntos de conexión de la figura 6.A
Falso Verdadero
Existe continuidad entre los puntos de conexión de la figura 6.B
Falso Verdadero
Ejercicio 6.A
Ejercicio 6.B
Existe continuidad entre los puntos de conexión de la figura 6.C
Falso Verdadero
Ejercicio 6.C
1.6 VOLTAJE
El voltaje es la capacidad física que tiene un circuito eléctrico, debido a que impulsa a los electrones a lo
extenso de un conductor; esto quiere decir, que el voltio conduce la energía eléctrica con mayor o menor
potencia. Existen dos tipos de voltaje.
• Voltaje alterno (AC), que es utilizado en las cocinas eléctricas, los motores de la lavadora y
refrigeradora, el voltaje alterno es el que llega a nuestra casa y está presente en todos los
tomacorrientes instalados. El AC, a diferencia del DC, varía su valor de forma periódica; es decir, que
su valor no es constante en el tiempo. Su forma de onda se observa la figura y su símbolo en la tabla.
• voltaje directo (DC), que ocupan todos los dispositivos electrónicos como las computadoras,
celulares, Arduino, etc. Y mantiene su valor constante, sin variaciones, durante todo el tiempo. Su
forma de onda se observa la figura y su símbolo en la tabla.
Voltaje Directo Símbolos Voltaje Alterno Símbolo
Pilas
Toma corriente
residenciales e
industriales
Baterías
Fuente o
Adaptador
Ejercicio 06 – Medición de voltaje con el multímetro – voltímetro.
Como ya estudiamos con anterioridad, el multímetro tiene la capacidad de medir magnitudes eléctricas como
es el voltaje o la diferencia de potencia; en otras palabras, nos ayudara a medir voltaje, por ejemplo: de las
pilas o baterías, cargadores o fuentes de tensión.
1) Encender el multímetro
2) Colocar las puntas en los bornes de medición como lo indica la figura.
3)
Identificar qué tipo de voltaje mediremos, para nuestro caso
mediremos voltaje directo. (V )
4) Seleccionar la escala mayor del voltímetro, como lo indica en la figura.
5)
Colocar las puntas del multímetro en los extremos de los terminales de
la batería, realizamos la medición correspondiente.
La punta roja en positivo (+) La punta negra en Negativo (-)
La medición realizada estará en voltios representada por la letra V o
VDC.
Dentro de la placa Arduino identificaremos tres puntos, uno llamado 3.3V, 5V y último GND.
• 5V: Punto de 5 Voltios.
• 3.3V: Punto de 3.3 Voltios.
• GND: Referencia de medición eléctrica.
Con el voltímetro se medirá entre los puntos marcados con 5V y GND
Medición de 5V de la Placa de Arduino.
Con el voltímetro se medirá entre los puntos marcados con 3.3V y GND
Medición de 5V de la Placa de Arduino.
Identifica dentro de la Placa los espacios marcados con las letras GND y mide continuidad entre esos pines,
¿Existe continuidad entre esos puntos? (SI/NO y Qué significa ese resultado)
.
RETO 01 - GENERALIDADES DE ELECTRÓNICA
Reto 01 - Arma el siguiente circuito utilizando la Placa Arduino.
Materiales: Placa de Arduino, Diodo LED, Breadbord, Voltímetro, resistencia 220Ω y cables de conexión.
1.7 RECONOCIENDO LA PLACA ARDUINO
2 ENTORNO DE PROGRAMACIÓN.
Arduino es una plataforma de prototipos electrónica de código abierto (open-source) basada en hardware y
software flexibles y fáciles de usar. Está pensado para artistas, diseñadores de proyectos y para cualquiera
interesado en crear objetos o entornos interactivos como la robótica, automatización y entornos controlados.
Arduino puede “sentir” el entorno mediante la recepción de entradas de diferentes tipos de sensores y puede
afectar a su alrededor mediante el control de luces, motores y otros elementos actuadores.
2.1 PROGRAMACIÓN ARDUINO
Programar Arduino, consiste en traducir a líneas de código las tareas automatizadas que queremos hacer,
haciendo lectura de sensores, creando funciones que permitan programar la interacción con el mundo
exterior mediante unos actuadores.
Reconociendo nuestro entorno de programación.
Al abrir el programa, veremos cómo nos aparece la consola principal del Arduino IDE en la cual podemos ver
las siguientes zonas:
En la parte de menú tenemos una zona para acceder a funciones como carga de archivos, edición del texto
del código, carga de librerías y ejemplos, configuración, herramientas…etc.
En los botones de acceso rápido tenemos los siguientes iconos:
Verifica si tu programa está bien
escrito y puede funcionar.
Abre un programa.
Carga el programa a la placa de
Arduino tras compilarlo.
Guarda el programa en el disco duro del ordenador.
Crea un programa nuevo.
Abre una ventana de comunicación con la placa
Arduino, siempre que tengamos el USB conectado.
Editor de Texto, en el escribiremos el código del programa que queramos que Arduino ejecute.
Área de mensajes y la consola, Arduino nos irá dando información sobre si la consola está compilando,
cargando y sobre los fallos o errores que se produzcan tanto en el código como en el propio IDE.
2.2 COMUNICANDO LA PLACA ARDUINO CON EL ENTORNO IDE.
El siguiente paso que realizaremos será configurar nuestro Arduino IDE para que se comunique con nuestra
placa Arduino. Para ello conectaremos nuestro Arduino mediante el cable USB al PC, después esperar a que
el sistema operativo reconozca e instalado la tarjeta automáticamente.
Luego, seleccionamos en el menú la pestaña de Herramientas y seleccionamos el tipo de Tarjeta en nuestro
caso "Arduino Uno".
Después vamos a la opción Puerto Serial y elegimos el COM en el que tenemos conectado nuestro Arduino.
Si nos aparecieran varios COM activos, es porque estamos usando otros dispositivos serial o por otro motivo.
2.3 ESTRUCTURA DEL CÓDIGO SKETCH
Su primer programa demostrará la habilidad de Arduino para comunicarse con el mundo exterior, usando
Arduino IDE. Un programa de Arduino se denomina sketch o proyecto, para que funcione un sketch se debe
guardar con un nombre identificativo.
2.3.1 Estructura de un Sketch
La estructura básica de un sketch de Arduino es bastante simple y se compone de al menos dos partes. Estas
dos partes son obligatorias y encierran bloques que contienen declaraciones o instrucciones.
• Void setup() es la parte encargada de recoger la configuración.
• Void loop() es la que contiene el programa que se ejecuta cíclicamente (de ahí el término loop –
bucle).
Ambas funciones son necesarias para que el programa trabaje. Se puede resumir un sketch de Arduino en los
siguientes diagramas de flujo.
Ejercicio 2.1 – Abrir el ejemplo Blink
Se abrirá el ejemplo Blink, con el cuál se verifica si la placa Arduino y el entorno IDE tiene comunicación. Para
ello ingresamos en Archivo -> Ejemplos -> 01. Basic -> Blink. Al abrir este ejemplo observaremos el siguiente
código.
Luego, con la placa Arduino conectado a la computadora, damos clic en verificar y luego damos clic en subir.
¿Qué es lo que observa en la placa Arduino?
.
Cambia el número 1000 dentro de la función delay por el número 500 y vuelve a subir el sketch a la placa;
ahora, cambia el número 500 dentro de la función delay por el número 2000 y vuelve a subir el sketch a la
placa.
¿Cuál es la aplicación de la función delay y que significa los números que se le colocan dentro de ella?
.
3 SINTAXIS DE PROGRAMACIÓN.
Algo que se debe de tener claro al momento de programar, aunque parezca un pequeño detalle, es que el
código Arduino es “case-sensitive” esto quiere decir, que Arduino hace una diferencia entre letras mayúsculas
y minúsculas; por ejemplo, “A” es diferente de “a” y “Hola” es diferente de “hola”. Así que es de tener mucho
cuidado al momento de escribir el código y nunca olvidar colocar el punto y coma (;) al final de una instrucción.
3.1 ESTRUCTURA BASE DE UN CÓDIGO.
En donde setup() es la parte encargada de recoger la configuración y loop() es la que contiene el programa
que se ejecutará cíclicamente. Ambas funciones son necesarias para que el programa trabaje.
La función de configuración (setup) debe contener la declaración de las variables. Es la primera función para
ejecutar en el programa y se ejecuta sólo una vez. Se utiliza para configurar o inicializar los pines con pinMode
(modo de trabajo de las E/S), configuración de la comunicación serial entre otras.
La función bucle (loop) contiene el código que se ejecutara continuamente, es el espacio donde se realizan
las lecturas de entradas, activación de salidas, etc. Esta función es el núcleo de todos los programas de
Arduino y la que realiza la mayor parte del trabajo.
3.1.1 setup()
La función setup() se invoca una sola vez cuando el programa empieza. Se utiliza para inicializar los modos de
trabajo de los pins, o el puerto serie. Debe ser incluido en un programa, aunque no haya declaración que
ejecutar. Así mismo se puede utilizar para establecer el estado inicial de las salidas de la placa.
3.1.2 loop()
Después de llamar a setup(), la función loop() hace precisamente lo que sugiere su nombre, se ejecuta de
forma cíclica, lo que posibilita que el programa esté respondiendo continuamente ante los eventos que se
produzcan en la placa.
3.1.3 funciones
Una función es un bloque de código que tiene un nombre y un conjunto de instrucciones que son ejecutadas
cuando se llama a la función. Son funciones setup() y loop() de las que ya se ha hablado. También Delay es
una función exclusiva de Arduino.
Las funciones también pueden ser definidas por el usuario, se usan para realizar tareas repetitivas y para
reducir el tamaño de un programa. Las funciones se declaran asociadas a un tipo de valor “type”. Este valor
será el que devolverá la función, por ejemplo 'int' se utilizará cuando la función devuelve un dato numérico
de tipo entero. Si la función no devuelve ningún valor entonces se colocará delante la palabra “void”, que
significa “función vacía”. Después de declarar el tipo de dato que devuelve la función se debe escribir el
nombre de la función y entre paréntesis se escribirán, si es necesario, los parámetros que se deben pasar a la
función para que se ejecute.
type nombreFunción(parámetros)
{
instrucción;
}
Estas funciones, declaradas por el usuario, las estudiaremos más adelante.
3.1.4 Entre llaves { }
Las llaves sirven para definir el principio y el final de un bloque de instrucciones. Se utilizan para los bloques
de programación setup(), loop(), if, for, while, etc.
Una llave de apertura “{“ siempre debe ir seguida de una llave de cierre “}”, si no es así el programa dará
errores.
Dentro del ejemplo Blink, coloca el cursor de escrita antes o después de una llave y verifica el resultado. El
entorno de programación de Arduino incluye una herramienta de gran utilidad para comprobar las llaves , si
te colocas sobre una llave abierta, inmediatamente se marca el correspondiente cierre de ese bloque (llave
cerrada).
3.1.5 punto y coma ;
El punto y coma “;” se utiliza para separar instrucciones en el lenguaje de programación de Arduino. También
se utiliza para separar elementos en una instrucción de tipo “bucle for”.
Elimina un punto y coma de cualquiera de las líneas anteriores y da clic en verificar código, ¿Qué sucede?
Nota: si se olvida de poner fin a una línea con un punto y coma se producirá en un error de compilación. El
texto de error puede ser obvio, y se referirá a la falta de una coma, o puede que no. Si se produce un error
raro y de difícil detección lo primero que debemos hacer es comprobar que los puntos y comas están
colocados al final de las instrucciones.
3.1.6 /*… */ bloque de comentarios
Los bloques de comentarios, o comentarios multi-línea son áreas de texto ignorados por el programa que se
utilizan para las descripciones del código o comentarios que ayudan a comprender el programa. Comienzan
con / * y terminan con * / y pueden abarcar varias líneas.
Debido a que los comentarios son ignorados por el compilador y no ocupan espacio en la memoria de Arduino
pueden ser utilizados con generosidad. También pueden utilizarse para "comentar" bloques de código con el
propósito de anotar informaciones para depuración y hacerlo más comprensible para cualquiera.
Nota: Dentro de una misma línea de un bloque de comentarios NO se puede escribir otro bloque de
comentarios (usando /*..*/).
3.1.7 // línea de comentarios
Una línea de comentario empieza con // y terminan con la siguiente línea de código. Al igual que los
comentarios de bloque, los de línea son ignoradas por el programa y no ocupan espacio en la memoria.
Una línea de comentario se utiliza a menudo después de una instrucción, para proporcionar más información
acerca de lo que hace esta o para recordarla más adelante.
3.2 VARIABLES DE PROGRAMACIÓN.
Una variable es un elemento de nuestro código que actúa como una pequeña caja que se identifica por un
nombre, elegido por nosotros, que puede guardar un determinado tipo de contenido. El contenido dentro de
la caja es lo que se llama el valor de la variable y se podrá modificar en cualquier momento de la ejecución
del código, por eso el nombre de “variable”.
Una variable es una manera de nombrar y almacenar un valor numérico para su uso posterior por el programa.
Como su nombre indica, las variables son números que se pueden cambiar continuamente en contra de lo
que ocurre con las constantes cuyo valor nunca cambia.
La importancia de las variables es inmensa, ya que todos los códigos hacen uso de ellas para alojar los valores
que necesitan para funcionar. Para comprender mejor el uso de variables, digitemos el siguiente código.
¿Qué uso tiene led_pin dentro del código?
.
¿Qué uso tiene tiempo dentro del código?
.
3.2.1 Declaración de variables
Todas las variables tienen que declararse antes de que puedan ser utilizadas. Para declarar una variable se
comienza por definir el tipo de variable a utilizar, como int (entero), long (largo), float (coma flotante), etc,
asignándoles siempre un nombre, y opcionalmente, un valor inicial. Esto sólo debe hacerse una vez en un
programa, pero el valor se puede cambiar en cualquier momento usando aritmética y reasignaciones diversas.
El lenguaje de Arduino maneja los siguientes tipos de variables:
TIPO DESCRIPCIÓN EJEMPLO
void Reservado para la declaración de funciones sin valor de retorno.
void setup()void
loop()
byte Un número entero del 0 al 255 codificado en un octeto o byte (8 bits)
byte testVariable
= 129;
int
(Integer=entero). Un número entero entre 32,767 y -32,768 codificado
en dos octetos (16 bits)
int testVariable =
28927;
long
Un entero comprendido entre 2,147,483,647 y – 2,147,483,648 y
codificado en 32 bits (equivalente a 4 bytes/octetos).
Long testVariable
= 67876;
float
Un número real (con decimales) almacenado en 4 bytes (es decir 32
bits) y comprendido entre 3.4028325E+38 y -3.4028325E+38
float testVariable
= 3.56;
unsigned
int
Un número natural (entero positivo) almacenado en 16 bits (2 bytes) y
comprendido entre 0 y 65,536
unsigned int
testVariable =
38948;
unsigned
long
Un número natural (entero positivo) almacenado en 32 bits (4 bytes) y
comprendido entre 0 y 4,294,967,296
unsigned long
testVariable =
657456;
word Lo mismo que unsigned int
Word
testVariable =
51000;
boolean
Una variable booleana que puede tener solamente dos valores: true
(verdadero) o false
boolean
testVariable =
true;
char
Un carácter ASCII almacenado en 8 bits (un byte). Esto permite
almacenar caracteres como valores numéricos (su código ASCII
asociado). El código ASCII para el carácter ‘a’ es 97, si le añadimos 3
obtendríamos el código ASCII del carácter ‘d’
char testVariable
= ‘a’;
char testvariable
= 97;
unsigned
char
Este tipo de datos es idéntico al tipo byteexplicado arriba. Se utiliza para
codificar números de 0 hasta 255. Ocupa 1 byte de memoria.
unsigned char
testUnCh = 36;
En este curso usaremos más las variables Int (enteras), float (real) y en poca medida las variables char
(Carácter ASCII)
Es aconsejable inicializar siempre las variables en el momento de declararlas. Esto puede ayudar a depurar el
sketch y al mismo tiempo ahorra código. Asimismo, al declarar una nueva variable intentar anticipar el uso
que el sketch va a darle a esa variable y el rango de valores que va a tomar durante la ejecución, ya que si va
a sobrepasar el valor 32,000 interesa usar un long en vez de int, o si la variable va a tomar valores decimales,
entonces necesitaremos una float). De no hacerlo así podríamos encontrarnos con situaciones inesperadas
durante la ejecución del sketch.
Existen dos formas de declarar una variable, esta puede ser una variable global, que puede ser declarada al
inicio del programa antes de la parte de configuración setup(); o puede ser una variable global, que se declara
dentro de las funciones, y, a veces, dentro de un bloque, como para los bucles del tipo if.. for.., etc. En función
del lugar de declaración de la variable así se determinará el ámbito de aplicación, o la capacidad de ciertas
partes de un programa para hacer uso de ella.
Una variable global, como se mencionó anteriormente, es aquella que se declara antes del void setup() y
puede ser vista y utilizada por cualquier función y estamento de un programa.
Una variable local es aquella que se define dentro de una función o como parte de un bucle. Sólo es visible y
sólo puede utilizarse dentro de la función en la que se declaró.
3.2.2 Constantes
Algunas variables no cambian de valor durante la ejecución del sketch. En estos casos podemos añadir la
palabra reservada ‘const’ al comienzo de la declaración de la variable. Esto se utiliza típicamente para definir
números de pin o constantes matemáticas (pi = 3.141592…).
Ejemplos: const int PinLed = 12; const float pi = 3.141592;
Si tratas de asignar un valor a una constante más adelante en el sketch, el compilador te advertirá de este
error mediante un mensaje.
El Arduino tiene una serie de palabras reservadas que son constantes:
• INPUT/OUTPUT (Entrada/Salida). Los pins digitales pueden ser configurados de ambos modos: como
entrada (INPUT) o como salida (OUTPUT) mediante la función pinMode().
• INPUT_PULLUP: Reservado como parámetro de la función pinMode() para el uso de resistencias pull-
up integradas en el chip Atmega del Arduino.
• LED_BUILTIN: para el uso del Led de serie con el que viene equipado el Arduino (generalmente
conectado al pin digital 13).
• TRUE/FALSE (Verdadero/Falso). Para el Arduino True (Verdadero) es cualquier valor que no es cero.
False (Falso) es el valor cero.
• HIGH/LOW (Alto/Bajo). Es el valor lógico en una puerta digital: LOW es el valor cero -0 Voltios- y HIGH
es el valor uno -5 Voltios.
Ejercicio 07 – Para el siguiente código, escribe un bloque de comentario al inicio del código que
explique el funcionamiento; identifica, escribiendo con líneas de comentario, las variables locales
y globales que posee el código. Después de verificarlo y ejecutarlo, cambia la línea “int led_pin1 =
13;” por “const int led_pin1 = 13;” y verifica el código. Explica el resultado obtenido.
Código Arduino Comentarios
3.3 OPERACIONES ARITMÉTICAS.
Los operadores aritméticos que se incluyen en el entorno de programación son: suma, resta, multiplicación y
división. Estos devuelven la suma, diferencia, producto o cociente (respectivamente) de dos operandos.
y = y + 3; x = x - 7; i = j * 6; r = r / 5;
La operación se efectúa teniendo en cuenta el tipo de datos que hemos definido para los operandos (int, long,
float, etc..), por lo que, por ejemplo, si definimos 9 y 4 como enteros int, 9 / 4 devuelve de resultado 2 en
lugar de 2.25 ya que el 9 y 4 son valores de tipo entero int (enteros) y se ignoran los decimales.
Esto también significa que la operación puede sufrir un desbordamiento si el resultado es más grande que lo
que puede ser almacenada en el tipo de datos. Recordemos el alcance de los tipos de datos numéricos que
ya hemos explicado anteriormente.
Si los operandos son de diferentes tipos, para el cálculo se utilizará el tipo más grande de los operandos en
juego. Por ejemplo, si uno de los números (operandos) es del tipo float y otra de tipo int, para el cálculo se
utilizará el método de float es decir, el método de coma flotante.
Elija el tamaño de las variables de tal manera que sea lo suficientemente grande como para que los resultados
sean lo precisos que usted desea. Para las operaciones que requieran decimales utilice variables tipo float,
pero sea consciente de que las operaciones con este tipo de variables son más lentas a la hora de realizarse
el cómputo.
Suma en arduino.
La suma es probablemente la primera operación aritmética que aprendemos a realizar en la escuela, así que
será la primera que abordaremos. Para realizar sumas con un Arduino, en el código utilizamos el operador
de la suma (+) o símbolo de adición.
A continuación se presenta diferentes ejemplos de cómo realizar una suma en código Arduino.
Ejemplo 07 – Código de suma. Digite el siguiente código, observa los resultados y anótalos en el espacio en
blanco del lado derecho de la hoja; luego modifica el valor de a = 4.3 y b= 8.5, observa el resultado, ¿Cómo
corregirías el código para obtener los resultados esperados?
Resta en arduino.
Para realizar restas en el entorno de programación de Arduino utilizamos el signo de resta (–) o substracción.
Repetir el ejemplo 07, pero aplicado a la resta.
Multiplicación en arduino.
Las multiplicaciones se realizan haciendo uso del operador de multiplicación (*). Repetir el ejemplo 07, pero
aplicado a la multiplicación. No existe la asignación multiplicación **;
División en arduino.
Para realizar restas en el entorno de programación de Arduino utilizamos el signo de división (/). No existe la
asignación división //;
En divisiones, existe algo que se conoce como residuo de la división. Si el residuo de una división es cero se
dice que la división es exacta, si es algún número mayor a cero, se dice que la división es inexacta. Al realizar
una operación de división en el Arduino, este residuo puede guardarse en una variable para después ser
utilizado en otro proceso. Para conocer el residuo de una división podemos usar el operador aritmético de
modulo (%). El signo de porcentaje es usado como operador aritmético de modulo.
Repetir el ejemplo 07, pero aplicado a la división y luego aplicado al módulo.
3.3.1 Asignaciones compuestas
Las asignaciones compuestas combinan una operación aritmética con una variable asignada. Estas son
comúnmente utilizadas en los bucles tal como se describe más adelante. Estas asignaciones compuestas
pueden ser:
• x++ // igual que x = x +1, o incremento de x en +1
• x-- // igual que x = x - 1, o decremento de x en -1
• x += y // igual que x = x + y, o incremento de x en +y
• x -= y // igual que x = x - y, o decremento de x en -y
• x *= y // igual que x = x * y, o multiplica x por y
• x /= y // igual que x = x / y, o divide x por y
Nota: Por ejemplo, x * = 3 hace que x se convierta en el triple del antiguo valor x y por lo tanto x es reasignada
al nuevo valor.
3.3.2 Operadores de comparación
Las comparaciones de una variable o constante con otra se utilizan con frecuencia en las estructuras
condicionales del tipo if.. para testear si una condición es verdadera. En los ejemplos que siguen en las
próximas páginas se verá su utilización práctica usando los siguientes tipo de condicionales:
• x == y // x es igual a y
• x != y // x no es igual a y
• x < y // x es menor que y
• x > y // x es mayor que y
• x <= y // x es menor o igual que y
• x >= y // x es mayor o igual que y
3.3.3 Operadores lógicos
Los operadores lógicos son usualmente una forma de comparar dos expresiones y devolver un VERDADERO
o FALSO dependiendo del operador. Existen tres operadores lógicos, AND (&&), OR (||) y NOT (!), que a
menudo se utilizan en estamentos de tipo if:
• Logica AND: (x > 0 && x < 5) // Cierto sólo si las dos expresiones son ciertas.
• Logica OR: (x > 0 || y > 0) // Cierto si una cualquiera de las expresiones es cierta
• Logica NOT: (!x > 0) // Cierto solo si la expresión es falsa
3.4 CONDICIONES Y BUCLES.
Las condiciones y los bucles dentro de la estructura de código nos ayudarán a tomar decisiones lógicas; por
ejemplo, si la temperatura obtenida por un sensor ha sobrepasado el límite o realizar una misma actividad
hasta que no cambie las condiciones de entrada, etc. para ello existen diferentes instrucciones que se detallan
a continuación:
• if: es un condición que se utiliza para probar si una determinada situación se ha alcanzado; como por
ejemplo, averiguar si un valor está por encima de un cierto número de calibración, y ejecutar una
serie de declaraciones (operaciones) que se escriben dentro de llaves, si es verdad. Si es falso (la
condición no se cumple) el programa salta y no ejecuta las operaciones que están dentro de las llaves.
Lazo if Código If
• if… else: viene a ser un estructura que se ejecuta en respuesta a la idea “si esto no se cumple haz esto
otro”. Por ejemplo, si se desea probar una entrada digital, y hacer una cosa si la entrada fue alto o
hacer otra cosa si la entrada es baja.
Lazo if… else Código If… else
• if anidado (else): puede ir precedido de otra condición if, de manera que se pueden establecer varias
estructuras condicionales de tipo unas dentro de las otras (anidamiento) de forma que sean
mutuamente excluyentes pudiéndose ejecutar a la vez. Es incluso posible tener un número ilimitado
de estos condicionales. Recuerde sin embargo que sólo un conjunto de declaraciones se llevará a
cabo dependiendo de la condición probada.
Lazo if anidado (else) Código If anidado (else)
• for: La declaración for se usa para repetir un bloque de sentencias encerradas entre llaves un número
determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se vuelve a testear la
condición. La declaración for tiene tres partes separadas por (;). La inicialización de la variable local
se produce una sola vez y la condición se testea cada vez que se termina la ejecución de las
instrucciones dentro del bucle. Si la condición sigue cumpliéndose, las instrucciones del bucle se
vuelven a ejecutar. Cuando la condición no se cumple, el bucle termina.
Cualquiera de los tres elementos de cabecera puede omitirse, aunque el punto y coma es obligatorio.
También las declaraciones de inicialización, condición y expresión puede ser cualquier estamento
válido en lenguaje C sin relación con las variables declaradas.
Lazo for Código for
• While: Un bucle del tipo while es un bucle de ejecución continua mientras se cumpla la expresión
colocada entre paréntesis en la cabecera del bucle. La variable de prueba tendrá que cambiar para
salir del bucle. La situación podrá cambiar a expensas de una expresión dentro el código del bucle o
también por el cambio de un valor en una entrada de un sensor.
• do..while: El bucle do while funciona de la misma manera que el bucle while, con la salvedad de que
la condición se prueba al final del bucle, por lo que el bucle siempre se ejecutará al menos una vez.
Lazo while Código while Código do… while
Además, existen otras palabras condicionantes y herramientas que nos ayudarán a evitar los bucles infinito
o añadir análisis más complejo a nuestro código. Estas se muestran a continuación:
• switch..case: Al igual que if, switch..case controla el flujo del programa especificando en el programa
que código se debe ejecutar en función de unas variables. En este caso en la instrucción switch se
compara el valor de una variable sobre los valores especificados en la instrucción case.
• break es la palabra usada para salir del switch. Si no hay break en cada case, se ejecutará la siguiente
instrucción case hasta que encuentre un break o alcance el final de la instrucción.
• default es la palabra que se usa para ejecutar el bloque en caso que ninguna de las condiciones se
cumpla.
• goto: transfiere el flujo de programa a un punto del programa que está etiquetado.
• break se usa en las instrucciones do, for, while para salir del bucle de una forma diferente a la indicada
en el bucle.
• continue se usa en las instrucciones do, for, while para saltar el resto de las instrucciones que están
entre llaves y se vaya a la siguiente ejecución del bucle comprobando la expresión condicional.
Reto 02 – Modifica el código del ejemplo 07 para que realice las diferentes operaciones de suma, por medio
de las siguientes condiciones:
Parte 1 - utilizando lazo if e if… else:
• Condición 01: Realiza la suma 1)
• Condición 02: Realiza la suma 2)
• Condición 03: Realiza la suma 3)
• Condición 04: Realiza la suma 4)
• Condición superior a 4: Realiza la suma 5)
Parte 2 – Modifica el código anterior para que el programa realice las siguiente operaciones con las variables
a y b.
• Condición 01: Realiza suma
• Condición 02: Realiza multiplicación
• Condición 03: Realiza resta
• Condición 04: División
• Condición 05: (a*b) / (a+b)
• Condición superior a 5: una operación sugerida
por el programador.
RESOLICIÓN DEL RETO 01 – PARTE 1 Parte 3 – Digita los dos siguiente códigos y compara
sus resultados.
Código 01
Código 02
4 UTILIZACIÓN DE PINES.
Arduino está formado, básicamente, por pines de entrada, un microcontrolador en el medio y pines de salida.
Los pines de entrada sirven para escuchar y capturar información del exterior, por ejemplo: pulsadores,
sensores, etc.; el microcontrolador sirve para procesar el programa cargado y finalmente los pines de salida
sirven para enviar información desde la tarjeta Arduino hacia el exterior.
Al hablar de Entradas o Salidas, pueden existir tanto análogas o digitales.
4.1 ENTRADAS Y SALIDAS DIGITALES.
Por entradas y salidas digitales se entiende que, tanto la información que escucha como las respuestas dadas
por el Arduino pueden, tener solamente dos estados: +5V y 0V. OJO: Esto es solamente cuando se habla de
señales digitales. En la lógica Arduino las señales digitales pueden manejar los siguientes valores o estados:
Estado digital +5V 0V
Opción 1 1 0
Opción 2 TRUE FALSE
Opción 3 HIGH LOW
Las entradas y salidas digitales se configuran, de preferencia, en el Void Setup(); pero, también se pueden
declarar en cualquier segmento de código. Los comandos para utilizar las entradas y salidas digitales son los
siguientes:
• pinMode(pin,modo) configura el pin especificado para comportarse como una entrada, si se escribe
(INPUT) o una salida si se escribe (OUTPUT). Pin debe de ser un número entero.
• digitalWrite(pin,valor) se utiliza para asignar el valor HIGH (5V) o LOW (0V) a un pin digital.
• digitalRead(pin) Lee el valor de un pin digital especificado, HIGH o LOW.
Ejercicio XX – Modificar el código1, utilizando en un ejemplo anterior, para que maneje dos salidas digitales y
que los dos leds se enciendan y se apaguen al mismo tiempo.
El código 2 – utiliza un pulsador para activar y desactivar un LED. El Led encenderá durante el tiempo que este
presionado el pulsador.
Código 1 Código 2
4.2 ENTRADA Y SALIDA ANÁLOGA
Como se trabajó en la sección anterior, las señales digitales solo tienen dos estados opuestos: 1 ó 0. Si
presionas un botón, su estado cambiará de uno a otro. Un LED está encendido o apagado. En el mundo real,
no es digital. El agua, por ejemplo, no sólo está caliente o fría, puede también estar templada.
Para poder medir eso, y otras cosas del mundo real, no podemos usar sólo señales digitales. En lugar de ello,
empleamos señales analógicas.
En vez de 2 estados opuestos, las señales analógicas tienen niveles continuos. Así que, si tienes un sensor de
luz, puedes obtener muchos valores diferentes que expresan cómo de iluminada está la habitación, y no sólo
clara/oscura. O en el caso de un termómetro, te dice la temperatura mediante un número, en lugar de
fría/caliente.
Con Arduino, puedes obtener los valores analógicos de los pines analógicos. Sobre la placa puedes ver un
grupo de pines marcados como “analog in”, que llevan el nombre de A0 a A5. Cuando se les aplica tensión,
ellos reportan valores de 0 a 1023; de este modo, cuando no hay voltaje en un Pin, la lectura es 0. Si le aplicas
5V, la lectura será 1023. Con una entrada de 2.5V, te dará 512. Para leer estos valores desde un Pin analógico
tienes que utilizar la función analogRead(), en lugar de digitalRead().
Para seguir explicando las señales analógicas, necesitamos introducir el potenciómetro. Un potenciómetro
es un control que funciona mediante el giro de un brazo. Por ejemplo, el regulador de volumen de un estéreo
es un potenciómetro. Con dos Pins exteriores al potenciómetro, conectados a GND y 5V respectivamente,
puedes utilizar el potenciómetro para controlar la cantidad de tensión que quieres que haya en el Pin central,
siempre dentro del rango de 0V a 5V.
Ejercicio - Vamos a experimentar un poco usando un potenciómetro para controlar el parpadeo de un LED.
Conecta el Pin de salida (2) del potenciómetro al Pin analógico A5; El pin de entrada (3) a 5V del Arduino y
GND (1) al GND del Arduino.
5 FUNCIONES Y PROCEDIMIENTOS EN ARDUINO
Una función es un conjunto de instrucciones al que se les identifica con un nombre. Usando posteriormente
ese nombre, podemos llamar a la función para que ejecute las instrucciones incluidas dentro de ella,
simplemente escribiendo su nombre en el lugar deseado de nuestro código.
Para crear una función propia, primero debemos declararla. Esto se hace en cualquier lugar fuera de setup()
y loop(), antes o después. Una función puede o no retornar valores, y también puede o no recibir parámetros,
esto se hace siguiendo la sintaxis marcada por la plantilla siguiente:
tipodeRetorno nombredeFuncion (tipodeparam1, tipodeparam2,...) {
// Código interno de la función
}
Donde:
• tipodeRetorno: Indica el tipo de valor que la función devolverá al código principal una vez ejecutada.
• nombredefuncion: Es el nombre que le damos a la función.
• tipodeparam: son las declaraciones de los parámetros de la función, que no son más que variables
internas, cuya existencia solo perdura mientras el código de esta se esté ejecutando.
Ejercicio – Digita el siguiente código y arma el circuito utilizando las resistencias de 330Ω y los Leds.
Ahora realiza las siguientes modificaciones al código.
Código 01 Código 02
Ejercicio 03 – Crea dos funciones más con diferentes tipos de secuencias de encendido y apagado de los Leds.
Reto 03 – Crea una función para controlar tres luces de un semáforo, el tiempo de encendido y apagado de
las luces será controlado por un potenciómetro.
6 PULSADORES Y TECLADOS.
Un teclado matricial es un dispositivo que agrupa varios pulsadores y permite controlarlos empleando un
número de conductores inferior al que necesitaríamos al usarlos de forma individual. Podemos emplear estos
teclados como un controlador para un autómata o un procesador como Arduino.
Estos dispositivos agrupan los pulsadores en filas y columnas formando una matriz, disposición que da lugar
a su nombre. Es frecuente una disposición rectangular pura de NxM columnas, aunque otras disposiciones
son igualmente posibles. Los teclados matriciales son frecuentes en electrónica e informática. En el campo de
la electrónica casera y Arduino, se venden múltiples modelos de teclados matriciales en distintos soportes
(rígidos o flexibles) y con distinto número de teclas, siendo habituales configuraciones de 3×3, 3×4, y 4×4.
Podemos emplear teclados matriciales en nuestros proyectos de electrónica y robótica, por ejemplo, para
cambiar el modo de funcionamiento de un montaje, para solicitar un password, como teclas de dirección para
controlar un brazo robótico o un vehículo, o proporcionar instrucciones a un robot.
6.1 FUNCIONAMIENTO DEL TECLADO MATRICIAL.
Como hemos dicho, un teclado matricial agrupa los pulsadores en filas y columnas formando una matriz, lo
que permite emplear un número menor de conductores para determinar las pulsaciones de las teclas.
La imagen muestra, a modo de ejemplo, una disposición rectangular de 4×4, aunque el funcionamiento es
análogo en otras disposiciones. Al detectar la pulsación en la columna X y la fila Y, sabremos que se ha pulsado
la tecla (X,Y). Internamente la disposición de los pulsadores es la siguiente, que es muy similar a la disposición
que vimos al tratar sobre displays LED matriciales.
El esquema de conexión es sencillo. Simplemente conectamos todos los pines a entradas digitales de Arduino.
Por ejemplo, en el ejemplo de un teclado de 4×4 el esquema quedaría de la siguiente forma.
Digita el siguiente código y arma el circuito mostrado anteriormente.
7 MOTORES
Arduino, como se mencionó con anterioridad, permite controlar diferentes tipos de elementos, entre ellos
los motores, pero existen diferentes tipos de motores, por ejemplo, los motores DC, los motores paso a paso
y los servomotores. Dentro de este curso trabajaremos con motores DC y Servomotores.
7.1 MOTOR DC
Un motor de corriente continua (DC) convierte la energía eléctrica en mecánica. Se compone de dos partes:
el estator y el rotor.
El estator es la parte mecánica del motor donde están los polos del imán. El rotor es la parte móvil del motor
con devanado y un núcleo, al que llega la corriente a través de las escobillas.
Cuando la corriente eléctrica circula por el devanado del rotor, se crea un campo electromagnético. Este
interactúa con el campo magnético del imán del estator. Esto deriva en un rechazo entre los polos del imán
del estator y del rotor creando un par de fuerza donde el rotor gira en un sentido de forma permanente.
Si queremos cambiar el sentido de giro del rotor, tenemos que cambiar el sentido de la corriente que le
proporcionamos al rotor; basta con invertir la polaridad de la pila o batería.
Simulador de motor DC: http://www.walter-fendt.de/html5/phes/electricmotor_es.htm
7.2 CONTROLADOR DE MOTORES L298N
El módulo controlador de motores L298N H-bridge nos permite controlar la velocidad y la dirección de dos
motores de corriente continua o un motor paso a paso de una forma muy sencilla, gracias a los 2 los dos
puentes H que posee.
Básicamente, un puente-H es un componente formado por 4 transistores que nos permite invertir el sentido
de la corriente, y de esta forma podemos invertir el sentido de giro del motor.
El rango de tensiones en el que trabaja este módulo va desde 3V hasta 35V, y una intensidad de hasta 2A.
A la hora de alimentarlo hay que tener en cuenta que la electrónica del módulo consume unos 3V, así que
los motores reciben 3V menos que la tensión con la que alimentemos el módulo.
Además, el L298N incluye un regulador de tensión que nos permite obtener del módulo una tensión de 5V,
perfecta para alimentar nuestro Arduino. Eso sí, este regulador sólo funciona si alimentamos el módulo con
una tensión máxima de 12V.
La entrada de tensión Vin admite tensiones entre 3V y 35V, y justo a su derecha en la imagen tenemos el pin
que debemos conectar a GND y a GND de Arduino.
La tercera conexión de ese grupo V lógico puede funcionar de dos maneras:
• Si el jumper del regulador está cerrado activaremos el regulador de tensión del L298N, y en V lógico
tendremos una salida de 5V, que podremos usar para lo que queramos, por ejemplo, para alimentar
una placa Arduino – consumo máximo 5A.
• Si el quitamos el jumper desactivaremos el regulador, necesitaremos alimentar la parte lógica del
módulo, así que tendremos que meter una tensión de 5V por la conexión V lógico para que el módulo
funcione.
¡Cuidado! Si introducimos corriente por V lógico con el jumper de regulación puesto podríamos dañar el
módulo.
Además, el regulador sólo funciona con tensiones hasta 12V en Vin, por encima de este valor tendremos que
quitar el jumper y alimentar la parte lógica del módulo desde otra fuente.
El resto de las conexiones se usan de una u otra forma dependiendo si vamos a manejar dos motores de
continua o un motor paso a paso. En esta sesión nos vamos a centrar en el control de motores DC.
Las salidas para los motores A y B nos darán la energía para mover los motores. Tomar en cuenta la polaridad
al conectarlos, para que cuando más tarde hagamos que se muevan adelante, funcionen como deberían. Si
no fuera así, no tendríamos más que invertir las conexiones.
Los pines IN1 e IN2 nos sirven para controlar el sentido de giro del motor A, y los pines IN3 e IN4 el del motor
B. Funcionan de forma que, si IN1 está a HIGH e IN2 a LOW, el motor A gira en un sentido, y si está IN1 a LOW
e IN2 a HIGH lo hace en el otro. Y lo mismo con los pines IN3 e IN4 y el motor B.
Para controlar la velocidad de giro de los motores tenemos que quitar los jumpers y usar los pines ENA y ENB.
Los conectaremos a dos salidas PWM de Arduino de forma que le enviemos un valor entre 0 y 255 que
controle la velocidad de giro. Si tenemos los jumpers colocados, los motores girarán a la siempre a la misma
velocidad.
7.2.1 Control de giro para motor DC
int IN3 = 5;
int IN4 = 4;
void setup()
{
pinMode (IN4, OUTPUT);
pinMode (IN3, OUTPUT);
}
void loop()
{
digitalWrite (IN4, HIGH);
digitalWrite (IN3, LOW);
delay(4000);
digitalWrite (IN4, LOW);
delay(500);
digitalWrite (IN3, HIGH);
delay(4000);
digitalWrite (IN3, LOW);
delay(5000);
}
7.2.2 Control de giro y velocidad de un motor DC
int IN3 = 5;
int IN4 = 4;
int ENB = 3;
void setup()
{
pinMode (ENB, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
}
void loop()
{
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite(ENB,55);
delay(2000);
analogWrite(ENB,105);
delay(2000);
analogWrite(ENB,255);
delay(2000);
analogWrite(ENB,0);
delay(5000);
}
Reto: Modificar el código para que el motor gire en sentido contrario con diferentes velocidades.
7.3 SERVOMOTOR.
un servomotor o servo. Es un motor eléctrico, pero con dos características especiales. Por un lado, nos
permite mantener una posición que indiquemos, siempre que esté dentro del rango de operación del propio
dispositivo. Por otro lado, nos permite controlar la velocidad de giro, podemos hacer que antes de que se
mueva a la siguiente posición espere un tiempo.
Hay varios modelos de servomotor con Arduino todos tienen un funcionamiento muy parecido y la
programación puede variar muy poco. Hay detalles a tomar en cuenta con este dispositivo, lo primero, el
ángulo de giro, en este caso nos permite hacer un barrido entre -90º y 90º. Lo que viene a ser un ángulo de
giro de 180º. Aunque el servo puede moverse con una resolución de más de 1 grado, este es el máximo de
resolución que vamos a conseguir debido a la limitación de la señal PWM que es capaz de generar Arduino
UNO.
CÓDIGO 1 CÓDIGO 2
#include <Servo.h>
Servo servoMotor;
void setup() {
// Iniciamos el monitor serie para mostrar el
resultado
Serial.begin(9600);
// Iniciamos el servo para que empiece a trabajar
con el pin 9
servoMotor.attach(9);
}
void loop() {
// Desplazamos a la posición 0º
servoMotor.write(0);
// Esperamos 1 segundo
delay(1000);
// Desplazamos a la posición 90º
servoMotor.write(45);
// Esperamos 1 segundo
delay(1000);
// Desplazamos a la posición 180º
servoMotor.write(90);
// Esperamos 1 segundo
delay(1000);
}
#include <Servo.h>
Servo servoMotor;
void setup() {
// Iniciamos el monitor serie para mostrar el
resultado
Serial.begin(9600);
// Iniciamos el servo para que empiece a trabajar
con el pin 9
servoMotor.attach(9);
// Inicializamos al ángulo 0 el servomotor
servoMotor.write(0);
}
void loop() {
// Vamos a tener dos bucles uno para mover en
sentido positivo y otro en sentido negativo
// Para el sentido positivo
for (int i = 0; i <= 90; i++)
{
// Desplazamos al ángulo correspondiente
servoMotor.write(i);
// Hacemos una pausa
delay(40);
}
// Para el sentido negativo
for (int i = 90; i > 0; i--)
{
// Desplazamos al ángulo correspondiente
servoMotor.write(i);
// Hacemos una pausa
delay(40);
}
}
De la librería Servo.h hemos declarado un objeto o variable servoMotor y hacemos uso de dos métodos. Por
un lado, el attach nos permite indicar en que pin tenemos conectado nuestro servo, y por otro lado el write,
donde indicamos en qué ángulo queremos posicionar nuestro servomotor.
8 LECTURA DE SENSORES
Arduino puede leer una gran cantidad de sensores. Los sensores se encargan de leer variables físicas y las
convierte en señales eléctricas adecuadas para ser leídas por la placa Arduino. Ejemplo de sensores son de
temperatura, humedad, luminosidad, aceleración, color, movimiento, proximidad, etc.
8.1 LECTOR DE TEMPERATURA Y HUMEDAD DHT11
Una de las ventajas que nos ofrece el DHT11, además de medir la temperatura y la humedad, es que es digital.
A diferencia de sensores como el LM35, este sensor utiliza un pin digital para enviarnos la información, por lo
tanto, estaremos más protegidos frente al ruido eléctrico. El DHT11 presume de ser un sensor con una alta
fiabilidad y estabilidad debido a su señal digital calibrada.
GND: conexión con tierra
DATA: transmisión de datos
VCC: alimentación
MODELO DHT11
Alimentación de 3,5 V a 5 V
Consumo 2,5 mA
Señal de salida Digital
TEMPERATURA
Rango de 0ºC a 50ºC
Precisión a 25ºC ± 2ºC
Resolución 1ºC (8-bit)
HUMEDAD
Rango de 20% RH a 90% RH
Precisión entre 0ºC y 50ºC ± 5% RH
Resolución 1% RH
No tenemos que confundirnos entre analógico y digital. Aunque lo conectemos a un pin digital, se trata de un
dispositivo analógico. Dentro del propio dispositivo se hace la conversión entre analógico y digital.
Por lo tanto, partimos de una señal analógica que luego es convertida en formato digital y se enviará al
microcontrolador. La trama de datos es de 40 bits correspondiente a la información de humedad y
temperatura del DHT11.
El primer grupo de 8-bit es la parte entera de la humedad y el segundo grupo la parte decimal. Lo mismo
ocurre con el tercer y cuarto grupo, la parte entera de la temperatura y la parte decimal. Por último, los bits
de paridad para confirmar que no hay datos corruptos.
Estos bits de paridad lo único que hacen es asegurarnos de que la información es correcta, sumando los 4
primero grupos de 8-bit. Esta suma debe ser igual a los bits de paridad. Si nos centramos en la imagen anterior
y sumamos los bits, comprobamos que todo está correcto.
0011 0101 + 0000 0000 + 0001 1000 + 0000 0000 = 0100 1101
Este modelo de DHT11 dispone de 3 pines, la toma de tierra GND, para los datos DATA y para la alimentación
VCC (de 3,5V a 5V). En la siguiente imagen puedes ver el esquema de conexión con Arduino.
EJEMPLO DE CÓDIGO.
8.2 SENSOR DE LUZ CON LDR.
La Fotorresistencia LDR es un componente cuya resistencia varía sensiblemente con la cantidad de luz
percibida. La relación entre la intensidad lumínica y el valor de la resistencia no es lineal. Su comportamiento
es el siguiente:
• Mas luz = menor resistencia eléctrica
• Menos luz = mayor resistencia eléctrica
Para obtener un rango de voltaje análogo es necesario utilizar el divisor de voltaje, esto se hace mediante un
par de resistencias en serie, es posible repartir la tensión suministrada por la fuente entre las terminales de
estas, en nuestro caso, el divisor se utiliza con el LDR para obtener un voltaje variable de acuerdo a la cantidad
de luz percibida.
Y utilizaremos la conversión análoga a digital de los pines análogos del Arduino. Las características de la placa
LDR son las siguientes:
• Puede detectar brillo ambiental e intensidad de luz
• Sensibilidad ajustable (preset)
• Conexión de 4 cables.
• Tensión de alimentación 3.3V-5V
• Tipos de salida de datos:
o Analógica
o Digital (0 and 1)
CÓDIGO EJEMPLO, ENCENDER TRES LEDS POR MEDIO DE CONTROL DE LUZ.
// Pin donde se conectan los leds
int pinLed1 = 2;
int pinLed2 = 3;
int pinLed3 = 4;
// Pin analogico de entrada para el LDR
int pinLDR = 0;
// Variable donde se almacena el valor del LDR
int valorLDR = 0;
void setup()
{
// Configuramos como salidas los pines donde se
conectan los led
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinLed3, OUTPUT);
// Configurar el puerto serial
Serial.begin(9600);
}
void loop()
{
// Apagar todos los leds siempre que se inicia el ciclo
digitalWrite(pinLed1, LOW);
digitalWrite(pinLed2, LOW);
digitalWrite(pinLed3, LOW);
// Guardamos el valor leido del ADC en una variable
// El valor leido por el ADC (voltaje) aumenta de manera
directamente proporcional
// con respecto a la luz percibida por el LDR
valorLDR= analogRead(pinLDR);
// Devolver el valor leido a nuestro monitor serial en el
IDE de Arduino
Serial.println(valorLDR);
// Encender los leds apropiados de acuerdo al valor de
ADC
if(valorLDR > 256) {
digitalWrite(pinLed1, HIGH);
}
if(valorLDR > 512){
digitalWrite(pinLed2, HIGH);
}
if(valorLDR > 768){
digitalWrite(pinLed3, HIGH);
}
// Esperar unos milisegundos antes de actualizar
delay(200);
}
Reto – Modificar la intensidad de luz de un LED, cuando la iluminación sea alta el LED este apagado, cuando
la iluminación sea mínima el LED este encendido.
9 PANTALLA LCD
LCD es el acrónimo de Liquid Crystal Display (en español Pantalla de Cristal Líquido). No podemos considerar
que se trate de una tecnología novedosa. El LCD lleva con nosotros mucho tiempo, solo tenemos que echar
la mirada hacia atrás y recordar esos relojes Casio o las calculadoras que llevamos a clase de matemáticas.
Estamos acostumbrados a que la materia pueda estar en estado sólido, líquido o gaseoso, los llamados
estados de la materia. Pero ya en el siglo XIX se descubrió que había más estados en los que podía encontrarse
la materia. El cristal líquido se encuentra en algún lugar entre el sólido y líquido.
Hay una amplia gama de pantallas LCDs que podemos utilizar con Arduino. Aparte de las funcionalidades extra
que nos puedan dar cada una de ellas, las podemos diferenciar por el número de filas y columnas, su tamaño.
Por ejemplo, una pantalla LCD de 16×1 tendrá una fila de 16 caracteres, es decir, solo podremos mostrar 16
caracteres simultáneamente, al igual que un LCD de 20×4 tendrá 4 filas de 20 caracteres cada una, la pantalla
que nosotros utilizaremos será una 16x2.
En nuestro caso utilizaremos una pantalla LCD con comunicación I2C, este protocolo de comunicación lo
estudiaremos más adelante.
9.1 LIBRERÍA LIQUIDCRYSTAL_I2C PARA ARDUINO
Existen diferentes tipos y versiones de librerías para trabajar con el módulo Adaptador LCD a I2C. Las
funciones que utiliza esta librería son similares a la librería LiquidCrystal de Arduino, revisaremos las funciones
principales:
• LiquidCrystal_I2C(lcd_Addr, lcd_cols, lcd_rows): Función constructor, crea un objeto de la clase
LiquidCrystal_I2C, con dirección, columnas y filas indicadas.
• init(): Inicializa el módulo adaptador LCD a I2C, esta función internamente configura e inicializa el I2C
y el LCD.
• clear(): Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda (posición (0,0)).
• setCursor(col, row): Posiciona el cursor del LCD en la posición indicada por col y row(x,y); es decir,
establecer la ubicación en la que se mostrará posteriormente texto escrito para la pantalla LCD.
• print(): Escribe un texto o mensaje en el LCD, su uso es similar a un Serial.print
• scrollDisplayLeft(): Se desplaza el contenido de la pantalla (texto y el cursor) un espacio hacia la
izquierda.
• scrollDisplayRight(): Se desplaza el contenido de la pantalla (texto y el cursor) un espacio a la derecha.
• backlight(): Enciende la Luz del Fondo del LCD
• noBacklight(): Apaga la Luz del Fondo del LCD
• createChar (num, datos): Crea un carácter personalizado para su uso en la pantalla LCD. Se admiten
hasta ocho caracteres de 5x8 píxeles (numeradas del 0 al 7). Dónde: num es el número de carácter y
datos es una matriz que contienen los pixeles del carácter. Se verá un ejemplo de esto más adelante.
CÓDIGO 1 CÓDIGO 2
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Crear el objeto lcd dirección 0x3F y 16
columnas x 2 filas
LiquidCrystal_I2C lcd(0x3F,16,2); //
void setup() {
// Inicializar el LCD
lcd.init();
//Encender la luz de fondo.
lcd.backlight();
// Escribimos el Mensaje en el LCD.
lcd.print("Hola Mundo");
}
void loop() {
// Ubicamos el cursor en la primera
posición(columna:0) de la segunda línea(fila:1)
lcd.setCursor(0, 1);
// Escribimos el número de segundos
trascurridos
lcd.print(millis()/1000);
lcd.print(" Segundos");
delay(100);
}
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Crear el objeto lcd dirección 0x3F y 16 columnas x 2
filas
LiquidCrystal_I2C lcd(0x3F,16,2); //
void setup() {
// Inicializar el LCD
lcd.init();
//Encender la luz de fondo.
lcd.backlight();
// Escribimos el Mensaje en el LCD en una posición
central.
lcd.setCursor(10, 0);
lcd.print("WWW.NAYLAMPMECHATRONICS.COM");
lcd.setCursor(4, 1);
lcd.print("Tutorial LCD, Test de desplazamiento ");
}
void loop() {
//desplazamos una posición a la izquierda
lcd.scrollDisplayLeft();
delay(500);
}
Reto: Utilizar el sensor de temperatura para imprimir en la pantalla LCD los datos de temperatura y
humedad.
10PROTOCOLOS DE COMUNICACIÓN.
Un protocolo de comunicaciones es un sistema de reglas que permiten que dos o más entidades de un sistema
de comunicación se comuniquen entre ellas para transmitir información por medio de cualquier tipo de
variación de una magnitud física. Se trata de las reglas o el estándar que define la sintaxis, semántica y
sincronización de la comunicación, así como también los posibles métodos de recuperación de errores. Los
protocolos pueden ser implementados por hardware, por software, o por una combinación de ambos.
Arduino proporciona diferentes protocolos de comunicación, por ejemplo, comunicación serial, I2C y SPI.
10.1PROTOCOLO SERIAL
La comunicación serie es muy importante porque gran parte de los protocolos utilizados actualmente son
serie y además muchos dispositivos de comunicación inalámbrica usan la comunicación serie para hablar con
Arduino como los módulos bluetooth y los módulos Xbee. También la comunicación serie es la que se usa
generalmente para comunicar el Arduino con el Ordenador.
Todas las placas Arduino tienen al menos un puerto serie disponible en los pines digitales 0 (RX) y 1 (TX)
compartido con el USB. Por lo tanto, no es posible usar estos pines como entradas/salidas digitales.
La funciones más importantes que debemos conocer para manejar el puerto serie son: begin(), read(), write(),
print() y available())
• begin() – estable la velocidad de la UART en baudios para la transmisión serie, también es posible
configurar el número de bits de datos, la paridad y los bits de stop, por defecto es 8 bits de datos, sin
paridad y un bit de stop.
• read() – lee el primer byte entrante del buffer serie.
• write() – escribe datos en binario sobre el puerto serie. El dato es enviado como un byte o serie de
bytes.
• print() – imprime datos al puerto serie como texto ASCII, también permite imprimir en otros
formatos.
• available() – da el número de bytes (caracteres) disponibles para leer en el puerto serie, son datos
que han llegado y se almacenan en el buffer serie que tiene un tamaño de 64 bytes.
10.2PROTOCOLO I2C
Es un protocolo síncrono. I2
C usa solo 2 cables, uno para el reloj (SCL) y otro para el dato (SDA). Esto significa
que el maestro y el esclavo envían datos por el mismo cable, el cuál es controlado por el maestro, que crea la
señal de reloj. I2
C no utiliza selección de esclavo, sino direccionamiento.
Tener dos o más señales a través del mismo cable pueden causar conflicto, y ocurrirían problemas si un
dispositivo envía un 1 lógico al mismo tiempo que otro envía un 0. Por tanto, el bus es “cableado” con dos
resistencias para poner el bus a nivel alto, y los dispositivos envían niveles bajos. Si quieren enviar un nivel
alto simplemente lo comunican al bus.
I²C es un bus de comunicaciones en serie. Su nombre viene de Inter-Integrated Circuit (Inter-Circuitos
Integrados). La principal característica de I²C es que utiliza dos líneas para transmitir la información: una para
los datos y otra para la señal de reloj. También es necesaria una tercera línea, pero esta sólo es la referencia
(tierra). Como suelen comunicarse circuitos en una misma placa que comparten una misma masa esta tercera
línea no suele ser necesaria.
Las líneas se llaman:
SDA: datos
SCL: reloj
GND: tierra
Los dispositivos conectados al bus I²C tienen una dirección única para cada uno. También pueden ser maestros
o esclavos. El dispositivo maestro inicia la transferencia de datos y además genera la señal de reloj, pero no
es necesario que el maestro sea siempre el mismo dispositivo, esta característica se la pueden ir pasando los
dispositivos que tengan esa capacidad. Esta característica hace que al bus I²C se le denomine bus
multimaestro.
Ejemplo de manejo I2
C
Se controlarán cuatro luces por medio de dos Arduino, uno usado como maestro y otro como esclavo. Por lo
tanto, vamos a tener que cargar dos códigos, un código al que hace de master y otro código al que hace de
esclavo (slave). En los dos casos haremos uso de la librería Wire, que nos proporcionará todos los métodos y
propiedades para poder utilizar el protocolo I2C de una forma sencilla.
Empecemos con el código del master. El objetivo de la aplicación es encender los LEDs conectados a los pines
0, 1, 2, 3, 4 con un retardo de un segundo.
Código Maestro Código Esclavo
#include <Wire.h>
void setup() {
// Unimos este dispositivo al bus I2C
Wire.begin();
}
byte pin[] = {2, 3, 4, 5, 6};
byte estado = 0;
void loop() {
for (int i = 0; i < 5; i++)
{
// Comenzamos la transmisión al dispositivo 1
Wire.beginTransmission(1);
// Enviamos un byte, será el pin a encender
Wire.write(pin[i]);
// Enviamos un byte, L pondrá en estado bajo y
H en estado alto
Wire.write(estado);
// Paramos la transmisión
Wire.endTransmission();
// Esperamos 1 segundo
delay(1000);
}
// Cambiamos el estado
if (estado == 0)
{
estado = 1;
}
else
{
estado = 0;
}
}
#include <Wire.h>
void setup() {
// Pines en modo salida
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
// Unimos este dispositivo al bus I2C con dirección 1
Wire.begin(1);
// Registramos el evento al recibir datos
Wire.onReceive(receiveEvent);
// Iniciamos el monitor serie para monitorear la comunicación
Serial.begin(9600);
}
void loop() {
delay(300);
}
// Función que se ejecuta siempre que se reciben datos del
master
// siempre que en el master se ejecute la sentencia
endTransmission
// recibirá toda la información que hayamos pasado a través de
la sentencia Wire.write
void receiveEvent(int howMany) {
int pinOut = 0;
int estado = 0;
// Si hay dos bytes disponibles
if (Wire.available() == 2)
{
// Leemos el primero que será el pin
pinOut = Wire.read();
Serial.print("LED ");
Serial.println(pinOut);
}
// Si hay un byte disponible
if (Wire.available() == 1)
{
estado = Wire.read();
Serial.print("Estado ");
Serial.println(estado);
}
// Activamos/desactivamos salida
digitalWrite(pinOut,estado);
}
El código del esclavo es diferente. Lo primero que hay que destacar es que tendremos un evento que se
disparará cuando reciba un dato del dispositivo master. La primera parte leerá un entero (int) y la segunda
parte leerá un carácter (char). Dependiendo de si el carácter es H o L pondrá en estado alto (H) o bajo (L).
10.3COMUNICACIÓN SPI
Es otro protocolo serie muy simple. Un maestro envia la señal de reloj, y tras cada pulso de reloj envía un bit
al esclavo y recibe un bit de éste. Los nombres de las señales son por tanto SCK para el reloj, MOSI para el
Maestro Out Esclavo In, y MISO para Maestro In Esclavo Out. Para controlar más de un esclavo es preciso
utilizar SS (selección de esclavo).
El bus SPI tiene una arquitectura de tipo maestro-esclavo. El dispositivo maestro (master) puede iniciar la
comunicación con uno o varios dispositivos esclavos (slave), y enviar o recibir datos de ellos. Los dispositivos
esclavos no pueden iniciar la comunicación, ni intercambiar datos entre ellos directamente.
En el bus SPI la comunicación de datos entre maestros y esclavo se realiza en dos líneas independientes, una
del maestro a los esclavos, y otra de los esclavos al maestro. Por tanto, la comunicación es Full Duplex, es
decir, el maestro puede enviar y recibir datos simultáneamente.
Otra característica de SPI es que es bus síncrono. El dispositivo maestro proporciona una señal de reloj, que
mantiene a todos los dispositivos sincronizados. Esto reduce la complejidad del sistema frente a los sistemas
asíncronos. Por tanto, el bus SPI requiere un mínimo de 3 líneas.
• MOSI (Master-out, slave-in) para la comunicación del maestro al esclavo.
• MISO (Master-in, slave-out) para comunicación del esclavo al maestro.
• SCK (Clock) señal de reloj enviada por el maestro.

Contenu connexe

Tendances

Practica#1 sensores opticos
Practica#1 sensores opticosPractica#1 sensores opticos
Practica#1 sensores opticosEnrique Ovalle
 
fallas y reparaciones del mouse,teclado y fuente de poder
fallas y reparaciones del mouse,teclado y fuente de poderfallas y reparaciones del mouse,teclado y fuente de poder
fallas y reparaciones del mouse,teclado y fuente de poderjonatan452
 
Programación del ESP8266 con el IDE de Arduino
Programación del ESP8266 con el IDE de ArduinoProgramación del ESP8266 con el IDE de Arduino
Programación del ESP8266 con el IDE de ArduinoVíctor R. Ruiz
 
Manual basico de practicas con Arduino uno
Manual basico de practicas con Arduino unoManual basico de practicas con Arduino uno
Manual basico de practicas con Arduino unoRamiro Hernandez Michua
 
Instrumentos de medicion
Instrumentos de medicionInstrumentos de medicion
Instrumentos de medicionKenny Sanchez
 
informe circuitos aritmeticos.pdf
informe circuitos aritmeticos.pdfinforme circuitos aritmeticos.pdf
informe circuitos aritmeticos.pdfssuser6e8e40
 
Proyecto amplificador de audio de 2 w con transistores
Proyecto   amplificador de audio de 2 w con transistoresProyecto   amplificador de audio de 2 w con transistores
Proyecto amplificador de audio de 2 w con transistoresJOSUE OVIEDO
 
DISEÑO Y ELECTRÓNICA ANALÓGICA - CONFIGURACIONES DEL OP AMP LM741
DISEÑO Y ELECTRÓNICA ANALÓGICA - CONFIGURACIONES DEL OP AMP LM741DISEÑO Y ELECTRÓNICA ANALÓGICA - CONFIGURACIONES DEL OP AMP LM741
DISEÑO Y ELECTRÓNICA ANALÓGICA - CONFIGURACIONES DEL OP AMP LM741Fernando Marcos Marcos
 
Manual de practicas de Electrónica de potencia
Manual de practicas de Electrónica de potencia Manual de practicas de Electrónica de potencia
Manual de practicas de Electrónica de potencia SANTIAGO PABLO ALBERTO
 
Simulador de un semaforo
Simulador de un semaforoSimulador de un semaforo
Simulador de un semaforoLeida Zuñiga
 
Sensores de final de carrera
Sensores de final de carreraSensores de final de carrera
Sensores de final de carreraJavier Caniparoli
 
Tema #3. Sensores de Reactancia Variable y Electromagnéticos
Tema #3.  Sensores de Reactancia Variable y ElectromagnéticosTema #3.  Sensores de Reactancia Variable y Electromagnéticos
Tema #3. Sensores de Reactancia Variable y ElectromagnéticosRigoberto José Meléndez Cuauro
 
PLC: manual de practicas de laboratorio de controladores lógicos programables
PLC: manual de practicas de laboratorio de controladores lógicos programables PLC: manual de practicas de laboratorio de controladores lógicos programables
PLC: manual de practicas de laboratorio de controladores lógicos programables SANTIAGO PABLO ALBERTO
 
Carrito seguidor de línea final
Carrito seguidor de línea finalCarrito seguidor de línea final
Carrito seguidor de línea finaldani
 

Tendances (20)

Practica#1 sensores opticos
Practica#1 sensores opticosPractica#1 sensores opticos
Practica#1 sensores opticos
 
fallas y reparaciones del mouse,teclado y fuente de poder
fallas y reparaciones del mouse,teclado y fuente de poderfallas y reparaciones del mouse,teclado y fuente de poder
fallas y reparaciones del mouse,teclado y fuente de poder
 
RELOJ DIGITAL TTL 24 horas
RELOJ DIGITAL TTL 24 horas RELOJ DIGITAL TTL 24 horas
RELOJ DIGITAL TTL 24 horas
 
Programación del ESP8266 con el IDE de Arduino
Programación del ESP8266 con el IDE de ArduinoProgramación del ESP8266 con el IDE de Arduino
Programación del ESP8266 con el IDE de Arduino
 
Microcontroladores
MicrocontroladoresMicrocontroladores
Microcontroladores
 
Fundamentos de los Microcontroladores
Fundamentos de los MicrocontroladoresFundamentos de los Microcontroladores
Fundamentos de los Microcontroladores
 
Manual basico de practicas con Arduino uno
Manual basico de practicas con Arduino unoManual basico de practicas con Arduino uno
Manual basico de practicas con Arduino uno
 
Instrumentos de medicion
Instrumentos de medicionInstrumentos de medicion
Instrumentos de medicion
 
informe circuitos aritmeticos.pdf
informe circuitos aritmeticos.pdfinforme circuitos aritmeticos.pdf
informe circuitos aritmeticos.pdf
 
Proyecto amplificador de audio de 2 w con transistores
Proyecto   amplificador de audio de 2 w con transistoresProyecto   amplificador de audio de 2 w con transistores
Proyecto amplificador de audio de 2 w con transistores
 
DISEÑO Y ELECTRÓNICA ANALÓGICA - CONFIGURACIONES DEL OP AMP LM741
DISEÑO Y ELECTRÓNICA ANALÓGICA - CONFIGURACIONES DEL OP AMP LM741DISEÑO Y ELECTRÓNICA ANALÓGICA - CONFIGURACIONES DEL OP AMP LM741
DISEÑO Y ELECTRÓNICA ANALÓGICA - CONFIGURACIONES DEL OP AMP LM741
 
Titistores
TitistoresTitistores
Titistores
 
Transistor BJT
Transistor BJTTransistor BJT
Transistor BJT
 
Manual de practicas de Electrónica de potencia
Manual de practicas de Electrónica de potencia Manual de practicas de Electrónica de potencia
Manual de practicas de Electrónica de potencia
 
Simulador de un semaforo
Simulador de un semaforoSimulador de un semaforo
Simulador de un semaforo
 
Sensores de final de carrera
Sensores de final de carreraSensores de final de carrera
Sensores de final de carrera
 
Sensores de presion
Sensores de presionSensores de presion
Sensores de presion
 
Tema #3. Sensores de Reactancia Variable y Electromagnéticos
Tema #3.  Sensores de Reactancia Variable y ElectromagnéticosTema #3.  Sensores de Reactancia Variable y Electromagnéticos
Tema #3. Sensores de Reactancia Variable y Electromagnéticos
 
PLC: manual de practicas de laboratorio de controladores lógicos programables
PLC: manual de practicas de laboratorio de controladores lógicos programables PLC: manual de practicas de laboratorio de controladores lógicos programables
PLC: manual de practicas de laboratorio de controladores lógicos programables
 
Carrito seguidor de línea final
Carrito seguidor de línea finalCarrito seguidor de línea final
Carrito seguidor de línea final
 

Similaire à Manual Arduino (Revisión)

Códigos de colores protoboard
Códigos de colores protoboardCódigos de colores protoboard
Códigos de colores protoboardSharonRodriguez43
 
Laboratorio de encendido de led de arduino
Laboratorio de encendido de led de arduinoLaboratorio de encendido de led de arduino
Laboratorio de encendido de led de arduinoEduardo Alvarez
 
Trabajo de la electricidad y la electrónica.pdf
Trabajo de la electricidad y la electrónica.pdfTrabajo de la electricidad y la electrónica.pdf
Trabajo de la electricidad y la electrónica.pdfLuisSerna43
 
Trabajo de la electricidad y la electrónica.pdf
Trabajo de la electricidad y la electrónica.pdfTrabajo de la electricidad y la electrónica.pdf
Trabajo de la electricidad y la electrónica.pdfJoseAgr
 
Códigos de colores protoboard
Códigos de colores protoboardCódigos de colores protoboard
Códigos de colores protoboardSara Moreno Peña
 
tecnologia (3).pdf
tecnologia (3).pdftecnologia (3).pdf
tecnologia (3).pdfssuser3256e9
 
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-1.pdf
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-1.pdfTRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-1.pdf
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-1.pdfcamilaviafara3
 
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-2.pdf
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-2.pdfTRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-2.pdf
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-2.pdfjuanmanuellopeztarap
 
La electricidad y la electrónica.pdf
La electricidad y la electrónica.pdfLa electricidad y la electrónica.pdf
La electricidad y la electrónica.pdfAndersonGomez38
 

Similaire à Manual Arduino (Revisión) (18)

Códigos de colores protoboard
Códigos de colores protoboardCódigos de colores protoboard
Códigos de colores protoboard
 
ELECTRONICA BASICA.pptx
ELECTRONICA BASICA.pptxELECTRONICA BASICA.pptx
ELECTRONICA BASICA.pptx
 
ELECTRONICA BASICA.pptx
ELECTRONICA BASICA.pptxELECTRONICA BASICA.pptx
ELECTRONICA BASICA.pptx
 
Laboratorio de encendido de led de arduino
Laboratorio de encendido de led de arduinoLaboratorio de encendido de led de arduino
Laboratorio de encendido de led de arduino
 
Trabajo de la electricidad y la electrónica.pdf
Trabajo de la electricidad y la electrónica.pdfTrabajo de la electricidad y la electrónica.pdf
Trabajo de la electricidad y la electrónica.pdf
 
Trabajo de la electricidad y la electrónica.pdf
Trabajo de la electricidad y la electrónica.pdfTrabajo de la electricidad y la electrónica.pdf
Trabajo de la electricidad y la electrónica.pdf
 
Códigos de colores protoboard
Códigos de colores protoboardCódigos de colores protoboard
Códigos de colores protoboard
 
tecnologia.pdf
tecnologia.pdftecnologia.pdf
tecnologia.pdf
 
Tecnologia
Tecnologia Tecnologia
Tecnologia
 
tecnologia.pdf
tecnologia.pdftecnologia.pdf
tecnologia.pdf
 
tecnologia (3).pdf
tecnologia (3).pdftecnologia (3).pdf
tecnologia (3).pdf
 
tecnologia.pdf
tecnologia.pdftecnologia.pdf
tecnologia.pdf
 
tecnologia.pdf
tecnologia.pdftecnologia.pdf
tecnologia.pdf
 
tecnologia.pdf
tecnologia.pdftecnologia.pdf
tecnologia.pdf
 
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-1.pdf
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-1.pdfTRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-1.pdf
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-1.pdf
 
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-2.pdf
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-2.pdfTRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-2.pdf
TRABAJO SOBRE LA ELECTRICIDAD Y LA ELECTRÓNICA-2.pdf
 
La electricidad y la electrónica.pdf
La electricidad y la electrónica.pdfLa electricidad y la electrónica.pdf
La electricidad y la electrónica.pdf
 
tecnologia.pdf
tecnologia.pdftecnologia.pdf
tecnologia.pdf
 

Plus de Mario José Platero Villatoro

Plus de Mario José Platero Villatoro (20)

Leyes de Kirchhoff
Leyes de KirchhoffLeyes de Kirchhoff
Leyes de Kirchhoff
 
Física - Introducción a movimiento
Física - Introducción a movimientoFísica - Introducción a movimiento
Física - Introducción a movimiento
 
Leyes de Kirchhoff de voltaje y corriente
Leyes de Kirchhoff de voltaje y corrienteLeyes de Kirchhoff de voltaje y corriente
Leyes de Kirchhoff de voltaje y corriente
 
Análisis de nodos
Análisis de nodosAnálisis de nodos
Análisis de nodos
 
Capacitores e Inductores en DC
Capacitores e Inductores en DCCapacitores e Inductores en DC
Capacitores e Inductores en DC
 
Guía de Capacitancia
Guía de CapacitanciaGuía de Capacitancia
Guía de Capacitancia
 
Física II - Movimiento Armónico Simple
Física II - Movimiento Armónico SimpleFísica II - Movimiento Armónico Simple
Física II - Movimiento Armónico Simple
 
App inventor y Arduino
App inventor y ArduinoApp inventor y Arduino
App inventor y Arduino
 
Resistencia equivalente para circuito mixtos.
Resistencia equivalente para circuito mixtos.Resistencia equivalente para circuito mixtos.
Resistencia equivalente para circuito mixtos.
 
Redes de dos puertos
Redes de dos puertosRedes de dos puertos
Redes de dos puertos
 
Resistencia equivalente
Resistencia equivalenteResistencia equivalente
Resistencia equivalente
 
Elaboración de esquemas.
Elaboración de esquemas.Elaboración de esquemas.
Elaboración de esquemas.
 
Subrayado y anotaciones marginales.
Subrayado y anotaciones marginales.Subrayado y anotaciones marginales.
Subrayado y anotaciones marginales.
 
Electroestatica
ElectroestaticaElectroestatica
Electroestatica
 
Arduino Análogo
Arduino AnálogoArduino Análogo
Arduino Análogo
 
Arduino - Ejercicios Básicos
Arduino - Ejercicios BásicosArduino - Ejercicios Básicos
Arduino - Ejercicios Básicos
 
Arduino y Simulador SimulIDE
Arduino y Simulador SimulIDEArduino y Simulador SimulIDE
Arduino y Simulador SimulIDE
 
Presentación de Diodos
Presentación de DiodosPresentación de Diodos
Presentación de Diodos
 
Material teórico sobre Diodos.
Material teórico sobre Diodos.Material teórico sobre Diodos.
Material teórico sobre Diodos.
 
Trabajo y energía.
Trabajo y energía.Trabajo y energía.
Trabajo y energía.
 

Dernier

clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinosDayanaCarolinaAP
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMONICADELROCIOMUNZON1
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOFritz Rebaza Latoche
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingKevinCabrera96
 
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptx
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptxCONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptx
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptxBrayanJavierCalle2
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfalexquispenieto2
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfbcondort
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrialGibranDiaz7
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023RonaldoPaucarMontes
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOLUISDAVIDVIZARRETARA
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfXimenaFallaLecca1
 
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASDOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASPersonalJesusGranPod
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfKEVINYOICIAQUINOSORI
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfs7yl3dr4g0n01
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptCRISTOFERSERGIOCANAL
 

Dernier (20)

VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdfVALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
 
clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinos
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptx
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards Deming
 
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptx
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptxCONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptx
CONCEPTOS EN HIDROGEOLOGIA-diapositivas varias.pptx
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdf
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrial
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
 
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASDOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdf
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdf
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
 

Manual Arduino (Revisión)

  • 1. Participante: . Facilitador: Ing. Mario Platero INSAFORP INTRODUCCIÓN A LA PLATAFORMA ARDUINO.
  • 2. INTRODUCCIÓN. El siguiente manual ha sido desarrollado para desarrollar los conocimientos básicos de Arduino. El material presenta ejercicios a desarrollar y retos a seguir para lograr identificar el funcionamiento de la plataforma. El contenido del material también presenta una documentación técnica, que necesita un poco más de tiempo para su compresión, que ayuda a visualizar los alcances que se podrían obtener al seguir estudiando más a fondo la plataforma Arduino, esto sería una introducción a cursos posteriores. OBJETIVOS DEL MÓDULO Al finalizar el módulo, las personas participantes serán capaces de: • Identificar los tipos de señales básicas en electrónica de baja potencia. • Identificar los elementos básicos que se encuentran en cualquier tarjeta electrónica. • Identificar los controles y herramientas del entorno de programación. • Utilizar sintaxis de programación de Arduino. • Efectuar lectura y escritura en pines digitales y análogos. • Aplicar procedimientos y funciones de Arduino. • Implementar pulsadores, teclados, motores DC y servo motores. • Efectuar lectura de sensores. • Implementar pantallas LCD. • Interactuar entre dos Arduino. • Interactuar entre Arduino y computadora • Efectuar lectura y control de sensores y actuadores. CONTENIDOS DEL MÓDULO. No Contenido Tiempo No Contenido Tiempo 1 Generalidades de electrónica. 3 horas 6 Pulsadores y teclados. 2 horas 2 Entorno de programación. 1 hora 7 Motores. 2 horas 3 Sintaxis de programación. 6 horas 8 Lectura de sensores. 3 horas 4 Utilización de pines. 3 horas 9 Pantalla LCD 4 horas 5 Funciones y procedimientos en Arduino. 2 horas 10 Protocolos de comunicación 4 horas
  • 3. 1 GENERALIDADES DE ELECTRÓNICA. Muchas veces se comete el error de querer utilizar Arduino sin ninguna base de electrónica, se cree que con la compra de los elementos el sistema ya está armado y funcionando, pero no es así, es necesaria tener una base de electrónica y una base de programación. 1.1 ¿POR QUÉ ELECTRÓNICA? En todo el mundo, muchas personas han iniciado con diferentes proyectos basados en Arduino. Arduino ayudó a que las personas se fueran familiarizando de una manera sencilla con los términos de mecánica, electrónica y programación; esto quiere decir, que muchas personas con un conocimiento básico de estos temas lograron hacer proyectos reales que benefician a la sociedad. Iniciaremos nuestro curso con una introducción a la electrónica básica, logrando identificar los componentes básicos que lleva un circuito, las señales eléctricas presentes en ese tipo de dispositivos, los conceptos que ayudarán a analizarlo y realizar algunas mediciones para comprobar los resultados. 1.2 CONCEPTOS BÁSICOS. En electricidad como en electrónica hay tres conceptos básicos que debemos de conocer: Voltaje, Corriente y Resistencia. Estos parámetros eléctricos los hemos utilizado en nuestra casa, el voltaje del televisor, la resistencia de la cocina eléctrica, la corriente del aparato de sonido. Estos parámetros se relacionan fácilmente por la Ley de Ohm. Donde V es de voltaje, I es de corriente y R de resistencia. Esta relación se puede observar mejor en la siguiente figura. 1.2.1 Medición de parámetros eléctricos por multímetro o tester. Comenzaremos por conocer uno de los instrumentos más utilizados como multímetro (o tester en inglés que significa probador). Este aparato nos ayuda a realizar las siguientes mediciones: • Medir resistencias, las cuales están integradas, aplicadas en el campo de la robótica y en nuestro mundo actual. • Medir voltaje especialmente el de las baterías, adaptadores o fuentes de voltaje. • Medición de diodos emisores de luz (o los famosos LED), que vemos actualmente. Existen muchas formas y marcas de multímetros en nuestro medio; la ventaja de esto es que todos trabajan de la misma forma, solo varían en las escalas de medición y los niveles máximos soportados.
  • 4. Ejercicio 01 – Reconocimiento del multímetro. Parte I - Completa la siguiente tabla con los parámetros mas importantes mostrados en el multímetro. SÍMBOLO SIGNIFICADO ESCALA MENOR ESCALA MAYOR Ω V V A A Parte II – Identifica las terminales de conexión del multímetro.
  • 5. Las terminales de conexión del multímetro nos indican que se puede medir con cada terminal. La terminal COM es la terminal de color negro y se mantiene común a cada medición; es decir, que no se mueve de lugar para realizar mediciones. Las otras terminales de color rojo tienen identificado que mediciones se pueden realizar con ellas, también tienen identificado los niveles máximos permitidos en medición de voltaje y corriente, si se sobrepasan esos niveles, se puede generar un daño en el equipo y en el peor de los casos, en su persona. Dibuja las terminales de conexión del multímetro, indicado que mediciones se pueden realizar en cada terminal y los niveles máximos de voltaje y corriente soportada por el multímetro. La palabra FUSED en el multímetro, indica que es el valor máximo que posee el fusible de protección. 1.3 RESISTENCIA ELÉCTRICA. Se le denomina resistencia eléctrica, a la oposición al flujo de electrones al moverse a través de un conductor. La unidad de resistencia en el Sistema Internacional es el ohmio, que se representa con la letra griega omega (Ω), en honor al físico alemán Georg Simon Ohm. Símbolo de resistencia Ejemplo de diferentes tipos de resistencia Las resistencias se usan para limitar la corriente en un circuito, se pueden construir con diferentes tipos de material, los más comunes son carbón, grafito o concreto; también, las resistencias poseen diferentes valores óhmicos de medición y varían entre valores muy pequeños (1Ω) hasta valores muy grandes (1,000,000Ω = 1MΩ). Las resistencias es uno de los elementos más comunes en los circuitos electrónicos y se escogen por su valor óhmico y su capacidad de controlar corriente. Diseñar un circuito electrónico puede llegar a ser una tarea muy compleja; pero con Arduino, esta dificultad no presentará mayor problema, porque hay muchas tarjetas electrónicas diseñadas para funcionar con Arduino, que solo es necesario saber cómo funciona y conectarlo para hacerlo funcionar. Lo que, si es necesario con las resistencias, es conocer su valor óhmico, para ello existen dos formas, uno es por medio del código de colores y el otro es medirlo con el óhmetro. SIEMPRE REVISE LAS TERMINALES DE MEDICIÓN Y LOS NIVELES DE TOLERANCIA DE SU EQUIPO DE MEDICIÓN, PARA EVITAR ELEMENTOS DAÑOS O LESIONES.
  • 6. 1.3.1 Código de colores. Este código de colores fue creado los primeros años de la década de 1920 en Estados Unidos. En un principio se optó por pintar con colores el cuerpo, el lado y un punto, de un código de colores representando las cifras del 0 al 9, basado en la escala del arco iris para que fuera más fácil de memorizar, por la ventaja que representaba para los componentes electrónicos el poder pintar su valor sin tener que imprimir ningún texto. Resistencia 1 – 4 badas Resistencia 2 – 5 bandas El valor de una resistencia viene determinado por un código de colores. Vemos en la figura anterior varias resistencias, y como las resistencias vienen con unas franjas o bandas de colores. Estas franjas, mediante un código, determinan el valor de la resistencia. Ejercicio 02 - Medición de resistencias por el código de colores. Para el siguiente ejercicio el facilitador entregará 4 resistencias de diferentes valores a los participantes, el participante llenará la siguiente tabla identificando primero la cantidad de bandas de colores que posee la resistencia, luego cada color de banda para obtener la medición de resistencia. Ítem Banda 1 Banda 2 Banda 3 Multiplicador Banda 4 Tolerancia Valor de resistencia. Color Valor Color Valor Color Valor Color Valor R1 Rojo 2 Amarrillo 4 Café X10 Plata 10% 240±10% Ω R2 R3 R4 R5 Ejercicio 03 - Medición de resistencias por uso de multímetro – óhmetro. 1) Encender el multímetro 2) Colocar las puntas en los bornes de medición como lo indica la figura.
  • 7. 3) Seleccionar la escala del óhmetro en el multímetro, indicará con 1 a la izquierda lo que muestra que está midiendo una resistencia infinita. 4) Colocar las puntas del multímetro en los terminales de la resistencia tratando de no tocar sus extremos con los dedos. La medición realizada estará en ohmios representada por la letra Ω. Ahora realiza la medición con el multímetro de cada resistencia medida en el ejercicio 01. Ítem Valor de resistencia – código de colores Valor de resistencia – código de colores R1 240±10% Ω 235 Ω R2 R3 R4 R5 Contesta las siguientes preguntas. ¿El valor obtenido con el código de colores es igual al valor obtenido con el multímetro? Falso Verdadero Explica con tus propias palabras ¿Cuál es la diferencia entre las dos mediciones? . 1.4 DIODO EMISOR DE LUZ (LED) La palabra LED viene del inglés Light Emitting Diode que enl español es Diodo Emisor de Luz. Los LED son semiconductores que permiten el paso de la corriente en un solo sentido o dirección. En sentido contrario no dejan pasar la corriente. Los LED cuando permiten el paso corriente por él, emite luz; a esto se le conoce como polarización en directa. El caso contrario, se le llama polarización en inversa y no emite luz.
  • 8. Los LED tienen dos terminales, el más largo es el ánodo (A) y el corto es el cátodo (K). Cuando se conecta un LED positivo en el ánodo y negativo en el cátodo, este emite una luz, como se mencionó anteriormente, a esto se le identifica como polarización en directa. Los LED trabajan a tensiones cercana a los 2V (dos voltios). Si queremos conectarlos a otra tensión diferente deberemos conectar una resistencia en serie con él para que parte de la tensión se quede en la resistencia y al LED solo le queden los 2V. Led de Muchos Colores o RGB Los LED RGB son diodos que tienen 3 LED, cada uno con un color diferente. Los colores son los colores primarios el rojo, el verde y el azul. Si controlamos esta mezcla de colores, podemos obtener una gama inmensa de colores en los LEDS. Para controlar los colores solo hace falta hacer pasar más o menos corriente por uno u otro LEDr. Por ejemplo, si solo pasa corriente por el rojo y por el verde el color que obtenemos será el amarillo. LED RGB Ejercicio 04 – comprobación de un Diodo LED 1) Reconocer la polaridad de nuestro led. 2) Seleccionamos la escala correspondiente a la medición de diodos y continuidad. 3) Conectamos terminales en el LED: Rojo en el ánodo o positivo y Negro en el cátodo o negativo. Si está bien conectado el LED se iluminará y el multímetro nos indicará una medición, como se muestra en la figura.
  • 9. A continuación, se le entregarán tres diodos emisores de luz, completa los datos que se te piden en la tabla a continuación. Ítem Color Medición que indica el multímetro. LED 1 LED 2 LED3 1.5 BREADBOARD, PLACA BASE O PROTOBOARD. La Breadboard es usada para conectar circuitos eléctricos y electrónicos básicos, sin necesidad de realizar soldadura, este posee conexiones internas como se muestran en la figura siguiente. Estas conexiones internas se utilizan para logar puntos de conexión entre los diferentes elementos del circuito. Conocer las conexiones internas nos ayudará a realizar circuitos de manera más práctica y sencilla, pero hay que tener un gran cuidado porque una mala conexión puede generar un cortocircuito, dañando el equipo y en el peor de los casos, dañándonos a nosotros mismos. Ejercicio 05 – Comprobación de conexiones internas en La Breadboard. 1) Seleccionamos la escala correspondiente a la medición de diodos y continuidad. 2) Identificar en las figuras del ejercicio 6 (6.A, 6.B y 6.C) los puntos de conexión dentro de la Breadboard. Conteste las siguientes preguntas: Existe continuidad entre los puntos de conexión de la figura 6.A Falso Verdadero Existe continuidad entre los puntos de conexión de la figura 6.B Falso Verdadero Ejercicio 6.A Ejercicio 6.B
  • 10. Existe continuidad entre los puntos de conexión de la figura 6.C Falso Verdadero Ejercicio 6.C 1.6 VOLTAJE El voltaje es la capacidad física que tiene un circuito eléctrico, debido a que impulsa a los electrones a lo extenso de un conductor; esto quiere decir, que el voltio conduce la energía eléctrica con mayor o menor potencia. Existen dos tipos de voltaje. • Voltaje alterno (AC), que es utilizado en las cocinas eléctricas, los motores de la lavadora y refrigeradora, el voltaje alterno es el que llega a nuestra casa y está presente en todos los tomacorrientes instalados. El AC, a diferencia del DC, varía su valor de forma periódica; es decir, que su valor no es constante en el tiempo. Su forma de onda se observa la figura y su símbolo en la tabla. • voltaje directo (DC), que ocupan todos los dispositivos electrónicos como las computadoras, celulares, Arduino, etc. Y mantiene su valor constante, sin variaciones, durante todo el tiempo. Su forma de onda se observa la figura y su símbolo en la tabla. Voltaje Directo Símbolos Voltaje Alterno Símbolo Pilas Toma corriente residenciales e industriales Baterías Fuente o Adaptador
  • 11. Ejercicio 06 – Medición de voltaje con el multímetro – voltímetro. Como ya estudiamos con anterioridad, el multímetro tiene la capacidad de medir magnitudes eléctricas como es el voltaje o la diferencia de potencia; en otras palabras, nos ayudara a medir voltaje, por ejemplo: de las pilas o baterías, cargadores o fuentes de tensión. 1) Encender el multímetro 2) Colocar las puntas en los bornes de medición como lo indica la figura. 3) Identificar qué tipo de voltaje mediremos, para nuestro caso mediremos voltaje directo. (V ) 4) Seleccionar la escala mayor del voltímetro, como lo indica en la figura. 5) Colocar las puntas del multímetro en los extremos de los terminales de la batería, realizamos la medición correspondiente. La punta roja en positivo (+) La punta negra en Negativo (-) La medición realizada estará en voltios representada por la letra V o VDC. Dentro de la placa Arduino identificaremos tres puntos, uno llamado 3.3V, 5V y último GND. • 5V: Punto de 5 Voltios. • 3.3V: Punto de 3.3 Voltios. • GND: Referencia de medición eléctrica. Con el voltímetro se medirá entre los puntos marcados con 5V y GND Medición de 5V de la Placa de Arduino.
  • 12. Con el voltímetro se medirá entre los puntos marcados con 3.3V y GND Medición de 5V de la Placa de Arduino. Identifica dentro de la Placa los espacios marcados con las letras GND y mide continuidad entre esos pines, ¿Existe continuidad entre esos puntos? (SI/NO y Qué significa ese resultado) . RETO 01 - GENERALIDADES DE ELECTRÓNICA Reto 01 - Arma el siguiente circuito utilizando la Placa Arduino. Materiales: Placa de Arduino, Diodo LED, Breadbord, Voltímetro, resistencia 220Ω y cables de conexión.
  • 13. 1.7 RECONOCIENDO LA PLACA ARDUINO 2 ENTORNO DE PROGRAMACIÓN. Arduino es una plataforma de prototipos electrónica de código abierto (open-source) basada en hardware y software flexibles y fáciles de usar. Está pensado para artistas, diseñadores de proyectos y para cualquiera interesado en crear objetos o entornos interactivos como la robótica, automatización y entornos controlados. Arduino puede “sentir” el entorno mediante la recepción de entradas de diferentes tipos de sensores y puede afectar a su alrededor mediante el control de luces, motores y otros elementos actuadores. 2.1 PROGRAMACIÓN ARDUINO Programar Arduino, consiste en traducir a líneas de código las tareas automatizadas que queremos hacer, haciendo lectura de sensores, creando funciones que permitan programar la interacción con el mundo exterior mediante unos actuadores.
  • 14. Reconociendo nuestro entorno de programación. Al abrir el programa, veremos cómo nos aparece la consola principal del Arduino IDE en la cual podemos ver las siguientes zonas: En la parte de menú tenemos una zona para acceder a funciones como carga de archivos, edición del texto del código, carga de librerías y ejemplos, configuración, herramientas…etc. En los botones de acceso rápido tenemos los siguientes iconos: Verifica si tu programa está bien escrito y puede funcionar. Abre un programa. Carga el programa a la placa de Arduino tras compilarlo. Guarda el programa en el disco duro del ordenador. Crea un programa nuevo. Abre una ventana de comunicación con la placa Arduino, siempre que tengamos el USB conectado.
  • 15. Editor de Texto, en el escribiremos el código del programa que queramos que Arduino ejecute. Área de mensajes y la consola, Arduino nos irá dando información sobre si la consola está compilando, cargando y sobre los fallos o errores que se produzcan tanto en el código como en el propio IDE. 2.2 COMUNICANDO LA PLACA ARDUINO CON EL ENTORNO IDE. El siguiente paso que realizaremos será configurar nuestro Arduino IDE para que se comunique con nuestra placa Arduino. Para ello conectaremos nuestro Arduino mediante el cable USB al PC, después esperar a que el sistema operativo reconozca e instalado la tarjeta automáticamente. Luego, seleccionamos en el menú la pestaña de Herramientas y seleccionamos el tipo de Tarjeta en nuestro caso "Arduino Uno". Después vamos a la opción Puerto Serial y elegimos el COM en el que tenemos conectado nuestro Arduino. Si nos aparecieran varios COM activos, es porque estamos usando otros dispositivos serial o por otro motivo. 2.3 ESTRUCTURA DEL CÓDIGO SKETCH Su primer programa demostrará la habilidad de Arduino para comunicarse con el mundo exterior, usando Arduino IDE. Un programa de Arduino se denomina sketch o proyecto, para que funcione un sketch se debe guardar con un nombre identificativo.
  • 16. 2.3.1 Estructura de un Sketch La estructura básica de un sketch de Arduino es bastante simple y se compone de al menos dos partes. Estas dos partes son obligatorias y encierran bloques que contienen declaraciones o instrucciones. • Void setup() es la parte encargada de recoger la configuración. • Void loop() es la que contiene el programa que se ejecuta cíclicamente (de ahí el término loop – bucle). Ambas funciones son necesarias para que el programa trabaje. Se puede resumir un sketch de Arduino en los siguientes diagramas de flujo. Ejercicio 2.1 – Abrir el ejemplo Blink Se abrirá el ejemplo Blink, con el cuál se verifica si la placa Arduino y el entorno IDE tiene comunicación. Para ello ingresamos en Archivo -> Ejemplos -> 01. Basic -> Blink. Al abrir este ejemplo observaremos el siguiente código. Luego, con la placa Arduino conectado a la computadora, damos clic en verificar y luego damos clic en subir. ¿Qué es lo que observa en la placa Arduino? .
  • 17. Cambia el número 1000 dentro de la función delay por el número 500 y vuelve a subir el sketch a la placa; ahora, cambia el número 500 dentro de la función delay por el número 2000 y vuelve a subir el sketch a la placa. ¿Cuál es la aplicación de la función delay y que significa los números que se le colocan dentro de ella? . 3 SINTAXIS DE PROGRAMACIÓN. Algo que se debe de tener claro al momento de programar, aunque parezca un pequeño detalle, es que el código Arduino es “case-sensitive” esto quiere decir, que Arduino hace una diferencia entre letras mayúsculas y minúsculas; por ejemplo, “A” es diferente de “a” y “Hola” es diferente de “hola”. Así que es de tener mucho cuidado al momento de escribir el código y nunca olvidar colocar el punto y coma (;) al final de una instrucción. 3.1 ESTRUCTURA BASE DE UN CÓDIGO. En donde setup() es la parte encargada de recoger la configuración y loop() es la que contiene el programa que se ejecutará cíclicamente. Ambas funciones son necesarias para que el programa trabaje. La función de configuración (setup) debe contener la declaración de las variables. Es la primera función para ejecutar en el programa y se ejecuta sólo una vez. Se utiliza para configurar o inicializar los pines con pinMode (modo de trabajo de las E/S), configuración de la comunicación serial entre otras. La función bucle (loop) contiene el código que se ejecutara continuamente, es el espacio donde se realizan las lecturas de entradas, activación de salidas, etc. Esta función es el núcleo de todos los programas de Arduino y la que realiza la mayor parte del trabajo. 3.1.1 setup() La función setup() se invoca una sola vez cuando el programa empieza. Se utiliza para inicializar los modos de trabajo de los pins, o el puerto serie. Debe ser incluido en un programa, aunque no haya declaración que ejecutar. Así mismo se puede utilizar para establecer el estado inicial de las salidas de la placa.
  • 18. 3.1.2 loop() Después de llamar a setup(), la función loop() hace precisamente lo que sugiere su nombre, se ejecuta de forma cíclica, lo que posibilita que el programa esté respondiendo continuamente ante los eventos que se produzcan en la placa. 3.1.3 funciones Una función es un bloque de código que tiene un nombre y un conjunto de instrucciones que son ejecutadas cuando se llama a la función. Son funciones setup() y loop() de las que ya se ha hablado. También Delay es una función exclusiva de Arduino. Las funciones también pueden ser definidas por el usuario, se usan para realizar tareas repetitivas y para reducir el tamaño de un programa. Las funciones se declaran asociadas a un tipo de valor “type”. Este valor será el que devolverá la función, por ejemplo 'int' se utilizará cuando la función devuelve un dato numérico de tipo entero. Si la función no devuelve ningún valor entonces se colocará delante la palabra “void”, que significa “función vacía”. Después de declarar el tipo de dato que devuelve la función se debe escribir el nombre de la función y entre paréntesis se escribirán, si es necesario, los parámetros que se deben pasar a la función para que se ejecute. type nombreFunción(parámetros) { instrucción; } Estas funciones, declaradas por el usuario, las estudiaremos más adelante. 3.1.4 Entre llaves { } Las llaves sirven para definir el principio y el final de un bloque de instrucciones. Se utilizan para los bloques de programación setup(), loop(), if, for, while, etc. Una llave de apertura “{“ siempre debe ir seguida de una llave de cierre “}”, si no es así el programa dará errores. Dentro del ejemplo Blink, coloca el cursor de escrita antes o después de una llave y verifica el resultado. El entorno de programación de Arduino incluye una herramienta de gran utilidad para comprobar las llaves , si te colocas sobre una llave abierta, inmediatamente se marca el correspondiente cierre de ese bloque (llave cerrada).
  • 19. 3.1.5 punto y coma ; El punto y coma “;” se utiliza para separar instrucciones en el lenguaje de programación de Arduino. También se utiliza para separar elementos en una instrucción de tipo “bucle for”. Elimina un punto y coma de cualquiera de las líneas anteriores y da clic en verificar código, ¿Qué sucede? Nota: si se olvida de poner fin a una línea con un punto y coma se producirá en un error de compilación. El texto de error puede ser obvio, y se referirá a la falta de una coma, o puede que no. Si se produce un error raro y de difícil detección lo primero que debemos hacer es comprobar que los puntos y comas están colocados al final de las instrucciones. 3.1.6 /*… */ bloque de comentarios Los bloques de comentarios, o comentarios multi-línea son áreas de texto ignorados por el programa que se utilizan para las descripciones del código o comentarios que ayudan a comprender el programa. Comienzan con / * y terminan con * / y pueden abarcar varias líneas. Debido a que los comentarios son ignorados por el compilador y no ocupan espacio en la memoria de Arduino pueden ser utilizados con generosidad. También pueden utilizarse para "comentar" bloques de código con el propósito de anotar informaciones para depuración y hacerlo más comprensible para cualquiera. Nota: Dentro de una misma línea de un bloque de comentarios NO se puede escribir otro bloque de comentarios (usando /*..*/).
  • 20. 3.1.7 // línea de comentarios Una línea de comentario empieza con // y terminan con la siguiente línea de código. Al igual que los comentarios de bloque, los de línea son ignoradas por el programa y no ocupan espacio en la memoria. Una línea de comentario se utiliza a menudo después de una instrucción, para proporcionar más información acerca de lo que hace esta o para recordarla más adelante. 3.2 VARIABLES DE PROGRAMACIÓN. Una variable es un elemento de nuestro código que actúa como una pequeña caja que se identifica por un nombre, elegido por nosotros, que puede guardar un determinado tipo de contenido. El contenido dentro de la caja es lo que se llama el valor de la variable y se podrá modificar en cualquier momento de la ejecución del código, por eso el nombre de “variable”. Una variable es una manera de nombrar y almacenar un valor numérico para su uso posterior por el programa. Como su nombre indica, las variables son números que se pueden cambiar continuamente en contra de lo que ocurre con las constantes cuyo valor nunca cambia. La importancia de las variables es inmensa, ya que todos los códigos hacen uso de ellas para alojar los valores que necesitan para funcionar. Para comprender mejor el uso de variables, digitemos el siguiente código. ¿Qué uso tiene led_pin dentro del código? . ¿Qué uso tiene tiempo dentro del código? . 3.2.1 Declaración de variables Todas las variables tienen que declararse antes de que puedan ser utilizadas. Para declarar una variable se comienza por definir el tipo de variable a utilizar, como int (entero), long (largo), float (coma flotante), etc, asignándoles siempre un nombre, y opcionalmente, un valor inicial. Esto sólo debe hacerse una vez en un programa, pero el valor se puede cambiar en cualquier momento usando aritmética y reasignaciones diversas.
  • 21. El lenguaje de Arduino maneja los siguientes tipos de variables: TIPO DESCRIPCIÓN EJEMPLO void Reservado para la declaración de funciones sin valor de retorno. void setup()void loop() byte Un número entero del 0 al 255 codificado en un octeto o byte (8 bits) byte testVariable = 129; int (Integer=entero). Un número entero entre 32,767 y -32,768 codificado en dos octetos (16 bits) int testVariable = 28927; long Un entero comprendido entre 2,147,483,647 y – 2,147,483,648 y codificado en 32 bits (equivalente a 4 bytes/octetos). Long testVariable = 67876; float Un número real (con decimales) almacenado en 4 bytes (es decir 32 bits) y comprendido entre 3.4028325E+38 y -3.4028325E+38 float testVariable = 3.56; unsigned int Un número natural (entero positivo) almacenado en 16 bits (2 bytes) y comprendido entre 0 y 65,536 unsigned int testVariable = 38948; unsigned long Un número natural (entero positivo) almacenado en 32 bits (4 bytes) y comprendido entre 0 y 4,294,967,296 unsigned long testVariable = 657456; word Lo mismo que unsigned int Word testVariable = 51000; boolean Una variable booleana que puede tener solamente dos valores: true (verdadero) o false boolean testVariable = true; char Un carácter ASCII almacenado en 8 bits (un byte). Esto permite almacenar caracteres como valores numéricos (su código ASCII asociado). El código ASCII para el carácter ‘a’ es 97, si le añadimos 3 obtendríamos el código ASCII del carácter ‘d’ char testVariable = ‘a’; char testvariable = 97; unsigned char Este tipo de datos es idéntico al tipo byteexplicado arriba. Se utiliza para codificar números de 0 hasta 255. Ocupa 1 byte de memoria. unsigned char testUnCh = 36; En este curso usaremos más las variables Int (enteras), float (real) y en poca medida las variables char (Carácter ASCII) Es aconsejable inicializar siempre las variables en el momento de declararlas. Esto puede ayudar a depurar el sketch y al mismo tiempo ahorra código. Asimismo, al declarar una nueva variable intentar anticipar el uso que el sketch va a darle a esa variable y el rango de valores que va a tomar durante la ejecución, ya que si va a sobrepasar el valor 32,000 interesa usar un long en vez de int, o si la variable va a tomar valores decimales, entonces necesitaremos una float). De no hacerlo así podríamos encontrarnos con situaciones inesperadas durante la ejecución del sketch.
  • 22. Existen dos formas de declarar una variable, esta puede ser una variable global, que puede ser declarada al inicio del programa antes de la parte de configuración setup(); o puede ser una variable global, que se declara dentro de las funciones, y, a veces, dentro de un bloque, como para los bucles del tipo if.. for.., etc. En función del lugar de declaración de la variable así se determinará el ámbito de aplicación, o la capacidad de ciertas partes de un programa para hacer uso de ella. Una variable global, como se mencionó anteriormente, es aquella que se declara antes del void setup() y puede ser vista y utilizada por cualquier función y estamento de un programa. Una variable local es aquella que se define dentro de una función o como parte de un bucle. Sólo es visible y sólo puede utilizarse dentro de la función en la que se declaró. 3.2.2 Constantes Algunas variables no cambian de valor durante la ejecución del sketch. En estos casos podemos añadir la palabra reservada ‘const’ al comienzo de la declaración de la variable. Esto se utiliza típicamente para definir números de pin o constantes matemáticas (pi = 3.141592…). Ejemplos: const int PinLed = 12; const float pi = 3.141592; Si tratas de asignar un valor a una constante más adelante en el sketch, el compilador te advertirá de este error mediante un mensaje. El Arduino tiene una serie de palabras reservadas que son constantes: • INPUT/OUTPUT (Entrada/Salida). Los pins digitales pueden ser configurados de ambos modos: como entrada (INPUT) o como salida (OUTPUT) mediante la función pinMode(). • INPUT_PULLUP: Reservado como parámetro de la función pinMode() para el uso de resistencias pull- up integradas en el chip Atmega del Arduino. • LED_BUILTIN: para el uso del Led de serie con el que viene equipado el Arduino (generalmente conectado al pin digital 13). • TRUE/FALSE (Verdadero/Falso). Para el Arduino True (Verdadero) es cualquier valor que no es cero. False (Falso) es el valor cero. • HIGH/LOW (Alto/Bajo). Es el valor lógico en una puerta digital: LOW es el valor cero -0 Voltios- y HIGH es el valor uno -5 Voltios. Ejercicio 07 – Para el siguiente código, escribe un bloque de comentario al inicio del código que explique el funcionamiento; identifica, escribiendo con líneas de comentario, las variables locales y globales que posee el código. Después de verificarlo y ejecutarlo, cambia la línea “int led_pin1 = 13;” por “const int led_pin1 = 13;” y verifica el código. Explica el resultado obtenido.
  • 23. Código Arduino Comentarios 3.3 OPERACIONES ARITMÉTICAS. Los operadores aritméticos que se incluyen en el entorno de programación son: suma, resta, multiplicación y división. Estos devuelven la suma, diferencia, producto o cociente (respectivamente) de dos operandos. y = y + 3; x = x - 7; i = j * 6; r = r / 5; La operación se efectúa teniendo en cuenta el tipo de datos que hemos definido para los operandos (int, long, float, etc..), por lo que, por ejemplo, si definimos 9 y 4 como enteros int, 9 / 4 devuelve de resultado 2 en lugar de 2.25 ya que el 9 y 4 son valores de tipo entero int (enteros) y se ignoran los decimales. Esto también significa que la operación puede sufrir un desbordamiento si el resultado es más grande que lo que puede ser almacenada en el tipo de datos. Recordemos el alcance de los tipos de datos numéricos que ya hemos explicado anteriormente. Si los operandos son de diferentes tipos, para el cálculo se utilizará el tipo más grande de los operandos en juego. Por ejemplo, si uno de los números (operandos) es del tipo float y otra de tipo int, para el cálculo se utilizará el método de float es decir, el método de coma flotante. Elija el tamaño de las variables de tal manera que sea lo suficientemente grande como para que los resultados sean lo precisos que usted desea. Para las operaciones que requieran decimales utilice variables tipo float, pero sea consciente de que las operaciones con este tipo de variables son más lentas a la hora de realizarse el cómputo. Suma en arduino. La suma es probablemente la primera operación aritmética que aprendemos a realizar en la escuela, así que será la primera que abordaremos. Para realizar sumas con un Arduino, en el código utilizamos el operador de la suma (+) o símbolo de adición.
  • 24. A continuación se presenta diferentes ejemplos de cómo realizar una suma en código Arduino. Ejemplo 07 – Código de suma. Digite el siguiente código, observa los resultados y anótalos en el espacio en blanco del lado derecho de la hoja; luego modifica el valor de a = 4.3 y b= 8.5, observa el resultado, ¿Cómo corregirías el código para obtener los resultados esperados? Resta en arduino. Para realizar restas en el entorno de programación de Arduino utilizamos el signo de resta (–) o substracción. Repetir el ejemplo 07, pero aplicado a la resta.
  • 25. Multiplicación en arduino. Las multiplicaciones se realizan haciendo uso del operador de multiplicación (*). Repetir el ejemplo 07, pero aplicado a la multiplicación. No existe la asignación multiplicación **; División en arduino. Para realizar restas en el entorno de programación de Arduino utilizamos el signo de división (/). No existe la asignación división //; En divisiones, existe algo que se conoce como residuo de la división. Si el residuo de una división es cero se dice que la división es exacta, si es algún número mayor a cero, se dice que la división es inexacta. Al realizar una operación de división en el Arduino, este residuo puede guardarse en una variable para después ser utilizado en otro proceso. Para conocer el residuo de una división podemos usar el operador aritmético de modulo (%). El signo de porcentaje es usado como operador aritmético de modulo. Repetir el ejemplo 07, pero aplicado a la división y luego aplicado al módulo. 3.3.1 Asignaciones compuestas Las asignaciones compuestas combinan una operación aritmética con una variable asignada. Estas son comúnmente utilizadas en los bucles tal como se describe más adelante. Estas asignaciones compuestas pueden ser: • x++ // igual que x = x +1, o incremento de x en +1 • x-- // igual que x = x - 1, o decremento de x en -1 • x += y // igual que x = x + y, o incremento de x en +y • x -= y // igual que x = x - y, o decremento de x en -y • x *= y // igual que x = x * y, o multiplica x por y • x /= y // igual que x = x / y, o divide x por y Nota: Por ejemplo, x * = 3 hace que x se convierta en el triple del antiguo valor x y por lo tanto x es reasignada al nuevo valor. 3.3.2 Operadores de comparación Las comparaciones de una variable o constante con otra se utilizan con frecuencia en las estructuras condicionales del tipo if.. para testear si una condición es verdadera. En los ejemplos que siguen en las próximas páginas se verá su utilización práctica usando los siguientes tipo de condicionales: • x == y // x es igual a y • x != y // x no es igual a y • x < y // x es menor que y • x > y // x es mayor que y • x <= y // x es menor o igual que y • x >= y // x es mayor o igual que y 3.3.3 Operadores lógicos Los operadores lógicos son usualmente una forma de comparar dos expresiones y devolver un VERDADERO o FALSO dependiendo del operador. Existen tres operadores lógicos, AND (&&), OR (||) y NOT (!), que a menudo se utilizan en estamentos de tipo if: • Logica AND: (x > 0 && x < 5) // Cierto sólo si las dos expresiones son ciertas. • Logica OR: (x > 0 || y > 0) // Cierto si una cualquiera de las expresiones es cierta • Logica NOT: (!x > 0) // Cierto solo si la expresión es falsa
  • 26. 3.4 CONDICIONES Y BUCLES. Las condiciones y los bucles dentro de la estructura de código nos ayudarán a tomar decisiones lógicas; por ejemplo, si la temperatura obtenida por un sensor ha sobrepasado el límite o realizar una misma actividad hasta que no cambie las condiciones de entrada, etc. para ello existen diferentes instrucciones que se detallan a continuación: • if: es un condición que se utiliza para probar si una determinada situación se ha alcanzado; como por ejemplo, averiguar si un valor está por encima de un cierto número de calibración, y ejecutar una serie de declaraciones (operaciones) que se escriben dentro de llaves, si es verdad. Si es falso (la condición no se cumple) el programa salta y no ejecuta las operaciones que están dentro de las llaves. Lazo if Código If • if… else: viene a ser un estructura que se ejecuta en respuesta a la idea “si esto no se cumple haz esto otro”. Por ejemplo, si se desea probar una entrada digital, y hacer una cosa si la entrada fue alto o hacer otra cosa si la entrada es baja. Lazo if… else Código If… else • if anidado (else): puede ir precedido de otra condición if, de manera que se pueden establecer varias estructuras condicionales de tipo unas dentro de las otras (anidamiento) de forma que sean mutuamente excluyentes pudiéndose ejecutar a la vez. Es incluso posible tener un número ilimitado de estos condicionales. Recuerde sin embargo que sólo un conjunto de declaraciones se llevará a cabo dependiendo de la condición probada.
  • 27. Lazo if anidado (else) Código If anidado (else) • for: La declaración for se usa para repetir un bloque de sentencias encerradas entre llaves un número determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se vuelve a testear la condición. La declaración for tiene tres partes separadas por (;). La inicialización de la variable local se produce una sola vez y la condición se testea cada vez que se termina la ejecución de las instrucciones dentro del bucle. Si la condición sigue cumpliéndose, las instrucciones del bucle se vuelven a ejecutar. Cuando la condición no se cumple, el bucle termina. Cualquiera de los tres elementos de cabecera puede omitirse, aunque el punto y coma es obligatorio. También las declaraciones de inicialización, condición y expresión puede ser cualquier estamento válido en lenguaje C sin relación con las variables declaradas. Lazo for Código for • While: Un bucle del tipo while es un bucle de ejecución continua mientras se cumpla la expresión colocada entre paréntesis en la cabecera del bucle. La variable de prueba tendrá que cambiar para salir del bucle. La situación podrá cambiar a expensas de una expresión dentro el código del bucle o también por el cambio de un valor en una entrada de un sensor.
  • 28. • do..while: El bucle do while funciona de la misma manera que el bucle while, con la salvedad de que la condición se prueba al final del bucle, por lo que el bucle siempre se ejecutará al menos una vez. Lazo while Código while Código do… while Además, existen otras palabras condicionantes y herramientas que nos ayudarán a evitar los bucles infinito o añadir análisis más complejo a nuestro código. Estas se muestran a continuación: • switch..case: Al igual que if, switch..case controla el flujo del programa especificando en el programa que código se debe ejecutar en función de unas variables. En este caso en la instrucción switch se compara el valor de una variable sobre los valores especificados en la instrucción case. • break es la palabra usada para salir del switch. Si no hay break en cada case, se ejecutará la siguiente instrucción case hasta que encuentre un break o alcance el final de la instrucción. • default es la palabra que se usa para ejecutar el bloque en caso que ninguna de las condiciones se cumpla. • goto: transfiere el flujo de programa a un punto del programa que está etiquetado. • break se usa en las instrucciones do, for, while para salir del bucle de una forma diferente a la indicada en el bucle. • continue se usa en las instrucciones do, for, while para saltar el resto de las instrucciones que están entre llaves y se vaya a la siguiente ejecución del bucle comprobando la expresión condicional. Reto 02 – Modifica el código del ejemplo 07 para que realice las diferentes operaciones de suma, por medio de las siguientes condiciones: Parte 1 - utilizando lazo if e if… else: • Condición 01: Realiza la suma 1) • Condición 02: Realiza la suma 2) • Condición 03: Realiza la suma 3) • Condición 04: Realiza la suma 4) • Condición superior a 4: Realiza la suma 5) Parte 2 – Modifica el código anterior para que el programa realice las siguiente operaciones con las variables a y b. • Condición 01: Realiza suma • Condición 02: Realiza multiplicación • Condición 03: Realiza resta • Condición 04: División • Condición 05: (a*b) / (a+b) • Condición superior a 5: una operación sugerida por el programador.
  • 29. RESOLICIÓN DEL RETO 01 – PARTE 1 Parte 3 – Digita los dos siguiente códigos y compara sus resultados. Código 01 Código 02 4 UTILIZACIÓN DE PINES. Arduino está formado, básicamente, por pines de entrada, un microcontrolador en el medio y pines de salida. Los pines de entrada sirven para escuchar y capturar información del exterior, por ejemplo: pulsadores, sensores, etc.; el microcontrolador sirve para procesar el programa cargado y finalmente los pines de salida sirven para enviar información desde la tarjeta Arduino hacia el exterior. Al hablar de Entradas o Salidas, pueden existir tanto análogas o digitales.
  • 30. 4.1 ENTRADAS Y SALIDAS DIGITALES. Por entradas y salidas digitales se entiende que, tanto la información que escucha como las respuestas dadas por el Arduino pueden, tener solamente dos estados: +5V y 0V. OJO: Esto es solamente cuando se habla de señales digitales. En la lógica Arduino las señales digitales pueden manejar los siguientes valores o estados: Estado digital +5V 0V Opción 1 1 0 Opción 2 TRUE FALSE Opción 3 HIGH LOW Las entradas y salidas digitales se configuran, de preferencia, en el Void Setup(); pero, también se pueden declarar en cualquier segmento de código. Los comandos para utilizar las entradas y salidas digitales son los siguientes: • pinMode(pin,modo) configura el pin especificado para comportarse como una entrada, si se escribe (INPUT) o una salida si se escribe (OUTPUT). Pin debe de ser un número entero. • digitalWrite(pin,valor) se utiliza para asignar el valor HIGH (5V) o LOW (0V) a un pin digital. • digitalRead(pin) Lee el valor de un pin digital especificado, HIGH o LOW. Ejercicio XX – Modificar el código1, utilizando en un ejemplo anterior, para que maneje dos salidas digitales y que los dos leds se enciendan y se apaguen al mismo tiempo. El código 2 – utiliza un pulsador para activar y desactivar un LED. El Led encenderá durante el tiempo que este presionado el pulsador. Código 1 Código 2 4.2 ENTRADA Y SALIDA ANÁLOGA Como se trabajó en la sección anterior, las señales digitales solo tienen dos estados opuestos: 1 ó 0. Si presionas un botón, su estado cambiará de uno a otro. Un LED está encendido o apagado. En el mundo real, no es digital. El agua, por ejemplo, no sólo está caliente o fría, puede también estar templada.
  • 31. Para poder medir eso, y otras cosas del mundo real, no podemos usar sólo señales digitales. En lugar de ello, empleamos señales analógicas. En vez de 2 estados opuestos, las señales analógicas tienen niveles continuos. Así que, si tienes un sensor de luz, puedes obtener muchos valores diferentes que expresan cómo de iluminada está la habitación, y no sólo clara/oscura. O en el caso de un termómetro, te dice la temperatura mediante un número, en lugar de fría/caliente. Con Arduino, puedes obtener los valores analógicos de los pines analógicos. Sobre la placa puedes ver un grupo de pines marcados como “analog in”, que llevan el nombre de A0 a A5. Cuando se les aplica tensión, ellos reportan valores de 0 a 1023; de este modo, cuando no hay voltaje en un Pin, la lectura es 0. Si le aplicas 5V, la lectura será 1023. Con una entrada de 2.5V, te dará 512. Para leer estos valores desde un Pin analógico tienes que utilizar la función analogRead(), en lugar de digitalRead(). Para seguir explicando las señales analógicas, necesitamos introducir el potenciómetro. Un potenciómetro es un control que funciona mediante el giro de un brazo. Por ejemplo, el regulador de volumen de un estéreo es un potenciómetro. Con dos Pins exteriores al potenciómetro, conectados a GND y 5V respectivamente, puedes utilizar el potenciómetro para controlar la cantidad de tensión que quieres que haya en el Pin central, siempre dentro del rango de 0V a 5V. Ejercicio - Vamos a experimentar un poco usando un potenciómetro para controlar el parpadeo de un LED. Conecta el Pin de salida (2) del potenciómetro al Pin analógico A5; El pin de entrada (3) a 5V del Arduino y GND (1) al GND del Arduino.
  • 32. 5 FUNCIONES Y PROCEDIMIENTOS EN ARDUINO Una función es un conjunto de instrucciones al que se les identifica con un nombre. Usando posteriormente ese nombre, podemos llamar a la función para que ejecute las instrucciones incluidas dentro de ella, simplemente escribiendo su nombre en el lugar deseado de nuestro código. Para crear una función propia, primero debemos declararla. Esto se hace en cualquier lugar fuera de setup() y loop(), antes o después. Una función puede o no retornar valores, y también puede o no recibir parámetros, esto se hace siguiendo la sintaxis marcada por la plantilla siguiente: tipodeRetorno nombredeFuncion (tipodeparam1, tipodeparam2,...) { // Código interno de la función } Donde: • tipodeRetorno: Indica el tipo de valor que la función devolverá al código principal una vez ejecutada. • nombredefuncion: Es el nombre que le damos a la función. • tipodeparam: son las declaraciones de los parámetros de la función, que no son más que variables internas, cuya existencia solo perdura mientras el código de esta se esté ejecutando. Ejercicio – Digita el siguiente código y arma el circuito utilizando las resistencias de 330Ω y los Leds.
  • 33. Ahora realiza las siguientes modificaciones al código. Código 01 Código 02 Ejercicio 03 – Crea dos funciones más con diferentes tipos de secuencias de encendido y apagado de los Leds. Reto 03 – Crea una función para controlar tres luces de un semáforo, el tiempo de encendido y apagado de las luces será controlado por un potenciómetro. 6 PULSADORES Y TECLADOS. Un teclado matricial es un dispositivo que agrupa varios pulsadores y permite controlarlos empleando un número de conductores inferior al que necesitaríamos al usarlos de forma individual. Podemos emplear estos teclados como un controlador para un autómata o un procesador como Arduino. Estos dispositivos agrupan los pulsadores en filas y columnas formando una matriz, disposición que da lugar a su nombre. Es frecuente una disposición rectangular pura de NxM columnas, aunque otras disposiciones son igualmente posibles. Los teclados matriciales son frecuentes en electrónica e informática. En el campo de la electrónica casera y Arduino, se venden múltiples modelos de teclados matriciales en distintos soportes (rígidos o flexibles) y con distinto número de teclas, siendo habituales configuraciones de 3×3, 3×4, y 4×4.
  • 34. Podemos emplear teclados matriciales en nuestros proyectos de electrónica y robótica, por ejemplo, para cambiar el modo de funcionamiento de un montaje, para solicitar un password, como teclas de dirección para controlar un brazo robótico o un vehículo, o proporcionar instrucciones a un robot. 6.1 FUNCIONAMIENTO DEL TECLADO MATRICIAL. Como hemos dicho, un teclado matricial agrupa los pulsadores en filas y columnas formando una matriz, lo que permite emplear un número menor de conductores para determinar las pulsaciones de las teclas. La imagen muestra, a modo de ejemplo, una disposición rectangular de 4×4, aunque el funcionamiento es análogo en otras disposiciones. Al detectar la pulsación en la columna X y la fila Y, sabremos que se ha pulsado la tecla (X,Y). Internamente la disposición de los pulsadores es la siguiente, que es muy similar a la disposición que vimos al tratar sobre displays LED matriciales. El esquema de conexión es sencillo. Simplemente conectamos todos los pines a entradas digitales de Arduino. Por ejemplo, en el ejemplo de un teclado de 4×4 el esquema quedaría de la siguiente forma.
  • 35. Digita el siguiente código y arma el circuito mostrado anteriormente. 7 MOTORES Arduino, como se mencionó con anterioridad, permite controlar diferentes tipos de elementos, entre ellos los motores, pero existen diferentes tipos de motores, por ejemplo, los motores DC, los motores paso a paso y los servomotores. Dentro de este curso trabajaremos con motores DC y Servomotores. 7.1 MOTOR DC Un motor de corriente continua (DC) convierte la energía eléctrica en mecánica. Se compone de dos partes: el estator y el rotor.
  • 36. El estator es la parte mecánica del motor donde están los polos del imán. El rotor es la parte móvil del motor con devanado y un núcleo, al que llega la corriente a través de las escobillas. Cuando la corriente eléctrica circula por el devanado del rotor, se crea un campo electromagnético. Este interactúa con el campo magnético del imán del estator. Esto deriva en un rechazo entre los polos del imán del estator y del rotor creando un par de fuerza donde el rotor gira en un sentido de forma permanente. Si queremos cambiar el sentido de giro del rotor, tenemos que cambiar el sentido de la corriente que le proporcionamos al rotor; basta con invertir la polaridad de la pila o batería. Simulador de motor DC: http://www.walter-fendt.de/html5/phes/electricmotor_es.htm 7.2 CONTROLADOR DE MOTORES L298N El módulo controlador de motores L298N H-bridge nos permite controlar la velocidad y la dirección de dos motores de corriente continua o un motor paso a paso de una forma muy sencilla, gracias a los 2 los dos puentes H que posee. Básicamente, un puente-H es un componente formado por 4 transistores que nos permite invertir el sentido de la corriente, y de esta forma podemos invertir el sentido de giro del motor. El rango de tensiones en el que trabaja este módulo va desde 3V hasta 35V, y una intensidad de hasta 2A. A la hora de alimentarlo hay que tener en cuenta que la electrónica del módulo consume unos 3V, así que los motores reciben 3V menos que la tensión con la que alimentemos el módulo. Además, el L298N incluye un regulador de tensión que nos permite obtener del módulo una tensión de 5V, perfecta para alimentar nuestro Arduino. Eso sí, este regulador sólo funciona si alimentamos el módulo con una tensión máxima de 12V. La entrada de tensión Vin admite tensiones entre 3V y 35V, y justo a su derecha en la imagen tenemos el pin que debemos conectar a GND y a GND de Arduino.
  • 37. La tercera conexión de ese grupo V lógico puede funcionar de dos maneras: • Si el jumper del regulador está cerrado activaremos el regulador de tensión del L298N, y en V lógico tendremos una salida de 5V, que podremos usar para lo que queramos, por ejemplo, para alimentar una placa Arduino – consumo máximo 5A. • Si el quitamos el jumper desactivaremos el regulador, necesitaremos alimentar la parte lógica del módulo, así que tendremos que meter una tensión de 5V por la conexión V lógico para que el módulo funcione. ¡Cuidado! Si introducimos corriente por V lógico con el jumper de regulación puesto podríamos dañar el módulo. Además, el regulador sólo funciona con tensiones hasta 12V en Vin, por encima de este valor tendremos que quitar el jumper y alimentar la parte lógica del módulo desde otra fuente. El resto de las conexiones se usan de una u otra forma dependiendo si vamos a manejar dos motores de continua o un motor paso a paso. En esta sesión nos vamos a centrar en el control de motores DC. Las salidas para los motores A y B nos darán la energía para mover los motores. Tomar en cuenta la polaridad al conectarlos, para que cuando más tarde hagamos que se muevan adelante, funcionen como deberían. Si no fuera así, no tendríamos más que invertir las conexiones. Los pines IN1 e IN2 nos sirven para controlar el sentido de giro del motor A, y los pines IN3 e IN4 el del motor B. Funcionan de forma que, si IN1 está a HIGH e IN2 a LOW, el motor A gira en un sentido, y si está IN1 a LOW e IN2 a HIGH lo hace en el otro. Y lo mismo con los pines IN3 e IN4 y el motor B. Para controlar la velocidad de giro de los motores tenemos que quitar los jumpers y usar los pines ENA y ENB. Los conectaremos a dos salidas PWM de Arduino de forma que le enviemos un valor entre 0 y 255 que controle la velocidad de giro. Si tenemos los jumpers colocados, los motores girarán a la siempre a la misma velocidad. 7.2.1 Control de giro para motor DC int IN3 = 5; int IN4 = 4; void setup() { pinMode (IN4, OUTPUT); pinMode (IN3, OUTPUT); } void loop() { digitalWrite (IN4, HIGH); digitalWrite (IN3, LOW); delay(4000); digitalWrite (IN4, LOW); delay(500); digitalWrite (IN3, HIGH); delay(4000); digitalWrite (IN3, LOW); delay(5000); }
  • 38. 7.2.2 Control de giro y velocidad de un motor DC int IN3 = 5; int IN4 = 4; int ENB = 3; void setup() { pinMode (ENB, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); } void loop() { digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); analogWrite(ENB,55); delay(2000); analogWrite(ENB,105); delay(2000); analogWrite(ENB,255); delay(2000); analogWrite(ENB,0); delay(5000); } Reto: Modificar el código para que el motor gire en sentido contrario con diferentes velocidades. 7.3 SERVOMOTOR. un servomotor o servo. Es un motor eléctrico, pero con dos características especiales. Por un lado, nos permite mantener una posición que indiquemos, siempre que esté dentro del rango de operación del propio dispositivo. Por otro lado, nos permite controlar la velocidad de giro, podemos hacer que antes de que se mueva a la siguiente posición espere un tiempo. Hay varios modelos de servomotor con Arduino todos tienen un funcionamiento muy parecido y la programación puede variar muy poco. Hay detalles a tomar en cuenta con este dispositivo, lo primero, el ángulo de giro, en este caso nos permite hacer un barrido entre -90º y 90º. Lo que viene a ser un ángulo de giro de 180º. Aunque el servo puede moverse con una resolución de más de 1 grado, este es el máximo de resolución que vamos a conseguir debido a la limitación de la señal PWM que es capaz de generar Arduino UNO.
  • 39. CÓDIGO 1 CÓDIGO 2 #include <Servo.h> Servo servoMotor; void setup() { // Iniciamos el monitor serie para mostrar el resultado Serial.begin(9600); // Iniciamos el servo para que empiece a trabajar con el pin 9 servoMotor.attach(9); } void loop() { // Desplazamos a la posición 0º servoMotor.write(0); // Esperamos 1 segundo delay(1000); // Desplazamos a la posición 90º servoMotor.write(45); // Esperamos 1 segundo delay(1000); // Desplazamos a la posición 180º servoMotor.write(90); // Esperamos 1 segundo delay(1000); } #include <Servo.h> Servo servoMotor; void setup() { // Iniciamos el monitor serie para mostrar el resultado Serial.begin(9600); // Iniciamos el servo para que empiece a trabajar con el pin 9 servoMotor.attach(9); // Inicializamos al ángulo 0 el servomotor servoMotor.write(0); } void loop() { // Vamos a tener dos bucles uno para mover en sentido positivo y otro en sentido negativo // Para el sentido positivo for (int i = 0; i <= 90; i++) { // Desplazamos al ángulo correspondiente servoMotor.write(i); // Hacemos una pausa delay(40); } // Para el sentido negativo for (int i = 90; i > 0; i--) { // Desplazamos al ángulo correspondiente servoMotor.write(i); // Hacemos una pausa delay(40); } } De la librería Servo.h hemos declarado un objeto o variable servoMotor y hacemos uso de dos métodos. Por un lado, el attach nos permite indicar en que pin tenemos conectado nuestro servo, y por otro lado el write, donde indicamos en qué ángulo queremos posicionar nuestro servomotor.
  • 40. 8 LECTURA DE SENSORES Arduino puede leer una gran cantidad de sensores. Los sensores se encargan de leer variables físicas y las convierte en señales eléctricas adecuadas para ser leídas por la placa Arduino. Ejemplo de sensores son de temperatura, humedad, luminosidad, aceleración, color, movimiento, proximidad, etc. 8.1 LECTOR DE TEMPERATURA Y HUMEDAD DHT11 Una de las ventajas que nos ofrece el DHT11, además de medir la temperatura y la humedad, es que es digital. A diferencia de sensores como el LM35, este sensor utiliza un pin digital para enviarnos la información, por lo tanto, estaremos más protegidos frente al ruido eléctrico. El DHT11 presume de ser un sensor con una alta fiabilidad y estabilidad debido a su señal digital calibrada. GND: conexión con tierra DATA: transmisión de datos VCC: alimentación MODELO DHT11 Alimentación de 3,5 V a 5 V Consumo 2,5 mA Señal de salida Digital TEMPERATURA Rango de 0ºC a 50ºC Precisión a 25ºC ± 2ºC Resolución 1ºC (8-bit) HUMEDAD Rango de 20% RH a 90% RH Precisión entre 0ºC y 50ºC ± 5% RH Resolución 1% RH No tenemos que confundirnos entre analógico y digital. Aunque lo conectemos a un pin digital, se trata de un dispositivo analógico. Dentro del propio dispositivo se hace la conversión entre analógico y digital. Por lo tanto, partimos de una señal analógica que luego es convertida en formato digital y se enviará al microcontrolador. La trama de datos es de 40 bits correspondiente a la información de humedad y temperatura del DHT11. El primer grupo de 8-bit es la parte entera de la humedad y el segundo grupo la parte decimal. Lo mismo ocurre con el tercer y cuarto grupo, la parte entera de la temperatura y la parte decimal. Por último, los bits de paridad para confirmar que no hay datos corruptos.
  • 41. Estos bits de paridad lo único que hacen es asegurarnos de que la información es correcta, sumando los 4 primero grupos de 8-bit. Esta suma debe ser igual a los bits de paridad. Si nos centramos en la imagen anterior y sumamos los bits, comprobamos que todo está correcto. 0011 0101 + 0000 0000 + 0001 1000 + 0000 0000 = 0100 1101 Este modelo de DHT11 dispone de 3 pines, la toma de tierra GND, para los datos DATA y para la alimentación VCC (de 3,5V a 5V). En la siguiente imagen puedes ver el esquema de conexión con Arduino. EJEMPLO DE CÓDIGO.
  • 42. 8.2 SENSOR DE LUZ CON LDR. La Fotorresistencia LDR es un componente cuya resistencia varía sensiblemente con la cantidad de luz percibida. La relación entre la intensidad lumínica y el valor de la resistencia no es lineal. Su comportamiento es el siguiente: • Mas luz = menor resistencia eléctrica • Menos luz = mayor resistencia eléctrica Para obtener un rango de voltaje análogo es necesario utilizar el divisor de voltaje, esto se hace mediante un par de resistencias en serie, es posible repartir la tensión suministrada por la fuente entre las terminales de estas, en nuestro caso, el divisor se utiliza con el LDR para obtener un voltaje variable de acuerdo a la cantidad de luz percibida. Y utilizaremos la conversión análoga a digital de los pines análogos del Arduino. Las características de la placa LDR son las siguientes: • Puede detectar brillo ambiental e intensidad de luz • Sensibilidad ajustable (preset) • Conexión de 4 cables. • Tensión de alimentación 3.3V-5V • Tipos de salida de datos: o Analógica o Digital (0 and 1)
  • 43. CÓDIGO EJEMPLO, ENCENDER TRES LEDS POR MEDIO DE CONTROL DE LUZ. // Pin donde se conectan los leds int pinLed1 = 2; int pinLed2 = 3; int pinLed3 = 4; // Pin analogico de entrada para el LDR int pinLDR = 0; // Variable donde se almacena el valor del LDR int valorLDR = 0; void setup() { // Configuramos como salidas los pines donde se conectan los led pinMode(pinLed1, OUTPUT); pinMode(pinLed2, OUTPUT); pinMode(pinLed3, OUTPUT); // Configurar el puerto serial Serial.begin(9600); } void loop() { // Apagar todos los leds siempre que se inicia el ciclo digitalWrite(pinLed1, LOW); digitalWrite(pinLed2, LOW); digitalWrite(pinLed3, LOW); // Guardamos el valor leido del ADC en una variable // El valor leido por el ADC (voltaje) aumenta de manera directamente proporcional // con respecto a la luz percibida por el LDR valorLDR= analogRead(pinLDR); // Devolver el valor leido a nuestro monitor serial en el IDE de Arduino Serial.println(valorLDR); // Encender los leds apropiados de acuerdo al valor de ADC if(valorLDR > 256) { digitalWrite(pinLed1, HIGH); } if(valorLDR > 512){ digitalWrite(pinLed2, HIGH); } if(valorLDR > 768){ digitalWrite(pinLed3, HIGH); } // Esperar unos milisegundos antes de actualizar delay(200); } Reto – Modificar la intensidad de luz de un LED, cuando la iluminación sea alta el LED este apagado, cuando la iluminación sea mínima el LED este encendido.
  • 44. 9 PANTALLA LCD LCD es el acrónimo de Liquid Crystal Display (en español Pantalla de Cristal Líquido). No podemos considerar que se trate de una tecnología novedosa. El LCD lleva con nosotros mucho tiempo, solo tenemos que echar la mirada hacia atrás y recordar esos relojes Casio o las calculadoras que llevamos a clase de matemáticas. Estamos acostumbrados a que la materia pueda estar en estado sólido, líquido o gaseoso, los llamados estados de la materia. Pero ya en el siglo XIX se descubrió que había más estados en los que podía encontrarse la materia. El cristal líquido se encuentra en algún lugar entre el sólido y líquido. Hay una amplia gama de pantallas LCDs que podemos utilizar con Arduino. Aparte de las funcionalidades extra que nos puedan dar cada una de ellas, las podemos diferenciar por el número de filas y columnas, su tamaño. Por ejemplo, una pantalla LCD de 16×1 tendrá una fila de 16 caracteres, es decir, solo podremos mostrar 16 caracteres simultáneamente, al igual que un LCD de 20×4 tendrá 4 filas de 20 caracteres cada una, la pantalla que nosotros utilizaremos será una 16x2. En nuestro caso utilizaremos una pantalla LCD con comunicación I2C, este protocolo de comunicación lo estudiaremos más adelante. 9.1 LIBRERÍA LIQUIDCRYSTAL_I2C PARA ARDUINO Existen diferentes tipos y versiones de librerías para trabajar con el módulo Adaptador LCD a I2C. Las funciones que utiliza esta librería son similares a la librería LiquidCrystal de Arduino, revisaremos las funciones principales: • LiquidCrystal_I2C(lcd_Addr, lcd_cols, lcd_rows): Función constructor, crea un objeto de la clase LiquidCrystal_I2C, con dirección, columnas y filas indicadas. • init(): Inicializa el módulo adaptador LCD a I2C, esta función internamente configura e inicializa el I2C y el LCD. • clear(): Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda (posición (0,0)). • setCursor(col, row): Posiciona el cursor del LCD en la posición indicada por col y row(x,y); es decir, establecer la ubicación en la que se mostrará posteriormente texto escrito para la pantalla LCD. • print(): Escribe un texto o mensaje en el LCD, su uso es similar a un Serial.print
  • 45. • scrollDisplayLeft(): Se desplaza el contenido de la pantalla (texto y el cursor) un espacio hacia la izquierda. • scrollDisplayRight(): Se desplaza el contenido de la pantalla (texto y el cursor) un espacio a la derecha. • backlight(): Enciende la Luz del Fondo del LCD • noBacklight(): Apaga la Luz del Fondo del LCD • createChar (num, datos): Crea un carácter personalizado para su uso en la pantalla LCD. Se admiten hasta ocho caracteres de 5x8 píxeles (numeradas del 0 al 7). Dónde: num es el número de carácter y datos es una matriz que contienen los pixeles del carácter. Se verá un ejemplo de esto más adelante. CÓDIGO 1 CÓDIGO 2 #include <Wire.h> #include <LiquidCrystal_I2C.h> //Crear el objeto lcd dirección 0x3F y 16 columnas x 2 filas LiquidCrystal_I2C lcd(0x3F,16,2); // void setup() { // Inicializar el LCD lcd.init(); //Encender la luz de fondo. lcd.backlight(); // Escribimos el Mensaje en el LCD. lcd.print("Hola Mundo"); } void loop() { // Ubicamos el cursor en la primera posición(columna:0) de la segunda línea(fila:1) lcd.setCursor(0, 1); // Escribimos el número de segundos trascurridos lcd.print(millis()/1000); lcd.print(" Segundos"); delay(100); } #include <Wire.h> #include <LiquidCrystal_I2C.h> //Crear el objeto lcd dirección 0x3F y 16 columnas x 2 filas LiquidCrystal_I2C lcd(0x3F,16,2); // void setup() { // Inicializar el LCD lcd.init(); //Encender la luz de fondo. lcd.backlight(); // Escribimos el Mensaje en el LCD en una posición central. lcd.setCursor(10, 0); lcd.print("WWW.NAYLAMPMECHATRONICS.COM"); lcd.setCursor(4, 1); lcd.print("Tutorial LCD, Test de desplazamiento "); } void loop() { //desplazamos una posición a la izquierda lcd.scrollDisplayLeft(); delay(500); } Reto: Utilizar el sensor de temperatura para imprimir en la pantalla LCD los datos de temperatura y humedad.
  • 46. 10PROTOCOLOS DE COMUNICACIÓN. Un protocolo de comunicaciones es un sistema de reglas que permiten que dos o más entidades de un sistema de comunicación se comuniquen entre ellas para transmitir información por medio de cualquier tipo de variación de una magnitud física. Se trata de las reglas o el estándar que define la sintaxis, semántica y sincronización de la comunicación, así como también los posibles métodos de recuperación de errores. Los protocolos pueden ser implementados por hardware, por software, o por una combinación de ambos. Arduino proporciona diferentes protocolos de comunicación, por ejemplo, comunicación serial, I2C y SPI. 10.1PROTOCOLO SERIAL La comunicación serie es muy importante porque gran parte de los protocolos utilizados actualmente son serie y además muchos dispositivos de comunicación inalámbrica usan la comunicación serie para hablar con Arduino como los módulos bluetooth y los módulos Xbee. También la comunicación serie es la que se usa generalmente para comunicar el Arduino con el Ordenador. Todas las placas Arduino tienen al menos un puerto serie disponible en los pines digitales 0 (RX) y 1 (TX) compartido con el USB. Por lo tanto, no es posible usar estos pines como entradas/salidas digitales. La funciones más importantes que debemos conocer para manejar el puerto serie son: begin(), read(), write(), print() y available()) • begin() – estable la velocidad de la UART en baudios para la transmisión serie, también es posible configurar el número de bits de datos, la paridad y los bits de stop, por defecto es 8 bits de datos, sin paridad y un bit de stop. • read() – lee el primer byte entrante del buffer serie.
  • 47. • write() – escribe datos en binario sobre el puerto serie. El dato es enviado como un byte o serie de bytes. • print() – imprime datos al puerto serie como texto ASCII, también permite imprimir en otros formatos. • available() – da el número de bytes (caracteres) disponibles para leer en el puerto serie, son datos que han llegado y se almacenan en el buffer serie que tiene un tamaño de 64 bytes. 10.2PROTOCOLO I2C Es un protocolo síncrono. I2 C usa solo 2 cables, uno para el reloj (SCL) y otro para el dato (SDA). Esto significa que el maestro y el esclavo envían datos por el mismo cable, el cuál es controlado por el maestro, que crea la señal de reloj. I2 C no utiliza selección de esclavo, sino direccionamiento. Tener dos o más señales a través del mismo cable pueden causar conflicto, y ocurrirían problemas si un dispositivo envía un 1 lógico al mismo tiempo que otro envía un 0. Por tanto, el bus es “cableado” con dos resistencias para poner el bus a nivel alto, y los dispositivos envían niveles bajos. Si quieren enviar un nivel alto simplemente lo comunican al bus. I²C es un bus de comunicaciones en serie. Su nombre viene de Inter-Integrated Circuit (Inter-Circuitos Integrados). La principal característica de I²C es que utiliza dos líneas para transmitir la información: una para los datos y otra para la señal de reloj. También es necesaria una tercera línea, pero esta sólo es la referencia (tierra). Como suelen comunicarse circuitos en una misma placa que comparten una misma masa esta tercera línea no suele ser necesaria. Las líneas se llaman: SDA: datos SCL: reloj GND: tierra Los dispositivos conectados al bus I²C tienen una dirección única para cada uno. También pueden ser maestros o esclavos. El dispositivo maestro inicia la transferencia de datos y además genera la señal de reloj, pero no es necesario que el maestro sea siempre el mismo dispositivo, esta característica se la pueden ir pasando los dispositivos que tengan esa capacidad. Esta característica hace que al bus I²C se le denomine bus multimaestro. Ejemplo de manejo I2 C Se controlarán cuatro luces por medio de dos Arduino, uno usado como maestro y otro como esclavo. Por lo tanto, vamos a tener que cargar dos códigos, un código al que hace de master y otro código al que hace de esclavo (slave). En los dos casos haremos uso de la librería Wire, que nos proporcionará todos los métodos y propiedades para poder utilizar el protocolo I2C de una forma sencilla. Empecemos con el código del master. El objetivo de la aplicación es encender los LEDs conectados a los pines 0, 1, 2, 3, 4 con un retardo de un segundo.
  • 48. Código Maestro Código Esclavo #include <Wire.h> void setup() { // Unimos este dispositivo al bus I2C Wire.begin(); } byte pin[] = {2, 3, 4, 5, 6}; byte estado = 0; void loop() { for (int i = 0; i < 5; i++) { // Comenzamos la transmisión al dispositivo 1 Wire.beginTransmission(1); // Enviamos un byte, será el pin a encender Wire.write(pin[i]); // Enviamos un byte, L pondrá en estado bajo y H en estado alto Wire.write(estado); // Paramos la transmisión Wire.endTransmission(); // Esperamos 1 segundo delay(1000); } // Cambiamos el estado if (estado == 0) { estado = 1; } else { estado = 0; } } #include <Wire.h> void setup() { // Pines en modo salida pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); // Unimos este dispositivo al bus I2C con dirección 1 Wire.begin(1); // Registramos el evento al recibir datos Wire.onReceive(receiveEvent); // Iniciamos el monitor serie para monitorear la comunicación Serial.begin(9600); } void loop() { delay(300); } // Función que se ejecuta siempre que se reciben datos del master // siempre que en el master se ejecute la sentencia endTransmission // recibirá toda la información que hayamos pasado a través de la sentencia Wire.write void receiveEvent(int howMany) { int pinOut = 0; int estado = 0; // Si hay dos bytes disponibles if (Wire.available() == 2) { // Leemos el primero que será el pin pinOut = Wire.read(); Serial.print("LED "); Serial.println(pinOut); } // Si hay un byte disponible if (Wire.available() == 1) { estado = Wire.read(); Serial.print("Estado "); Serial.println(estado); } // Activamos/desactivamos salida digitalWrite(pinOut,estado); } El código del esclavo es diferente. Lo primero que hay que destacar es que tendremos un evento que se disparará cuando reciba un dato del dispositivo master. La primera parte leerá un entero (int) y la segunda parte leerá un carácter (char). Dependiendo de si el carácter es H o L pondrá en estado alto (H) o bajo (L).
  • 49. 10.3COMUNICACIÓN SPI Es otro protocolo serie muy simple. Un maestro envia la señal de reloj, y tras cada pulso de reloj envía un bit al esclavo y recibe un bit de éste. Los nombres de las señales son por tanto SCK para el reloj, MOSI para el Maestro Out Esclavo In, y MISO para Maestro In Esclavo Out. Para controlar más de un esclavo es preciso utilizar SS (selección de esclavo). El bus SPI tiene una arquitectura de tipo maestro-esclavo. El dispositivo maestro (master) puede iniciar la comunicación con uno o varios dispositivos esclavos (slave), y enviar o recibir datos de ellos. Los dispositivos esclavos no pueden iniciar la comunicación, ni intercambiar datos entre ellos directamente. En el bus SPI la comunicación de datos entre maestros y esclavo se realiza en dos líneas independientes, una del maestro a los esclavos, y otra de los esclavos al maestro. Por tanto, la comunicación es Full Duplex, es decir, el maestro puede enviar y recibir datos simultáneamente. Otra característica de SPI es que es bus síncrono. El dispositivo maestro proporciona una señal de reloj, que mantiene a todos los dispositivos sincronizados. Esto reduce la complejidad del sistema frente a los sistemas asíncronos. Por tanto, el bus SPI requiere un mínimo de 3 líneas. • MOSI (Master-out, slave-in) para la comunicación del maestro al esclavo. • MISO (Master-in, slave-out) para comunicación del esclavo al maestro. • SCK (Clock) señal de reloj enviada por el maestro.