domingo, 30 de marzo de 2014

Gamebuino, una consola de 8-bits hecha con Arduino

Gamebuino es un proyecto que busca financiamiento en Indiegogo. Se trata de una consola de mano concebida a partir de la conocida placa de hardware libre, y cuya principal característica es que la plataforma está diseñada para ser hackeable y también facilitar el desarrollo de juegos a cualquiera que tenga el suficiente interés, sin importar que no sea el mejor programador del mundo.



Si te interesa, lamentamos decirte que al principio podría conseguirse por 25 euros en la plataforma de crowdfunding, pero el Early Bird se ha terminado, y si quieres una tendrás que desembolsar 35 euros, que sigue pareciéndonos un precio bastante presumible, o también pagar 65 euros por el pack para dos.

Visto en gizmologia

sábado, 29 de marzo de 2014

Arduino desde cero: manejo de if y lectura de pulsadores

Fuente: editronikx.com



 
Condicional if
Ejecuta una serie de instrucciones si se cumple la condición (TRUE, FALSE, HIGH, LOW, 0, 1). Si no se cumple, el programa salta y no se ejecuta las instrcciones entre las llaves.
 
if (condición) {instrucciones}
 
Ejemplo:
 
if (digitalRead(19) == LOW) {
.......
}

 
Condicional if ... else
Se ejecutan las instrcciones contenidas entre las llaves de else si no se cumple la condición:
 
if (condición) {instrucciones 1} else {instrucciones 2}
 
 





































 

Arduino desde cero: arrays, comunicaciones serie y pwm

Fuente: editronikx.com



Arrays
Un array es un conjunto de variables que se almacenan en posiciones sucesivas, determinadas por índices numéricos. El primer índice de un array es 0, por lo que un array con 5 elementos, tendrá como posiciones inicial y final 0 y 4, respectivamente.

Ejemplo de definición de un array:

int leds[] = {9, 10, 11, 12, 13}

No podemos declarar un array sin indicar su tamaño.

Para arrays de más de una dimensión:

int matriz[2][3] = {{1,2},{1,2,3}}

Puerto Serie
Un puerto serie envía la información mediante una secuencia de bits. Para ello se necesitan al menos dos conectores para realizar la comunicación de datos, RX (recepción) y TX (transmisión).

Para inicializar el puerto serie se utiliza la siguiente instrucción:

Serial.begin(velocidad) donde velocidad se expresa en bps y es un valor entre 300 y 115.200 (normalmente 9600)

Para enviar un mensaje desde Arduino debemos usar las funciones Serial.print() y Serial.println()

Nota: El monitor de puerto serie es una pequeña utilidad integrada dentro de IDE Standard que nos permite enviar y recibir fácilmente información a través del puerto serie. Su uso es muy sencillo, y dispone de dos zonas, una que muestra los datos recibidos, y otra para enviarlos.

Ejemplos de código:

Enviar información:

int cont=0;

void setup(){
  //iniciamos el puerto de serie
  Serial.begin(9600);
}

void loop(){
  //Imprimimos el valor del contador
  Serial.print("Contador: ");
  Serial.println(cont);
 
  //incrementamos el contador y esperamos un segundo
  cont++;
  delay(1000);
}



Recibir información:

int option;
int led = 13;

void setup(){
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop(){
  //si existe datos disponibles los leemos
  if (Serial.available()>0){
    //leemos la opcion enviada
    option=Serial.read();
    if(option=='a') {
      digitalWrite(led, LOW);
      Serial.println("OFF");
    }
    if(option=='b') {
      digitalWrite(led, HIGH);
      Serial.println("ON");
    }
  }
}


Aunque la placa arduino solo disponga de un puerto serie, con la librería SoftwareSerial.h incluida en el IDE de arduino, se puede tener másde un puerto serie con la limitación de que solo puede estar escuchando por uno. Ejemplo incluido en el IDE: TwoPortReceive.ino
 
El conversor analógico digital es de 10 bits con lo que los valores entre 0 y 5 voltios los convierte a un valor digital entre 0 y 1023. Para ller el puerto A1:
 
medida = analogRead(A1);






Arduino desde cero: funciones

Fuente: editronikx.com


Funciones (void): 
se definen después del void setup() y antes del void loop(). Se define de la siguiente manera:

void funcionName() {..}

Para llamar a una función:

funcionName();


Arduino desde cero: uso de for

Fuente: editronikx.com



Arduino desde cero: instalación y pruebas

Fuente: editronikx.com


Contenido: Instalación del software arduino y ejemplos de programación con el IDE de Arduino.

Página oficial: https://www.arduino.cc/
 

Arduino desde cero: Primeros pasos


Fuente: editronikx.com




Estructura de un sketch 
La estructura básica del lenguaje de programación de Arduino es bastante simple y se compone de al menos dos partes. 
  • void setup() {...}
  • void loop() {...}
Configuración de pins
pinMode(num,tipo) siendo num el número de pin (1,2,..13) y el tipo si es entrada (INPUT) o salida (OUTPUT)

Programar el estado de un pin digital
digitalWrite(num,estado) siendo num el número de pin (1,2,...13) y estado si debe estar a nivel alto (HIGH) que equivale a una salida de 5v. o a nivel bajo (LOW) que equivale a una salida de 0v.

Retardos
delay(mseg) siendo mseg los milisegundos de retardo

Ejemplo:

void setup()
{
  pinMode(13,OUTPUT);
}

void loop()
{
  digitalWrite(13,LOW);
  delay(500);
  digitalWrite(13,HIGH);
  delay(500);}

Notas
  • En arduino uno tiene un led conectado directamente al puerto 13 por lo que no es necesario conectar físicamente ningún otro led
  • En Arduino existe una constante denominada LED_BUILTIN que representa el número del PIN al que internamente está conectado el led integrado en la placa. Por tanto, en el ejemplo anterior podemos indicar: pinMode(LED_BUILTIN,OUTPUT);

Señales analógicas (PWM)
El procedimiento para generar una señal analógica es el llamado PWM (Pulse-width modulation) (señal de modulación por ancho de pulso).
Cuando trabajamos con PWM no es necesario definir previamente el modo de trabajo del pin

analogWrite(num,valor) donde num es el número de pin y valor es la tensión de salida que va desde su valor mínimo 0 a su malor máximo 255.

bucle for()
for(valorInicial,condición,incremento) donde indicamos el valor inicial de la variable, la condición para que se repitan las instruciones y el valor del incremento de la variable
Ejemplo:

void setup()
{

}

void loop()
{
  analogWrite(9,0);
  for(int i=0;i<=255;i++)
  {
    analogWrite(9,i);
    delay(10);
  }
}

donde int define una variable como entera. Para definir un valor constante se utiliza const seguido del tipo de variable

Nota: Si definimos una variable, si esta definición se realiza fuera de void setup() la podremos utilizar en todo el programa (variable global). En cambio, si la definimos dentro de un void solo lo podremo utilizar dentro de dicho void (variable local). Ejemplo:

const int lowestPin = 2;
int tiempo = 20

void setup() {...}
void loop() {...}

Configuración del módulo Bluetooth

Fuente: http://ingeerick.weebly.com

En esta ocasión les traigo información sobre como configurar nuestro modulo Bluetooth HC-06, que también es conocido con el nombre clave LINVOR.

En este post te enseño a configurar las siguientes tres aspectos esenciales de este modulo mediante comandos AT que enviaremos a través de un ARDUINO UNO:
  1. BPS.
  2. NOMBRE.
  3. CONTRASEÑA.
Sin lugar a dudas la comunicación vía bluetooth ha logrado posicionarse como una de las favoritas para los usuarios de dispositivos móviles, sustituyendo a la anterior comunicación Infrarroja (IR), y es que permite enlazar a los dispositivos de una forma inalámbrica y sin necesidad de estar relativamente cerca el uno del otro. Por esta razón es que distintas compañías se han empeñado en facilitar cada vez mas el acercar este tipo de tecnología para incluirla en nuestra vida diaria, tanto que ahora es posible encontrar módulos bluetooth de bajo coste mismos que son totalmente configurables y de fácil implantación en nuestros proyectos de electrónica.

En esta ocasión estaremos configurando el modulo HC-06 o también conocido como LINVOR, que es de los mas económicos y de fácil adquisición.
Datashhet: Es casi imposible comenzar a utilizar un dispositivo electronico sin su correspondiente hoja de datos (Data Sheet), por lo que puedes acceder a ella dando clic en la imagen de la izquierda. En ella encontraras aspectos mucho mas técnicos de los que veremos en el desarrollo de este articulo y que aunque no son de mucha importancia por el momento, nos sirven para conocer mejor a nuestro dispositivo.

La conexión que tendrás que hace entre el bluetooth y el Arduino, sera como la que se muestra a continuación y aunque el modulo que aparece en la imagen no es el mismo que el HC-06 solo sirve como referencia, ya que nuestro modulo también cuenta con los mismos 4 pines para su conexión. 



La distribución de los pines, de izquierda a derecha, es:

  • RXD
  • TXD
  • GND
  • VCC

Código para Arduino: l código que presento en el video te lo facilito dando clic en la imagen de la izquierda, digo por aquello de que no lo quieras escribir todo desde cero.

Antes de empezar:
  1. Para poder configurar el bluetooth a tu gusto, necesitamos que este no se encuentre unido a ningún otro dispositivo (Celular, Tablet, PC, etc), al momento que se intenta reprogramar ya que de lo contrario no podremos cambiar absolutamente ninguno de sus parámetros.
  2. En el momento que intentes cargar el sketch a tu placa ARDUINO, no puedes tener conectado el bluetooth, ya que de lo contrario te aparecerá un error en la pantalla, impidiéndote que grabes el Arduino hasta que retires el modulo en cuestión. 


Otros recursos:

Conexión Arduino - Android

Fuente del artículo: http://ingeerick.weebly.com


En este proyecto conectaremos nuestra placa Arduino con un dispositivo Android mediante Bluetooth. Para ello, es necesario el siguiente material:

Hardware:
  • Bluetooth HC-06 o Linvor
  • Arduino UNO
Software:
  • App Inventor
  • Arduino
Para conocer como configurar el módulo de bluetooth hay que leer el siguiente artículo: Configurar el módulo bluetooth


Paso 1: Es necesario conocer la dirección MAC del bluetooth que deseamos controlar y para ello hay varias formas de hacerlo, ya sea que te compres y descargues una aplicación como lo es "Blue Soleil" o que hagas como yo, me metí al Google Play (Tienda de Android) y me encontré con esta aplicación "Localizador de Bluetooth", que para mi gusto es muy buena. 

Paso 2: Ya que descargaste, instalaste y ejecutaste la aplicación, te aparecerá una pantalla similar a la mostrada en la siguiente imange, donde podremos identificar la dirección MAC de nuestro dispositivo que viene dada en un formato como este XX:XX:XX:XX:XX:XX. Es aquí donde resulta de gran importancia haber cambiado los parámetros de nuestro bluetooth, tal como te muestro en el enlace anterior para configurar el módulo bluetooth ya que de esta forma identificaremos rápido nuestro dispositivo.


En este punto que ya conoces la dirección MAC, el nombre, contraseña y velocidad a la que trabaja tu dispositivo solo falta que te vincules a él, ¿pero y eso como lo hago?, pues bien fácil, solo sigue estos pasos:
  • Paso1: Activa el bluetooth de tu móvil si es que no lo está ya.
  • Paso2: Busca el nombre del bluetooth que tienes conectado al Arduino
  • Paso3: Conectate con él ingresando el código de 4 dígitos que hayas ingresado a la hora de configurarlo, o si todo está como de fabrica este será 0000 o 1234.
  • Paso4: Listo, ya solo sigue con el resto de este tutorial y mucho éxito. 






viernes, 28 de marzo de 2014

Colores

Aprenderemos a trabajar con colores:


Imágenes

Trabajar con imágenes:


Instalación de AppInventor 2

Instalación:

Web App Inventor: http://appinventor.mit.edu/explore/

Finalización del módulo 4

Alimentación y baterias

Seguimos...



Comunicación serie

La comunicación serie me permitirá enviar y recibir datos a arduino desde el PC utilizando el monitor.



jueves, 27 de marzo de 2014

Motores

Veamos como conectar los 3 tipos de motores más utilizados a la hora de construir robots con arduino.


Para incluir una librería: #include <Servo.h>
                                         Servo servo;

Sensores

Veamos como trabajar con sensores resistivos y pulsadores.


Los pins analógicos no es necesario inicializarlos (setup).
Para declarar una variable: int x;
Para inicializar la comunicación serie: Serial.begin(9600); [9.600 baudios]
Para obtener un dato de un puerto serie: x = analogRead(0);
Para mostrar los datos en el monitor: Serial.println(x);

Actuadores sencillos

En este primer ejemplo práctico veremos como conectar un led y como enviar el firmware necesario para hacerlo funcionar.


Download: http://arduino.cc/en/Main/Software

¿Como funciona la placa de Arduino?

En este vídeo veremos el funcionamiento y la composición de cada una de las partes de la placa de Arduino.



Presentación del módulo 4

Arduino una plataforma de hardware y software opensource, diseñada para que de forma fàcil y sin tener que bajar a bajo nivel podamos prototipar y construir robots y artilugios electrónicos. El hecho de ser una plataforma de hardware abierto y con una gran comunidad de usuarios detrás, hace que podamos encontrar en la red muchísimos recursos para integrar todo tipo de actuadores y sensores.


Web oficial de Arduino: http://arduino.cc/

martes, 18 de marzo de 2014

Scroll horizontal

Hacer un Scroll es una de esas cosas que nuestros alumnos desearán hacer en cuanto se les quede pequeña la pantall de 480x360 píxeles.




Lanzar proyectiles y colisiones "Invasores del espacio"

En este vídeo veremos una implementación simple del lanzamiento de proyectiles desde un objeto.




Simulando la gravedad y los MRUA "juegos de plataformas"

Simular el movimiento Rectilíneo Uniformemente Acelerado, el rozamiento y la gravedad es otra de las posibilidades interesantes a la hora de implementar un videojuego con Scratch.




Clonar funciones y sprites: "El juego de la vida de John Conway"

El juego de la Vida, es el mejor ejemplo de un autómata celular. En este vídeo veremos como implementar en Scratch una versión usando la herramienta de "Generar clones"



Dibujo de funciones gráficas: "Ecuación de segundo grado"

El uso de Scratch para dibujar funciones es una posibilidad interesante. En este vídeo veremos como de forma simple dibujar una ecuación de segundo grado.




Simulación de máquinas: "el parquímetro"

En este vídeo veremos como simular el comportamiento de una máquina realizando un juego sencillo.




Presentación del módulo 3

Dentro de la curva de aprendizaje de scratch nos encontramos varios handicaps que pueden parecer insuperables o realmente muy complicados. Durante esta semana demostrar 4 o 5 patrones a la hora de diseñar diferentes videojuegos y simulaciones, que han sido recurrentes durante toda mi experiencia y acostumbran a ser puntos donde los estudiantes se quedan atascados y les cuesta elaborar soluciones fàciles o recursos para poder seguir adelante.

domingo, 16 de marzo de 2014

Música y sonido

Exploremos ahora las posibilidades musicales de Scratch.



El MIDI nos permite tocar notas musicales de diferentes instrumentos.
La duración de los pulsos se miden en unidades de 60 pulsaciones/minuto.

En este vídeo Tony Abellán y Diego Nieves nos enseñaran a hacer el acompañamiento, y el ritmo de bajo de una canción utilizando Scratch.

Dibujos y formas usando el lápiz

En este vídeo veremos diferentes posibilidades de dibujo de formas con Scratch. Entre otros veremos como dibujar un fractal.

Como ya comentamos, estas herramientas de dibujo son herencia del antiguo Logo, si os interesa ver como era podeis encontrar algunas versiones online como esta.




El tamaño de la pantalla es 480x360 [(-240,-180)(240,180)]

Curva de Koch: http://es.wikipedia.org/wiki/Copo_de_nieve_de_Koch

Variables, preguntas y listas

La memoria en Scratch se gestiona utilizando Variables y listas. Estas, pueden ser locales dentro de cada objecto, globales dentro de nuestro programa, o “cloud variables” que se utilizan para compartir información con cada una de las ejecuciones de nuestro programa en la nube (tan solo verison online de Scratch).


Por otro lado las preguntas y respuestas nos ayudarán a interaccionar con el usuario-jugador.



Las variables permiten almacenar datos dentro de la memoria RAM del ordenador.

Lista es un listado que también podemos almacenar.

Estructuras de interacción básicas y de movimiento

Movimiento:


Cada uno de los personajes u objectos de Scratch puede moverse tanto de forma cartesiana ( X: izquierda-derecha Y: arriba-abajo); como de forma polar (Orientación y movimiento). Para realizar cada uno de esos tipos de movimiento tenemos en el apartado de bloques de movimiento (azul) diferentes opciones.

Interacción y eventos:

Los eventos que hacer reaccionar un personaje u objeto pueden ser tanto de interacción del usuario (bandera de inicio, pulsación de tecla, click en el objeto) o de interacción con otros objetos (paso de mensajes, aviso de cambio de fondos).

El paso de menaajes, es la interacción que utilizaremos para que todos los objetos sepan, que hemos pasado de nivel, o que se han de situar en un lugar diferente del que estan.

Sensores y bloques lógicos - matemáticos:

Estos dos grupos de bloques nos ayudarán a determinar los puntos de interacción entre los diferentes objetos. Como puede ser saber cuando dos objectos colisionan, o han superado un lugar concreto de la pantalla.



Si se indica que un objeto desaparezca, al principio del programa hay que indicar que aparezca.

Hay que tener en cuenta que Scratch es un lenguaje orientado a objeto y que todos los objetos (personajes, fondos, etc...) tienen propiedades y eventos.

Presentación del Módulo 2

Durante este segundo módulo, profundizaremos más en los elementos de programación de Scratch. En primer lugar veremos cómo gestiona scratch la memoria y como funcionan las variables y listas. Y trabajaremos aspectos realmente interesantes como la gestión de los dibujos en pantalla, y de la producción de sonidos y melodías.




Material complementario M2

“Sembrando las semillas de la sociedad creativa” - Mitchell Resnick:
http://web.media.mit.edu/~mres/papers/sowing-seeds-spanish-translation.pdf

“Cerrar la brecha de la fluidez” -Mitchell Resnick:
http://web.media.mit.edu/~mres/papers/cacm-3-01-spanish.pdf

Script en Python para importar archivos Midi aScratch directamente:
https://github.com/blob8108/kurt

viernes, 14 de marzo de 2014

Bloques de uso más común: Condicionales, bucles y sensores

En este vídeo le dedicaremos algo más de tiempo a observar como funcionan los bloques más comunes como son los condicionales y los bucles.



Bloques de control:
Bucles: permiten repetir una acción durante un determinado número de veces. Tenemos 3 tipos de bucles:
repetir: nos permite repetir una acción un número determinado de veces.
por siempre: bucle infinito que se repite hasta la saciedad.
repetir hasta que: se repite la acción hasta que se cumple una condición.



Condicionales: son acciones que ejecutan un bloque de programa u otro si se cumple o no una condición (Sensores u operadores con forma romboidal)



Las condiciones vienen determinadas por un sensor o por un operador.



Se pueden anidar varias condiciones:



Para valores al azar se utiliza el operador "número al azar"


También en este videotutorial se habla de otros sensores, de las variables, etc...

Eventos y programación

En este vídeo empezamos a programar con Scratch. Os recomiendo empezar a utilizar las"Scratch Cards" para aprender los conceptos de programación básicos.

También podeis hecharle un vistazo a la "Guia de inicio de Scratch" para empezar.



En este tutorial veremos:

  • Movimientos de personajes
  • Rotaciones
  • Acciones al iniciar la ejecución del programa
  • Ejecuciones continuas de una acción

Personajes

Como vereis Scratch consiste en el diseño y programación de diferentes "personajes" que interactuan entre ellos y/o con el usuario-jugador.



Utilización del color de relleno transparente.

Interfaz de usuario

En este vídeo empezamos a trabajar con Scratch y veremos como funciona su interfaz de usuario.


Se puede trabajar online u offline. Para descargarse el programa en el PC:
http://scratch.mit.edu/scratch2download/

Origen de Scratch



Scratch es un Lenguaje de programación orientado a objeto. Scratch está programado sobre Squeak y este a su vez está programado sobre Smalltalk.

¿Qué es Scratch?

Veamos ahora que es Scratch:



Presentación del módulo 1

Como compartir un proyecto en Scratch

En este vídeo os explicamos cual es el procedimiento para haceros una cuenta en la web de scratch y para subir vuestras actividades a la comunidad. 



Web de Scratch: http://scratch.mit.edu/

¿Qué es Scratch?.

Listado de Materiales
  • Resistencia 10K
  • Piezo buzzer
  • Boton/Pulsador
  • Resistencia 10K
  • Servo Motor
  • Led tricolor
  • Resistencia 220 ohm
  • TIP120
  • Resistencia 1K
  • Diodo 1N4004
  • Sensor ultrasonidos HC-SR04
  • Placa Adruino
  • Cable USB

Donde podemos encontrar el material

Los componentes electrónicos básicos como leds o resistencias, los podemos encontrarlos en cualquier tienda de electrónica de nuestra ciudad o de la gran ciudad más cercana. También podemos encontrarlos en alguna tienda online como pueden ser http://diotronic.com,http://microcontroladores.com , o http://radioshack.com

Los servomotores, y motores DC los podemos obtener de tiendas de modelismo, o de alguna web especializada como: http://conrad.de , http://hobbyking.com

Las placas de arduino podemos encontrarlas en la propia “store” de arduinohttp://store.arduino.cc , o de alguna de los otros distribuidores oficales:http://arduino.cc/en/Main/Buy

En cualquiera de estos distribuidores oficiales podemos encontrar kits con juegos de sensores interesantes, y diferentes tipos de componentes (cetronic, cooking hacks, marfshop,bricogeek ro-botica).

Por último también podemos encontrar webs de origen asiático que ofrecen sus propias versiones de arduino “no oficiales” y más económicas. Pero siempre es recomendable utilizar el material “oficial”, por un lado ganamos en fiabilidad y por otro de esta manera recompensamos el trabajo hecho por el equipo de arduino a la comunidad openSource.

Chasis para los robots con ruedas:

En los ejemplos hacemos servir 2 tipos de chasis. El primer chasis es el de parallaxhttp://www.parallax.com/product/700-00022 que funciona con servomotres de rotacióncontinua.

Para el segundo chasis, el que utiliza los motores DC, existen infinidad de opciones: (http://www.bricogeek.com/shop/robotica/283-chasis-robot-4x4-con-motores.html,https://www.sparkfun.com/products/12089, http://marf.es/shp/index.php?id_product=15&controller=product&id_lang=4)

Pero si disponeis de una impresora 3D siempre os podeis imprimir vuestro propio chasis usando los planos de, por ejemplo el miniSkybot de la gente de UC3M-UAM:http://www.thingiverse.com/thing:7989. O algun otro similar:http://www.thingiverse.com/thing:38073, http://www.thingiverse.com/thing:19594,http://www.thingiverse.com/thing:13042

Formación en Scrath y Arduino

Comienzo el curso de formación de Scrath y Arduino en MiriadaX titulado Robots y Videojuegos en las aulas: Scratch y Arduino para profesores.


No soy profesor pero me parece una buena manera de empezar con Arduino.

Presentación

Este blog pretende ser un punto de encuentro para aquella información y formación interesante sobre Arduino. Soy novato por lo que iré añadiendo entradas a medida que vaya formándome en esta plataforma de desarrollo.