Icono del sitio AranaCorp

Crear emoticones para interactuar con el robot

Al hacer un robot, puede ser divertido darle más vida al hacerlo interactivo. Por ejemplo, es posible darle el piso, hacer que haga sonidos o cambiar de color dependiendo de las acciones externas y sus estados. En este proyecto, utilizaremos una pantalla LCD16x2, disponible en varios kits Arduino, para permitirle mostrar iconos que representen emociones.

Diagrama de cableado

Algoritmo

Vamos a crear diferentes formas para dar emociones al robot. Para esto, elegimos colorear algunos de los caracteres en blanco. Para colorear en blanco un carácter en la pantalla LCD, escriba el valor 255 en la ubicación correspondiente. Por lo tanto, crearemos una matriz para cada figura que queramos mostrar con una función que escribirá 255 o 0 dependiendo de la ubicación del cursor.

PrintFace

Primero, definimos la función PrintFace () que colocará el cursor y coloreará el carácter correspondiente de acuerdo con la matriz dada como entrada.

Soñoliento

Para cada una de las caras, definimos las áreas a colorear. Para el estado de sueño, coloreamos ocho caracteres simétricamente para representar los ojos cerrados. Este icono se puede usar si el robot está aburrido o si la batería está descargada, por ejemplo.

int  sleepyFace[2][16]={
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
 {0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0}
};

Neutro

Para el estado neutral, coloreamos ocho caracteres en la parte inferior y superior simétricamente para representar los ojos abiertos. Este ícono se puede usar cuando el robot está esperando o en combinación con el ícono para dormir para que parpadee.

int  normalFace[2][16]={
 {0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0},
 {0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0}
};

Feliz

Para el estado feliz, coloreamos caracteres para reproducir el emoticón (^^) que representa ojos sonrientes. Este icono se puede usar cuando el robot ha completado con éxito una acción.

int  happyFace[2][16]={
 {0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0},
 {0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0}
};

Enojado

Para el estado nervioso, coloreamos caracteres para reproducir los ceños fruncidos. Este icono se puede usar cuando el robot ha completado con éxito una acción.

int  angryFace[2][16]={
 {0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0},
 {0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0}
};

Triste

El estado triste estará representado por ojos llorosos para los cuales es suficiente invertir las líneas de la matriz del icono nervioso.

int  sadFace[2][16]={
 {0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0},
 {0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0}
};

Código completo

Finalmente, combinando las definiciones anteriores, obtenemos el siguiente código que mostrará los diferentes iconos cada dos segundos.

/*
 * Liquid cristal faces
 */

// include the library code:
#include <LiquidCrystal.h>


// initialize the library with the numbers of the interface pins
//LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int  sleepyFace[2][16]={
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
 {0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0}
};

int  happyFace[2][16]={
 {0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0},
 {0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0}
};

int  angryFace[2][16]={
 {0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0},
 {0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0}
};

int  sadFace[2][16]={
 {0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0},
 {0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0}
};

int  normalFace[2][16]={
 {0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0},
 {0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0}
};

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);// set up the LCD's number of columns and rows: 
  analogWrite(8,15);
}

void loop() {

  neutral();
  delay(2000);
  
  happy();
  delay(2000);
  
  sleepy();
  delay(2000);  

  angry();
  delay(2000);  

  sad();
  delay(2000); 

  lcd.clear();
}

void neutral(){
  printFace(normalFace);
}
void happy(){
  printFace(happyFace);
}

void angry(){
  printFace(angryFace);
}

void sad(){
  printFace(sadFace);
}

void sleepy(){
  printFace(sleepyFace);
}

void printFace(int emo[][16]){
  lcd.clear();
  for(int i=0;i<2;i++){
    for(int j=0; j<16;j++){
      lcd.setCursor(j, i);    
      if(emo[i][j]==1){
        lcd.write(255);
      }
    }
  }
}

Después de configurar una pantalla de emoción, puede usar este código en combinación con otros dispositivos para darle a su robot aún más vida e interactividad. Utilizando módulos como sensores, motores, sonidos y colores.

Próximas etapas

Fuentes

Salir de la versión móvil