domingo, 19 de febrero de 2012

Matilde Mini

Os presento a Matilde-Mini:

La antigua Matilbot funcionaba bastante bien, aunque nunca la termine del todo. Sin embargo tenia un par de espinitas, la primera era que usaba un arduino entero y un driver para motores comprado. Yo quería algo mas barato, artesanal, rustico, de andar por casa vaya... Así que me puse manos al soldador y hice aproximadamente esto:


Pude sustituir toda la tarjeta de arduino por su microcontrolador, un regulador de tensión y un cristal. Al mismo tiempo cambie el driver de motor basado L298 por un L293NE.

Recorte la estructura de Meccano, le quite los bumpers frontales, los infrarrojos bajeros y los módulos de radiofrecuencia, sin embargo le puse unos ultrasonidos, quedando tal que así:

Vista superior

Vista frontal

Le quite todas las pilas lipo y cargadores por usb, dejando solo una pila 9v para la lógica, pila recargable muy mala que se agota enseguida. Y cuatro pilas AA recargables también:


Esta vez la idea era simplificar incluso la programación así que le implemente un algoritmo mas simple: al detectar un obstáculo gira y busca el espacio suficiente para continuar avanzando, este es el programa que tiene a día de hoy:

#define PIN11 9
#define PIN12 10
#define PIN21 5
#define PIN22 11
#define PIN_ULTRAS 13

#define RETRAZO 20
#define INICIO 30

#define DISTANCE 30

#define MAX_SPEED 255
#define MEDIUM_SPEED 180

#define MICROS2CTM(a) a / 29 / 2

#define MOTOR_RIGHT motor(PIN11, PIN12, speedRight)
#define MOTOR_LEFT motor(PIN22, PIN21, speedLeft)
#define MOTOR_RIGHT_BACK motor(PIN12, PIN11, speedRight)
#define MOTOR_LEFT_BACK motor(PIN21, PIN22, speedLeft)

#define STOP_MOTOR(a, b, c) a = 0;digitalWrite(b, LOW);digitalWrite(c, LOW)

void setup()
{
  pinMode(PIN11, OUTPUT);
  pinMode(PIN12, OUTPUT);
  pinMode(PIN21, OUTPUT);
  pinMode(PIN22, OUTPUT);

  digitalWrite(PIN11, LOW);
  digitalWrite(PIN12, LOW);
  digitalWrite(PIN21, LOW);
  digitalWrite(PIN22, LOW);
  
  delay(2000);
}

int speedLeft = MAX_SPEED;
int speedRight = MAX_SPEED;

void loop() {

  if (MICROS2CTM(distanceInTime()) < DISTANCE)
  {
    speedLeft = MAX_SPEED;
    MOTOR_LEFT;
    speedRight = MAX_SPEED;
    MOTOR_RIGHT_BACK;

    while (MICROS2CTM(distanceInTime()) <= DISTANCE)
      delay(50);
  }

  speedRight = MAX_SPEED;
  speedLeft = MAX_SPEED;

  MOTOR_RIGHT;
  MOTOR_LEFT;

  while (MICROS2CTM(distanceInTime()) > (DISTANCE + 10))
    delay(50);
}

void motor(int pinA, int pinB, int speedM)
{
  digitalWrite(pinB, LOW);
  analogWrite(pinA, speedM);
}

long distanceInTime()
{
  pinMode(PIN_ULTRAS, OUTPUT);
  digitalWrite(PIN_ULTRAS, LOW);
  delayMicroseconds(2);
  digitalWrite(PIN_ULTRAS, HIGH);
  delayMicroseconds(5);
  digitalWrite(PIN_ULTRAS, LOW);

  pinMode(PIN_ULTRAS, INPUT);
  return pulseIn(PIN_ULTRAS, HIGH);
}


Un programa muy simple en que solamente avanza hasta que detecta un objeto a menos de 30ctms, momento en que invierte el movimiento de la rueda derecha hasta que encuentra espacio mayor de 30ctms tras lo cual vuelve a moverse hacia adelante y repite el ciclo.

