Saltar la navegación

🧩 Actividades

🧩 Actividad #1

Primer programa en Arduino con pantalla LCD: Hola Mundo.

Instrucciones

En esta actividad, aprenderás a programar tu primer proyecto en Arduino utilizando una pantalla LCD de 16x2. El objetivo es imprimir el mensaje “Hola Mundo” en la pantalla LCD para verificar que todo está funcionando correctamente.

Para llevar a cabo esta actividad, necesitarás:

  • Placa Arduino.
  • Pantalla LCD de 16x2A.
  • Cables.
  • 1 Pulsador.
  • Dos resistencias de 1 kΩ.
  • 16x pines macho 2.54 mm
  • Baquelita Para Circuito.
  • Software de Arduino IDE instalado en tu computadora.

Para conectar todos los componentes, necesitarás:

  • Cautín.
  • Estaño.
  • Pasta para solar.

A continuación, te proporcionaremos las instrucciones paso a paso para llevar a cabo esta actividad. Al finalizar, tendrás un mejor entendimiento de cómo utilizar una pantalla LCD con Arduino y habrás creado tu primer programa con un LCD 16x2 en Arduino. ¡Comencemos! ➡️ 

Código.

A continuación te muestro las instrucciones paso a paso para mostrar “Hola Mundo” en una pantalla LCD de 16x2A con una placa Arduino:

Abre el software de Arduino IDE en tu computadora y crea un nuevo proyecto.
Agrega la librería LiquidCrystal en Arduino IDE y luego inclúyela en tu código.
Declara los pines que vas a utilizar para conectar la pantalla LCD en tu código. Establece los pines RS, E, D4, D5, D6 y D7, respectivamente.
Define un objeto LCD y especifícale los pines que acabas de declarar.
En la función setup(), inicializa la pantalla LCD llamando al método begin() del objeto LCD. Establece la cantidad de columnas y filas de tu pantalla, en este caso 16x2.
En la función loop(), utiliza el método print() para imprimir “Hola Mundo” en la pantalla LCD. Puedes elegir la posición en la pantalla donde quieres imprimir el mensaje.
Carga el programa a la placa Arduino y verás “Hola Mundo” impreso en la pantalla LCD de 16x2.
Aquí te dejo un ejemplo de código para que puedas guiarte:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Establece los pines de la pantalla LCD

void setup() {
lcd.begin(16, 2); // Inicializa la pantalla LCD con 16 columnas y 2 filas
}

void loop() {
lcd.setCursor(0, 0); // Establece la posición en la pantalla donde se imprimirá el mensaje
lcd.print("Hola Mundo!"); // Imprime el mensaje en la pantalla LCD
delay(1000); // Espera un segundo antes de volver a imprimir el mensaje
}

Para finalizar, ten en consideración los siguientes pasos:

  1. Realiza una verificación final del circuito: verifica que todas las conexiones estén seguras y que no haya cortocircuitos. Si encuentras algún problema, revísalo antes de continuar.
  2. Carga el programa en el Arduino: Abre el software de Arduino IDE en tu computadora, y carga el programa que escribiste para imprimir "Hola Mundo" en la pantalla LCD.
  3. Conecta el Arduino a una fuente de alimentación: Conecta el Arduino a una fuente de alimentación, asegurándote de que el voltaje y la corriente sean los adecuados para tu circuito.
  4. Verifica el resultado: Alimenta el circuito y comprueba que el mensaje “Hola Mundo” aparezca en la pantalla LCD. Si todo funciona correctamente, ¡felicidades! Has completado tu primer programa en Arduino con pantalla LCD.
  5. Experimenta con el código: Si te sientes cómodo con el proceso, prueba a modificar el código para imprimir otro mensaje o agregar más funcionalidades a tu proyecto. Por ejemplo, puedes hacer que el mensaje cambie en función del estado del pulsador que soldaste.
  6. En esta actividad introductoria, has aprendido a soldar componentes en una baquelita para circuito, programar en Arduino y trabajar con una pantalla LCD. ¡Ahora estás preparado para continuar explorando las posibilidades de la programación con Arduino y construir proyectos más avanzados!

