arduino,cursos,guias,manuales,tutoriales,ejemplos,ejercicios,codigos,electronica,circuitos,montajes,placas,componentes,noticias,actualidad,libros,descargas,pruebas,courses, guides,manuals,tutorials,examples,exercises,code,electronic,circuits,assemblies,boards,components,news, books,downloads,tests.

No puedo continuar con este proyecto

Supongo que muchos ya os habréis dado cuenta de que este blog está desactualizado desde hace unos años. No puedo seguir con el por muchos motivos, entre ellos, que ha pasado tanto tiempo que no toco arduino y la electronica que los pocos conocimientos que tenía los he ido olvidando. El trabajo y los estudios me tienen demasiado ocupado como para ponerme a montar circuitos y dedicar horas a diseñar lo que tenía en mente. No digo que lo deje para siempre, porque en el fondo me gustaría mucho terminar este proyecto, pero por el momento va a ser imposible. Dejo el blog en linea para aquellos que estáis empezando con arduino, pues creo que las pocas explicaciones que pude poner hace 2 años pueden servir de guía para empezar con esta maravillosa placa. Si algún día puedo retomar este proyecto, tener por seguro que lo pondré en este blog.

Saludos a todos/as.

Edito y agrego:

Gracias a la web de Taringa, un portal de compartir, se me han terminado de quitar las ganas que tenía de continuar con este proyecto. Si al poco tiempo que tengo le sumamos que un portal que no me merece respeto ninguno, se dedica a copiar el trabajo de los demás y si le pides que los borres te mandan a contactar con una empresa para que presentes pruebas de derechos de copyright, comprenderéis que a uno se le bajen los ánimos. Un visitante copió todas las páginas del blog y las subió al portal mencionado anteriormente. Ahora sale en Google la página de Taringa que contiene el contenido de mi blog en primera posición pasando el blog original a los últimos resultados de la primera página o a la segunda página. Una cosa es compartir y otra cosa es robar contenidos. Puedo comprender y comprendo que hay mucha gente que necesita software o libros para poder formarse, para avanzar en este mundo de la informática y pagar todas las licencias es difícil, por lo que puedo comprender que algunos usuarios pirateen. No es mi caso, pues siempre he comprado lo que he necesitado, aunque algunas veces haya descargado algún libro de internet, pero después he ido a la tienda y he comprado el libro cuanto que he tenido dinero. Ahora tengo una buena colección de libros y todo el software de mi ordenador legal, pues gracias al software libre no tengo necesidad de usar programas de pago y como el sistema operativo viene incluido en el ordenador puedo usar Windows. Volviendo al tema de lo que ha sucedido, me parece vergonzoso que un usuario se dedique a copiar una información de un lugar de libre acceso y la copie en Taringa con el descaro de decir en los comentarios que estaba cansado de hacer tutoriales de arduino toda la tarde, como diciendo que los había escrito el. Desde aquí un saludo al usuario, a Taringa y a todos los familiares de los mismos.

Ahora si puedo afirmar que no voy a continuar con el proyecto. Disculpar las molestias.

A LA IZQUIERDA DE LA PAGINA ESTAN TODOS LOS ENLACES QUE FORMAN ESTE BLOG PARA FACILITAR LA NAVEGACION


Buscar en este blog

jueves, 30 de julio de 2009

MIDI - CAPITULO 3 - ENVIANDO SEÑALES MIDI VARIABLES CON DOS POTENCIOMETROS


Hola de nuevo. He avanzado un poco mas y, por si no se te ocurre como colocar dos potenciómetros, en este ejercicio vamos a llevar la tarea a cabo.

Tengo que comentar que si he tardado tanto en ponerlo es porque yo he tenido problemas a la hora de recibir los datos en el ordenador, y en algunas ocasiones giraba el potenciómetro 0 y cuando veía los datos en el programa s2midi me salía entre medio una nota del potenciómetro 1. En este código que coloco mas adelante no me ha pasado, pero me extraña, porque he modificado varias veces los datos y siempre me pasaba lo mismo. No se, quizás me faltaba algo por cambiar en el código.