Observaciones y resultados:
Funciona... Pero...
  • La pila de 9v no aguanta dos asaltos y en cuanto empieza a decaer se queda colgado.
  • No parece detectar muy bien los obstáculos cuando va poco frontal y tropieza con superficies oblicuas.
  • Precisamente por lo anterior se queda trabado con las ruedas en las esquinas, quizás podría mejorarse sustituyendo las ruedas por otras mas finas que hicieran desplazarse ante los choques en lugar de quedar trabado.
  • Parece que el hecho de que el L293 solo pueda conducir 1A por canal y el de solo tener 5V para los motores hace que sea bastante lento :P, quizás poniendo mas pilas en serie y/o cambiando el puente en h(L293) por un L298 mejore esta lentitud. Pero el L298 es mas complejo y caro...
En fin que me hace falta mas tiempo libre para hacer mas guarrerías de estas...


jueves, 15 de septiembre de 2011

Matilbot

Superior encendido y conectado por usb

El objetivo es conseguir un carrito seguidor de lineas, aunque a medida que realizaba el proyecto se vio claro que podría hacer una especie de explorador aleatorio.

Los componentes de Matilbot son:


Algunas fotos:
Motores futaba s3003, ruedas, fines de linea, infrarrojos, vista inferior

Estructura, vista lateral
Estructura superior

Logica y driver de motores, vista superior
Lógica y driver de motores vista trasera
Próximamente algo de código...



miércoles, 14 de septiembre de 2011

Arduino

Desde  hace un tiempo vengo trasteando con Arduino gracias a unos talleres en la Tenerife Lan Party que me a abierto las puertas a un nuevo mundo :P, así que estoy planeando una serie de proyecto para ir aprendiendo. Pronto publicare un post sobre un carrito robot, que estoy haciendo con fotos y probablemente algo de código...

miércoles, 26 de mayo de 2010

Encuesta sobre Sindarin

Quieres ayudar a desarrollar el Sindarin puedes empezar respondiendo a la siguiente encuesta:

https://spreadsheets.google.com/viewform?hl=es&formkey=dGZEU256Q29BdXcxSXRhR0ptSXd1d3c6MQ#gid=0

Esta encuesta es muy antigua, así que la cierro.

lunes, 17 de mayo de 2010

Galactic Empire: Se busca colaboración

Galactic Empire

Este documento esta en desarrollo, no es definitivo pero si orientativo, aun quedan muchas cosas por definir.


Objetivo:

    Desarrollar un juego de conquista espacial por turnos inspirado en Master of Orion, FreeOrion y Freecol.

Características:

  • Multiplataforma: A semejanza del FreeCol que posee la capacidad de ejecutarse sin problemas, sin modificar el ejecutable, en sistemas Windows como en sistemas Linux, mediante la maquina virtual de Java
  • Envolvente y coherente: Al igual que el Master of Orion y en cierta medida el FreeCol, las animaciones, ambientación y las interfaces de usuario están caracterizados de manera que el jugador pueda verse inmerso en el rol.
  • Mínimo numero posible de dependencias externas: Para favorecer la multiplataformidad y simplicidad de ejecución/instalación.
  • Estructura de cliente/servidor donde sea posible: Para favorecer tanto la multiplataformidad como una posible implementación de partidas en red o incluso una plataforma centralizada de juegos, donde el cliente pueda estar implementado diferenciadamente en una diversidad de plataformas, como Android.
  • GNU/GPL y colaborativo.

Referencias:


Diagrama de organización de las comunicaciones de los usuarios:



Diagrama de comunicación para los diversos jugadores con el ciclo de ejecución del juego:


Pantallas necesarias:
Estas pantallas solo son orientativas, su diseño cambiara durante el desarrollo de este documento, incluso añadiendo nuevas o quitando y fusionando otras.

  1. Vídeo: Muestra las diversas cinemática del juego.
  2. Menú
  3. Configuración de nuevo juego
    1. Configuración de galaxia
    2. Configuración de raza
  4. Carga/Salvar de juego: Carga o salva el estado del juego
  5. Ventanas de juego
    1. Pantalla principal: mapa/estrategia/logística
    2. Resolución de batallas tácticas orbitales
    3. Datos planetarios
    4. Datos de investigación y árbol tecnológico.
    5. Informes de logística
    6. Informes de flota
    7. Diseño de flota
    8. balanceo de asignación de recursos
    9. Dialogo de victoria/derrota

2.- Menu: Punto de entrada donde el jugador elige una de la opciones iniciales.


3.- Configuración de juego nuevo:

3.1.- Configuración de galaxia: Tamaño, numero de oponentes y dificultad.

3.2.- Configuración de especie: Configura los diferentes parámetros de la especie.

4.- Cargar/Salvar partida: Carga o salva una partida.

5.- Ventanas de juego:

5.1.- Pantalla principal, mapa/estrategia/logística: 

Mapa general donde se ordena las acciones de la flota, asignación de tareas, información y actividades del planeta seleccionado

5.2.- Resolución de batallas tácticas orbitales:

Una vez que coinciden dos flotas rivales en la misma casilla de la galaxia o una flota y un sistema defensivo planetario en un mismo sistema y una de las dos decide atacar a la otra, surgirá la posibilidad de resolver el conflicto estomáticamente o tomar el control táctico de la batalla por el jugador humano, esta batalla se revolverá en esta batalla. Presentando un grid con los rivales distribuidos en los extremos del mapa. Si existiera una colonia o posición defensiva en dicha casilla, sus alrededores estarían ocupados por la flota aliada, mientras que la flota ofensiva en el extremo contrario.

5.3.- Datos planetarios:

Representa gráficamente el estado del planeta seleccionado, flota en órbita, defensas planetarias, recursos existentes, población, industria, estado de la ecología planetaria, etc.

5.4.- Datos de investigación y árbol tecnológico:

Muestra la investigación en curso, tiempo hasta finalizar, permite cambiar la investigación mostrando también un árbol tecnológico y cuantos recursos esta recibiendo la investigación.

5.5.- Informes de logística:

Muestras las actividades que están siendo realizadas en nuestros sistemas, datos, evolución de los mismos, flota desplegada y defensas.

5.6.- Informes de flota:

Muestra el estado y actividad de todas nuestras flotas, pudiendo reasignarles tareas, cancelar las tareas actuales y eliminar unidades particulares.

5.7.- Diseño de flota:

Definido un numero máximo de modelos distintos de naves disponibles en un momento dado, el usuario podrá rediseñar la flota a su gusto, según su nivel tecnológico, para ello existirá una serie de tipos de naves basadas en la cantidad de espacio libre en ella, (pequeñas, medianas, grande), en la cual el jugador podrá distribuir gadgets  según su nivel tecnológico, así como en el espacio requerido y el espacio libre en las diversas secciones de las nave. A mayor tamaño de la nave y mayor nivel tecnológico usado en ella mayores serán los recursos necesarios para fabricarla. A parte de la limitación espacial y tecnológica, las estructuras de naves, así como los gadgets podrán tener limitaciones particulares del modelo.


5.8.- Balanceo de asignación de recursos:

De los diferentes recursos del juego, se podrá balancear que proporción de recursos se redirige a producción, investigación, etc... Cosa que se realizara en esta pantalla.

Pantallas deseables:

  • Splash
  • Configuración del juego
  • Ventanas de juego
    • ¿resolución de batallas tácticas planetarias?
    • Ventana de diplomacia.
    • Ventana de eventos/noticias
    • Ranking de imperios.

Sistema de juego:

Sistema de especies:

    Al igual que en Master of Orion, el jugador puede elegir una especie con la que jugar y esta a su vez posee una serie de características que influyen en el juego, de manera que unas especies tengan una mayor capacidad de procreación, mientras otra tendría mayor capacidad de investigación, de forma que en media las ventajas deberían equilibrarse.

Características de especies:
  1. Nombre
  2. Color y estandarte
  3. Coeficiente de crecimiento
  4. Coeficiente de industrialización
  5. Coeficiente de contaminación
  6. Coeficiente de investigación

Árbol tecnológico:

Define las tecnologías que posee el jugador, así como las tecnologías que están siendo investigadas y aquellas a las que se pueden estudiar a partir de las restricciones jerárquicas del árbol.

  • Computación
  • Construcción
  • Escudos de energía
  • Planetología
  • Propulsión
  • Armas y armamento

Condiciones de victoria:

  • Victoria por dominio: Desaparición de todos los rivales
  • Victoria por objetivo relevante: El jugador gana por tomar una posición relevante en el juego.

Condiciones de derrota:

  • Victoria de un rival: Un rival gana.
  • Derrota por destrucción: El jugador pierde todas sus colonias y naves.
  • Derrota por rendición: El jugador reconoce la superioridad de sus rivales y se rinde.

Eventos:

  • Recursos abandonados
  • Nativos y monstruos
  • Cataclismos y desastres