Desarrollo

Si aún no te sientes listo para probar con los componentes físicos, puedes hacer el desarrollo en la herramienta Tinkercad, el ejercicio lo tienes aquí:

🧩 Actividad # 2

Personaliza tu mensaje en una pantalla LCD 16x2A.

Instrucciones

En esta actividad, tendrás la oportunidad de personalizar tu mensaje en una pantalla LCD. Después de aprender cómo funciona una pantalla LCD y cómo conectarla a un Arduino, te daremos un código base que imprimirá un mensaje predeterminado en la pantalla LCD. Tu tarea será modificar el código para escribir tu propio mensaje en la pantalla. Podrás experimentar con diferentes mensajes y efectos visuales, y al final de la actividad, tendrás una pantalla LCD que mostrará tu propio mensaje personalizado.

Para esta actividad vamos a reutilizar la baquelita que hemos realizado en la primera actividad, así que sin más preámbulo ¡Vamos a empezar! ➡️ 

Primero se deben conectar todos los pines de la baquelita a los pines del Arduino Uno y se debe abrir el software de Arduino IDE y carga el código base para la pantalla LCD. Se debe verificar que todo funcione correctamente y que se imprima el mensaje predeterminado en la pantalla.

A continuación tienes el código base:

// Incluye la librería LiquidCrystal
#include <LiquidCrystal.h>

// Configura los pines de entrada y salida
const int boton = 2;
LiquidCrystal lcd(12, 11, 5, 4, 3, 6, 7, 8, 9, 10);

// Define los mensajes a mostrar
String mensaje1 = "¡Hola Mundo!";
String mensaje2 = "Personalizado :)";

// Variable para rastrear el estado del botón
int estadoBoton = 0;

void setup() {
// Configura la pantalla LCD y el botón
lcd.begin(16, 2);
pinMode(boton, INPUT);
}

void loop() {
// Lee el estado del botón
estadoBoton = digitalRead(boton);

// Si el botón está presionado, muestra el segundo mensaje
if (estadoBoton == HIGH) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(mensaje2);
}
// De lo contrario, muestra el primer mensaje
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(mensaje1);
}
}

Para modificar el código y poner tu propio mensaje personalizado en la pantalla, puedes seguir estos pasos:

  1. Abre el código en el software de Arduino IDE.
  2. Busca la línea que contiene el mensaje predeterminado: String mensaje1 = "¡Hola Mundo!";
  3. Reemplaza el mensaje por el tuyo propio, por ejemplo: String mensaje1 = "¡Hola a todos!";
  4. Guarda los cambios y carga el código en el Arduino.
  5. Revisa que el mensaje personalizado se muestre correctamente en la pantalla LCD.
  6. Si deseas agregar más efectos visuales, como cambiar el color o la posición del mensaje, busca en el código las líneas que configuran la pantalla LCD y experimenta con diferentes valores.


¡Recuerda experimentar y explorar con el código para crear una pantalla personalizada que te guste!

Desarrollo

De igual manera, para el desarrollo puedes primero probarlo en tinkercad:

🧩 Actividad # 3

El juego del dinosaurio.

Instrucciones

En esta actividad vamos a recrear el popular juego del dinosaurio de Google Chrome utilizando Arduino, una pantalla LCD y un pulsador. El objetivo es programar un juego simple, pero divertido en el que el jugador debe saltar obstáculos presionando el pulsador, mientras se muestra el puntaje en la pantalla LCD. Aprenderemos a usar los pines de entrada y salida de Arduino, y a programar la lógica del juego. ¡Prepárate para saltar y divertirte mientras aprendes a programar en Arduino!

Del mismo modo reutilizaremos la baquelita que se ha realizado en la primera actividad. ¡Empecemos! ➡️

Para entender programar como funciona el código del juego del dinosaurio en Chrome debemos tener en cuenta lo siguiente:

  1. Se incluyen las librerías LiquidCrystal.h, Wire.h y LiquidCrystal_I2C.h.
  2. Se crean ocho variables tipo byte que representan cada una de las partes gráficas del dinosaurio, las ramas y el ave.
  3. Se definen algunas variables para ser usadas durante el programa, tales como las coordenadas del dinosaurio y de las ramas, los periodos de tiempo, los contadores de puntos, entre otros.
  4. En la función setup se inicia la comunicación con el LCD, se definen los caracteres personalizados y se limpia la pantalla.
  5. En la función loop se establecen los retardos para los movimientos del dinosaurio y las ramas.
  6. Se limpia la pantalla y se muestran los caracteres que representan las partes gráficas del dinosaurio en la posición inicial.
  7. Se muestran las ramas y el ave en la posición inicial.
  8. Se lee el estado del botón y se detectan colisiones con las ramas y el ave.
  9. Se actualiza la posición de las ramas y el ave y se incrementa la velocidad del juego.
  10. Se actualizan los puntos y se muestran en el LCD.

A continuación, te mostramos el código ya comentado para que se pueda entender de una mejor manera:

#include <LiquidCrystal.h>
#include <Wire.h>

#include <LiquidCrystal_I2C.h>


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

byte DINO_PARADO_PARTE_1[8] = {B00000, B00000, B00010, B00010, B00011, B00011, B00001, B00001};
byte DINO_PARADO_PARTE_2[8] = {B00111, B00111, B00111, B00100, B11100, B11100, B11000, B01000};
byte DINO_PIE_DERE_PART_1[8] = {B00000, B00000, B00010, B00010, B00011, B00011, B00001, B00001};
byte DINO_PIE_DERE_PART_2[8] = {B00111, B00111, B00111, B00100, B11100, B11100, B11000, B00000};
byte DINO_PIE_IZQU_PART_1[8] = {B00000, B00000, B00010, B00010, B00011, B00011, B00001, B00000};
byte DINO_PIE_IZQU_PART_2[8] = {B00111, B00111, B00111, B00100, B11100, B11100, B11000, B01000};
byte DOS_RAMAS_PART_1[8] = {B00000, B00100, B00100, B10100, B10100, B11100, B00100, B00100};
byte DOS_RAMAS_PART_2[8] = {B00100, B00101, B00101, B10101, B11111, B00100, B00100, B00100};
byte AVE_ALAS_PART1[8] = {B00001, B00001, B00001, B00001, B01001, B11111, B00000, B00000};
byte AVE_ALAS_PART2[8] = {B00000, B10000, B11000, B11100, B11110, B11111, B00000, B00000};

//defino variables
int columna_dino1 = 1;
int columna_dino2 = 2;
int fila_dino = 1;
unsigned long reloj=0; //para usar la funcion millis envez de delay
int periodo=100; //es el periodo en milisegundo
int flag=1;
int fila_rama=0;
int columna_rama=13;
int periodo2=100;
unsigned long reloj2=0;
int a=0;
int b=1;
int c=2;
int d=0;
unsigned long reloj3=0;
int periodo3=100;
int puntos =0;
int punto2 =0;
int numerorandom=0;
int columnaave= 13;
int e=0;
int fila_ave=1;
int senalactual=0;
int senalantigua=0;
int f=13;
int aceleracion=1;