Edito: EL MOTIVO POR EL QUE ME SALIA UNA NOTA DEL POTENCIOMETRO 1 ENTRE MEDIO DE LA DEL POTENCIOMETRO 0 Y VICEVERSA, ES DEBIDO A LA TOLERANCIA DEL POTENCIOMETRO.

- ¿QUE QUIERE DECIR? PUES QUE SI EL POTENCIOMETRO TIENE UNA TOLERANCIA DEL 5% SIGNIFICA QUE SU RESISTENCIA PUEDE VARIAR LIGERAMENTE EN CUALQUIER MOMENTO.

- ¿COMO ME AFECTA ESTO? PUES AFECTA PORQUE AL VARIAR LIGERAMENTE CAMBIA EL VALOR Y EL PROGRAMA ENTIENDE QUE HEMOS GIRADO EL POTENCIOMETRO, POR ESO ENVIA ESA NOTA.

- ¿COMO SE PUEDE ARREGLAR? PUES LIGERAMENTE SE PUEDE ARREGLAR AL ESTILO CHAPUZA, VARIANDO EL VALOR DE LAS VARIABLES analogSmoothx = 2; por analogSmoothx = 6; CON ESTO ES MAS DIFICIL DE QUE SALGA ESA NOTA, PERO TIENE UNA DESVENTAJA, TENEMOS QUE GIRAR MAS EL POTENCIOMETRO PARA QUE SE DETECTE EL CAMBIO.

- ¿HAY OTRA SOLUCION? SI, PUEDES GASTARTE MAS DINERO EN COMPRAR POTENCIOMETROS DE MAS CALIDAD, O PUEDES ESPERAR A QUE ENCUENTRE UN CODIGO QUE EVITE ESTO, PERO DE MOMENTO NO SE ME OCURRE NINGUNO.

ES TODO.

Bien, la colocación de dos potenciómetros es igual que cuando colocamos uno, solo que la patilla central del segundo potenciómetro tiene que ir a 1 analógico.


Después subimos el siguiente código a la placa y listo.

int midiChannel0 = 1;
int analogPin0 = 0;
int lastAnalog0 = 0;
int analogSmooth0 = 2;

int midiChannel1 = 1;
int analogPin1 = 1;
int lastAnalog1 = 0;
int analogSmooth1 = 2;

void setup()
{
Serial.begin(31250);
}

void loop()
{
Potenciometro0();
Potenciometro1();
}

void Potenciometro0()
{
int reading0 = 0;
reading0 = analogRead(analogPin0)/8;
if (abs(reading0-lastAnalog0) > analogSmooth0)
{
lastAnalog0 = reading0;
controlChange(midiChannel0,10,reading0);
}
}

void Potenciometro1()
{
int reading1 = 0;
reading1 = analogRead(analogPin1)/8;
if (abs(reading1-lastAnalog1) > analogSmooth1)
{
lastAnalog1 = reading1;
controlChange(midiChannel1,127,reading1);
}
}

void controlChange(byte channel, byte controller, byte value)
{
midiMsg(channel+0xB0, controller, value);
}

void midiMsg(byte cmd, byte data1, byte data2)
{
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
}

Cualquier programador normalito sabrá que este código se puede reducir mucho, pero después de lo que he sudado para llegar aquí no tengo muchas ganas de ponerme a recortarlo. Se que es muy importante recortar código para que tengamos espacio suficiente en la placa donde meterlo, pero por el momento no tengo ganas de complicarme mas la existencia. Por suerte, la versión duemilanove con el ATMEGA 328 tiene mucho espacio, y Serra cuestión de tiempo que tengamos placas con mucho mas donde almacenar, de hecho, ya hay placas arduino con muchísimo mas espacio y mucha mas velocidad de procesamiento, pero no podemos comprarnos una cada dos por tres.

Seguimos. He puesto en color rojo el código que forma parte del potenciómetro 0 (que es el 1º potenciómetro) y en verde el del potenciómetro 1 (que es el 2º potenciómetro). El resto del código es común a los dos y creo que con esto deberías saber como conectar mas de dos.

Ahora pasamos a describir el código.

Como puedes observar, al principio del código tenemos las cuatro variables que son del potenciómetro 0 y después las otras cuatro que son del potenciómetro 1.

