Sensor Ultrasonico Con Arduino
Sensor Ultrasonico Con Arduino
TRABAJO PRÁCTICO N 4
Módulo ULTRASONICO
ACTIVIDAD N1
Simular el programa que figura en la teoría con el programa Proteus o algún otro programa que sea portable u
online, realizar captura de pantalla, también puede realizar la prueba en clases y grabar un video.
ACTIVIDAD N2
Realizar un programa que mida la distancia, usando el sensor ultrasónico, y que cumpla con las siguientes
situaciones:
A) si la distancia que mide el sensor es inferior a 20 cm, entonces debe accionarse un servo motor, que se
mueva desde 0 grados hasta 180 grados.
B) si la distancia que mide es inferior o igual a 20 cm, entonces debe encenderse solo una luz verde.
ACTIVIDAD N3
Escribir un programa que muestre la distancia por el monitor serie solo si se ingresa la letra “A”
ACTIVIDAD N4
Escribir, verificar, simular o hacer la conexión de un código donde se enciendan 5 leds a medida que un objeto se
aproxime a un sensor ultrasónico, por ejemplo encender un led N1 cuando un objeto se aproxime a 50cm, encender el
siguiente ledN2 cuando el objeto se acerque a 40 cm, y así hasta llegar a los 10 cm de proximidad.
Actividad 5
Utilizando dos sensores ultrasónicos medir la velocidad de un móvil que transita una distancia de 3 metros,
sabiendo que la formula de la velocidad es V=D/T, donde d es la distancia y t es el tiempo. Como dato tenemos el valor de
la distancia (3metros) y necesitamos conocer el tiempo. Como ayuda podemos accionar un contador cuando el móvil pase
por el primer sensor y que pare de contar el tiempo cuando llegue hasta el último sensor ubicado a 3 metros de distancia,
de esta manera lograremos conseguir el tiempo, luego realizar el calculo de la velocidad y mostrar en pantalla.
Solo deberán presentar la actividad número 5, podrán presentar en formato pdf, o videos (dejando el link del video)
29
Manual Robótica – Arduino
Motores DC
¿Qué es un motor DC?
Un motor eléctrico de Corriente Directa o Continua es básicamente una máquina que se encarga de transformar la
energía eléctrica en movimiento mecánico, gracias a la acción de un campo magnético.
Partes
El estátor que es el que da el soporte mecánico al aparato, además de contener los polos, los cuáles pueden ser
de hilo de cobre sobre un núcleo de hierro o unos imanes permanentes.
El rotor, también formado por hilo de cobre con un núcleo de hierro, normalmente tiene forma cilíndrica. Es
alimentado por corriente directa (DC) mediante las delgas que están en contacto de manera alterna con escobillas fijas.
30
Manual Robótica – Arduino
Un motor DC, o motor de corriente continua, es el tipo más común de motor. Los motores de corriente continua
normalmente tienen sólo dos conductores, uno positivo y otro negativo. Si conectas estos dos cables directamente a una
batería, el motor girará. Si cambias los cables, el motor girará en la dirección opuesta. Incluso a través de la programación
podemos llegar a variar la velocidad del motor dc arduino.
Existen muchos drivers diferentes, pero para poder controlar bien un motor necesitamos dos características
fundamentales:
El circuito básico que permite las dos funciones que dijimos es un puente H. Un motor DC cambia el sentido de giro cuando
invertimos los polos positivo y negativo en sus bornes, y este circuito juega con una serie de interruptores para hacer ese
cambio de polaridad. Podemos construir un puente H con cuatro interruptores, pero lo que usaremos es un circuito
integrado que tiene esos interruptores -o puertas- y las abrirá y cerrará siguiendo instrucciones del Arduino.
Un motor DC está preparado para funcionar a una tensión que nos dará el fabricante. Si le damos una tensión menor
girará más despacio, llegando en el extremo a pararse. Así regulamos la velocidad.
Arduino no puede (con excepciones) regular directamente los voltios que salen por un pin, pero puede hacer una pequeña
'trampa' que se llama PWM y que tiene como resultado una acción parecida a bajar la tensión.
• Arduino puede generar señales PWM y así simular una tensión menor en voltios.
• Esta señal sirve para controlar motores a través de un puente H
• Los motores DC aceptan esta señal 'falsa' y podemos ajustar así la velocidad.
No todos los pines de Arduino pueden hacer esta función PWM. En los diagramas de funcionamiento de cada modelo
puede verse cuáles la tienen y cuáles no.
Drivers más utilizados en proyectos: A continuación vamos a detallar una lista de drivers utilizados muy
comúnmente en proyectos de robótica casera, que conocemos de nuestros propios proyectos:
• L9110
• L298N
• L297D
• TB6612FNG
31
Manual Robótica – Arduino
• DRV8835
Si el motor una vez conectado no gira en el sentido deseado podemos cambiarlo muy fácilmente tanto en el
hardware (intercambiando los cables del motor o del driver) como en el software (cambiando los pines en la
programación).
L9110: Este pequeño driver (y su gemelo HG7881) sirve para controlar motores de entre
2.5 y 12 voltios y con un consumo máximo de 800 mA. El integrado sirve para controlar
sólo un motor, pero habitualmente se monta en placas con dos unidades para controlar
dos motores.
La típica placa doble tiene cuatro fichas para atornillar los cables de los motores y seis
pines:
La conexión es la siguiente
L298N: Este driver es bastante mayor, tanto en tamaño como en potencia. Sirve
para controlar motores de entre 6 y 50 voltios y con un consumo máximo de 2 A.
Un mismo integrado sirve para controlar dos motores.
La típica placa tiene seis fichas para atornillar los cables de los motores y la
alimentación (más una salida regulada de 5 v) y seis pines:
• Tres pines de control para el motor A, dos de ellos digitales (IN1, IN2) y uno
PWM (ENA).
• Otro tres con el mismo esquema para el motor B (IN3, IN4, ENB).
32
Manual Robótica – Arduino
El L298N es un controlador (driver) de motores, que permite encender y controlar dos motores de corriente continua
desde Arduino, variando tanto la dirección como la velocidad de giro.
El L298N también puede controlar un único motor de paso a paso aunque, en general, preferiremos usar dispositivos
específicamente diseñados para motores paso a paso. La corriente máxima que el L298N puede suministrar a los
motores es, en teoría, 2A por salida (hasta 3A de pico) y una tensión de alimentación de 3V a 35V.
33
Manual Robótica – Arduino
Trabajo práctico N 3
Motores DC
Punto 1) Realizar la simulación de dos motores comandados por Arduino teniendo en cuenta las
siguientes instrucciones:
Punto 2) Al proyecto anterior agregar leds de diferentes colores indicando cuando avanza y cuando retrocede.
Punto3) Utilizando el código escrito en la actividad anterior (actividad 2), agregar un servo motor de modo que
controle la dirección del tren delantero de un auto. Por ejemplo, si se ingresa a letra “I” (de izquierda) se el servo
motor gira un ángulo significativo a partir de los 90 grados.
Punto 4) Modificar el código escrito en la actividad dos para agregar un sensor ultrasónico de forma tal que
cuando el auto se acerque a un objeto a menos de 60 cm se detenga.
Puto 5) Al código escrito en la actividad 4 agregar una pantalla LCD con I2C, de modo que cada vez que se
ingrese una opción se muestre la acción mediante un cartel en la pantalla, por ejemplo, si se ingresa la letra “a”
se deberá mostrar “nombre del auto” y en la línea de abajo “adelante”
Les comparto una guía de como seria las conexiones del punto numero 5:
34
Manual Robótica – Arduino
Los LCD alfanuméricos son la solución más práctica, para este problema, empezando por su bajo consumo,
diferentes tamaños disponibles, y trabaja con caracteres alfanuméricos, por lo que podemos representar
cualquier texto o variable.
Los LCD alfanuméricos más utilizados en el mercado son el LCD1602 y el LCD204 con tamaños de 16x2 y 20x4
caracteres respectivamente. Entre estos tamaños también hay diferentes modelos los cuales varían en color y
sobretodo en la presencia o no de un Backlight (retro iluminador incorporado)
Para realizar al conexión con el display tener en cuenta las siguientes indicaciones
• VSS GND
• VDD 5V
• VEE Potenciómetro
• RS D8
• RW GND
• EN D9
• D4 D4
• D5 D5
• D6 D6
• D7 D7
• Led+ VCC
35
Manual Robótica – Arduino
• Led- GND
Conexiones entre Arduino y display LCD1602
Para controlar el contraste de los dígitos en el LCD solo necesitamos girar el potenciómetro que se encuentra
en el módulo, hasta quedar conformes con el contraste mostrado.
La luz de fondo se controla principalmente por software desde el Arduino, pero el módulo también permite
desconectar el Led de la luz de fondo removiendo un jumper LED.
36
Manual Robótica – Arduino
Para conectar con el modulo con el Arduino solo utilizamos los pines I2C
del Arduino (SDA y SCL) y alimentación (GND y 5V), los pines I2C varían
de acuerdo al modelo de Arduino con el que trabajemos, en la siguiente
tabla podemos ver cuales son los pines I2C para cada modelo de Arduino.
Existen diferentes tipos y versiones de librerías para trabajar con el módulo Adaptador LCD a I2C, información
más completa pueden encontrar en: [Link] , nosotros usaremos la
librería LiquidCrystal_I2C
Las funciones que utiliza esta librería son similares a la librería LiquidCrystal de Arduino, revisaremos las
funciones principales:
init(): Inicializa el modulo 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.
37
Manual Robótica – Arduino
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.
Mostraremos un texto y un valor numérico en el LCD, para esto cargamos el siguiente sketch:
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x20,16,2);
void setup()
{
[Link]();
[Link]();
[Link]();
[Link](2,0);
[Link]("Hello Hello!");
[Link](2,1);
[Link]("LCD Tutorial");
}
void loop()
{
38
Manual Robótica – Arduino
Después de subir el código al Arduino deberá visualizar “hola mundo” en la pantalla LCD, pruebe cambiando
“hola mundo” por su nombre.
Actividad 1: Simular el código de la teoría, cambiando el nombre del lcd por un nombre que crea conveniente
para identificar la variable objeto, luego cambiar el código para que aparezca su nombre y apellido en la pantalla lcd y
realizar una captura de pantalla, también puede tomar fotos o un video de la actividad hecha en clases, (si decide hacer
un video deberá subirlo a un canal de youtube y compartir el link)
Actividad 2: Mostrar por una pantalla lcd los valores que se midan con un sensor ultrasónico, realizar el código,
verificar que funcione, hacer una captura de pantalla de la simulación o puede tomar fotos y hacer un video de la
practica.
Actividad 3: Utilizando lo realizado en la actividad anterior aumente un servo motor, de modo que si la distancia
mediad es menor a 20cm se debe accionar el servo motor desde 10 a 170 grados, y se debe mostrar en pantalla el
siguiente cartel “peligro”, caso contrario solo debe mostrar la distancia.
Actividad 4: Utilizando una pantalla lcd, diodos led y un sensor ultrasónico, mostrar por pantalla la cantidad de
veces que pasa un objeto frente del sensor ultrasónico (usted decida la distancia a la que se encuentra el sensor), si la
cantidad es mayor a 10 se deben encender los leds.
39
Manual Robótica – Arduino
Entradas Analógicas:
Hasta ahora estuvimos trabajando con las entradas digitales de nuestro Arduino. Logramos usar un servo motor y
encender led´s según una variable de ingreso por el monitor serie. En esta nueva parte vamos a ver las entradas analógicas,
su funcionamiento y características principales.
Las entradas analógicas funcionan de una forma similar a las entradas digitales, por lo que en la práctica el montaje y
código final son muy similares. Por tanto, es de aplicación la mayoría de lo que vimos en esta entrada. Sin embargo en
ciertos aspectos son radicalmente distintos, por lo que para entender correctamente su uso y funcionalidad es necesario
veamos un mínimo de teoría.
¿Qué es un SENSOR?
Un sensor es todo aquello que tiene una propiedad sensible a una magnitud del medio, y al variar esta magnitud también
varia con cierta intensidad la propiedad, es decir, manifiesta la presencia de dicha magnitud, y también su medida.
Un sensor en la industria es un objeto capaz de variar una propiedad ante magnitudes físicas o químicas, llamadas variables
de instrumentación, y transformarlas con un transductor en variables eléctricas. Las variables de instrumentación pueden
ser por ejemplo: intensidad lumínica, temperatura, distancia, aceleración, inclinación, presión, desplazamiento, fuerza,
torsión, humedad, movimiento, pH, etc. Una magnitud eléctrica puede ser una resistencia eléctrica (como en una RTD),
40
Manual Robótica – Arduino
una capacidad eléctrica (como en un sensor de humedad), una tensión eléctrica (como en un termopar), una corriente
eléctrica, etc.
Un sensor o captador no es mas que un dispositivo diseñado para recibir información de una magnitud del exterior y
transformarla en otra magnitud totalmente eléctrica, que seamos capaces de cuantificar y manipular.
Su principio de funcionamiento
El nivel de integración
Por norma general en los autómatas las entradas analógicas son más escasas, más lentas y más caras que las entradas
digitales. En el caso de Arduino uno disponemos de un número variable de entradas analógicas, que en el caso de Arduino
Uno y Mini Pro son 6, y en el Arduino Mega son 16. Este es un número más que respetable de entradas analógicas, que
rivaliza o supera a autómatas tradicionales de coste muy superior.
Como vimos al explicar las entradas digitales, una entrada digital supone un proceso de transformación de una señal en
un valor digital, atribuyendo un valor HIGH a las medidas que superen un valor umbral, y LOW a lo que quedan por debajo.
Por el contrario, una entrada analógica proporciona una medición codificada en forma de un valor digital con un número
N de bits.
Es importante entender que en el mundo real cualquier señal de tensión es siempre analógica. Un valor digital es un
concepto, una abstracción. Sin embargo conviene señalar que la medición que proporciona una entrada analógica también
es un valor digital, por lo que igualmente es una abstracción. Esto nos lleva al concepto de precisión de la medición.
PRECISIÓN DE LA MEDICIÓN
Para entender la precisión de una entrada analógica es necesario entender cómo funciona un conversor analógico digital
(ADC), que es su componente fundamental. Un ADC es un dispositivo que convierte una medición analógica en una
medición digital codificada con un número N de bits.
Existen muchas formas de construir un ADC, pero lo importante es entender que en realidad no medimos el valor analógico
con todos sus decimales, sino que lo “clasificamos” dentro de 2^N niveles, que definen 2^N-1 intervalos. El ancho de este
41
Manual Robótica – Arduino
intervalo medido en mV es la precisión de la señal. Cuanto mayor sea el número de bits, mayor será el número de
intervalos, menor será el ancho del intervalo, y por tanto mejor la precisión de la medición.
En el caso de Arduino Uno, Mini Pro, y Mega, las entradas analógicas disponen de 10 bits de resolución, lo que proporciona
1024 niveles digitales, lo que a 5V supone una precisión de la medición de +-2,44mV. Arduino Due tiene una resolución
de 12bits, 4096 niveles digitales, lo que supone una precisión de 0,61 mV.
PRECISIÓN RELATIVA
Hasta ahora hemos supuesto un autómata alimentado entre 0V y 5V, que mide una señal analógica de tensión entre 0V a
5V. En este caso, con un ADC de 10 bit tenemos una precisión de 4,88mV, lo que supone una precisión relativa respecto a
la señal de entrada de 0,1% (1/1024).
Sin embargo, supongamos que medimos una señal que varía entre 0V y 1V. En este caso, con el mismo ADC de 10 bit
tendríamos la misma precisión absoluta de 4,88mV, pero una menor precisión relativa respecto a la señal, que caería hasta
0,5%.
Es decir, si realizamos una medición a una señal que varía en un límite inferior a Vcc estamos perdiendo precisión relativa.
Esto es la consecuencia de no aprovechar todo el rango de la medición, por lo que en realidad el ADC se comporta como
si tuviera un número inferior de bits.
DEFAULT: Valor por defecto, correspondiente con Vcc (5V o 3.3V, según modelos)
EXTERNAL: Voltaje aplicado de forma externa en el pin Vref (siempre entre 0 y Vcc)
En el caso de usar la referencia de tensión externa (EXTERNAL), si sabemos con total seguridad que una señal no va a
superar de un cierto valor de tensión, por ejemplo 0.7V, podemos proporcionar este valor como referencia a través del
Pin Aref . La medición se realizará tomando esta tensión como referencia en lugar de Vcc, por lo que recuperamos toda la
precisión relativa.
42
Manual Robótica – Arduino
Con esta configuración el pin digital de Arduino recibirá una tensión que varía entre 0 a 3,84V por lo que, como hemos
explicado, estaríamos perdiendo precisión relativa. Una opción sería ajustar las resistencias para que los límites estén lo
más cercanos posible a 0 y 5V, o usar otro divisor de tensión para alimentar el pin Aref.
Los valores de las resistencias a emplear dependen del voltaje que queremos leer, y de la impedancia del sensor. En
general, deben cumplir las siguientes condiciones:
analogRead (A0);
Descripción: Lee el valor del pin analógico especificado. La placa Arduino contiene 6 canales (8 canales en el Mini y Nano,
16 en el Mega), analógicos con convertidor analógico a digital de 10-bit. Esto significa que mapeará tensiones de entrada
entre 0 y 5 voltios en valores enteros entre 0 y 1023.
Esto produce una resolución entre las lecturas de: 5 voltios / 1024 unidades = 0.0049 voltios (4,9 mV) por unidad. El rango
de entrada y la resolución se pueden cambiar con analogReference(). Se tarda unos 100 microsegundos (0.0001 s) para
leer una entrada analógica, por lo que la velocidad de lectura máxima es de alrededor de 10.000 veces por segundo.
43
Manual Robótica – Arduino
Fotoresistor LDR
Un fotoresistor, o LDR es un dispositivo cuya resistencia varía en función de la luz recibida.
Podemos usar esta variación para medir, a través de las entradas analógicas, una estimación del
nivel de luz.
Un fotoresistor está formado por un semiconductor, típicamente sulfuro de cadmio. Al incidir
la luz sobre él algunos de los fotones son absorbidos, provocando que electrones pasen a la banda de conducción y, por
tanto, disminuyendo la resistencia del componente.
“Un fotoresistor disminuye su resistencia a medida que aumenta la luz sobre él.”
La variación de la resistencia es relativamente lenta, de 20 a 100ms en función del modelo. Esta lentitud hace que no sea
posible registrar variaciones rápidas, como las producidas en fuentes de luz artificiales alimentadas por corriente alterna.
Este comportamiento puede ser beneficioso, ya que dota al sensor de una gran estabilidad.
Conexionado con Arduino:
Usaremos el pin A0 de la placa, como vimos en la teoría anterior, es uno de los
pines que se suelen usar para entradas analógicas.
Lo que pretendemos medir es la variación de la luz y la respuesta del foto resistor
mostrando estos datos a través del puerto serie.
El siguiente programa (ejemplo) nos muestra en pantalla los valores que va
tomando el sensor:
int ldr;
void setup ()
{
[Link](9600);
}
void loop()
{
ldr = analogRead (A0); //se asigna a la variable ldr los valores tomados a través del pin A0
delay(1000);
[Link]("LDR");
[Link](ldr); // imprime en pantalla los valores que va tomando el sensor.
}
Potenciómetro:
Un potenciómetro es un resistor con resistencia variable. El potenciómetro permite controlar la
intensidad de corriente fluye por un circuito si se conecta en paralelo, o la diferencia de potencial al
conectarlo en serie. Normalmente, los potenciómetros se utilizan en circuitos de poca corriente. Para
circuitos de corrientes mayores, se utilizan los reóstatos, que pueden disipar más potencia.
Existen varios tipos de potenciómetros pero los más comunes y con los que casi siempre vamos a trabajar son:
Ejemplo: para la conexión del potenciómetro podemos usar cualquier pin de entrada analógica (para el caso del Arduino
uno van desde el pin A0 hasta el pin A5), el potenciómetro posee tres pines, los dos extremos se conectan a masa (gnd) y
44
Manual Robótica – Arduino
otro a 5v, y el pin del medio a la entrada analógica. El siguiente programa leera el valor de la tensión entre 0 y 5 volts y lo
muestra por el monitor serie.
int potenciometro;
void setup ()
{
[Link](9600);
}
void loop()
{
potenciometro = analogRead (A0);
delay(1000);
[Link]("potenciometro");
[Link](potenciometro);
}
También podemos realizar la simulación en proteus, en este caso veremos como funciona el ejemplo del fotoresistor en
dicho simulador.
45
Manual Robótica – Arduino
En la grafica de abajo podemos ver como muestran los resultados dependiendo del valor la incidencia de la luz sobre el
fotoresistor.
Las simulaciones también se pueden realizar en simuladores online como tinkercad entre otros.
TRABAJO PRÁCTICO N7
Entradas Analógicas
Actividad N1
Simular los códigos de la teoría, correspondiente a este tema, en los diferentes programas presentados y hacer
capturas de pantalla.
Actividad N2
Teniendo en cuenta que los valores obtenidos (en el programa que muestra los valores del potenciómetro) van
de 0 a 1023, realizar una regla de tres simple, indicando que valor real seria si tomamos en cuenta que la entrada
(conectada a dicho potenciómetro) es de 5V. Aplicar esto en el programa y mostrar los resultados haciendo capturas de
pantalla. Mostrar el programa escrito.
46
Manual Robótica – Arduino
Actividad N3
Modificar el programa escrito en la actividad número dos, incluyendo un servo motor, teniendo en cuenta las
siguientes situaciones:
B) si el valor tomado es mayor o igual a 3V entonces el servo motor debe posicionarse en 110 grados.
Actividad N4
Realizar un programa en el cual, usando un LDR, y unos diodos led, se encienda una luz al momento en que el ldr
se tape.
Al programa anterior agregar un sevo motor de modo que, cuando el ldr se tape, generando oscuridad en el
mismo, el servo se mueva lentamente hasta encontrar una posición donde el ldr vuelva a recibir luz. (tener en cuenta que
el servo se mueve de 0 a 180 grados)
Finalmente agregar una pantalla lcd con comunicación i2C y mostrar un cartel que indique la falta de luz cuando
el ldr se tape (no reciba la luminosidad suficiente)
La modulación por ancho de pulsos, es una técnica que sirve para controlar circuitos analógicos con sus salidas digitales.
Con esta técnica podemos controlar fácilmente el brillo de los LEDS, la velocidad de un motor por ejemplo.
47
Manual Robótica – Arduino
Los pines digitales Arduino nos dan 5V (cuando están en ALTO) o 0V (cuando están en BAJO) y la salida es una señal de
onda cuadrada. Así que si queremos atenuar un LED, no podemos obtener el voltaje entre 0 y 5V del pin digital pero
podemos cambiar la hora de encendido y apagado de la señal. Si cambiamos el tiempo de encendido y apagado lo
suficientemente rápido, entonces el brillo del led cambiará.
Por lo tanto, con un ciclo de trabajo del 50% y una frecuencia de 1 Hz, el led estará a nivel alto durante medio segundo y
a nivel bajo durante el otro medio segundo. Si aumentamos la frecuencia a 50Hz (50 veces ON y OFF por segundo),
entonces el led se verá iluminado a media luz por el ojo humano.
Arduino y PWM
El IDE de Arduino tiene incorporada una función “analogWrite()” que puede ser usada para generar una señal PWM. La
frecuencia de esta señal generada para la mayoría de los pines será de aproximadamente 490Hz y podemos dar el valor
de 0-255 usando esta función.
48
Manual Robótica – Arduino
“analogWrite()” Función
La función analogWrite() escribe un valor analógico (onda PWM) en un pin. Se puede utilizar para iluminar un LED con
diferentes brillos o para accionar un motor a diferentes velocidades. Después de una llamada de la función analogWrite(),
el pin generará una onda cuadrada constante del ciclo de trabajo especificado hasta la siguiente llamada a analogWrite()
o una llamada a digitalRead() o digitalWrite() en el mismo pin. La frecuencia de la señal PWM en la mayoría de los pines
es de aproximadamente 490 Hz. En las tarjetas Uno y similares, los pines 5 y 6 tienen una frecuencia de aproximadamente
980 Hz. Los pines 3 y 11 del Leonardo también funcionan a 980 Hz.
En la mayoría de las placas Arduino (aquellas con el ATmega168 o ATmega328), esta función funciona en los pines 3, 5, 6,
9, 10 y 11. En el Arduino Mega, funciona en los pines 2 – 13 y 44 – 46. Las placas Arduino más antiguas con un ATmega8
sólo soportan analogWrite() en los pines 9, 10 y 11.
No es necesario llamar a pinMode() para establecer el pin como salida antes de analogWrite().
Ejemplo Práctico
En el siguiente código vamos a probar los tres estados principales de trabajo para la salida PWM. Caso a: cuando el ciclo
de trabajo es 0% entonces el led no lograra encenderse. Caso b: cuando el ciclo de trabajo es del 50% entonces el led
tendrá una luminosidad media. Caso C: cuando el ciclo de trabajo es del 100% el led tendrá todo el brillo.
Código ejemplo:
49
Manual Robótica – Arduino
Conexión con Arduino: En la práctica generalmente, se suele usar una paca de prueba. El esquema anterior
muestra dicha placa. La resistencia de 220 Ohms es para protección del led, este no soporta los 5V de la señal que envía
Arduino, es por eso que se coloca dicha resistencia. La masa, o gnd, se conecta desde la placa, y la alimentación del led
será mediante la señal enviada de PWM.
TRABAJO PRÁCTICO N4
50
Manual Robótica – Arduino
Simular en Proteus, o en algún simulador, el código ejemplo de la teoría correspondiente a este tema.
Realizar capturas de pantalla de cada estado de luminosidad del led. (si tiene los elementos puede hacer un video para
subirlo a la plataforma)
Actividad N2
Realizar un programa que vaya incrementando el brillo del led de 0 a 255 y luego que baje la luminosidad
desde 255 hasta 0, teniendo en cuenta las siguientes condiciones:
A) Cuando el brillo de led sea bajo (usted debe elegir que rango utilizar), deben encenderse tres
leds rojos.
B) Cuando el brillo del led sea alto, deben estar apagados dichos leds.
Actividad N3
Utilizando una entrada analógica para leer los valores de un LDR, realizar un programa que a menor
cantidad de luz recibida por el LDR, incremente la luminosidad del led. Enviar el código compilado y realizar capturas de
pantalla de la simulación, puede hacer un video o hacer un documento (en Word por ejemplo), donde se muestren
capturas, fotos de lo trabajado y el código compilado o verificado, explicando los pasos que usted ha realizado.
Actividad 4
Utilizando un led RGB y 3 potenciómetros diseñar un circuito y un código donde se maneje los colores del
RGB a través de cada uno de los potenciómetros.
Agregar una pantalla LCD, que muestre el valor que mapea cada uno de los potenciómetros.
La actividad que se debe presentar es la actividad numero 3 y 4 ya sea en formato pdf, realizando las capturas tanto
del circuito como también del código trabajado, puede también presentar un video de la simulación.
51
Manual Robótica – Arduino
El Módulo HC-06 viene configurado de fábrica como "Esclavo" (Slave) y no puede ser cambiado a "Maestro"
como si lo permite el módulo HC-05.
1. Modos de trabajo del HC-06: El Módulo Bluetooth HC-06 tiene dos estados de funcionamiento los cuales es
importante conocer:
• Entra a este modo tan pronto alimentamos el modulo, y cuando no se ha establecido una conexión
bluetooth con ningún otro dispositivo..
• EL LED del módulo está parpadeando (frecuencia de parpadeo del LED es de 102ms).
• En este modo es cuando se debe enviar los comandos AT en caso se quiera configurar algún parámetro,
si se envían otros datos diferentes a los comandos AT, el HC-06 los ignorará.
• Entra a este modo cunado se establece una conexión con otro dispositivo bluetooth.
• El LED permanece encendido sin parpadear.
• Todos los datos que se ingresen al HC-06 por el Pin RX se trasmiten por bluetooth al dispositivo
conectado, y los datos recibidos se devuelven por el pin TX. La comunicación es transparente para el
programador.
• En este Modo el HC-06 no puede interpretar los comandos AT
2. Conexión entre la PC y el Módulo HC-06: Entendido lo anterior, veamos las conexiones para configurar el HC-
06. Se puede hacer un programa o "sketch" en Arduino que haga toda la configuración, pero nosotros lo
haremos manualmente desde la PC, esto lo podemos hacer de dos formas:
Ahora es necesario compilar y cargar el siguiente sketch que hemos preparado, que como vemos lee el Monitor
Serial de nuestro IDE y se lo envía serialmente hacia los pines RXD y TXD de nuestro módulo HC-06.
void setup()
{
[Link](9600); // Inicializamos el puerto serie BT que hemos creado
[Link](9600); // Inicializamos el puerto serie
}
void loop()
{
if([Link]()) // Si llega un dato por el puerto BT se envía al
monitor serial
{
[Link]([Link]());
}
En la parte inferior del monitor debemos escoger “No hay fin de línea” y la velocidad “9600 baud” (la velocidad por
defecto de nuestro HC-06, si se lo ha cambiado poner la velocidad correspondiente)
• Enviar: AT
• Recibe: OK (Si recibimos como respuesta un OK entonces podemos continuar, sino verificar las conexiones o los
pasos anteriores.)
Cambiar nombre de nuestro módulo HC-06: Por defecto nuestro módulo bluetooth se llama “HC-06” o “Linvor” esto se
puede cambiar con el siguiente comando AT
Cambiar Código de Vinculación: Por defecto viene con el código de vinculación (Pin) “1234”, para cambiarlo hay que
enviar el siguiente comando AT
Configurar la velocidad de comunicación: La velocidad por defecto es de 9600 baudios, para cambiarlo se hace uso del
siguiente comando AT:
• Enviar: AT+BAUD<Número>
• Respuesta: OK<baudrate>
Donde <Número> equivale a una velocidad de <baudrate> , los valores pueden ser:
Número---baudrate
• 1 ---------1200
• 2 ---------2400
• 3 ---------4800
• 4 ---------9600
• 5 ---------19200
• 6 ---------38400
• 7 ---------57600
• 8 ---------115200
Ejemplo:
Enviar: AT+BAUD3
Respuesta: OK4800
Nota: Después de cambiar la velocidad, para continuar enviando comando AT, hay que hacerlo con la nueva velocidad,
para eso si se está usando un conversor USB serial tan solo hay que cambiar la velocidad en el monitor Serial (parte
inferior); pero si está enviando los comandos AT a través de una Arduino es necesario volver a programar y cargar un
nuevo sketch con la nueva velocidad.
Enviar: AT+VERSION
• Enviar: AT+PN
• Respuesta: OK NONE
• Paridad Impar
• Enviar: AT+PO
• Respuesta: OK ODD
• Paridad Par
• Enviar: AT+PE
• Respuesta: OK EVEN
Existen varios modelos y versiones del módulo Bluetooth HC-05, el que usaremos es el que se muestra en las
siguientes imágenes, que como vemos tiene un pulsador que nos servirá para entrar en Modo AT y así poder
configurar el módulo.
1. Dispositivos Bluetooth:
El módulo Bluetooth HC-05 viene configurado de fábrica como "Esclavo" (slave), pero se puede cambiar para
que trabaje como "maestro" (master), además al igual que el HC-06, se puede cambiar el nombre, código de
vinculación, velocidad y otros parámetros más. Definamos primero que es un dispositivo bluetooth maestro y
dispositivo esclavo:
• Modulo bluetooth hc-05 como esclavo: Cuando está configurado de esta forma, se comporta similar a
un HC-06, espera que un dispositivo bluetooth maestro se conecte a este, generalmente se utiliza
55
Manual Robótica – Arduino
cuando se necesita comunicarse con una PC o Celular, pues estos se comportan como dispositivos
maestros.
• Modulo bluetooth hc-05 como Maestro: En este modo, EL HC-05 es el que inicia la conexión. Un
dispositivo maestro solo se puede conectarse con un dispositivo esclavo. Generalmente se utiliza este
modo para comunicarse entre módulos bluetooth. Pero es necesario antes especificar con que
dispositivo se tiene que comunicar, esto se explicará más adelante
2. Modos de trabajo del HC-05: EL Modulo HC-05 tiene 4 estados los cuales es importante conocer:
• Estado Desconectado: Entra a este estado tan pronto alimentas el modulo, y cuando no se ha
establecido una conexión bluetooth con ningún otro dispositivo. EL LED del módulo en este estado
parpadea rápidamente. En este estado a diferencia del HC-06, el HC-05 no puede interpretar los
comandos AT
• Estado Conectado o de comunicación: Entra a este estado cuando se establece una conexión con otro
dispositivo bluetooth. El LED hace un doble parpadeo. Todos los datos que se ingresen al HC-05 por el
Pin RX se trasmiten por bluetooth al dispositivo conectado, y los datos recibidos se devuelven por el pin
TX. La comunicación es transparente
Modo AT 1
• Para entrar a este estado después de conectar y alimentar el modulo es necesario presionar el botón del
HC-05.
• En este estado, podemos enviar comandos AT, pero a la misma velocidad con el que está configurado.
• EL LED del módulo en este estado parpadea rápidamente igual que en el estado desconectado.
Modo AT 2
• Para entrar a este estado es necesario tener presionado el botón al momento de alimentar el modulo, es
decir el modulo debe encender con el botón presionado, después de haber encendido se puede soltar y
permanecerá en este estado.
• En este estado, para enviar comandos AT es necesario hacerlo a la velocidad de 38400 baudios, esto es
muy útil cuando nos olvidamos la velocidad con la que hemos dejado configurado nuestro modulo.
56
Manual Robótica – Arduino
Ahora es necesario compilar y cargar el siguiente sketch que hemos preparado, que como vemos lee los datos
enviados de la PC a través de nuestro IDE y se lo envía serialmente hacia los pines RXD y TXD de nuestro módulo
HC-05.
#include <SoftwareSerial.h> // Incluimos la librería SoftwareSerial
SoftwareSerial BT(10,11); // Definimos los pines RX y TX del Arduino conectados al
Bluetooth
void setup()
{
[Link](9600); // Inicializamos el puerto serie BT (Para Modo AT 2)
[Link](9600); // Inicializamos el puerto serie
}
void loop()
{
if([Link]()) // Si llega un dato por el puerto BT se envía al monitor serial
{
[Link]([Link]());
}
Configurando nuestro Módulo HC-05: En nuestro ejemplo usaremos un conversor USB serial CP2102 que se ha instalado
como puerto serial COM5, por lo que antes de abrir el Monitor serial, en nuestro IDE Arduino debemos escoger dicho
Puerto.
• Para entrar al modo AT 1, después de alimentar el modulo y haber encendido tan solo basta presionar el botón
que tiene el módulo HC-05, el LED del módulo seguirá parpadeando rápidamente, por lo que para saber si hemos
entrado al Modo AT 1 es necesario enviar comandos AT y ver si responde, estos comandos se verán más
adelante.
57
Manual Robótica – Arduino
• Para entrar al modo AT 2, antes de alimentar o encender el modulo es necesario presionar su botón, mantener
presionado y alimentar el modulo, después que enciende recién podemos soltar el botón. Si el LED Parpadea
lentamente es porque ya está en Modo AT 2.
En esta unidad enviaremos los comandos AT usando el Modo AT 2, pero también es válido si están en el Modo AT 1, con
la diferencia que tendrán que cambiar a la velocidad con la que
tienen configurado su Bluetooth (si es la primera vez que configuran,
la velocidad por defecto es de 9600).
• Enviar: AT
• Recibe: OK (Si recibimos como respuesta un OK entonces podemos continuar, sino verificar las conexiones o los
pasos anteriores.)
Cambiar nombre de nuestro módulo HC-05: Por defecto nuestro bluetooth se llama “HC-05” esto se puede cambiar con
el siguiente comando AT
Cambiar Código de Vinculación: Por defecto viene con el código de vinculación (Pin) “1234”, para cambiarlo hay que
enviar el siguiente comando AT
Configurar la velocidad de comunicación: La velocidad por defecto es de 9600 baudios, con Stop bit =0 (1 bit de
parada), y sin Paridad, para cambiar estos parámetros, se hace uso del siguiente comando AT:
Donde :
• < Baud > equivale a una velocidad, los valores pueden ser: 4800, 9600, 19200, 38400, 57600, 115200, 23400,
460800, 921600 o 1382400.
58
Manual Robótica – Arduino
• < StopBit> es el Bit de parada, puede ser 0 o 1, para 1 bit o 2 bits de parada respectivamente, Para aplicaciones
comunes se trabaja con 1 bit por lo que este parámetro normalmente se lo deja en 0.
• < Parity> Es la paridad, puede ser 0 (Sin Paridad), 1 (Paridad impar) o 2 (Paridad par). Para aplicaciones comunes
no se usa paridad, por lo que se recomienda dejar este parámetro en 0.
Ejemplo:
• Enviar: AT+UART=9600,0,0
• Respuesta: OK (Se puede saber cuál es la configuración actual, para eso hay que enviar el siguiente comando:
AT+UART?)
Configurar el Role: para que trabaje como Maestro o Esclavo, Por defecto nuestro HC-05 viene como esclavo, el
Siguiente comando nos permite cambiar esto:
Donde:<Role>
• 0 -> Esclavo
• 1 -> Maestro
Para saber cuál es la configuración actual, enviar el siguiente comando: AT+ ROLE?
Configurar el modo de conexión (cuando se trabaja como maestro): Esta configuración aplica para cuando el modulo
está trabajando como maestro, el modulo necesita saber si se va a conectar con un dispositivo en particular o con
cualquiera que esté disponible.
• 0 -> Conectarse a un dispositivo con la dirección especificada(Se utiliza otro comando AT para especificar esta
dirección).
• 1 -> conectar el módulo a cualquier dirección disponible(aleatorio).
Enviar el siguiente comando para averiguar el modo actual de conexión: AT+ CMODE?
Especificar la dirección del dispositivo al cual nos vamos a conectar: Esta configuración aplica cunado nuestro modulo
está configurado como maestro, y a la vez el modo de conexión está en 0 (CMODE=0) el cual indica que nos vamos a
conectar al dispositivo esclavo en particular. Para especificar la dirección al cual nos vamos a conectar se usa el siguiente
comando AT
• Enviar: AT+BIND=<Address>
• Respuesta: OK
59
Manual Robótica – Arduino
Donde:
< Address > Es la dirección del dispositivo al cual nos vamos a conectar, la dirección se envía de la siguiente forma:
1234,56,ABCDEF la cual equivale a la dirección 12:34:56:AB:CD:EF
Ejemplo:
• Enviar: AT+BIND=E668,46,9277F2
• Respuesta: OK
Para ver la dirección actual en este parámetro hay que enviar el siguiente comando: AT+ BIND?
• Enviar: AT+VERSION?
• Respuesta: +VERSION<Versión> Resp Ej: +VERSION:2.0-20100601
• Enviar: AT+ADDR?
• Respuesta: +ADDR:<dirección> Resp Ej: +ADDR: 98d3:31:2052e6
Resetear nuestro Modulo, después de hacer esto salimos del MODO AT:
• Enviar: AT+RESET
• Respuesta: OK
• Enviar: AT+ORGL
• Respuesta: OK
*Al hacer esto todos los parámetros del módulo se restablecen, a los valores por defecto de fábrica. En algunas
versiones la velocidad cambia a 38400 baudios y en otros a 9600.
Ahora veremos Dos ejemplos prácticos, con los pasos para configurar nuestro HC-05 como maestro y esclavo:
Configurando nuestro módulo HC-05 como esclavo: Realizaremos un ejemplo para configurar nuestro modulo con las
siguientes características:
• Enviar: AT
• Recibe: OK
- Establecer el Role como Esclavo
• Enviar: AT+ROLE=0
• Respuesta: OK
- Configurar el Nombre del modulo
• Enviar: AT+NAME=Robot
• Respuesta: OK
- Establecer el Pin de vinculación
• Enviar: AT+PSWD="1212"
• Respuesta: OK
- Configura la Velocidad
• Enviar: AT+UART=9600,0,0
• Respuesta: OK
- Verificar los parámetros cambiados
• Enviar:
• AT+ROLE?
• AT+PSWD?
• AT+UART?
• Respuesta:
• +ROLE:0
• OK
• +PSWD:1212
• OK
• +UART:9600,0,0
• OK
- Resetear el modulo
• Enviar: AT+RESET
• Respuesta: OK
Configurando nuestro módulo HC-05 como Maestro: Ahora veremos un ejemplo para configurar nuestro modulo como
maestro, con las siguientes características:
62
Manual Robótica – Arduino
• +UART:57600,0,0
• OK
• +CMOD:0
• OK
• +BIND:98d3:31:203ad0
• OK
- Resetear el modulo
• Enviar: AT+RESET
• Respuesta: OK
Después de haber hecho las configuraciones, nuestro modulo se comporta como un dispositivo maestro, el cual estará
constantemente buscando el dispositivo especificado hasta encontrarlo y conectarse. Para que el Maestro pueda
conectarse con el dispositivo esclavo, ambos deben tener el mismo código de vinculación.
Para encenderlo se debe realizar todas la conexiones menos la alimentación (vcc), paso uno: presionar el botón y
conectar la alimentación (mantener presionado el botón durante 5 segundos)
paso dos: observar que el led parpadea durante un periodo mas largo (aproximadamente dos segundos) sino sucede
esto se debe volver a repetir los pasos. Esto nos indica que se encuentra disponible en comandos at
63
Manual Robótica – Arduino
• AT+ADDR: nos devuelve la dirección, esto es importante porque es la direccion donde debemos direccionar la
información desde el módulo maestro. (se debe copiar y guardar, por ejemplo nos puede figurar
2016:11:296179, para usarla en el módulo maestro se deben reemplazar los dos puntos por comas)
• At+RESET: resetea el módulo y sale de los comandos AT
• AT+ORGL: vuelve el módulo a los valores originales
• AT+BIND: sirve para enlazarlo con una dirección especifica (cuando nos devuelve +BIND:0:0:0, nos esta
indicando que el modulo esta como esclavo, y no esta enlazado con ningún otro modulo en especifico)
• AT+CMODE= " ": esta función nos permite especificar si se va a conectar a cualquier dispositivo o a un
dispositivo en especifico.
64
Manual Robótica – Arduino
Ejercicio 1) Realizar la conexión con el modulo de comunicación bluetooth, y mediante los ejemplos de la teoría, realizar
las siguientes acciones:
Mostrar la dirección
Ejercicio 2) Realizar el enlace de dos modulos bluetooth con dos Arduinos, el programa debe seguir las siguientes
especificaciones: Se debe enviar una señal (puede usar entradas digitales y pulsadores) desde el modulo maestro al
modulo esclavo, el modulo configurado como receptor o esclavo deberá encender un led y mostrar por el monitor serie
un cartel de “información recibida”
Ejercicio 2) Usar el programa escrito en el ejercicio numero 2 para controlar remotamente un servo motor, unos leds
desde la entrada distante usando un modulo ultrasónico:
El Arduino configurado como maestro debe leer los datos de un modulo ultrasónico, si la distancia es mayor a
30cm debe enviar información al modulo configurado como esclavo de modo que éste encienda un led verde
intermitente. Si la lectura del sensor ultrasónico es menor a 30 cm, entonces deberá enviar información de modo que el
modulo Arduino que esta configurado como esclavo mueva un servo motor desde 10 grados hasta 100 grados durante 3
segundos y volver a 10 grados y encender una luz roja durante este tiempo.
65
Manual Robótica – Arduino
El teclado matricial 4x4 está formado por una matriz de pulsadores dispuestos en filas (L1, L2, L3, L4) y
columnas (C1, C2, C3, C4), con la intención de reducir el número de pines necesarios para su conexión.
Las 16 teclas necesitan sólo 8 pines del microcontrolador en lugar de los 16 pines que se requerirían
para la conexión de 16 teclas independientes. Para poder leer que tecla ha sido pulsada se debe de
utilizar una técnica de barrido y no solo leer un pin de microcontrolador.
La conexión del teclado matricial 4x4 con Arduino u otra plataforma de microcontroladores es simple: se
necesitan 8 pines digitales en total. Puede trabajar con microcontroladores de 3.3V o 5V sin problema.
Es necesario colocar resistencias pull-up entre los pines de las columnas y VCC o activar por software
las resistencias Pull-up internas en el Arduino. En cuanto a la programación, la lectura de las teclas se
debe realizar mediante un "barrido" de las filas. Si bien es posible realizar este procedimiento dentro del
loop principal del programa, es una mejor práctica realizar el barrido utilizando interrupciones por TIMER
y asi asegurar la lectura de las teclas en un intervalo conocido y exacto, además de dejar al loop libre
para realizar otras operaciones.
66
Manual Robótica – Arduino
Ventajas y Desventajas
• Desventajas: Una de las desventajas de usar un teclado matricial es que pueden causar
problemas cuando se pulsa más de una tecla simultáneamente. Este es uno de los motivos por
el que los teclados de ordenador usan una disposición no rectangular, agrupando ciertas teclas
en circuitos diferentes (Ctrl, Alt, Shift…)
• Ventajas: Ahorro de Pines de Entrada/Salida: Un teclado matricial 4x4 solo requiere 8 pines del
Arduino (4 para las filas y 4 para las columnas) en comparación con un teclado de tipo "matriz"
que necesitaría un número mucho mayor de pines si se usaran teclas individuales. Esto es muy
útil para proyectos con limitaciones de pines disponibles.
Interfaz Intuitiva y Fácil de Programar: Los teclados matriciales son relativamente fáciles de
integrar y programar con Arduino. Existen bibliotecas como Keypad.h que simplifican el manejo
del teclado, permitiendo leer entradas de manera eficiente y sin complicaciones.
Versatilidad y Compactibilidad: El teclado matricial 4x4 es compacto y puede proporcionar una
buena cantidad de entradas (16 teclas) en un espacio reducido. Esto permite al robot o sistema
ofrecer opciones de entrada al usuario sin requerir un panel grande o complicado.
Aplicaciones:
67
Manual Robótica – Arduino
Conexión y programación.
Primer paso incluir una librería, tenemos que estar atentos porque
seguramente encontramos muchas otras librerías actualizadas, si bien
pueden ser parecidas para programar, pero no siempre trabajan de la
misma manera, es recomendable mirar los ejemplos cada vez que se
instala una nueva.
#include <Keypad.h>
Luego es necesario crear y definir la matriz de teclas, esto nos da una dimensión de cada uno de los
elementos usados, básicamente lo que hacemos en este apartado es crear un mapa de la distribución
del teclado en sí, que valor representa cada botón en el teclado, se podría colocar en una sola línea
char keys[FILAS][COLUMNAS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
En la siguiente línea realizamos la creación del objeto Keypad, en este caso colocamos el nombre de
“tecado”, y se cargan todos los valores definidos anteriormente.
68
Manual Robótica – Arduino
Luego dentro del programa principal podremos obtener el código ingresado por el usuario.
char TECLA;
void setup() {
[Link](9600);
}
void loop() {
TECLA = [Link]();
if (TECLA) {
[Link](TECLA);
}
}
De esta manera estaremos observando por el monitor serie los valores ingresados por el usuario, el
comando [Link]( ); realiza un salto de línea. El esquema queda de la siguiente forma:
#include <Keypad.h>
const byte FILAS = 4;
const byte COLUMNAS = 4;
char keys[FILAS][COLUMNAS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pinesFilas[FILAS] = {9, 8, 7, 6};
byte pinesColumnas[COLUMNAS] = {5, 4, 3, 2};
Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS);
char TECLA;
void setup() {
[Link](9600);
}
void loop() {
TECLA = [Link]();
if (TECLA) {
[Link](TECLA);
}
}
En el siguiente código realizaremos un proyecto que incluye un servo y dos diodos leds este nos permite
ingresar una clave, si el valor es correcto se enciende una luz verde y el servo cambia de posición de lo
contrario el led cambia de color y no cambia de posición el servo motor:
69
Manual Robótica – Arduino
#include <Keypad.h>
#include <Servo.h>
Servo puerta;
int rojo=11;
int verde=12;
const byte FILAS = 4;
const byte COLUMNAS = 4;
char keys[FILAS][COLUMNAS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pinesFilas[FILAS] = {9, 8, 7, 6};
byte pinesColumnas[COLUMNAS] = {5, 4, 3, 2};
Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS);
char TECLA; // Variable para almacenar la tecla presionada
char CLAVE[7]; // Arreglo para almacenar la clave ingresada por el usuario
char CLAVE_MAESTRA[7] = "654321"; // Clave maestra predefinida
byte INDICE = 0; // Índice para el arreglo de la clave
void setup() {
[Link](9600); // Inicializa la comunicación serial
[Link](10);
[Link](90);
pinMode(verde, OUTPUT);
pinMode(rojo, OUTPUT);
}
void loop() {
TECLA = [Link](); // Almacenar la tecla en el arreglo de la clave e incrementar el índice
if (TECLA) {
CLAVE[INDICE] = TECLA;
INDICE++;
[Link](TECLA);
}
// Verificar si se ingresaron 6 teclas y Comprobar si la clave ingresada coincide con la clave maestra predefinida
if (INDICE == 6) {
if (!strcmp(CLAVE, CLAVE_MAESTRA)) {
[Link](" Clave correcta"); // Imprime mensaje de clave correcta
[Link](180);
digitalWrite(verde, HIGH);
digitalWrite(rojo, LOW);
delay(3000);
[Link](90);
digitalWrite(verde, LOW);
} else {
[Link](" Clave incorrecta"); // Imprime mensaje de clave incorrecta
[Link](90);
digitalWrite(verde, LOW);
digitalWrite(rojo, HIGH);
}
INDICE = 0; // Reinicia el índice para ingresar una nueva clave
}
}
70
Manual Robótica – Arduino
Es recomendable usar una placa de pruebas o una bornera para unir la tierra o gnd.
Actividad 1) Simular los dos códigos de la teoría, realizar el esquema de conexión correspondiente.
71
Manual Robótica – Arduino
72