void setup() {
lcd.begin(16, 2);
lcd.createChar(0,DINO_PARADO_PARTE_1);
lcd.createChar(1,DINO_PARADO_PARTE_2);
lcd.createChar(2,DINO_PIE_DERE_PART_1);
lcd.createChar(3,DINO_PIE_DERE_PART_2);
lcd.createChar(4,DINO_PIE_IZQU_PART_1);
lcd.createChar(5,DINO_PIE_IZQU_PART_2);
lcd.createChar(6,DOS_RAMAS_PART_1);
lcd.createChar(7,DOS_RAMAS_PART_2);
}
void loop() {
if(millis()>reloj+periodo){ //retardo para el pies del dinosaurio
reloj=millis();
if(flag==1){
flag=2;
}
else if(flag==2){
flag=1;

}


}

if(millis()>reloj2+periodo2){ //retardo para la velocidad de las ramas
reloj2=millis();

columna_rama=columna_rama-1;
if(columna_rama<0){
columna_rama=13;
periodo2=periodo2-aceleracion;//aceleracion
numerorandom=random(0,3);//aca debe estar el random ya que es cada vez que regresa a la columna 13


}

f=columna_rama+1;
lcd.setCursor(f,1); //limpio abajo
lcd.print(" ");

f=columna_rama+1;
lcd.setCursor(f,0); //limpio arriba
lcd.print(" ");


lcd.setCursor(0,1); //limpio arriba
lcd.print(" ");

lcd.setCursor(0, 0);
lcd.print(" ");

a=1;
}

if(d==0){
if(flag==1){
lcd.setCursor(columna_dino1,fila_dino);
lcd.write(byte(2));
lcd.setCursor(columna_dino2,fila_dino);
lcd.write(byte(3));
}
if(flag==2){
lcd.setCursor(columna_dino1,fila_dino);
lcd.write(byte(4));
lcd.setCursor(columna_dino2,fila_dino);
lcd.write(byte(5));
}
}

if(a==1){

if(numerorandom == 1){
fila_rama = 1;
lcd.createChar(6,DOS_RAMAS_PART_1);
lcd.setCursor(columna_rama,fila_rama);
lcd.write(byte(6));

}
else if(numerorandom == 2){
fila_rama = 1;
lcd.createChar(7,DOS_RAMAS_PART_2);
lcd.setCursor(columna_rama,fila_rama);
lcd.write(byte(7));

}
else{ //esta es la parte del ave

columnaave=columna_rama;
columnaave=columnaave-1;
fila_rama = 0;
lcd.createChar(6,AVE_ALAS_PART1);
lcd.setCursor(columnaave,fila_rama);
lcd.write(byte(6));

lcd.createChar(7,AVE_ALAS_PART2);
lcd.setCursor(columna_rama,fila_rama); //columna rama porque debe estar a la izquierda de columan eve
lcd.write(byte(7));

}



a=0;
}
//generamos condiciones al chocar


if(digitalRead(13)==HIGH && (columna_rama==1||columna_rama==2||columnaave==1||columnaave==2) && fila_rama==0 ){
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("GAME OVER");
delay(2000);
lcd.clear();
columna_rama=15;
periodo2=100;
puntos=0;
punto2=0;
periodo2=100;

}

if((columna_rama==b||columna_rama==c) && fila_rama==1){ //condicion de la rama
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("GAME OVER");
delay(2000);
lcd.clear();
columna_rama=15;
periodo2=100;
puntos=0;
puntos=2;
periodo2=100;
}

//condicion del ave
// lcd.clear();
// //lcd.setCursor(5, 0);
//lcd.print("GAME OVER");
// delay(2000);
// lcd.clear();
// columna_rama=15;
// periodo2=100;
// fila_rama=1;

//saltar al presionar pulsador púlsador



if(digitalRead(13)==HIGH){

b=50; //a bc lo pongo un valor mayor a 15 para que no coincida con el movimiento de la columna
c=50;

if(d==0){
lcd.setCursor(0, 1); // LIMPIA ABAJO
lcd.print(" ");
}
d=1;

lcd.setCursor(columna_dino1,0);
lcd.write(byte(2));
lcd.setCursor(columna_dino2,0);
lcd.write(byte(3));


}
else{
b=1; //que regrese a su valor de inicio
c=2;
// lcd.setCursor(0, 0);
//lcd.print(" ");
d=0;
}



//creamos otro retardo para los puntos
if(millis()>reloj3+periodo3){ //reatrdo para los puntos acumulados
reloj3=millis();
lcd.setCursor(14, 1);
lcd.print(puntos);

//if(b==50){ // el que solo cuente cuando esta en el piso es opcional
// }
//else{
puntos=puntos+1;
//}

if(puntos==100){
puntos=0;
punto2=punto2+1;
if(punto2==100){
punto2=0;}

}

}


lcd.setCursor(14, 1);
lcd.print(puntos);
lcd.setCursor(14, 0);
lcd.print(punto2);

//detector de cambio de estado
senalactual=digitalRead(13);
if (senalactual != senalantigua)
{
lcd.setCursor(1, 0);
lcd.print(" ");
}
senalantigua = senalactual;

}

