0% encontró este documento útil (0 votos)
5 vistas44 páginas

Sensor Ultrasonico Con Arduino

El documento detalla un manual práctico sobre el uso de Arduino en robótica, enfocándose en la implementación de sensores ultrasónicos y motores DC. Incluye actividades prácticas que requieren la simulación y programación de diferentes funciones, como medir distancias, controlar servomotores y visualizar datos en pantallas LCD. Además, se explican los componentes de los motores DC y su control mediante circuitos integrados, así como las conexiones necesarias para su funcionamiento.

Cargado por

Jose Cazon
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas44 páginas

Sensor Ultrasonico Con Arduino

El documento detalla un manual práctico sobre el uso de Arduino en robótica, enfocándose en la implementación de sensores ultrasónicos y motores DC. Incluye actividades prácticas que requieren la simulación y programación de diferentes funciones, como medir distancias, controlar servomotores y visualizar datos en pantallas LCD. Además, se explican los componentes de los motores DC y su control mediante circuitos integrados, así como las conexiones necesarias para su funcionamiento.

Cargado por

Jose Cazon
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Manual Robótica – 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.

Realizar la captura de pantalla de la simulación y enviar el código compilado.

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

Se divide en dos elementos importantes:

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.

Hay tres tipos diferentes de motores.

• Motor de corriente continua


• Servomotor
• Motor paso a paso

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.

Es muy importante no accionar el motor directamente desde los pines


de la placa Arduino. Las corrientes de inductancia del motor pueden dañar la
placa, por este motivo es que existen diferentes circuitos de control. Estos
últimos varían según la potencia que son capaces de soportar.

Como vemos en la figura de la derecha, el controlador de motores separa


al motor de la placa, principalmente para un mejor funcionamiento y protección
de los dispositivos mas sensibles a grandes corrientes.

Existen muchos drivers diferentes, pero para poder controlar bien un motor necesitamos dos características
fundamentales:

• Que permitan invertir el sentido de giro del motor.


• Que permitan graduar la velocidad de giro del motor.

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:

• Dos de control PWM para el motor A (A-IA, A-IB).


• Dos para el motor B (idem, B-IA, B-IB).

Dos de alimentación desde las pilas o baterías (VCC, GND).

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.

Como comentamos frecuentemente Arduino, y en general todos los


autómatas, no disponen de potencia suficiente para mover actuadores.
De hecho, la función de un procesador no debe ser ejecutar acciones si
no mandar ejecutar acciones a drivers que realicen el "trabajo pesado".

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.

Conexión del doble puente h, L298N:

Un código ejemplo en Arduino seria el siguiente:

Como se observa en el programa se han


implementado funciones para cada movimiento del
motor, las cuales llamamos desde el void loop(),

Inicialmente hacemos girar el motor en sentido


horario, luego en antihorario y después lo detenemos,
esto se repite constantemente, cada estado lo enviamos
por comunicación serial a la PC.

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:

a) Si se ingresa la letra ‘a’ el auto debe avanzar


b) Si se ingresa la letra ‘r’ el auto debe retroceder
c) Si se ingresa la letra ‘s’ el auto debe quedarse quieto.
Si se realiza la simulación en tinkercad puede no usar el controlador doble puente hl294n y conectar
directamente los motores al Arduino. Recuerde usar pines PWM para la conexión de ambos motores.

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

Presentar la actividad numero 5, puede realizar capturas de pantalla tanto de la simulación y


enviar el código todo en un formato pdf, también puede realizar un video con la simulación del
trabajo.

CONECTANDO ARDUINO A UN LCD


En muchos de nuestros proyectos necesitamos visualizar o monitorear parámetros, si bien una solución es los
display de 7 segmentos, pero solo estamos limitados a valores numéricos e incluso si deseamos poner varios
dígitos a nivel de hardware aumenta nuestro diseño electrónico por lo que necesitamos técnicas de
multiplexado.

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

LCD1602 o LCD2004 Arduino Uno, Nano, Mega, etc.

• 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

LCD CON I2C, CONTROLA UN LCD CON SOLO DOS PINES

Hardware del Módulo adaptador LCD a I2C

El Módulo adaptador LCD a I2C que usaremos está basado en


el controlador I2C PCF8574, el cual es un Expansor de Entradas
y Salidas digitales controlado por I2C. Por el diseño del PCB este
módulo se usa especialmente para controlar un LCD
Alfanumérico.

La dirección I2C por defecto del módulo puede ser 0x3F o en


otros casos 0x27. Es muy importante identificar correctamente la
dirección I2C de nuestro modulo, pues de otra forma nuestro
programa no funcionará correctamente. Para identificar la dirección especifica de nuestro módulo podemos
utilizar un pequeño sketch de prueba llamado: I2C Scanner, el cual nos permite identificar la dirección I2C del
dispositivo conectado al Arduino. Si en caso existiera la necesidad de trabajar con más de un LCD podemos
modificar la dirección I2C del modulo adaptador. Para esto es necesario soldar los puentes A0, A1 y A2
presentes en el módulo, estos tres puentes son los bits menos significativos de la dirección I2C del módulo. La
dirección 0x3F en binario sería: 0|0|1|1|1|A2|A1|A0 y la dirección 0x27: 0|0|1|0|0|A2|A1|A0. Por defecto A0, A2,
A1 valen 1 pero si soldamos los puentes, estos se conectan a tierra teniendo un valor 0. Por ejemplo si soldamos
los tres puentes la nueva dirección sería 0|0|1|0|0|0|0|0 (0x20), para un chip que anteriormente era 0x27.

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

Conexiones entre Arduino y Módulo adaptador LCD a I2C

El adaptador LCD a I2C tiene los pines ordenados para conectar


directamente al LCD, esto lo podemos hacer a través de un protoboard o
soldando directamente al LCD.

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.

Adaptador LCD a I2C Arduino Uno, Nano, Mini


GND GND
VCC 5V
SDA A4
SCL A5

La conexión debe realizarse según lo que se muestra en la figura de abajo

Librería LiquidCrystal_I2C para 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:

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 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

print(): Escribe un texto o mensaje en el LCD, su uso es similar a un [Link]

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.

Ejemplo: Un “Hola mundo” con Arduino y LCD

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

Atención: deberá modificar el tipo de display que


aparece en tinkercad por la opción “PCF8574” para
esto tiene que hacer doble clik en el display e ir al menú
“tipo”, una vez cargado e código podrá simular sin
inconvenientes.

Después de subir el código al Arduino deberá visualizar “hola mundo” en la pantalla LCD, pruebe cambiando
“hola mundo” por su nombre.

Trabajo practico numero 6

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.

¿Cómo se clasifican? Los sensores se pueden clasificar según:

Su principio de funcionamiento

El tipo de señal de salida

El rango de valores de salida

El nivel de integración

El tipo de variable medida

¿QUÉ ES UNA ENTRADA ANALÓGICA?


Una señal analógica es una magnitud que puede tomar cualquier valor dentro de un intervalo –Vcc y + Vcc. Por ejemplo,
una señal analógica de tensión entre 0V y 5V podría valer 2,72V, o cualquier otro valor con cualquier número de decimales.
Por contra, recordemos que una señal digital de tensión teórica únicamente podía registrar dos valores (en el ejemplo, 0V
o 5V).

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.

REFERENCIA DE TENSIÓN ANALÓGICA (AREF)


Para resolver esta situación Arduino permite cambiar la tensión tomada como referencia por el conversor analógico
digital. El valor de la referencia se cambia con la función AnalogRef, y los valores posibles son:

DEFAULT: Valor por defecto, correspondiente con Vcc (5V o 3.3V, según modelos)

INTERNAL: Corresponde a 1.1V (en Atmega 168 y 328)

EXTERNAL: Voltaje aplicado de forma externa en el pin Vref (siempre entre 0 y Vcc)

INTERNAL1V1 y INTERNAL2V56, correspondientes a 1.1V y 2.56V (sólo en Mega)

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

CONEXIÓN DE ENTRADAS ANALÓGICAS EN ARDUINO


Supongamos que dispongamos un sensor analógico que proporciona una señal
analógica entre 0V a 5V. El esquema de conexión es similar al que empleamos
para realizar la lectura digital.

LECTURA DE VALORES MAYORES DE 5V


En caso de necesitar leer una entrada de nivel de tensión superior, por ejemplo
de 12V, debemos realizar una adaptación de tensión. La forma mejor de realizar
la adaptación es emplear un simple divisor de tensión.

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:

Deben convertir la señal en un rango inferior pero similar a la tensión de alimentación.


Deben ser muy superiores a la impedancia equivalente del dispositivo a medir.
Deben despreciables respecto a la impedancia de la entrada Arduino.
Deben limitar la corriente que circula por ellas para minimizar pérdidas.
Deben ser capaces de disipar la potencia que van a soportar.

¿Cómo leer una entrada digital?

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:

• Variación lineal: La resistencia es directamente proporcional al ángulo de giro, es lineal.


• Variación logarítmica: La resistencia depende logarítmicamente del ángulo de giro.

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);
}

Podemos simular en diferentes programas por ejemplo en


Ardusim, donde tenemos que elegir el potenciómetro marcado
en la grafica (solo cambia de 0k a 1K= pero podemos ver a través
del monitor serie los valores que van cambiando.

Lo que indica la flecha es donde debemos colocar el pin analógico


elegido.

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:

A) si el valor que muestra es inferior a 3 V entonces el servo debe posicionarse en 20 grados.

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)

Modulación por Ancho de Pulso PWM

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.

¿Qué es la modulación por ancho de pulso?


Es un método usado para generar una señal analógica utilizando una fuente digital. Una señal PWM consta de dos
componentes principales que definen su comportamiento: un ciclo de trabajo y una frecuencia. El ciclo de trabajo describe
la cantidad de tiempo que la señal está en un estado alto (encendido) como un porcentaje del tiempo total que lleva
completar un ciclo.

47
Manual Robótica – Arduino

La frecuencia determina que tan rápido la modulación por ancho


de pulsos completa un ciclo (es decir, 1000Hz seria 1000 Ciclos por
segundo), y por lo tanto, que tan rápido cambia entre los estados
alto y bajo.

Al encender y apagar una señal digital a una velocidad lo


suficientemente rápida, y con un cierto ciclo de trabajo, la salida
parecerá comportarse como una señal de voltaje analógica
constante al proporcionar energía a los dispositivos.

Las señales de modulación por ancho de pulsos se utilizan para una


amplia variedad de aplicaciones de control. Su uso principal es para controlar motores de CC, pero también se usa para
controlas fuentes de iluminación, válvulas, bombas, sistemas hidráulicos y otras partes mecánicas. La frecuencia con la
que se debe configurar la señal PWM dependerá de la aplicación y del tiempo respuesta del sistema que se está
alimentando.

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á.

Antes de seguir adelante, veamos algunos términos asociados con PWM.

TON (On-Time, Tiempo de encendido): Es el momento en que la señal es alta.


TOFF (Off-Time, Hora de apagado): Es el momento en que la señal está baja.
Punto: Es la suma de tiempo de encendido y apagado.
Ciclo de trabajo: Es el porcentaje de tiempo en que la señal estuvo alta durante el período.

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(0) es una señal de ciclo de trabajo del 0%.


• analogWrite(127) es una señal de un ciclo de trabajo del 50%.
• analogWrite(255) es una señal de ciclo de trabajo del 100%.

En Arduino Uno, los pines del PWM son 3, 5, 6, 9, 10 y 11. La


frecuencia de la señal PWM en los pines 5 y 6 será de
aproximadamente 980Hz y en otros pines será de 490Hz. Los pines
del PWM están etiquetados con el signo ~.

“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

Modulación por ancho de pulsos


Actividad N1

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.

Enviar el código compilado y realizar capturas de pantalla de la simulación.

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.

CONFIGURACIÓN DEL MÓDULO BLUETOOTH HC-06 USANDO COMANDOS AT

51
Manual Robótica – Arduino

En este modulo aprenderemos a configurar algunos parámetros del


Módulo Bluetooth HC-06, como: cambiar la velocidad de transmisión, el
nombre y código de vinculación, entre otras cosas. Solo se aplica al
Módulo Bluetooth HC-06, para el HC-05 la configuración es diferente el
cual analizaremos luego.

El Módulo Bluetooth HC-06 permite la configuración de algunos de sus


parámetros de funcionamiento mediante el uso de comando AT. Los
comandos AT son una lista de comandos que inician siempre con las letras AT, estos comandos son enviados por
medio de un puerto Serie por lo que necesitaremos un Arduino o Conversor USB Serial para poder enviar los
comandos desde nuestra PC.

Algunos parámetros que vienen por defecto se muestran a continuación:

• Nombre por defecto: “linvor” o “HC-06”


• Código de emparejamiento por defecto: 1234
• La velocidad por defecto (baud rate): 9600

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:

E1. Modo AT (Desconectado):

• 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á.

E2. Modo Conectado:

• 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:

2.1. Hacer la comunicación entre la PC y el módulo de forma indirecta a través de un Arduino:


52
Manual Robótica – Arduino

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.

#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 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]());
}

if([Link]()) // Si llega un dato por el monitor serial se envía