A continuación configuramos el puerto serial a 31250.

Seguimos con el código y entramos en la función loop(), donde llamamos primero a la función Potenciometro0(). Una vez allí leemos el potenciómetro y si lo hemos variado llamamos a la función controlChange y le pasamos el canal (1), la nota (10) y por ultimo el valor del potenciómetro. La función controlChange() hace una pequeña modificación de los datos recibidos y llama a midiMsg() pasándole los datos y esta ultima coloca los 3 datos en el puerto usb uno detrás de otro. Aquí es donde S2Midi entra en acción, convirtiendo los 3 datos en señal midi y enviándolos al puerto midi virtual.

(En el código del articulo anterior olvide comentaros que la división entre 8 que se hace en la línea "reading0 = analogRead(analogPin0)/8;" es para convertir el valor del potenciómetro en un numero entre 0 y 127, es decir, en el volumen de la nota)

¿Por donde íbamos? Si, ya me acuerdo, habíamos terminado de comentar lo que pasaba si se había movido el potenciómetro 0. Si no lo hubiéramos movido sencillamente hubiéramos vuelto a la función loop() y seguiríamos por la segunda instrucción, que llama a la función Potenciometro1() y hace exactamente lo mismo que en la anterior, es decir, si varia, llama a controlChange pasándole los datos, después controlChange llama a midiMsg tras hacer una modificación de los datos y esta por ultimo envía las tres señales al puerto usb.

Todo esto sucede a una velocidad bastante alta y se estaría ejecutando constantemente para comprobar si hay algún cambio en los potenciómetros.

Por ultimo quiero indicaros que en este código estamos mandando los datos del siguiente modo:

Potenciometro0 -- Canal 1 -- Nota 10 -- Valor del potenciometro0/8
Potenciometro1 -- Canal 1 -- Nota 127 -- Valor del potenciometro1/8

Por esto, podemos observar que en la línea controlChange(midiChannel0,10,reading0); de la función Potenciometro0() estamos mandando la nota 10, en cambio, en la de la función Potenciometro1() mandamos la nota 127.

Es todo por hoy. Saludos y por favor, si alguien me lee que me deje un comentario, aunque sea un saludo o algo para saber que no estoy escribiendo para que nadie me lea :D

sábado, 25 de julio de 2009

MIDI - CAPÍTULO 2 - ENVIANDO SEÑALES MIDI VARIABLES CON UN POTENCÍOMETRO


Hoy avanzaremos un poco mas en el tema del midi, aunque aun no puedo explicaros como funciona el lenguaje, al menos, voy a poneros un ejemplo muy sencillo de cómo mover una resistencia variable, o mejor dicho, un potenciómetro y que al girarlo varie el volumen de una nota midi determinada. Por falta de tiempo no puedo poneros las imágenes de como funciona esto en un programa, pero podéis verlo en vuestra pantalla cuando ejecutéis S2Midi y variéis el potenciómetro.

Para poder seguir este sencillo tutorial es necesario tener instalado el entorno de programación de arduino, los drivers de la placa, entender el entorno y saber como subir un código a la placa y por ultimo, haber seguido el tutorial anterior a este con el que tendrás configurado tu ordenador para poder recibir mensajes midi por el puerto usb de arduino. Todo esto ha sido explicado ya, por lo que yo voy a continuar adelante. Si tienes dificultades para continuar mira los tutoriales anteriores, que los encontraras a la izquierda de este texto, en un menú de opciones que coloqué con todos los tutoriales, noticias, descargas y demás.

Bien, comenzamos por explicar el potenciómetro:

Un potenciómetro es un resistor al que se le puede variar su resistencia, es decir, permite controlar la intensidad de corriente que circula a través de ella. Tienen 3 patillas, dos que son las de los extremos y la central que se llama cursor.

La conexión de nuestro circuito es muy sencilla, conectaremos un extremo del potenciómetro de 1 Mega Ohmio (tiene que ser exactamente 1 MO, no conectes ninguno de otro valor) a 5V, el que está en la parte de los pines analógicos, la patilla central o cursor a 0 analógico y la otra patilla del extremo a GND (masa). Quedaría así:


En este primer ejemplo solo conectamos 1 potenciómetro de 1 Mega Ohmio, por lo que solo podremos mover una opción en resolume.

Bien, una vez que tenemos montado el circuito hay que cargar el código del programa en la placa arduino. Es el siguiente:

int midiChannel0 = 1;
int analogPin0 = 0;
int lastAnalog0 = 0;
int analogSmooth0 = 2;

void setup()
{
Serial.begin(31250);
}

void loop()
{
Potenciometro0();
}

void Potenciometro0()
{
int reading0 = 0;

reading0 = analogRead(analogPin0)/8;
if (abs(reading0-lastAnalog0) > analogSmooth0)
{
lastAnalog0 = reading0;
controlChange(midiChannel0,10,reading0);
}
}

void controlChange(byte channel, byte controller, byte value)
{
midiMsg(channel+0xB0, controller, value);
}

void midiMsg(byte cmd, byte data1, byte data2)
{
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
}

Básicamente en nuestro programa hemos declarado al principio el canal (1), el pin en el que leemos el valor para comprobar si cambia el potenciómetro (0), una variable que almacena el ultimo valor que tuvo el potenciómetro (lastAnalog0) y la ultima que es utilizada durante la comparación para comprobar que la diferencia entre el valor anterior y el actual sea mayor de 2 (analogSmooth).

Después configuramos la velocidad de envió a 31250 y mas adelante, en la función loop() llamamos a otra función que he creado yo llamada Potenciometro0().
Dentro de esta se comprueba si el valor del potenciómetro ha variado, si es así se llama a la función controlChange() y se le pasa los datos Canal (1), Nota (10) y valor (que depende del valor que indique el potenciómetro).

Bien, pero ¿como se que esto funciona?. Pues muy sencillo, conectas el montaje como he indicado, cargas el código desde el entorno de programación de arduino, sin desconectar el cable cierras el entorno, cargas el S2Midi y le indicas el puerto y la velocidad (si no está 31250 en la lista se lo puedes poner tu con tu teclado) y le das a Start. Cuando varíes el potenciómetro veras que a la izquierda te muestra la información de lo que va leyendo en el puerto.

En el programa que yo suelo utilizar, que es Resolume 2.3, ahora tendría que abrirlo e irme a la configuración, a la pestaña del mapeo midi y hacer doble clic en la lista para configurar por ejemplo el control de la opacidad de la capa 1. Al hacer doble clic en el y mover el potenciómetro ya lo tendría configurado y tras cerrar la configuración podría mover la capa con el potenciómetro en vez de con el ratón.

Saludos y perdonar que no pueda poner una imagen ahora mismo, pero tengo poquísimo tiempo últimamente.

viernes, 10 de julio de 2009

MIDI - CAPITULO 1 - INSTALACIÓN DEL SOFTWARE NECESARIO PARA ARDUINO Y MIDI


Este tutorial es para aquellas personas que no tengan puertos midi (de los redondos). Nosotros utilizaremos el mismo puerto Usb que utiliza arduino para enviar y recibir datos midi.

Para ello usaremos dos programas, uno es MidiYoke, que crea puertos midi virtuales y otro que se llama S2Midi que sirve para convertir los datos serie que se envia por el puerto usb a midi y enviarlos a MidiYoke.

En este primer capítulo vamos a instalar el software necesario para poder enviar señales midi al ordenador desde el arduino. Gracias a estas señales, podemos controlar software a través de arduino.
La instalación de este software puede parecer a primera vista muy larga, pero realmente no se tarda mucho y no tiene mayor complicación que descargar el software, instalarlo y configurarlo.
Vamos a empezar por el primer programa que debemos instalar. Se llama MidiYoke. Para descargarlo nos vamos a nuestro navegador y tecleamos: www.midiox.com


Cuando cargue la pagina pulsamos el enlace “MIDI Yoke” y cargará el frame con todo lo que hay en la página sobre el programa, desde noticias, hasta la instalación en windows 3.1, que ya es antigüito.