#include <LiquidCrystal.h>
#include <Wire.h>

#include <LiquidCrystal_I2C.h>


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

byte DINO_PARADO_PARTE_1[8] = {B00000, B00000, B00010, B00010, B00011, B00011, B00001, B00001};
byte DINO_PARADO_PARTE_2[8] = {B00111, B00111, B00111, B00100, B11100, B11100, B11000, B01000};
byte DINO_PIE_DERE_PART_1[8] = {B00000, B00000, B00010, B00010, B00011, B00011, B00001, B00001};
byte DINO_PIE_DERE_PART_2[8] = {B00111, B00111, B00111, B00100, B11100, B11100, B11000, B00000};
byte DINO_PIE_IZQU_PART_1[8] = {B00000, B00000, B00010, B00010, B00011, B00011, B00001, B00000};
byte DINO_PIE_IZQU_PART_2[8] = {B00111, B00111, B00111, B00100, B11100, B11100, B11000, B01000};
byte DOS_RAMAS_PART_1[8] = {B00000, B00100, B00100, B10100, B10100, B11100, B00100, B00100};
byte DOS_RAMAS_PART_2[8] = {B00100, B00101, B00101, B10101, B11111, B00100, B00100, B00100};
byte AVE_ALAS_PART1[8] = {B00001, B00001, B00001, B00001, B01001, B11111, B00000, B00000};
byte AVE_ALAS_PART2[8] = {B00000, B10000, B11000, B11100, B11110, B11111, B00000, B00000};

//defino variables
int columna_dino1 = 1;
int columna_dino2 = 2;
int fila_dino = 1;
unsigned long reloj=0; //para usar la funcion millis envez de delay
int periodo=100; //es el periodo en milisegundo
int flag=1;
int fila_rama=0;
int columna_rama=13;
int periodo2=100;
unsigned long reloj2=0;
int a=0;
int b=1;
int c=2;
int d=0;
unsigned long reloj3=0;
int periodo3=100;
int puntos =0;
int punto2 =0;
int numerorandom=0;
int columnaave= 13;
int e=0;
int fila_ave=1;
int senalactual=0;
int senalantigua=0;
int f=13;
int aceleracion=1;

