Guia Roblex

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 36

Robotics Learning

Experience

Kit de desarrollo ROBLEX

Guía Educativa

“Learn Faster. Reach further”


Este libro está diseñado como guía para la enseñanza de programación de microcontroladores
en lenguaje C++ haciendo uso del kit educativo ROBLEX y el IDE de Arduino. A lo largo del
curso, se abordarán los principales conceptos del lenguaje C++ y la programación de módulos
de sensores y actuadores fundamentales para un gran número de proyectos de electrónica,
robótica y internet de las cosas (IoT).

Contenido

1. Kit de desarrollo educativo ROBLEX


2. Configuracion del Software Arduino
3. Introducción al lenguaje de programación C++
4. Uso del módulo Pantalla OLED
5. Entradas y salidas digitales y analógicas
6. Tipos de variables y definiciones
7. Comparadores y condicionales if
8. Sensor de distancia
9. Buzzer.
10. Modulo Puertos digitales
11. Arrays
12. Ciclos while y for
13. Matemáticas y operaciones entre variables
14. Creación de funciones
15. Bluetooth
16. Wi-Fi
17. Otras funciones avanzadas de Arduino

2
1. Kit de desarrollo educativo ROBLEX

El kit de desarrollo educativo ROBLEX es una herramienta diseñada para mejorar la


metodología de enseñanza en las clases de robótica enfocándola a fortalecer el pensamiento
computacional en los estudiantes. Consiste en una placa base que permite conectar
fácilmente módulos de sensores y periféricos variados a un microcontrolador ESP32
compatible con el software de Arduino. El kit educativo Cuenta con nueve módulos
multisensores fundamentales seleccionados para explorar los conceptos más importantes de
la robótica desde cero de una forma sencilla para el alumno y el maestro.

Sensor de luz Switch Potenciometro Placa base ROBLEX

Puertos Pantalla
digitales Distancia
Oled

Buzzer Sensor de
Boton Botones sonido

Microcontrolador ESP32

Cable USB tipo C

3
Placa base ROBLEX

Es la encargada de permitir la conexión fácil entre los módulos y el microcontrolador ESP32.


Cuenta con espacio para 5 módulos simultáneos, y todos los módulos pueden ser
conectados en cualquier espacio. Cuenta a su vez con un LED rgb y un botón programable,
componentes electrónicos para mejorar el desempeño del ESP32 y un conector para batería
con su respectivo interruptor. Todos estos componentes se ubican de la siguiente manera:

Microcontrolador ESP 32

El ESP32 es un microcontrolador genérico


multipropósito de bajo costo y gran capacidad
compatible con el entorno de Arduino.

Posee una serie de características que lo hacen


altamente preferible frente a la mayoría de
microcontroladores similares. Entre estas, las más
destacadas y aprovechables en el kit ROBLEX son:

4
• Wi-Fi 2.4 GHz con hasta 150 Mbits/s
• Conectividad Bluetooth BLE o clásica
• 11 pines de propósito general (GPIO) que pueden ser usados todos como entradas o salidas
analógicos, digitales o PWM. Además de 4 pines de solo entrada.
• Comunicación serial I2C
• 2 núcleos de procesamiento que le permite desempeñar dos tareas simultáneamente
• 512 kbits de RAM
• reloj crystal de 40Mhz
• Montado en un módulo con comunicación y alimentación serial a través de un conector USB
tipo C

Módulos Roblex
Los módulos de sensores, actuadores y periféricos ROBLEX son circuitos impresos
estandarizados de 28 por 28 milímetros con conexiones que encajan mediante cabezales en
los espacios respectivos en la placa base ROBLEX. Cada módulo consta de las siguientes
conexiones:
• Entrada 3.3V para la alimentación del modulo
• 2 pines GPIO que pueden ser entradas o salidas analógicas o digitales según el
módulo. Pin A y Pin B. Ambos pueden ser programados de forma independiente.
• Pines SDA y SCL usados para los periféricos con conexión serial I2C
• Entrada de voltaje no regulada directa de la alimentación para módulos que requieren
un nivel elevado de voltaje y/o corriente

5
Modulo Conexiones Descripción

Pin A: entrada analógica Mide la intensidad de la luz ambiental.


Sensor de Luz
Fotorresistencia de 5 mm Sensor ideal para el manejo de
señales analógicas

Pin B: Salida analógica o


Enciende y apaga LED para ser usado
digital
como lampara o indicador
Diodo LED blanco de 5mm

Sensor de Sonido
Mide la intensidad del sonido. Para
Pin A: entrada analógica
aplicaciones de control por ruido como
Micrófono Electret de 9mm
aplausos o similares

Pin B: Salida analógica o


Enciende y apaga un pequeño LED
digital
para ser usado como indicador
Diodo SMD

Potenciómetro Consiste en una perilla giratoria que


Pin A: entrada analógica permite al usuario variar la señal. Para
potenciómetro de 10k OHM
aplicaciones de control y selección.

Pin B: Salida analógica o Enciende y apaga un pequeño LED


digital
Diodo SMD para ser usado como indicador

Arreglo de 4 botones en la que cada


Botones Pin A: Entrada analógica
uno arroja un valor analógico diferente
Arreglo analógico de botones
al ser presionado.

Pin B: Salida analógica o Enciende y apaga un pequeño LED


digital
Diodo SMD para ser usado como indicador

6
Switch
Pin A: entrada digital El módulo cuenta con dos Switch que
Switch de dos posiciones actúan como entradas digitales. Ideal
para el manejo de lógica digital,

Pin B: entrada digital compuertas AND y OR y como

Switch de dos posiciones selector múltiple

Buzzer y botón Pin A: salida análoga Puede reproducir sonidos en un buen


Buzzer piezoeléctrico de rango de frecuencias.Para melodías o
frecuencia variable alertas sonoras

Pin B: entrada digital


Pulsador como entada digital sencilla
Botón pulsador

Puertos digitales Comunicación serial I2C Permite programar 6 puertos digitales

Expansor de pines digitales como entradas o salidas. En su forma

PCF 8574 básica puede ser usado solo como


matriz de leds. Puede usarse para
Pin A y Pin B no usados conectar entradas o salidas externas

Comunicación serial I2C


Distancia
Sensores de distancia laser Sensores de distancia de alta precisión
ToF VL53L0X de hasta 2 metros de rango. Pueden
Pin A y Pin B salidas utilizarse hasta 3 sensores
digitales. usadas para simultáneamente en el modulo
configurar los sensores

Pantalla OLED
Comunicación serial I2C Permite imprimir texto, graficas o
Pantalla OLED 128x64 imágenes. Ideal para visualizar valores
pixeles de sensores realizar interfaces de
usuario, entre otras cosas.
Pin A y Pin B no usados

7
2. Configuracion del Software Arduino

Para comenzar a usar el kit de desarrollo educativo ROBLEX a través del IDE Arduino es
necesario realizar las siguientes configuraciones:

• Descargar e instalar el IDE Arduino


• Instalar los controladores y las librerías para el microcontrolador ESP32
• Instalar las librerías específicas para el kit ROBLEX y sus componentes

Los pasos necesarios para estas configuraciones se describen a continuación:

Instalar el IDE Arduino

Asegúrese de tener la última actualización del IDE Arduino instalada en su computador. Se


recomienda usar la versión 2.0.x que cuenta con importantes funciones adicionales respecto
a su predecesor. Si ya tiene instalado el IDE continue al siguiente paso.

Puede descargar el instalador en el siguiente enlace:

https://www.arduino.cc/en/software

Descargue el instalador adecuado para su computador, ejecútelo y continue con el proceso


de instalación.

8
Instalar los controladores y librarías para la placa ESP32

Para poder hacer uso de la placa ESP32 desde el IDE Arduino es necesario añadirla al gestor
de tarjetas.

Desde el IDE Arduino ingrese a Archivo > Preferencias

Copie y pegue el siguiente enlace en el espacio URLs adicionales de gestor de


placas.

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-
pages/package_esp32_index.json

Si ya cuenta con una URLs diferente en esta pestaña puede agregar otras separándola
con una coma (,).

9
Desde esta ventana de preferencias puede editar otras configuraciones del IDE como el color
de fondo, el idioma o el tamaño de la letra.

Finalmente, para instalar los controladores ingrese a la ventana de gestor de placas


en la barra de navegación izquierda del IDE, busque ESP32 y presione el botón
instalar.

Instalar librerías para el kit ROBLEX

Ingrese a la pestaña gestor de bibliotecas de la barra de navegación izquierda,


busque ROBLEX y presione el botón instalar.

De esta manera se instalará la librería que facilitará la interacción con los elementos del kit
Roblex y algunas librerías adicionales requeridas para los módulos del kit