Nosotros vamos haremos clic en “Download” y nos moverá un poco más abajo dentro de la misma página donde podremos descargar el programa para windows xp. Nosotros vamos a descargar la versión que pone “midiyokesetup.msi”, porque la instalación es mucho más sencilla que si lo descargamos en formato zip, donde tendremos que instalarlo a mano y no me apetece, la verdad. Fijaros en la siguiente imagen, he puesto en rojo en el caso de Internet Explorer donde podemos ver el archivo que es con extensión msi.


Al hacer clic en el enlace nos preguntará qué queremos hacer y le diremos “Ejecutar”, o al menos, eso es lo que voy a hacer yo, porque una vez que se instale no quiero el programa de instalación para nada.


Cuando lo descargue temporalmente nos preguntara si estamos seguros de querer ejecutarlo y le volvemos a decir que si, ejecutar.


Seguimos los pasos del asistente, en esta primera pantalla pulsamos “next”


En la siguiente volvemos a hacer clic en “next”.


Comenzará la instalación, solo nos queda esperar a que termine de copiar los archivos.


En la siguiente ventana nos dice que tenemos que reiniciar el equipo para que los cambios surtan efecto, desde luego lleva razón, pero nosotros antes de reiniciar vamos a configurar el programa para evitar tener que reiniciar dos veces. Pulsamos “Next”.


Ya hemos terminado la instalación de MidiYoke, así que pulsamos “Close” pero no vamos a reiniciar nuestra maquina todavía.


Vamos a abrir la ventana del panel de control, que normalmente está en el menú inicio/panel de control.


Ahora hacemos doble clic sobre MyokeNT y se nos abre la ventana de configuración del programita.


Nosotros vamos a cambiar la opción “Number of Ports” que por defecto está en 8 y le marcaremos en la lista el 2, para no tener tantísimos puertos.


Por último pulsamos “Ok” y procedemos a reiniciar nuestra maquina. Cuando termine de reiniciar vuelvo. Hasta ahora.

Bien, ya tenemos hecho lo mas difícil de este asunto. Ahora vamos a seguir con la segunda aplicación que necesitamos, se llama S2MIDI y es un programa muy sencillo de instalar, solo hay que descomprimir el archivo en una carpeta de nuestro disco duro y darle doble clic al ejecutable. Comenzamos.
Para descargar este programa vamos a ir a: http://code.google.com/s2midi/downloads/list


Hacemos clic en la última versión que hay en la pagina, que actualmente es la 1.01 y nos saldrá el cuadro de dialogo de “Descarga de archivo”, donde yo pulsare “Abrir” para que se abra automáticamente el archivo cuando se descargue y se borre cuando termine.


Como veis en la siguiente imagen se ha abierto con WinRar. Ahora pulsaré en “Extraer en” y se abrirá el cuadro donde indicarle la ruta donde quiero descomprimirlo. Yo lo voy a poner sencillamente en C:\S2midi


Solo queda pulsar “Aceptar” y comenzara a descomprimirlo. Por último ya solo me queda ir a la carpeta nueva que se ha creado en C: y explorar el contenido. Por supuesto ya puedo cerrar winrar.


Por fin, ahora, por ultimo tenemos que comprobar que todo funciona bien. En mi caso, el puerto que utiliza arduino es el COM3, por lo que debemos tener en cuenta nuestro puerto a la hora de configurar S2Midi. La configuración vamos a verla dentro de un momento, primero voy a cargar un código sencillo en arduino. Como supongo que eso lo sabrás hacer antes de haber hecho todo esto voy a saltarme los pasos. Si aun no sabes cómo se hace esto deberías mirar en este blog, porque no hace mucho que puse las instrucciones. A la izquierda hay un listado de enlaces donde podéis ver todas las entradas del blog, ordenadas, puedes usarlo para localizar el articulo 4 – CONFIGURACIÓN Y DESCRIPCIÓN DEL ENTORNO.
El código es el siguiente:

void setup()
{
Serial.begin(31250);
}

void loop()
{
noteOn(0x90,15,63);
delay(5000);
}

void noteOn(char cmd, char data1, char data2)
{
Serial.print(cmd,BYTE);
Serial.print(data1,BYTE);
Serial.print(data2,BYTE);
}

Es corto ¿verdad?, mejor, aunque por hoy no voy a explicar lo que hace, porque el fin de esta entrada es configurar el ordenador para que pueda trabajar con midi, no para que aprendamos a trabajar con midi :D
Perfecto, una vez que tenemos cargado el programa en la placa midi, sin desconectar el cable de arduino para nada, simplemente CERRAMOS EL ENTORNO DE PROGRAMACION DE ARDUINO y abrimos s2midi, el cual deberemos configurar como en la siguiente imagen, salvo por el puerto COMx, que tendrás que poner el COMx donde está conectado arduino. Esto puede verse del siguiente modo:
Vamos al menú inicio, panel de control. Doble clic en Sistema, Abrimos la pestaña Hardware y le damos al botón que pone Administrador de dispositivos. En esa ventana tenemos que buscar Puertos (Com &LPT) y expandirlo para ver cuál es el puerto de arduino. También podemos verlo en el entorno de programación de arduino, vamos al menú Tools y en el submenú Serial Ports vemos cual es el que tenemos marcado para enviar los datos.
Ahora muestro la pantalla de S2Midi como la tengo configurada yo.


Ahora solo nos queda pulsar el botón “Start” para ver a la izquierda que salen las notas midi que estamos mandando desde arduino.


Debemos tener en cuenta los siguientes aspectos esenciales:

  • El entorno de programación de arduino TIENE que estar cerrado para que S2Midi pueda acceder al puerto.
  • El puerto COM debe de estar bien puesto.
  • El Baud Rate debe de ser el mismo que el que aparece en el código, que en este caso es 31250.
  • Lo último, y lo que me ha hecho perder muchísimo tiempo. Cuidado si utilizas dos o más ordenadores, porque yo estoy usando dos a la vez y le cargaba el código desde uno que trabaja con el puerto COM4 y lo conectaba a otro ordenador, que trabaja con el COM3 y no hacía nada, de casualidad, me he dado cuenta que cuando lo conectaba en el segundo ordenador el led de la placa no hacía nada, y era porque de un ordenador a otro se borraba la información que habia grabado en arduino, por lo que tuve que escribir el código otra vez en el mismo ordenador donde hago las practicas y entonces funcionó. Era por eso, porque al conectarlo de un ordenador a otro pierde la información. ¿Qué raro no?.
En fin, esto es todo por hoy, he estado un tiempo desconectado porque tengo muchas cosas encima, de hecho, ahora tendría que estar arreglándole un ordenador a una amiga y en vez de eso estoy aquí haciendo un tutorial, es para matarme a palos. Pues nada, espero que os haya gustado este tutorial y sobre todo que os sea útil. Próximamente empezaremos a sacarle partido a esto. Os cuento mi interés en este tema, tengo ganas de fabricarme un controlador midi para poder controlar programas de Vj sin tener que usar el ratón, así que desde aquí aprovecho para mandarle un saludo a la comunidad de http://www.vjspain.com/ que son muy buena gente.
Nos vemos en el próximo capitulo, si alguien tiene algún problema o quiere solo saludar, los comentarios están abiertos para todo el mundo. Además, con eso se que al menos una persona me ha leído jajaja. Nos vemos en el próximo tutorial.

miércoles, 1 de julio de 2009

PROYECTOS INTERESANTES - AIRPIANO, TOCANDO EL PIANO EN EL AIRE.

AirPiano es una innovadora interfaz musical que permite reproducir y controlar instrumentos musicales basados en software simplemente moviendo las manos en el aire.
AirPiano está formado por una matriz de teclas y faders, a los que se les ha asignado mensajes midi listos para ser activados. La duración de una nota depende del tiempo que esté colocada la mano por encima del sensor (supongo que serán sensores de distancia). La pulsación de cada tecla se confirma por unos led que hay bajo la superficie.
El software de AirPiano permite una configuración fácil, cargando y guardando presets.
AirPiano está todavía en su fase de prototipo. AirPiano tiene una patente provisional en E.E.U.U. (Numero 60/989/986).
Os dejo dos videos, en el primero está tocando el piano simplemente y en el segundo está controlando Ableton Live. Saludos.