ARDUINO UNO YNUNCHUK

Hola que tal, he estado trabajando con la placa de arduino UNO y me pidieorn un proyecto que lea el valor de un acelerometro, para no gastar de más simplemente decidí utilizar el nunchuk del wii, en una página (http://www.windmeadow.com/node/42) encontré la forma de conectarlo, el código y hasta el hackeo que se le debe de hacer, peroparece que nomas esto no se me da porque no puedo ahcerlo funcionar, tengo dos problemas:

  1. en las instrucciones me dice que en la carpeta wire se encontrará un archivo twi.o , yo sólo tengo el archivo twi.c y el twi.h , (el software lod escargué de la página de arduino) como lo tengo el .o decidí borrar el .c y realizar el hackeo com dicen en la página del .h, cuando compilo el programa me aparecen muchos errores concernientes a la transmisión.

  2. si no borro el twi.c, y hackeo el twi.h, el programa se compila y todo pero al correr el programa cuando abro la ventana de la transmisions serial sólo me aparece "setup finished", si reseteo el arduino vuelve a aprecer setup finished y es todo, no sé que más hacer ya que en casi todos los foros se referencian al codigo de la página que puse y a mi simplemente no me funciona estoy haciendo algo muy mal?

AGRADECERÍA SU PRONTA RESPUESTA

JA!, el problema ya se solucionó, la configuración de los cables estaba mal, ya recibo datos pero ahora el problema es que los datos no cambian, sigo utilizando el código que viene en la págna que anteriormente encioné, alguien tendrá alguna idea de cual sea el problema?

no te ciñas a una sola página, como te dije por privado hay miles de paginas donde te dicen como hacerlo.

en el playground tienes una librería ya hecha para esto, con su código de ejemplo y con código también para Processing, no tienes mas que copiar, pegar y probar. si no te funciona es porque tienes al montaje al hecho. prueba primero con los ejemplos mencionados.

http://www.arduino.cc/playground/Main/WiiChuckClass

un saludo

De hecho en este momento estoy haciendo lo que mencionan en el enlace que pegaste y de nuevo no sé que rayos hago mal, solo cree la carpeta en la ubicación de librerías que se llamara WiiChuck, y le agregue el código que allí proponen, en .h, y una vez que abro el sketch y pego el codigo de mostrar los datos por el puerto serie me aparece estos errores:

wii123.cpp:4:22: error: WiiChuck.h: No such file or directory
wii123:10: error: 'WiiChuck' does not name a type
wii123.cpp: In function 'void setup()':
wii123:18: error: 'chuck' was not declared in this scope
wii123.cpp: In function 'void loop()':
wii123:26: error: 'chuck' was not declared in this scope
y el primer renglon después de las definiciones se subraya en amarillo

Leí en el apartado de librerías http://arduino.cc/es/Hacking/LibraryTutorial que otra forma para cargar una librería es desde el sketch pero de hecho cuando elijo esa opción no me aprece la librería que yo cree es decir WiiChuk como en el tutorial dice debería aparecer, hice extactamente eso sólo copie y pegue y no sé ahora que puede ser el problema.

te has descargado la librería y la has puesto en la carpeta adecuada ?

Ok, he logrado obtener los datos, el problema era simplemente que tenía la carpeta de arduino duplicada y escondida , y el ejecutable jalaba datos de una carpeta sin la librería wiichuck, decidí entonces desintalar todo reinstalarlo y listo, segui las instrucciones para poder procesar los datos y pues aparentemente se leen en mi puerto serie, lo siguiente que trate de hacer es el programa que interactue con el cubo, ya descargué el processing y ya hice los cambios necesarios para que la librería de java sea la misma con la que corre,me auxilié con este sitio web: http://www.sundh.com/blog/2011/05/get-processing-and-arduino-to-talk/ AHORA... surge un nuevo problema, el cubo debería supuestamente de rotar como lo haría el nunchuk, pero no hace absolutamente nada, el cubo no se mueve, ahora sí no sé de donde venga el problema, el programa en el processing no me marca error alguno, alguna idea? copie el código de Arduino Playground - WiiChuckClass

la respuesta puede ser simple o no.
lo que pasa que el code del arduino que bajastes no tiene delim, es decir un sinbolo metido en medio de cada
dato para que el processing interprete las lecturas, por cierto, el cubo solo te deja
moverlo con los jostkck , si deceas moverlo en funcion Acelerómetros, deber cambie el numero de array que lee
es decir:
datos del nuchack:
datos[0]----jostikX
datos[1]----jostikY
datos[2]---- AcelerómetroX
datos[3]----AcelerómetroY
datos[4]---AcelerómetroZ
datos[5]---BOTON A
datos[6]---BOTON B

RESUMNIDO CAMBIA ESTO:

Serial.print (joy_x_axis, DEC);
Serial.print ("\t");

Serial.print (joy_y_axis, DEC);
Serial.print ("\t");

Serial.print (accel_x_axis, DEC);
Serial.print ("\t");

Serial.print (accel_y_axis, DEC);
Serial.print ("\t");

Serial.print (accel_z_axis, DEC);
Serial.print ("\t");

Serial.print (z_button, DEC);
Serial.print ("\t");

Serial.print (c_button, DEC);
Serial.print ("\t");

Serial.print ("\r\n");

POR ESTO:

Serial.print (joy_x_axis, DEC);
Serial.print(",");

Serial.print (joy_y_axis, DEC);
Serial.print(",");

Serial.print (accel_x_axis, DEC);
Serial.print(",");

Serial.print (accel_y_axis, DEC);
Serial.print(",");

Serial.print (accel_z_axis, DEC);
Serial.print(",");

Serial.print (z_button, DEC);
Serial.print(",");

Serial.println (c_button, DEC);

tienes que modificar el codigo de processing y poner el puerto COM que te detecte tu ordenador

creo recordar esta puesto como si fuera linux, quita eso y pon el puerto serie que te detecte en el IDE

con eso ya rula

por cierto, la velociad del puerto del arduino y el processing estan diferentes, caanbia eso

¿Cómo cambio el puerto, yo recibo datos por el COM4, no sé si te refieras a esta parte de la instrucción import processing.serial.*;
Serial myPort; // The serial port

int BAUDRATE = 115200;
char DELIM = ','; // the delimeter for parsing incoming data

void setup()
{
size(200, 200, P3D);
noStroke();
colorMode(RGB, 1);
myPort = new Serial(this, Serial.list()[0], BAUDRATE);
// clear the serial buffer:
myPort.clear();

:astonished:

int BAUDRATE = 115200; -------velociad del puerto--este debe ser=a la velocidad en el arduino

arduino velociad= Serial.begin(9600); --cambia


puerto q puerto???

myPort = new Serial(this, Serial.list()[0], BAUDRATE);

---la lista de puertos estan enumerados en un array, es decir debe cambia o sustiri el cero por su pouerto, supomgo que es el tres
Serial.list()[0]---
Serial.list()[1]---
Serial.list()[2]---
Serial.list()[3]--

Entiendo que la velocidad de transmisión del puerto, sea en el programa que sea debe ser la misma, eso ya lo había cambiado, ahora en el programa que yo copié efectivamente está el caracter (","), en lugar del ("\t"); así que ese no era el problema, entonces supongo que lo que procede es la respuesta de DonGato que me dice : tienes que modificar el codigo de processing y poner el puerto COM que te detecte tu ordenador creo recordar esta puesto como si fuera linux.

He allí mi respuesta a que yo utilizo el COM4, lo que no entiendo es cual es la parte que hay que modificar por eso pegue esa parte del código que es en donde se declara.

D:\processing-1.5.1\modes\java\reference\libraries\serial\Serial.html

yo cambiaria algo de esta linea

myPort = new Serial(this, Serial.list()[0], BAUDRATE);

en vez de serial list pondria directamente el COM que utilizo

o prueba a cambiar el indice, si no tienes mucho puertos COM ve cambiando a 1 y prueba, si no con 2...

Pfffff, no he probado la interfaz con el processing porque un problema que pensé había resuelto ha surgido de nuevo, resulta que utilizando el código que está en la página de arduino: Arduino Playground - WiiChuckClass al correr mi programa en el SERIAL BOARD sólo leo los datos -132,0,-510,-490,-460, miré el código y esos son los valores que se definen al inicio:

#define ZEROX 510
#define ZEROY 490
#define ZEROZ 460
#define RADIUS 210 // probably pretty universal

#define DEFAULT_ZERO_JOY_X 124
#define DEFAULT_ZERO_JOY_Y 132

Por más que yo mueva o presione los botones en el nunchuk, los valores no cambian, he probado con otros programas que he encontrado en la red como el de esta persona :
http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/

En este caso los valores me salen 0 , si presiono reset y muevo el joystick los valores cambian a 255 pero ningún otro valor cambia a medida que muevo el nunchuk, yo pele los cables del nunchuk no utilice el adaptador, la conexión ya es la correcta la he checado múltiples veces, quiero saber si es el control o estoy haciendo algo mal en los programas.

saca una foto para ver como tienes hecho el montaje

un saludo

yo cuando lo hice funcionar fue alimentandolo con 3,3 voltios

yo corté el cable, total no lo iba a usar para otra cosa, lo compré en china por menos de 5 dolares.

hilos, blanco a gnd, rojo a 3,3 voltios y verde y a amarillo a pines 4 y 5 analogicos, estos dos ultimos no recuerdo bien si asi o a la inversa, total puedes probar igual.

Listo!, el problema efectivamente eran las terminales del control, decidí mejor comprar el adaptador para el arduino como lo muestra este enlace
http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/
después el problema en el processing, quedó solucionado exactamente como lo mencionaste Don Gato, cambié el índice en la parte de :
myPort = new Serial(this, Serial.list()[0], BAUDRATE);
Cuando lo cambié al índice por un 1 el cubo comenzó a rotar, MUCHAS MUCHAS GRACIAS! por toda la ayuda.

de nada :slight_smile: