jueves, 23 de abril de 2015

Meses de ausencia

Bueno, lo primero de todo disculparme por estos meses de ausencia pero los estudios y mi vida social se interpusieron un poco con mis proyectos. Sin embargo, esto no quiere decir que me haya quedado parado, así que vamos a hacer un repaso breve por los temas que he tocado y que, más adelante, os hablaré de ellos:


AVANCES EN RECONOCIMIENTO DE VOZ

Existen varias soluciones para que el ordenador pueda transcribir voz a texto. La más importante es la api de Google (Palaver, por ejemplo, hace uso de ella). Sin embargo esto requeriría de uso de internet y, en parte, quería intentar partir desde verdaderos inicios. Por ello estuve estudiando como dado un archivo wave, manipularlo con Matlab y, mediante comparativas complejas, deducir con un alto porcentaje de probabilidad que palabras había dicho (al menos, palabras claves). Sin embargo esto se escapaba de mis conocimientos en matemáticas y dada las fechas tuve que dejarlo.

Sin embargo, ante la dificultad de llevar el proyecto a cabo por mi mismo, pienso retomarlo en cuanto tenga tiempo haciendo uso de la API de Google.



HARO BOT

Haro ha sido la continuación de Kbot v2, donde se pretende alcanzar 2 puntos fundamentales: el diseño y construcción del robot desde primeros principios (mediante blender y slic3r) y la ampliación del rango de control, pasando del típico bluetooth para controlarlo con el móvil, a controlar el bluetooth mediante python y dado ese programa python, ejecutarlo vía web mediante PHP

De esto espero poder hablar largo y tendido en el blog, así que no me entretendré mucho ahora. Tenéis más información sobre el poryecto en mi página personal en la sección de proyectos.



RASPBERRY PI 2

¡Si, al final me hice con mi propia Raspberry! Y la he cogido con tanto gusto que ya esta toda la mudanza hecha bajo un Debian Wheezy (yuhuu!).

¿Qué significa esto? Sencillo, ahora todo el Sistema Riatla está albergado en un ordenador de bolsillo: nada de ruido, no se calienta, no ocupa lugar, apenas consume electricidad.... Todo ventajas.

Siendo un Debian como otro cualquiera, no creo que hable mucho en el blog sobre su instalación y configuración a menos que alguien me lo solicite. Sin embargo, la idea es que todos los futuros proyectos se basen en ésta máquina.



INVERNADERO

El proyecto invernadero se traslada, ya tengo todas las piezas y me he logrado hacerme con unas placas fotovoltáicas gracias a Astaroth. Tras las pruebas de rendimiento de la bomba de agua, he tenido que hacer cambios en los planos para realizar un vaso comunicante y, de esa forma, ahorrarle trabajo al motor. Por ahora la programación esta preparada, pero falta todo el montaje y encontrar un lugar adecuado para que las placas reciban suficiente energía.


Y para terminar un nuevo avance, la siguiente entrada será "Python in the middle", que tratará de como manejar arduino desde un programa ejecutado desde el ordenador y conectado mediante usb.



Buenas tardes a todos y una vez más, disculpas!

domingo, 7 de diciembre de 2014

Comunicado

Buenas noches a todos!

Os escribo esta nota rápida para informaros que los problemas con 1&1 ya se han resuelto y la web vuelve a estar activa! \o/

Por otra parte, voy a usar los comunicados para informaros de los avances de los proyectos, por si alguien lo sigue día a día... Así que allá va el último avance:

Como informé en la web, me he propuesto para estas fiestas lograr que Riatla reconozca instrucciones habladas. Pues bien, el proyecto se ha terminado abriendo en dos vertientes que, aun parecidas, cambian en su núcleo.

La idea es que Riatla esté siempre escuchando y que, al reconocer un determinado patrón, esté atenta para ejecutar y/o interactuar con el hablante. El "encapsulado" ya está a medio programar pero me he visto con un gran muro: Google (o más bien la forma en la que reconocer las palabras). La "speech API" de Google solo admite 50 peticiones diarias, las cuales me parecen realmente pocas para mi proyecto (e infinitamente pocas para el testeo del programa) y, aunque he de reconocer que Google ayuda mucho con estas cosas a los desarrolladores, también se que esto te deja solo con los dientes largos. Esa era la primera vertiente... la segunda es directamente implementar un programa de reconocimiento de voz desde cero. Obviamente no para todas las palabras, pero si para un pequeño diccionario, el mismo que usa en el fondo Riatla: las palabras claves de la conversación. Esto me ha hecho retomar mis apuntes de Matlab/Octave para procesar audio y, aunque el proceso sería mucho más laborioso, también evitaría que el sistema hiciese innecesarias peticiones por Internet.
Aquí dice "luz", ¿no lo veis?

Bueno, y hasta aquí todo lo que puedo contar hasta ahora. Esta semana estaré liado con los exámenes de fin de trimestre, por lo que me retrasare en las publicaciones como viene siendo habitual.

Un saludo a todos!

Comunicación con arduino mediante Serial

Buenos días! Ya está resuelto el problema con 1&1, así que la web vuelve a estar abierta!!

En el último post hablábamos de como controlar mediante arduino dispositivos externos pero, ¿quién controla a los vigilantes arduino?

Hay muchas formas de poder conectar con Arduino: desde el usb, puerto serie o las entradas de lectura/escritura de los pines (RX, TX) (donde podríamos conectar un bluetooth, por ejemplo). Pero todas estas formas tienen algo en común, el mandato Serial.

La idea es la siguiente: enviar por puerto serie una palabra, clave o lo que sea para que arduino lo capte, interprete y ejecute. El siguiente código es lo que hace y lo he comentado para que se vea, paso a paso, como trabaja con la estructura.

//Interprete

int ASCII = 0;  //Codigo ASCII del caracter encontrado
char incomingByte = 0; //String por RX
String comando = ""; //Inicialización del string


//Parametros Iniciales
int pinLuz = 52; //Por poner un pin cualquiera
boolean terminado = false; //Indica si se termino de recorrer la palabra entrante.
int x; //Contador


void setup() {
 Serial.begin(9600); //Con esto se abre el puerto serial a los baudios deseados
 pinMode(pinLuz, OUTPUT);
}

void loop(){
 while (Serial.available()>0){
  ASCII = Serial.read(); //Almacena lo que recibe por el puerto serie
  incomingByte = ASCII; //Número2ASCII


  //INFO
  /*
  El caracter 32: espacio.
  El caracter 13: retorno de carro.
  El caracter 10: salto de línea.
  */

  if (ASCII!=13 && ASCII!=10 && ASCII!=32){
   comando = comando+incomingByte; // comando es un contenedor que va almacenando los carácteres
  }
  if (ASCII==10 || ASCII==13 || ASCII==32){
   terminado = true; //Se ha terminado de recibir toda la instrucción
  }
  }    

 //Nada en la cola del serial, pero si datos en el contenedor
 while (Serial.available() <=0 && terminado==true) {
  //Funcion interprete: se encargará de ejecutar el comando
  interprete(comando);

  //Limpio los datos
  comando = "";
  terminado = false;
 }
}

void interprete(String comando){
 if (comando != ""){
 //LISTA DE COMANDOS
         if (comando == "LUZ_ON"){
   luzOn();
         {
         if (comando == "LUZ_OFF"){
   luzOff();
         {
 }
}


//FUNCIONES DE LOS COMANDOS
void luzOn(){
 digitalWrite(pinLuz, HIGH);
}

void luzOff(){
 digitalWrite(pinLuz, LOW);
}

Siguiendo como ejemplo éste fragmento de código se podrá fácilmente encender o apagar las luces de las que hablábamos en la entrada anterior. Como se ve no es difícil una vez llegados a éste punto, un poco de programación y algo de maña pelando cables y rápidamente tendremos nuestro pequeño proyecto en marcha.

Pero aquí es donde el proyecto empieza a ampliarse y viene lo divertido... nosotros podemos comunicarnos por el puerto serie desde la consola del GUI de arduino, pero claro, eso no es lo que queremos. Para abrir una persiana resulta más cómodo darle a un interruptor que escribir un mandato por un programa. Entonces, ¿para que todo esto? Las formas lo son todo, y escribir el mandato desde la GUI no es la forma adecuada. Hay muchas formas de hacerlo y yo me he acostumbrado a comunicarme por python. En la siguiente entrada más código para que podamos continuar! Un saludo!

martes, 2 de diciembre de 2014

AVISO

La web está temporalmente fuera de servicio. Al parecer estoy teniendo problemas con 1&1 para la redirección, así que tomará un tiempo hasta que pueda ver que es lo que sucede.

Siento las molestias.

martes, 25 de noviembre de 2014

Los principios de la domótica

Con el fin de explicar como trabajar con arduino y para ver rápidamente ejemplos prácticos voy a disponer de un ejemplo con el que, con un poco de maña, podremos encender las luces o cualquier cosa desde nuestro ordenador.

Lo primero será ver un ejemplo básico, algo tan sencillo como encender un led en arduino es más importante de lo que parece.

/*
  Parpadeo
  Enciende un led por 1 segundo, lo apaga por otro y así repetidamente.
 
  Éste código de ejemplo es de dominio público
 */
 
// Vamos a colocar un led en el pin 11
// Pero puede estar colocado en cualquier salida digital de arduino
int led = 11;

// Setup es la rutina que se inicia una vez que pulsamos el botón reset de la placa
void setup() {                
  // Inicialización de las variables
  pinMode(led, OUTPUT);     // Con output definimos el pin de led como uno de salida
}

// Loop es la rutina que se ejecuta en bucle continuamente.
void loop() {
  digitalWrite(led, HIGH);   // Encendemos el led
  delay(1000);               // La placa espera 1000ms (1s), por lo que el led permanecerá encendido
  digitalWrite(led, LOW);    // Apagamos el led
  delay(1000);               // Esperamos por otro segundo
}

Me he tomado la molestia de traducirlo y cambiar el pin del led, puesto que en el ejemplo original usan el pin 13, que es (además de un pin más) un led integrado en la propia placa. Para evitar confusiones he colocado el led en el pin 11.

Las fotos de este tipo estarán tomadas con el móvil y en una placa quemada.
Se siente, las cosas que funcionan están bien puestas y no voy a desmontarlas xD


El ejemplo, como se ve, es bastante sencillo. Lo único que hace es encender y apagar continuamente un led pero, ¿y si en vez de ser un led fuese una bombilla? Además, nos podemos comunicar con arduino por bluetooth, ethernet o puerto serie, entonces ¿y si en vez de ser un parpadeo constante, le decimos nosotros mismos cuando encender o apagar?

Para la primera interrogante hay una respuesta muy sencilla: un relé de 5v.

El funcionamiento de un relé es como un interruptor, pero controlado por un circuito eléctrico en el que, por medio de una bobina y un electroimán, se acciona un contacto que permite abrir o cerrar otros circuitos eléctricos independientes.

Hay otras formas obtener nuestro "interruptor digital", pero con esta tenemos la ventaja de que nuestro circuito no se va a quemar con la tensión ya que se trata de un circuito independiente. También tenemos la desventaja que, por el funcionamiento interno del relé (la bobina o el electroimán), vamos a tener un ligero retardo en las acciones, pero teniendo en cuenta que si encendemos y apagamos rápidamente una luz podemos fundirla, esta latencia no es importante a mi parecer puesto que los tiempos de encendido-apagado siempre van a ser mayores.

Entonces, dicho esto, ¿cómo cambia nuestro circuito?

Los relés tienen 3 entradas por parte de arduino para controlarlo (VCC, GND, IN), así que conectaríamos de ésta forma: VCC=5V, GND=GND e IN=pin 11 (o cualquier otro pin digital, el que hayamos indicado en el programa).

En cuanto a las conexiones de la parte del relé, bastaría conectarlo como si fuese un interruptor de toda la vida, es decir, un cable paralelo que vaya del enchufe al aparato eléctrico (bombilla o lo que sea) y de uno de los paralelos, cortarlo y conectarlo al relé. Como veo que soy horrible explicando las cosas, mejor hacer un pequeño dibujo ilustrativo.

Con esto, nuestro programa ya sería capaz de encender luces de verdad, abrir una persiana o encender cualquier otro aparato eléctrico sin problemas. Pero seguiría dependiendo de lo que estuviese programado a priori.

Para solucionar esto, nuestro programa debe ser más complejo y es cuando se trata de echarle imaginación dependiendo de lo que estemos interesados en hacer. Pensaba mostrar como hacerlo en ésta misma entrada, pero prefiero hacer entradas más cortas y centradas en un solo objetivo. En cuanto pueda: reconocimiento de instrucciones en arduino mediante serial.

miércoles, 19 de noviembre de 2014

Sobre arduino

No se me ocurre mejor forma para empezar que retomar la primera entrada del cuaderno de bitácora cuando empecé todo éste proyecto porque... por algún lado había que empezar.

Antes de la llegada de la famosa Raspberry Pi se hablaba mucho sobre Arduino pero, ¿qué es?

Arduino sigue las reglas de Wiring. Es una plataforma de hardware libre basada en una sencilla placa de entradas y salidas con un entorno de desarrollo que implementa el lenguaje de programación Processing.

Esta plataforma nos permite poder hacer todo tipo de proyectos sin tener que adquirir una licencia. Es bastante sencilla de programar y sus tutoriales se extienden por toda la red de redes, así que nos vendrá muy bien para empezar con algo entre las manos.

Otro punto a favor de esta plataforma son sus diferentes versiones para los diferentes usos que les queráis dar o el presupuesto económico que tengáis.
Podréis encontrar todas las versiones en su web (os la pongo en inglés puesto que la versión española no está actualizada)

Yo personalmente, escogí la Mega2560 puesto que su memoria, sram y número de pines me convenía para un proyecto en expansión.

Pero, ¿que es eso del lenguaje Processing?

Vamos por partes,
Processing es un lenguaje de programación y entorno de desarrollo integrado de código abierto basado en Java, de fácil utilización, y que sirve como medio para la enseñanza y producción de proyectos multimedia e interactivos de diseño digital.

Es con Processing donde sacamos el potencial del Wiring:
El wiring es una plataforma de prototipado electrónico de hardware libre compuesta por un lenguaje de programación, un entorno de desarrollo integrado (IDE) y un microcontrolador.

Y así es como trabaja arduino, programando procesing en el IDE. Con el uso veremos que es bastante intuitivo y, con la ayuda que nos proporciona Arduino en su propia web, seremos capaces de dar nuestros primeros pasos:



Creo que con éste empiece podremos ir paso a paso entendiendo el proyecto Riatla. Para la próxima entrada daré algunos ejemplos básicos con los que veréis que la domótica no es tan complicada como parece.

sábado, 15 de noviembre de 2014

Presentación

Presentación y excusas:

Soy AltairMikoto, álter ego de Kevin Revuelta, y os encontráis es el blog del Sistema Riatla, mi servidor.

La mayoría no me conoceréis, los que sí, veréis que aquí estamos (otra vez) tratando de empezar de cero. La excusa: mi escasa velocidad de subida a Internet y por ello la imposibilidad de crear un blog adecuado con medias de calidad en mi servidor casero. Solución: un blog externo al servidor, con los servicios adecuados y la ventaja de no estar sujeto a las caídas y fallos de meterle mano cuando no quiere.



Futuro incierto y pensamientos alocados:

Como siempre está el gran interrogante: ¿Para qué demonios voy a usar el blog? Ante todo hay que dejar claro que este será el blog del Sistema Riatla, por lo que trataré de ceñirme sólo a la creación del sistema, cosas relacionadas y de interés. Y así, de esta forma, tratar de documentar un poco todo el sistema.


Os pido encarecidamente paciencia para las publicaciones, nunca he sido muy dado a ellas y suponen un esfuerzo y consumo de tiempo del que a veces no dispongo.


Y con esto me despido por el momento, tened un buen día y gracias por leerme. Pronto empezaré a publicar.