10
Pasar programa de prueba

Ya teniendo todo instalado, es momento de probar el kit de desarrollo ROBLEX subiendo un


programa básico. Para ello se debe conectar la ESP32 a la Shield y al computador a través
del cable USB. Verifique que la ESP32 se encuentre correctamente conectada a la shield

En el IDE Arduino entrar a Herramientas > Placa > esp32 y seleccionar DOIT ESP32
DEVKIT1

Después se debe seleccionar el puerto al que se encuentra conectada la placa.

Entrar a Herramientas > Puerto y seleccionar el puerto COM disponible

11
Si no aparece ningún puerto disponible intente desconectar y volver a conectar la Shield, usar
otro puerto del computador o cambiar el cable USB. Si este error persiste puede intentar
descargar drivers adicionales en el siguiente enlace (https://www.silabs.com/developers/usb-
to-uart-bridge-vcp-drivers)

A continuación, abrir el ejemplo básico en Archivo > Ejemplos > Roblex y seleccionar
Prueba

Para subir el programa presione el botón “cargar” en la parte superior izquierda representado
por una flecha. El proceso de compilación y carga toma algunos segundos y puede monitorear

12
el progreso en la sección de salida en la parte inferior. Al finalizar el proceso se observa una
salida similar a la siguiente.

Una vez finalizada la carga, desconecte el esp32 del computador y proceda a conectar
los siguientes módulos en los puertos correspondientes de la placa ROBLEX:

Puerto 1: Potenciómetro
Puerto 2: Sensor de Distancia
Puerto 3: Buzzer
Puerto 4: Pantalla OLED
Puerto 5: Botones

Conecte nuevamente al computador y podrá observar: la distancia medida por el sensor en la


pantalla oled, el valor del sensor análogo en el monitor serie o plotter serie del IDE de Arduino,
encender leds con los botones del modulo y la placa, y tocar una melodía con el botón del
módulo buzzer. Puede cambiar el módulo Potenciómetro por el sensor de sonido o luz para
visualizar estos en el serial.

SE RECOMIENDA DESCONECTAR EL ESP32 DEL COMPUTADOR PARA


CUALQUIER CAMBIO DE MODULOS.

13
3. Introducción al lenguaje de programación C++

C++ es un lenguaje de programación lanzado en 1985 que


se utiliza para crear toda clase de aplicaciones, desde
videojuegos, programas de escritorio y aplicaciones
empresariales. Es un lenguaje de programación de alto
nivel, lo que significa que tiene una sintaxis fácil de
entender y se parece mucho a lenguaje humano. Aunque
se basa en C, C++ incluye características adicionales
como la programación orientada a objetos, lo que permite
una mayor organización y reutilización del código.

Es ideal para la programación de microcontroladores debido a su flexibilidad, velocidad y su


uso eficiente de recursos. Es un lenguaje muy popular para introducirse en el mundo de la
programación y trabajar con proyectos de robótica, automatización e IoT. Además, conocer
C++ permite entender y trabajar más rápidamente con otros lenguajes de programación
similares como Java o Python.

Arduino es una plataforma de desarrollo de hardware y software libre que permite crear
proyectos interactivos con diferentes tipos de sensores y actuadores. Utiliza un lenguaje de
programación similar al de C++, con algunas librerías y funciones específicas para interactuar
con los componentes de hardware.

Un IDE (Entorno de Desarrollo Integrado) es un programa que proporciona un conjunto de


herramientas para escribir, depurar y cargar código en un dispositivo. En este curso se hace
uso del IDE de Arduino que es una aplicación gratuita y de código abierto que utiliza un
lenguaje de programación similar al de C++, con características simplificadas y librerías
específicas para interactuar con el hardware, lo que permite a los desarrolladores crear
proyectos interactivos con facilidad.

A continuación, se muestra un programa básico en el IDE Arduino:

