Esto es un Theremin:
(https://www.orbit.zkm.de/files/theremin%20classic1.jpg)
El Theremin es un instrumento musical inventado por León Theremin en 1919.
Básicamente se compone de una caja con la electrónica y dos antenas que salen de ella.
Se ejecuta acercando las manos a las antenas pero sin llegar a tocarlas.
Con la mano derecha se controla el tono (o frecuencia en este caso) y con la izquierda el volumen.
Aquí podéis verlo en funcionamiento: https://www.youtube.com/watch?v=L3CVgLBxa6g (https://www.youtube.com/watch?v=L3CVgLBxa6g)
La cosa es que me e construido uno con Mindstorms (lo podéis ver abajo).
La construcción es muy sencilla y solo se necesitan el sensor de luz y el de ultrasonidos, aunque este último seria mejor reemplazarlo por otro sensor de luz que son más precisos.
El programa también es sencillo y como es corto lo pongo aquí mismo:
int Frc, Vol, i;
task main(){
SetSensorLight(IN_1); // Sensor de luz en el puerto 1
SetSensorLowspeed(IN_2); // Sensor de ultrasonidos en el puerto 2
while(true){
// Cogemos el valor del sensor de luz y lo pasamos a hercios
Frc=((((Sensor(IN_1)-20)*4000)/60)+Frc)/2;
// Adaptamos los valores del sensor de ultrasonidos a volumen (0 a 4)
i = SensorUS(IN_2);
if (i==255) {i=25;}
if (i>25) {i=25;}
Vol = (((i*4)/25)+Vol)/2;
// Hacemos el sonido
PlayToneEx(Frc,100,Vol,true);
}
}
Problemas:
- La velocidad de proceso del NXT no permite realizar transiciones muy fluidas del tono, al intentar corregirlo ya no respondía con velocidad a la mano.
- El volumen en NXC va del 0 al 4 donde 0 es silencio y 4 es el volumen máximo (no se si esto es así en todos los lenguajes), esto es un problema gordo ya que al bajar o subir el volumen lo hace a pasos muy grandes.
- El sensor de ultrasonidos devuelve valores muy variables por lo que a veces baja o sube el volumen sin que movamos la mano, esto se solucionaría colocando otro sensor de luz en su lugar, pero no tengo más. :_(
Para saber más:
https://es.wikipedia.org/wiki/Theremín (https://es.wikipedia.org/wiki/Therem%C3%ADn)
Me encanta!
No me puedo creer que no me acordaba del nombre de ese artefacto. He estado buscando y aunque no he encontrado el vídeo que buscaba esto es lo que me enamoró de este aparato (con perdón Jean Michel Jarre es algo... digamos 'manso' xD)
https://www.youtube.com/watch?v=FLhLb0Bn0Os#t=2m50s
Voy a volver a instalar RobotC para probarlo y a ver si en NXC se puede hacer lo mismo (supongo que sin mayores dificultades porque la velocidad de reloj en este caso no creo que sea crítica.)
jeje, Led Zeppelín también molan rato largo, pero es que el Jarre es de los primeros que me ha salio en youtube y tampoco le hago ascos.
La velocidad de procesado del NXT influye en el sonido (se nota el salto de tono a tono), haciendo pruebas he conseguido que el sonido sea continuo, parecido al del original, pero cuando se mueve la mano el sonido llega tarde de tantos comandos que tiene procesar, quizas la forma en que lo hago no sea la correcta.
De todas formas, creo que el mayor problema está en las subidas y bajadas tan bruscas de volumen, de 0 a 100 en 4 pasos :O.
Es buenísimo xD xD xD. Me lo apunto :guino:
Eso sí, tiene pinta de ser un "chafa-altavoces" de NXT ^:) ^:) ^:)
Es increíble lo que puede conseguirse con MINDSTORMS. Ya sé que parece un mensaje de principiante, pero siempre me ha parecido un universo no-LEGO dado el nivel que se alcanza, en absoluto al alcance del TECHNIC más avanzado.
Con respecto al Theremin, "mi" añorado Keith Emerson también solía emplear uno en sus conciertos de principios de los años 70. Si lo de Led Zeppelin os ha parecido "duro", mejor absteneros de ver este vídeo (https://www.youtube.com/watch?v=wv5f5P5VbIc&feature=PlayList&p=58FE93F2C8C39BAB&index=0&playnext=1)
Esto lo tienen que ver los Arvo ^_^)
Lo has vuelto a hacer Manti: lo llevo tarareando toda la tarde :D :D
Tiene una pinta estupenda, enhorabuena^^
Mira que soy necio leyendo... había entendido que lo habías hecho con RobotC y he ido a probarlo, solo para darme cuenta de que no compila... claro que no! Si está en NXC :P vuelta a empezar :D, pero esto me deja con la duda razonable si RobotC será capaz de hacer que el sonido sea más ... fluido...
Menudo video Manticore, no apto para epilépticos, me alegra saber que no solo sabéis elegir buenos juguetes xD.
Cita de: Jetro en 01 de Febrero de 2010, 23:18:38 PM
esto me deja con la duda razonable si RobotC será capaz de hacer que el sonido sea más ... fluido...
No se, no lo he usado nunca, creo que el NXC permite usar lenguaje ensamblador, que seria lo más rápido que se podría usar pero eso ya se sale de mis conocimientos.
Cita de: manticore en 01 de Febrero de 2010, 15:51:55 PM
Es increíble lo que puede conseguirse con MINDSTORMS. Ya sé que parece un mensaje de principiante, pero siempre me ha parecido un universo no-LEGO dado el nivel que se alcanza, en absoluto al alcance del TECHNIC más avanzado.
Con respecto al Theremin, "mi" añorado Keith Emerson también solía emplear uno en sus conciertos de principios de los años 70. Si lo de Led Zeppelin os ha parecido "duro", mejor absteneros de ver este vídeo (https://www.youtube.com/watch?v=wv5f5P5VbIc&feature=PlayList&p=58FE93F2C8C39BAB&index=0&playnext=1)
Juas juas manti, que lo que nos has colgado es una lista de reproducción, y después de la canción principal ha salido una en español y me he quedado O_O preguntándome: ¡sopla, cantan en español! LOL
Edito: siento el offtopic, como siempre m(_ _U)m
Cita de: Jetro en 01 de Febrero de 2010, 23:18:38 PM
Mira que soy necio leyendo... había entendido que lo habías hecho con RobotC y he ido a probarlo, solo para darme cuenta de que no compila... claro que no! Si está en NXC :P vuelta a empezar :D, pero esto me deja con la duda razonable si RobotC será capaz de hacer que el sonido sea más ... fluido...
Puedo intentar pasar el código a robotC, aunque el nivel de volumen funciona en principio igual, del 0 al 4
Después de probarlo esta mañana con otra cosa que mi mano (funciona 10x mejor con un objeto plano como la carcasa de un móvil) me he dado cuenta que en las distancias cortas el sensor e luz da unos resultados muy intersantes.
La posible ventaja en el sonido (no el volumen por lo que veo) sería que como el firmware es mucho más rápido las notas deslizarían más fluidamente de una a otra pero eso no tiene porqué ser una ventaja...
Si jcaro quiere intentarlo estaré al tanto de ver cómo se transcribe esto a RoboC
No se donde leí que el sensor de luz lo habían utilizado para hacer un NXTway (ese robot que se sostiene sobre 2 ruedas) y les dio mejor resultado que con un giroscopio :O,
De hecho, esa fue la inspiración para este robot, usar el sensor de luz como medidor de distancias y realmente es muy bueno.
A mi también me gustaría verlo funcionar en RobotC, lo que me lleva a la siguiente pregunta, ¿la versión de prueba de RobotC es totalmente funcional?
Sí, en principio es totalmente funcional, pero claro, dura 30 dias.
Oye, se pasó el código a robotC??
Es que tengo que hacer un trabajo de música y esto me pareció de lo más interesante.
Yo no me he puesto al final, pero si te interesa para un trabajo ¡qué mejor excusa para hacerlo tú mismo! ;D
Es que me descargué la versión de prueba de robotC y quería poner el programilla en mi NXT.
¿el problema? no se programar en robotC, por lo que he visto me parece sencillo (seguramente porque controlo HTML y algo de PHP y algunas cosas son iguales)
Hombre, si solamente se trata de enseñar el modelo te puede servir el código NXC ya que es un lenguaje gratuito y se maneja muy bien con BricxCC
el tema está en que quería sacarle un vídeo al NXT y yo tocando, para el trabajo de música, además de una guitarra que hice de nxtprograms.
probaré con NXC
Esperaremos ansioso el resultado :D
Pasar el programa a RobotC no debe ser muy difícil, la única dificultad del programa son los cálculos.
Frc=((((Sensor(IN_1)-20)*4000)/60)+Frc)/2;
Esta es la línea que calcula la frecuencia, el 20 y el 60 son los valores mínimo y máximo que me devuelve el sensor de luz (se pueden cambiar sin problemas a los valores que te entregue el RobotC), el calculo es un simple porcentaje, multiplico por el valor máximo de frecuencia (4000, aunque puede ser mas alto) y divido por el máximo devuelto por el sensor (60).
El resto "+Frc)/2" es para coger el valor medio de dos frecuencias, esto hace que el sonido sea mas fluido (pero no mucho).
Vol = (((i*4)/25)+Vol)/2;
El cálculo del sonido es el mismo, multiplicamos por el volumen máximo (4) y dividimos por el valor máximo entregado por el sensor (25).
Como en el anterior, sumamos dos tomas y dividimos entre 2 para sacar la media y hacer el transito más suave.
Oye, pues muchas gracias por el código ( y los comentarios también) debo suponer que lo demás se queda igual, no?
¿Para pasarlo a RobotC?
Me temo que la cosa es un poco más compleja (poco, pero es).
Se trata de lenguaje diferente. Tienes que declarar los sensores, y usar los comandos correspondientes. Vamos, para que lo entiendas saber que tienes que pedir dos paquetes de 6 bricks de leche es un comienzo, pero solo un comienzo si tienes que hacer la compra en Italia por ejemplo. El idioma se parece, pero no es lo mismo ni mucho menos.
Ahora bien, si te pones a ello, seguro que en una hora lo resuelves (suponiendo que te manejes un poco con el inglés).
Si, como dice Jetro, pasarlo a RobotC es algo más que ejecutarlo y ya esta, tendrás que cambiar la forma de iniciar a los sensores, sintaxis, etc.
Pero como el programa no es muy largo, no debe costarte mucho adaptarlo.
El organigrama es muy simple:
Iniciar sensores
Inicio del bucle
Cálculo de la frecuencia
Cálculo del volumen
Ejecutar sonido
Fin del bucle
Aun así te recomendaría usar NXC, ya que es gratuito, y no tendrás que adaptar nada.