al puerto BT
{
[Link]([Link]());
}
}

Configurando nuestro Módulo HC-06: En nuestro ejemplo usaremos un


conversor USB serial PL2303 que se ha instalado en nuestra PC como puerto
serial "COM5", por lo que antes de abrir el Monitor serial en el IDE Arduino
debemos escoger dicho puerto. Es bueno recordar que para enviar los
comandos AT, nuestro HC-06 debe estar en Modo AT, esto significa sin
conexión bluetooth con otro dispositivo o verificar que LED del HC-06 esté
parpadeando.

Una vez hecho las configuraciones y conexión correspondientes, abrimos el


Monitor serial del IDE de Arduino, también podemos usar cualquier otro monitor serial como: Termite.

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)

Realizado lo anterior, podemos ahora enviar los comandos AT a nuestro Bluetooth:


53
Manual Robótica – Arduino

Test de comunicación: Lo primero es comprobar si nuestro bluetooth responde a los comandos AT

• 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

• Enviar: AT+NAME<Nombre> Ejm: AT+NAMERobot


• Respuesta: OKsetname (El nombre puede ser de hasta 20 caracteres como máximo)

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

• Enviar: AT+PIN<Pin> Ejm: AT+PIN1465


• Respuesta: OKsetPIN

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.

Otros Comandos AT de utilidad:


54
Manual Robótica – Arduino

Obtener la versión del firmware:

Enviar: AT+VERSION

Respuesta: OK<Versión> Ejm: OKLinvor1.8

Configuración de Paridad (solo configurable para versiones V1.5 o superiores):

Sin Paridad (valor por defecto)

• Enviar: AT+PN
• Respuesta: OK NONE
• Paridad Impar
• Enviar: AT+PO
• Respuesta: OK ODD
• Paridad Par
• Enviar: AT+PE
• Respuesta: OK EVEN

En la siguiente imagen podemos ver la secuencia de datos


recibidos por el monitor serial en el mismo orden en que se
listaron los comandos AT:

CONFIGURACIÓN DEL MÓDULO BLUETOOTH HC-05 USANDO


COMANDOS AT

En este modulo aprenderemos como configurar nuestro módulo


Bluetooth HC-05, explicaremos cómo trabajar como dispositivo maestro
o esclavo, cambiar la velocidad de transmisión, el nombre y código de
vinculación de nuestro HC-05 entre otras cosas.

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

El módulo HC-05 viene por defecto configurado de la siguiente forma:

• Modo o role: Esclavo


• Nombre por defeco: HC-05
• Código de emparejamiento por defecto: 1234
• La velocidad por defecto (baud rate): 9600

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

• EL LED del módulo en este estado parpadea lentamente.

3. Conexión entre la PC con el Módulo HC-05: Entendido lo anterior


vamos realizamos las conexiones para configurar el HC-05. Para
configurar el modulo necesitamos enviar los comandos AT desde una
computadora, esto lo podemos hacer de dos formas:

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]());
}

if([Link]()) // Si llega un dato por el monitor serial se envía al puerto BT