14
void setup() {

Serial.begin(115200); // iniciar debug serial

void loop() {

Serial.println(“hola mundo”); // imprimir la frase “hola mundo” en el serial


delay(1000); // pausar por 1000 milisegundos (un segundo)

Con este programa En Arduino, el código se organiza en dos funciones principales: setup() y
loop().

setup() es una función especial que se ejecuta una sola vez al inicio del programa. Aquí se
suelen configurar las entradas y salidas del dispositivo, establecer las velocidades de
comunicación y establecer las condiciones iniciales.

loop() es una función que se ejecuta de manera continua después de que se ha ejecutado
setup(). Aquí se encuentra el cuerpo principal del programa y se ejecutan las acciones que se
desean realizar, en este caso imprimir un mensaje una vez por segundo.

15
4. Modulo Pantalla OLED

Pantalla OLED
Comunicación serial I2C Permite imprimir texto, graficas o
Pantalla OLED 128x64 imágenes. Ideal para visualizar valores
pixeles de sensores realizar interfaces de
usuario, entre otras cosas.
Pin A y Pin B no usados

El módulo pantalla OLED puede conectarse a cualquier puerto de la placa ROBLEX de forma
indistinta y sin modificar el código

De forma simplificada, la pantalla consiste en


un arreglo de leds de 128 X 64 que pueden
ser encendidos individualmente. Tiene una
franja en la parte superior de 16 pixeles de
alto que enciende de color amarillo mientras
que el resto de la pantalla enciende de color
azul.

Es importante para la programación de la pantalla saber en que pixel se desea dibujar o


escribir teniendo en cuenta que el origen (0,0) se encuentra en la esquina superior izquierda.

Para programar la pantalla desde el IDE Arduino se


Para probar la programación de
hace uso de las librerías externas Adafruit_SSD1306
una pantalla OLED desde un
y Adafruit_GFX. simulador online ingrese al
siguiente enlace:
A continuación, se expone un código básico para
escribir texto y dibujar figuras geométricas en la https://wokwi.com/projects/35468

pantalla: 9691007709185

16
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 display(128, 64, &Wire, -1); //definir el display de 128x64

void setup() {

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // iniciar la pantalla oled

void loop() {

display.clearDisplay(); // limpia la informacion del display

display.setTextSize(1); // tamano de la letra


display.setCursor(30, 0); // posicion del cursor en la pantalla (x,y)
display.setTextColor(WHITE, BLACK); //configurar el color del texto y el fondo
display.print("hola mundo"); //imprimir un texto en la pantalla

display.drawLine(5, 0, 25, 64, WHITE); //dibujar linea


display.drawCircle(64, 32, 15, WHITE); //dibujar circunferencia
display.fillRect(100, 5, 20, 50, WHITE); //dibujar rectangulo relleno

display.display(); // muestra la imagen creada en la pantalla


}

En las primeras líneas se importa la librería y se define el tamaño y el tipo de la pantalla.


Dentro del Setup() se inicia la. estas líneas de código son necesarias y siempre iguales para
todos los programas con la pantalla OLED.

Dentro del loop() primero se limpia la pantalla de los dibujos anteriores. Luego se escribe un
texto en la parte superior seleccionando el tamaño del texto, el color del texto y del fondo
(encendido y apagado). Se dibujan figuras geométricas en diferentes posiciones de la pantalla
y por ultimo se utiliza la función display.display(); para visualizar todo lo creado.

17
Mostrar imágenes en la pantalla

Ya demostrada las funciones de dibujo de figuras geométricas y texto, en el siguiente ejemplo


se imprimirán en la pantalla imágenes o dibujos libres. Para esto, se seguirán los siguientes
pasos:

Abrir el programa Paint o otras aplicaciones de dibujo similares

Configure el tamaño del canvas a 128x64 pixeles y dibuje o pegue cualquier imagen
que desee visualizar en la pantalla. Esta debe ser preferiblemente de un solo color con
alto contraste.

Guarde la imagen como PNG o JPG

Ingrese a la siguiente página web:

https://javl.github.io/image2cpp/

Presione elegir archivos y suba la imagen recién cargada:

18
Una vez cargada la imagen podrá observar la salida de la pantalla en la sección
Preview.

Tenga en cuenta que lo negro en esta visualización corresponderá a pixeles apagados


mientras que lo blanco serán los encendidos en la pantalla. Si desea invertir esta disposición
seleccione la casilla invert image colors.

En la casilla Code Output format seleccione plain bytes. Luego presione el botón
Generate code y por último Copy Output para copiar los códigos generados.

19
Finalmente, dentro del Ide de Arduino cree el siguiente programa y pegue los códigos
de la imagen generados dentro de los corchetes de la variable imagen.

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 display(128, 64, &Wire, -1); //definir el display de 128x64

void setup() {

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // iniciar la pantalla oled

void loop() {

display.clearDisplay(); // limpia la informacion del display

display.display(); // muestra la imagen creada en la pantalla


}

Resumen de métodos para la pantalla OLED

20
c representa el color, puede ser WHITE para encender y BLACK para apagar

- display.fillScreen(c);
dibuja todos los pixeles de la imagen

- display.drawpixel(x0, y0, c);


dibuja el pixel en la posición x0, y0

- display.drawline(x0, y0, x1, y1, c);


dibuja una línea empezando en el punto (x0,y0) y terminando en (x1,y1)

- display.drawFastVLine(x0, y0,l, c);


dibuja una línea vertical empezando en el punto (x0,y0) con longitud l

- display.drawFastHLine(x0, y0,l, c);


dibuja una línea horizontal empezando en el punto (x0,y0) con longitud l

- display.drawRect(x0, y0, w, h, c); display.fillRect(x0, y0, w, h, c);


dibuja un rectángulo con la esquina superior izquierda en (x0,y0) de ancho w y altura h. draw
para dibujar solo el perímetro y fill para rellenarlo.

- display.drawRoundRect(x0, y0, w, h, r, c); display.fillRoundRect(x0, y0, w, h, r, c);


dibuja un rectángulo con esquinas redondeadas con radio r.

- display.drawCircle(x0, y0, r, c); display.fillCircle(x0, y0, r, c);


dibuja un círculo con radio r.

- display.drawTriangle(x0, y0, x1, y1, x2, y2, c); display.fillTriangle (x0, y0, x1, y1, x2, y2, c);
dibuja un triángulo definiendo sus tres vértices.

- display.setTextSize(p);
configura el tamaño del texto siguiente dándole un grosor a la línea de p pixeles

21
- display.setCursor(x0,y0);
posiciona el cursor para el texto en la posición (x0, y0)

- display.setTextColor(c1,c2);
selecciona el color del texto y del fondo. Para que el texto sea visualizable c1 debe ser
opuesto a c2 WHITE o BLACK para encendido y apagado respectivamente

- display.display();
la función mas importante, es la que permite que todos los dibujos realizados en la pantalla
se visualicen adecuadamente.

5. Modulo Buzzer

22
Buzzer y botón Pin A: salida análoga Puede reproducir sonidos en un buen
Buzzer piezoeléctrico de rango de frecuencias. Para melodías o
frecuencia variable alertas sonoras

Pin B: entrada digital


Pulsador como entada digital sencilla
Botón pulsador

Un Buzzer es un dispositivo que permite convertir una señal eléctrica en una onda de sonido.
Variando la frecuencia de la señal se pueden obtener diversos tonos y crear melodías.

El modulo hace uso del pinA como salida PWM del microcontrolador al Buzzer y el pinB como
entrada digital del pulsador.

Es importante resaltar que el ESP32 tiene funciones más avanzadas para el manejo de las
salidas PWM en comparación a los microcontroladores tradicionales de Arduino. Por esta
razón, las funciones usadas en las placas Arduino para interactuar con los Buzzer y que se
consiguen fácilmente

Para poder programar cómodamente el Buzzer con el ESP32 la librería ROBLEX tiene
funciones y definiciones que emulan las funciones disponibles para las placas Arduino.

Para explicar el funcionamiento del módulo Buzzer se hace uso del siguiente código de
ejemplo:

23
#include "ROBLEX.h"

// CONECTAR EL MODULO BUZZER EN EL PUERTO 3


#define BUZZER_PIN pin3A // definir el buzzer en el puerto 3A
#define BOTON_PIN pin3B // definir el boton en el puerto 3B
#define BUZZER_CHANNEL 0 // definir canal de salida del pwm

ROBLEX ROBLEX;

int melody[] = {
// Super Mario Bros
NOTE_E5, 8, NOTE_E5, 8, REST, 8, NOTE_E5, 8, REST, 8, NOTE_C5, 8, NOTE_E5, 8,
REST, 8, NOTE_G5, 4
};

int tempo = 200; //velocidad de reproduccion de la melodía

void setup() {

pinMode(BOTON_PIN, INPUT); // configurar el boton como entrada


ledcAttachPin(BUZZER_PIN, BUZZER_CHANNEL);
// configurar el buzzer como salida PWM en el canal 0
}

void loop() {
//reproducir melodia
if (digitalRead(BOTON_PIN) == 1) {
int n = sizeof(melody) / sizeof(melody[0]); // calcular el tamano
ROBLEX.PlayMelody(BUZZER_CHANNEL,melody, n, tempo); // reproducir la melodia
}

// reproducir notas sueltas


if (digitalRead(boton)== 1) {
ledcWriteTone(BUZZER_CHANNEL, NOTE_E5); // reproducir nota E5
delay(200);
ledcWriteTone(BUZZER_CHANNEL, NOTE_G5); // reproducir nota G5
delay(200);
ledcWriteTone(BUZZER_CHANNEL, 0); // silencio
delay(200);
}
}

24
Con este código se puede probar la funcionalidad del buzzer para reproducir melodías
predefinidas presionando el botón del módulo. Y a su vez, para tocar notas sueltas
directamente.

Es importante resaltar las funciones:

ledcAttachPin(BUZZER_PIN, BUZZER_CHANNEL);

Esta hace parte de las novedades del ESP32 frente a Arduino. Permite vincular el pin del
Buzzer (BUZZER_PIN) a un canal PWM (BUZZER_CHANNEL) previamente definido con el
numero 0. En las próximas funciones será este canal es el que se use para programar el
generar las señales.

ROBLEX.PlayMelody(BUZZER_CHANNEL,melody, n, tempo);

Esta función propia de la librería ROBLEX es la encargada de reproducir la melodía


previamente definida nota por nota. La función requiere como argumentos: el canal PWM
vinculado al Buzzer (BUZZER_CHANNEL), la melodía (melody), (n) que corresponde a la
longitud de la melodía Y (tempo) que es la velocidad a la que se reproduce definida tambien
previamente.

ledcWriteTone(BUZZER_CHANNEL, nota);

Permite configurar directamente un tono al canal PWM. (nota) es el valor de la frecuencia de


la nota deseada, la librería ROBLEX trae por defecto definidas las frecuencias para las notas
armónicas en notación anglosajona desde NOTE_B0 hasta NOTE_DS8.

Configurar nuevas melodías preestablecidas

Para cambial la canción definida en la variable Melody puede acceder a la siguiente biblioteca:

https://github.com/robsoncouto/arduino-songs

25
Aquí encontrará una lista de canciones para usar. Ingrese al archivo disponible en la carpeta
de la canción deseada y reemplace las notas de melody y el valor de tempo de en su código
de arduino

26
6. Sensor de distancia

Comunicación serial I2C


Distancia Sensores de distancia laser
Sensores de distancia de alta precisión
ToF VL53L0X
de hasta 2 metros de rango. Pueden
Pin A y Pin B salidas
utilizarse hasta 3 sensores
digitales. usadas para
simultáneamente en el modulo
configurar los sensores
laterales

El modulo Sensor de distancia se basa del sensor de distancia laser ToF (Time-of-Flight)
Vl53l0x.
Este sensor la tecnologia FlightSense para medir el tiempo que tarda un pulso de la luz laser
infrarrojo y seguro para la vista en llegar al objeto más cercano y reflejarse en el detector. De
esta forma logra estimar con alta precisión la distancia de dicho objeto.

Sus especificaciones de medición son:

- Distancia máxima de 2 metros con resolución de 1 mm


- Distancia mínima medible con precisión es de 4 cm
- Precisión entre ±3% hasta ±10% en condiciones poco optimas

El modulo se comunica con el ESP32 principalmente a través del puerto I2C, pero hace uso
de los pines A y B para configurar los sensores laterales.

Para la programación de este sensor se hace uso de la librería Adafruit_VL53L0X. Y para


simplificar aun mas su uso y la configuración de múltiples sensores simultáneos, la librería
ROBLEX cuenta con funciones adicionales.

El código básico para la interacción con este módulo es el siguiente:

27
#include "ROBLEX.h"

ROBLEX ROBLEX;

void setup() {

Serial.begin(115200); // iniciar debug serial

ROBLEX.SetupDistance(2, false, true, false);


//iniciar el módulo de distancia en el puerto 2 con el sensor frontal

int distancia = 0;

void loop() {

if (ROBLEX.FrontComplete()) {
distancia = ROBLEX.FrontRange();
}

Serial.print(distancia); // imprime la distancia en el debug serial


Serial.println();

En este programa destaca la función presente en el setup():

ROBLEX.SetupDistance(puerto, bool left, bool front, bool right);

Esta función es usada para configurar el puerto de la placa a la que se encuentra conectado
el módulo y a su vez los sensores se encuentran conectados a este. Los bools left, front y right
deben marcarse como true dependiendo de en cuales se conecten los sensores:

Para usar el sensor izquierdo: ROBLEX.SetupDistance(puerto, true, false, false);


Para usar el sensor frontal: ROBLEX.SetupDistance(puerto, false, true, false);
Para usar el sensor derecho: ROBLEX.SetupDistance(puerto, false, false, true);
Puede usar varios sensores simultáneamente cambiando a true respectivamente.

28
A su vez, para la lectura de los sensores en el loop() la librería ROBLEX cuenta con funciones
que leen los tres sensores independientemente:

if (ROBLEX.FrontComplete()) {
distanciaF = ROBLEX.FrontRange();
}

ROBLEX.FrontComplete() verifica si el sensor ha completado un ciclo de medida y


ROBLEX.FrontRange() entrega la distancia medida en milímetros. Si se desea usar los
sensores laterales puede reemplazar el Front por Right o Left respectivamente.

De esta manera, el ejemplo de uso de los tres sensores simultáneos seria de la siguiente
manera:

#include "ROBLEX.h"

ROBLEX ROBLEX;

void setup() {

ROBLEX.SetupDistance(2, true, true, true);


//iniciar el módulo de distancia en el puerto 2 con los tres sensores activos
}

int distanciaF = 0;
int distanciaR = 0;
int distanciaL = 0;

void loop() {

if (ROBLEX.FrontComplete()) {
distanciaF = ROBLEX.FrontRange();
}
if (ROBLEX.RightComplete()) {
distanciaR = ROBLEX.RightRange();
}
if (ROBLEX.LeftComplete()) {
distanciaL = ROBLEX.LeftRange();
}
}

29
7. Modulo Puertos Digitales

Puertos digitales Comunicación serial I2C Permite programar 6 puertos digitales

Expansor de pines digitales como entradas o salidas. En su forma

PCF 8574 básica puede ser usado solo como


matriz de leds. Puede usarse para
Pin A y Pin B no usados conectar entradas o salidas externas

El módulo puertos digitales se comunica con el ESP32 únicamente a través del puerto I2c. No
hace uso de los pines A y B y por lo tanto puede ser usado en cualquier puerto de la placa
ROBLEX sin alterar su programación.

Este módulo se basa en el circuito integrado PCF8574 ubicado en la parte posterior del
módulo. Este chip, permite controlar múltiples puertos digitales como salidas o entradas a
través de I2c. En la parte superior del módulo se exponen 6 puertos digitales independientes,
cada uno con su respectivo led y pines para conectar elementos externos. En esta guía se
centrará el uso de este módulo en la interacción de los 6 leds como salidas digitales.

Para su programación se hace uso de la librería Adafruit_PCF8574 y el programa básico sería


el siguiente:

30
#include <Adafruit_PCF8574.h> //importar librería PCF8574

Adafruit_PCF8574 pcf; // llamar libreria pcf

void setup() {

pcf.begin(0x27, &Wire); // iniciar pcf

for (int p = 1; p <= 6; p++) { // configurar los 6 puertos como salidas


pcf.pinMode(p, OUTPUT);
}

void loop() {

for (int p = 1; p <= 6; p++) {


pcf.digitalWrite(p, 1); // encender el led respectivo en la secuencia
delay(100); // tiempo de encendido de cada led
pcf.digitalWrite(p, 0); // apagar el led
}

En el código resalta la llamada a la librería Adafruit_PCF8574 en las primeras líneas seguido


de la iniciación de la comunicación I2c pcf.begin(0x27, &Wire); en el setup().

Para hacer uso de los puertos digitales de este módulo basta con hacer uso las funciones
habituales para el control de pines, pero referenciados con la librería pcf8574. Es decir:
pcf.pinMode(p, MODE);
pcf.digitalRead(p);
pcf.digitalWrite(p, OUTPUT);

donde (p) corresponde al número del puerto según se indica en el módulo.

31
8. Bluetooth

La comunicación Bluetooth con el ESP32 es una forma de permitir que el microcontrolador se


conecte e interactúe con otros dispositivos mediante una conexión inalámbrica. El ESP32 tiene
un chip incorporado que soporta Bluetooth Classic y Bluetooth 4.0 Low Energy (BLE), lo que
significa que puede conectarse a una variedad de dispositivos y aplicaciones que utilizan estas
tecnologías de comunicación.

- Poca información enviada


- Largas cantidades de datos periódicamente
- Stream constante de información - Paquetes de información organizada
- Requiere apareamiento entre los - No requiere apareamiento entre los
dispositivos dispositivos
- Comunicación tipo maestro-esclavo - Comunicación tipo servidor-cliente

La comunicación se establece en función de la dirección MAC (MAC address) que es un


valor de 48 bits único que identifica a cada uno de los dispositivos Bluetooth existentes.
Puede buscar el MAC address de su ESP32 en la salida del IDE de Arduino cada vez que se
carga un programa.

32
Comunicación bluetooth clásica

La manera más sencilla y efectiva para usar la comunicación bluetooth con el ESP32 y el kit
ROBLEX es a través del bluetooth clásico. Para ello es necesario configurarlo para que
funcione como un dispositivo "maestro" o "esclavo", es decir si se quiere que el ESP32 se
conecte a otro dispositivo o que sea el dispositivo al que se conecten otros. Una vez
configurado, el ESP32 puede vincularse a otros dispositivos Bluetooth cercanos, y luego
enviar y recibir datos a través de la conexión.

Para programar la comunicación Bluetooth clásica se hace uso de la librería BluetoothSerial.h


y su ejemplo básico para configurar el ESP32 como esclavo es el siguiente:

#include "BluetoothSerial.h"

BluetoothSerial SerialBT;

void setup() {

Serial.begin(115200);
SerialBT.begin("ROBLEX SLAVE"); //Nombre del dispositivo
}

void loop() {
if (Serial.available()) {
SerialBT.write(Serial.read());
}
if (SerialBT.available()) {
Serial.write(SerialBT.read());
}
}

Este código permite enviar y recibir Strings a través de Bluetooth clásico usando el monitor
serial. La librería funciona de manera análoga a las funciones serial. En este caso, se hace
uso de la función begin para asignar un nombre al dispositivo y write y read para enviar y
recibir mensajes respectivamente

El ejemplo para configurar el ESP32 como maestro es el siguiente:

33
#include "BluetoothSerial.h"

BluetoothSerial SerialBT;

uint8_t slaveAddress[] = { 0xC8, 0xF0, 0x9E, 0x0A, 0x0A, 0x0A };

void setup() {
Serial.begin(115200);
SerialBT.begin("ROBLEX MAESTRO", true); //nombre de su dispositivo como maestro

SerialBT.connect(slaveAddress);

while (!SerialBT.connected(10000)) {
Serial.println("Conexion fallida, intentando nuevamente...");
}

void loop() {
//enviar y recibir Strings como maestro
if (SerialBT.connected()) {
if (Serial.available()) {
SerialBT.write(Serial.read());
}
if (SerialBT.available()) {
Serial.write(SerialBT.read());
}
} else {
SerialBT.connect(slaveAddress);
}
delay(50);
}

Para este caso, es necesario especificar el MAC address del dispositivo esclavo con el cual
se desea vincular. También es necesario agregar un true en la función begin para iniciar el
como maestro y usar la función conect para vincularse con el esclavo.

34
9. WI-FI

Wi-Fi es una tecnología de comunicación


inalámbrica que permite a los dispositivos
conectarse a una red de área local (LAN) o a
Internet.

El ESP32 cuenta con un chip incorporado que


soporta Wi-Fi en diversas configuraciones que
lo hacen ideal para aplicaciones IoT.

Puede ser usado como un punto de acceso


(Access point) que le permite intercambiar
informacion con otros dispositivos a travez de Wi-
Fi sin la necesidad de tener cerca ningún router ni
conexión a internet.

Puede ser usado también para crear un


servidor a través de un router al cual
pueden acceder otros dispositivos
conectados de forma local a ese router.

Al usar cualquier aplicación con Wi-Fi se desactivan la mayoría de los lectores


análogos (ADC). Únicamente puede usarse AnalogRead() en los pines: pin1A y
pin3A de la placa ROBLEX

35
Así mismo, al conectarse a un router con acceso a internet, puede comunicarse con servidores
externos o aplicaciones en la nube para obtener o entregar información. Existe una gran
cantidad de APIs o servicios web que cumplen diferentes funciones a las que puede acceder
el ESP32. Entre ellos destacan: bases de datos para almacenar información proveniente de
sensores, aplicativos móviles o Web para controlar el ESP de forma remota desde cualquier
parte del mundo, descargar Información de interés tal como reportes climáticos, sonidos o
texto.

36

También podría gustarte