Comunidad de diseño web y desarrollo en internet online

Programa tu primer proyecto en Arduino

¿Qué es Arduino?


Arduino es una placa de hadware libre diseñada para facilitar el uso de la electrónica y está dirigida a cualquier persona. Existe una gran variedad de placas Arduino cada una consiste de un microcontrolador y puertos de entrada/salida cada placa es diferenciada de otra ya sea por su tamaño fisico, cantidad de memoria y/o funcionalidad.

Los puertos de entrada/salida son el medio por el cual Arduino detecta y afecta nuestro entorno estos puertos pueden ser digitales o analógicos con las cuales a través de sensores, intervención manual(botones, perillas, etc) o a través de una señal enviada por medio de una aplicación(web, movil o de escritorio) pueden afectar a nuestro entorno ya sea por medio de luces de control, motores y otros actuadores.

Un poco más que un simple hola mundo



El dia de hoy lo que vamos a realizar es un simple juego de piedra, papel o tijera.

¿Qué necesito antes de empezar?

Hardware
  • Una placa Arduino UNO, si tu ya cuentas con alguna placa Arduino diferente a esta la puedes usar sin problemas.
  • Una placa de pruebas.
  • 2 Leds RGB de cátodo común.
  • 6 Resistencias 150 ohms.

Todos estos materiales los puedes encontrar en cualquier electrónica decente o si prefieres comprarlos a través de cualquier tienda en linea, por ejemplo amazon tiene excelentes kits de iniciación muy baratos superiores a cualquiera que puedas comprar en una electrónica.

Software

Si no tienes instalado el entorno de desarrollo de Arduino los puedes descargar aquí y se encuentra disponible tanto para Linux, Mac OS X y Windows. Este entorno de desarrollo está escrito en Java, C y C++.

Ya tengo todo mi material ¿Y ahora?

Con los materiales listados anteriormente hay que armar el siguiente circuito:


Una vez listo el circuito vamos a realizar nuestro programa básicamente la programación en Arduino se estable en dos funciones principales que son:


setup(). En esta se declaran nuestros puertos como entradas/salidas o algún otro código de configuración que solo queramos que se active solo cuando se encienda o reinicie nuestra placa Arduino.

loop(). Esta función se encarga se ejecutar las instrucciones que hay dentro de ella infinitamente mientras nuestra placa Arduino este encendida.

Entonces lo primero que hay que hacer es declarar algunas constantes y unas variables globales para poder usarlas durante la ejecución de todo nuestro programa.

Código :

// Definimos constantes para el primer led RGB
#define led1Rojo 3
#define led1Verde 5
#define led1Azul 6

// Definimos constantes para el segundo led RGB
#define led2Rojo 9
#define led2Verde 10
#define led2Azul 11

// Almacena el valor de nuestra elección
char MiOpcion;

// Almacena el valor de la elección de Arduino
int respuestaArduino;


Despues dentro de nuestra función setup() establecemos el modo de funcionamiento para cada uno de nuestros pines con la instrución pinMode() que nos pide 2 paramentros:

Primero el número de pin con el que vamos a trabajar en este caso esta contenido dentro de cada una de nuestras constantes.

Segundo definir su modo de comportamiento ya sea entrada(INPUT) o salida(OUTPUT).

Código :

void setup(){ // Inicio setup()

// Estableciendo puertos como salida para el primer led RGB
pinMode(led1Rojo, OUTPUT);
pinMode(led1Verde, OUTPUT);
pinMode(led1Azul, OUTPUT);

// Estableciendo puertos como salida para el segundo led RGB
pinMode(led2Rojo, OUTPUT);
pinMode(led2Verde, OUTPUT);
pinMode(led2Azul, OUTPUT);

// Inicia la conexión serial a una velocidad de 9600 bits por segundo
Serial.begin(9600);
//Imprime en pantalla los siguientes mensajes
Serial.println("Arduino te da la bienvenida listo para jugar, empecemos!!");
Serial.println("Introduce 0 para elegir piedra, 1 para papel o 2 para tijera");

}// Fin setup()


Además necesitamos iniciar una conexión serial entre nuestra placa Arduino y nuestra computadora a través de nuestro cable USB y definirle un velocidad de transmición de datos. Si quieres leer un poco más sobre esto entra aquí.

Muy bien llegado a este punto tenemos todo nuestro código de configuración listo ahora vamos con nuestra función loop(). Primero una explicación de la lógica del funcionamiento del juego piedra, papel o tijera con nuestro Arduino no tiene una mano física para jugar con nosotros obvio!!, al menos por ahora...

Entonces vamos a realizar una equivalencia con nuestros leds así que cada color representara una de las 3 opciones y estas quedan expresadas de la siguiente forma tanto para nosotros como para arduino.

(° ! °) 0 = piedra = rojo [°~°]
(° ! °) 1 = papel = verde [°~°]
(° ! °) 2 = tijeras = azul [°~°]

Bueno entonces sabiendo esto para declarar un ganador lo haríamos de la siguiente forma:

Empate: Si ambos tú y arduino colocan la misma opción.