{
[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.

El siguiente paso es entrar al Modo AT 1 o Modo AT 2:

• 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).

Ahora abrimos nuestro Monitor serial del IDE de Arduino, pero


puedes usar cualquier monitor serial.

En la parte inferior debemos escoger “Ambos NL & CR” y la


velocidad “38400 baud” (la velocidad para comunicarse en el MODO
AT 2)

Echo esto Podemos empezar a enviar los comandos AT a nuestro


Bluetooth

Test de comunicación: Lo primero es comprobar si nuestro bluetooth responde a los comandos AT

• 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

• Enviar: AT+NAME=<Nombre> Ejm: AT+NAME=Robot


• Respuesta: OK

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

• Enviar: AT+PSWD=<"Pin"> Ejm: AT+PSWD="2560"


• Respuesta: OK (Se puede saber cuál es el pin actual de nuestro modulo, para eso hay que enviar el siguiente
comando: AT+ PSWD? )

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:

• Enviar: AT+UART=<Baud> ,< StopBit>,< Parity>


• Respuesta: OK

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:

• Enviar: AT+ROLE=<Role> Ejm: AT+ROLE=0


• Respuesta: OK

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.

• Enviar: AT+CMODE=<Mode> Ejm: AT+CMODE=1


• Respuesta: OK

Donde: < Mode >

• 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?

Otros comandos AT de utilidad:

Obtener la versión del firmware:

• Enviar: AT+VERSION?
• Respuesta: +VERSION<Versión> Resp Ej: +VERSION:2.0-20100601

Obtener la dirección de nuestro modulo bluetooth:

• 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

Restablecer valores por defecto.

• 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:

- Modo o role: Esclavo


- Nombre: Robot
- Código de emparejamiento: 1212
- Velocidad o Baud rate: 9600 baudios

A continuación se muestra los pasos para realizar la configuración:

- Entrar en modo AT 1 o Modo AT 2


- Verificar si estamos en modo AT
60
Manual Robótica – Arduino

• 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

En la siguiente imagen podemos ver la secuencia de datos recibidos


por el monitor serial en el mismo orden en que se realizaron los pasos
anteriores. Después de hacer la configuración anterior, podemos usar
el modulo como un dispositivo esclavo, el cual estará siempre en
espera de una conexión por parte de una dispositivo bluetooth
maestro.

Configurando nuestro módulo HC-05 como Maestro: Ahora veremos un ejemplo para configurar nuestro modulo como
maestro, con las siguientes características:

• -Modo o role: Maestro


• -Nombre: Naylamp
• -Código de emparejamiento: 1465 (La misma que el dispositivo a conectarse)
• -Velocidad o Baud rate: 57600 baudios
• -Dirección del dispositivo esclavo con el que se desea conectar: 98:D3:31:20:3A:D0
61
Manual Robótica – Arduino

A continuación, se muestra los pasos para realizar la configuración:

- Entrar en modo AT 1 o Modo AT 2


- Verificar si estamos en modo AT
• Enviar: AT
• Recibe: OK
- Establecer el Role como Maestro
• Enviar: AT+ROLE=1
• Respuesta: OK
- Configurar el Nombre del modulo
• Enviar: AT+NAME=Naylamp
• Respuesta: OK
- Establecer el Pin de vinculación
• Enviar: AT+PSWD="1465"
• Respuesta: OK
- Configura la Velocidad
• Enviar: AT+UART=57600,0,0
• Respuesta: OK
- Configurar el modo de conexión
• Enviar: AT+CMODE=0
• Respuesta: OK
- Especificar la dirección del dispositivo a conectarse
• Enviar: AT+BIND=98D3,31,203AD0
• Respuesta: OK
- Verificar los parámetros cambiados
• Enviar:
• AT+ROLE?
• AT+PSWD?
• AT+UART?
• AT+CMODE?
• AT+BIND?
• Respuesta:
• +ROLE:1
• OK
• +PSWD:1465
• OK

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

En la siguiente imagen podemos ver la secuencia de datos


recibidos por el monitor serial en el mismo orden en que se
realizaron los pasos anteriores.

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.

IMPORTANTE PARA REALIZAR EL TP


Para programar los módulos con comandos at se debe primeramente, subir un sketch vacío al Arduino. Esto nos
permitirá trabajar con dichos comandos libremente, se deben cargar estos programas vacíos tanto en el modulo que
trabajara como maestro como el modulo que trabajara como esclavo.

Modulo Maestro (HC 05):

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

Comandos AT que son de utilidad:

• AT: si nos devuelve OK, entonces estamos trabajando de manera correcta


• AT+NAME: devuelve el nombre
• AT+NAME= "nombre": este comando nos permite cambiar el nombre del modulo (se recomienda colocar
maestro o esclavo según las necesidades de su proyecto)
• AT+PSWD: nos devuelve la clave
• AT+ROLE: esta función nos devuelve la configuración

ROLE=0 configurado como esclavo

ROLE=1 configurado como maestro

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.

CMODE=0 (se conecta a una dirección MAC especifica)

CMODE=1 (se conecta a con cualquier dispositivo)

Para configurar el modulo bluetooth como esclavo:

1. Cambiamos el nombre a esclavo


2. Si tienen un bluetooth hc05 y desean que funcione modo esclavo se debe colocar
3. AT+ROLE=0
4. Leer la dirección "addres" del modulo

Para configurar el modulo bluetooth como maestro:

1. Cambiamos el nombre a maestro


2. Configurar como maestro
AT+ROLE=1
3. Cambiar la clave para que tengan una misma clave ambos módulos
4. Debemos indicar con el comando CMODE que se comunique con un dispositivo en especifico. (AT+CMODE=0)
5. Indicar la dirección del modulo bluetooth esclavo usando el comando BIND (AT+BIND= "DIRECCION USANDO
COMAS EN VEZ DE DOS PUNTOS ")

64
Manual Robótica – Arduino

Trabajo practico N9: Configuración de bluetooht

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:

Cambiar el nombre del modulo

Cambiar la clave del modulo

Mostrar la dirección

Realizar estas acciones para el modulo HC05 y para el HC06

Para el modulo HC05:

Cambiar la configuración de esclavo a maestro.

Realizar capturas de pantalla y enviar los códigos usados.

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

Teclado matricial 4x4 - Tipo membrana

El Teclado matricial de botones plásticos formado por 4 filas y 4


columnas para un total de 16 teclas permite agregar una entrada de
usuario a tus proyectos. El teclado es de tipo membrana, por lo que
entre sus ventajas se encuentra el poco espacio que requiere para ser
instalado. Posee una cubierta adhesiva y un cable flexible de conexión.
Puede ser conectado a cualquier microcontrolador o tarjetas de
desarrollo como 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:

1. Cerradura Electrónica: Utiliza el teclado matricial para ingresar un código de acceso y


desbloquear una cerradura electrónica. El Arduino verifica el código introducido y controla el
mecanismo de apertura (como un servomotor o un relé). Por ejemplo, en seguridad en puertas
o gabinetes.
2. Controlador de Electrodomésticos: Diseña un sistema que controle electrodomésticos (luces,
ventiladores, etc.) a través de un teclado matricial. Cada tecla puede estar programada para
activar o desactivar diferentes dispositivos. Por ejemplo, automatización del hogar.
3. Interfaz de Usuario para Proyectos Educativos: Crea una interfaz de usuario para proyectos
educativos donde el teclado matricial se usa para ingresar datos o seleccionar opciones en una
pantalla LCD o LED. Por ejemplo, una calculadora simple o un generador de números aleatorios.
Por ejemplo en áreas integradas con tecnología se pueden usar herramientas educativas y
demostraciones.
4. Control de Robots: Implementa un sistema de control para un robot usando el teclado matricial
para enviar comandos. Cada tecla puede estar programada para realizar una acción específica
como mover el robot hacia adelante, hacia atrás, girar, etc.
5. Reloj Digital con Alarmas: Desarrolla un reloj digital donde el teclado matricial se usa para ajustar
la hora, configurar alarmas, y seleccionar diferentes modos de visualización. El Arduino procesa
las entradas del teclado para controlar la visualización del reloj en una pantalla LCD. Por ejemplo
en relojes y dispositivos de temporización.

67
Manual Robótica – Arduino

Conexión y programación.

Para la conexión con Arduino y el uso de este teclado es necesario incluir


una librería, y seguir un procedimiento que les comparto abajo. Teniendo
en cuenta el teclado que vamos a usar; la conexión se realiza de la forma
que indica la figura utilizando los pines digitales desde el numero 2 hasta
el numero 9, el teclado no necesita conectarse a GND.

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.

Esta librería trabaja bien con nuestro simulador tinkercad.

#include <Keypad.h>

Necesitaremos crear variables constantes del tipo byte. Nos darán la


dimensión de nuestro teclado, tanto en filas como en columnas.

const byte FILAS = 4;


const byte COLUMNAS = 4;

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 las siguientes líneas definimos los lugares físicos donde estarán


conectadas las filas y las columnas, recordar que las filas se leen
desde arriba hasta abajo y las columnas de izquierda a derecha.

byte pinesFilas[FILAS] = {9, 8, 7, 6};


byte pinesColumnas[COLUMNAS] = {5, 4, 3, 2};

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.

Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS);

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

Las conexiones quedan de la siguiente manera:

Es recomendable usar una placa de pruebas o una bornera para unir la tierra o gnd.

Trabajo Practico N8 - Teclado Matricial

Actividad 1) Simular los dos códigos de la teoría, realizar el esquema de conexión correspondiente.

Actividad 2) Diseñar un proyecto en que intervengan los siguientes procesos:

a) Con un sensor ultrasónico detectar la proximidad a una puerta


b) Una vez que se haya detectado dicho objeto habilitar una clave de ingreso de 4 dígitos.
c) Si la clave es correcta entonces abrir una puerta (utilizando un servo motor) si es incorrecta
la puerta no se debe abrir.
d) Agregar una pantalla LCD que indique lo siguiente: cuando se haya detectado la persona
muestre un cartel de bienvenida, luego solicitar la clave, una vez ingresada la clave si es
correcta muestra un cartel de “Correcta” si la clave es incorrecta muestra un cartel de “vuelva
a ingresar la clave”.

71
Manual Robótica – Arduino

72

También podría gustarte