void setup() {
lcd.begin(16, 2);
lcd.createChar(0,DINO_PARADO_PARTE_1);
lcd.createChar(1,DINO_PARADO_PARTE_2);
lcd.createChar(2,DINO_PIE_DERE_PART_1);
lcd.createChar(3,DINO_PIE_DERE_PART_2);
lcd.createChar(4,DINO_PIE_IZQU_PART_1);
lcd.createChar(5,DINO_PIE_IZQU_PART_2);
lcd.createChar(6,DOS_RAMAS_PART_1);
lcd.createChar(7,DOS_RAMAS_PART_2);
}
void loop() {
if(millis()>reloj+periodo){ //retardo para el pies del dinosaurio
reloj=millis();
if(flag==1){
flag=2;
}
else if(flag==2){
flag=1;

}


}

if(millis()>reloj2+periodo2){ //retardo para la velocidad de las ramas
reloj2=millis();

columna_rama=columna_rama-1;
if(columna_rama<0){
columna_rama=13;
periodo2=periodo2-aceleracion;//aceleracion
numerorandom=random(0,3);//aca debe estar el random ya que es cada vez que regresa a la columna 13


}

f=columna_rama+1;
lcd.setCursor(f,1); //limpio abajo
lcd.print(" ");

f=columna_rama+1;
lcd.setCursor(f,0); //limpio arriba
lcd.print(" ");


lcd.setCursor(0,1); //limpio arriba
lcd.print(" ");

lcd.setCursor(0, 0);
lcd.print(" ");

a=1;
}

if(d==0){
if(flag==1){
lcd.setCursor(columna_dino1,fila_dino);
lcd.write(byte(2));
lcd.setCursor(columna_dino2,fila_dino);
lcd.write(byte(3));
}
if(flag==2){
lcd.setCursor(columna_dino1,fila_dino);
lcd.write(byte(4));
lcd.setCursor(columna_dino2,fila_dino);
lcd.write(byte(5));
}
}

if(a==1){

if(numerorandom == 1){
fila_rama = 1;
lcd.createChar(6,DOS_RAMAS_PART_1);
lcd.setCursor(columna_rama,fila_rama);
lcd.write(byte(6));

}
else if(numerorandom == 2){
fila_rama = 1;
lcd.createChar(7,DOS_RAMAS_PART_2);
lcd.setCursor(columna_rama,fila_rama);
lcd.write(byte(7));

}
else{ //esta es la parte del ave

columnaave=columna_rama;
columnaave=columnaave-1;
fila_rama = 0;
lcd.createChar(6,AVE_ALAS_PART1);
lcd.setCursor(columnaave,fila_rama);
lcd.write(byte(6));

lcd.createChar(7,AVE_ALAS_PART2);
lcd.setCursor(columna_rama,fila_rama); //columna rama porque debe estar a la izquierda de columan eve
lcd.write(byte(7));

}



a=0;
}
//generamos condiciones al chocar


if(digitalRead(13)==HIGH && (columna_rama==1||columna_rama==2||columnaave==1||columnaave==2) && fila_rama==0 ){
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("GAME OVER");
delay(2000);
lcd.clear();
columna_rama=15;
periodo2=100;
puntos=0;
punto2=0;
periodo2=100;

}

if((columna_rama==b||columna_rama==c) && fila_rama==1){ //condicion de la rama
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("GAME OVER");
delay(2000);
lcd.clear();
columna_rama=15;
periodo2=100;
puntos=0;
puntos=2;
periodo2=100;
}

//condicion del ave
// lcd.clear();
// //lcd.setCursor(5, 0);
//lcd.print("GAME OVER");
// delay(2000);
// lcd.clear();
// columna_rama=15;
// periodo2=100;
// fila_rama=1;

//saltar al presionar pulsador púlsador



if(digitalRead(13)==HIGH){

b=50; //a bc lo pongo un valor mayor a 15 para que no coincida con el movimiento de la columna
c=50;

if(d==0){
lcd.setCursor(0, 1); // LIMPIA ABAJO
lcd.print(" ");
}
d=1;

lcd.setCursor(columna_dino1,0);
lcd.write(byte(2));
lcd.setCursor(columna_dino2,0);
lcd.write(byte(3));


}
else{
b=1; //que regrese a su valor de inicio
c=2;
// lcd.setCursor(0, 0);
//lcd.print(" ");
d=0;
}



//creamos otro retardo para los puntos
if(millis()>reloj3+periodo3){ //reatrdo para los puntos acumulados
reloj3=millis();
lcd.setCursor(14, 1);
lcd.print(puntos);

//if(b==50){ // el que solo cuente cuando esta en el piso es opcional
// }
//else{
puntos=puntos+1;
//}

if(puntos==100){
puntos=0;
punto2=punto2+1;
if(punto2==100){
punto2=0;}

}

}


lcd.setCursor(14, 1);
lcd.print(puntos);
lcd.setCursor(14, 0);
lcd.print(punto2);

//detector de cambio de estado
senalactual=digitalRead(13);
if (senalactual != senalantigua)
{
lcd.setCursor(1, 0);
lcd.print(" ");
}
senalantigua = senalactual;

}

El juego del dinosaurio con Arduino, pantalla LCD 16x2 y un pulsador es un proyecto divertido y educativo que combina programación, electrónica y creatividad. A través de la construcción de este juego, se pueden aprender conceptos importantes como la programación de microcontroladores, el uso de sensores y pantallas, y el diseño de interacciones con el usuario. Además, este proyecto puede ser personalizado y mejorado para adaptarse a diferentes niveles de habilidad y necesidades.

En definitiva, construir un juego del dinosaurio con Arduino y otros componentes electrónicos es una excelente manera de fomentar la curiosidad y la creatividad en cualquier persona interesada en la tecnología y la electrónica.
 

Desarrollo

Para el desarrollo de igual forma puedes primeramente realizarlo en tinkercad:

Creado con eXeLearning (Ventana nueva)