Ganador: Nuestro arduino esperara 2 segundos antes de mostrar al ganador y lo hará apagando el led del perdedor y encendiendo el del ganador en una tonalidad blanca.

Y todo esto se expresa de la siguiente forma en nuestro código de arduino.

Código :

void loop(){ // Inicio loop()

//Verifica si hay datos disponibles para leer
if(Serial.available() > 0){

// Lee el dato entrante y lo asigna a variable MiOpción
MiOpcion = Serial.read();
Serial.println("");

if(MiOpcion == '0'){ // Código para piedra

Serial.println("Has elegido piedra");
verMiOpcion(1, 0, 0);

respuestaArduino = opcionArduino();

// Realiza una espera de 1 segundos antes de mostrar al ganador
delay(2000);
Serial.println("");

if(respuestaArduino == 0) {
Serial.println("Has sido un empate ninguno gana!!");
}

if(respuestaArduino == 1) {
Serial.println("El papel cubre la piedra arduino gana!!");
verMiOpcion(0, 0, 0); // perdedor
verOpcionArduino(255, 255, 255); //ganador
}
if(respuestaArduino == 2) {
Serial.println("La piedra rompe las tijeras tu ganas!!");
verMiOpcion(1, 1, 1); // ganador
verOpcionArduino(0, 0, 0); // perdedor
}

} // Fin del Código piedra

// Espacio para el código papel
// Espacio para el código tijera

} // Fin de la verificación

} // Fin loop()


Ahora como pudiste notar tenemos funciones adicionales a nuestras 2 funciones principales esto con el fin de hacer nuestro código mas sencillo y ordenado vamos a explicar cada una a continuación .

Código :

void verMiOpcion(int Rojo, int Verde, int Azul){

digitalWrite(led1Rojo, Rojo);
digitalWrite(led1Verde, Verde);
digitalWrite(led1Azul, Azul);

}


Bueno como ya sabes en cuanto a electricidad exiten 2 tipos corrientes:

Corriente directa: Esta es la que permite que funcione toda la tecnología de hoy en día, porque este tipo de corriente solo va de su punto mínimo 0 a su punto máximo 1. Entonces se mantiene estable y es lo que necesitan muchos aparatos para funcionar como lo son nuestra computadora, nuestro arduino, etc.

Corriente alterna: Al contrario de la directa en esta su magnitud y sentido varian cíclicamente. Esta es la que permite que la electricidad llegue a nuestros hogares a través de las plantas de energía.

Entonces en conclusión la instrución digitalWrite() lo unico que hace es enviar a través del puerto indicado un 0(apagado) o un 1(encendido).

Código :

int opcionArduino(){

int aleatorio = random(0,2);

if(aleatorio == 0){
Serial.println("Arduino ha elegido piedra");
verOpcionArduino(255,0,0);
}

if(aleatorio == 1){
Serial.println("Arduino ha elegido papel");
verOpcionArduino(0,255,0);
}

if(aleatorio == 2){
Serial.println("Arduino ha elegido tijera");
verOpcionArduino(0,0,255);
}

// esta función devuelve la elección de arduino
// esta es asignada la variable respuestaArduino
return aleatorio;

}


Esta función lo unico que hace es determinar una respuesta para Arduino a través de un numero aleatorio que puede ir de 0 a 2.

Código :

void verOpcionArduino(int Rojo, int Verde, int Azul){

analogWrite(led2Rojo, Rojo);
analogWrite(led2Verde, Verde);
analogWrite(led2Azul, Azul);

}



Bueno la instrucción analogWrite() nos permite introducir valores que pueden ir de 0 a 255 esto solo se puede lograr utilizando lo puertos digitales PWM que lo puedes localizar facilmente porque tienen este signo "~" delante de ellos, estos puertos son especiales porque nos permiten manejar voltaje aleatorio. Entonces en este caso para mostrar el color rojo, verde o azul el lugar de enviarle un 1 tengo que enviare un 255. Esto nos otorga la posibilidad de cambiar la tonalidad de nuestro led RGB y asi poder tener un margen de colores más grande y que no solo vaya de 0(apagado) a 1(encendido).


Ahora todo listo para probar nuestro programa primero necesitamos cargarlo a nuestra placa Arduino una vez hecho esto debemos abrir nuestro monitor serial que nos servira para poder enviar nuestras opciones a Arduino este se encuentra en el menu herramientas>MonitorSerial o bien lo puedes abrir con la combinación de teclas Ctrl+Shift+M.


Una vez hecho esto lo único que tenemos que hacer es introducir un 0 y dar un enter para poder ejecutar nuestro programa.




Enhorabuena!! has hecho tu primer juego con arduino, ahora te toca a ti realizar el código para opción de papel y de tijera.



Recuerda que me puedes seguir en twitter en (@umb_tic) para cualquier duda, aclaración o simplemente para agradecer.

Tambien deja tu opción aquí abajo en los comentarios y no dudes en pedir algún tema que te interese si esta dentro mis posibilidades ten por seguro que lo tendrás lo más pronto posible.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate