¿Qué es este blog?

La idea de este blog nace para compartir los avances que se vayan realizando a lo largo de un estudio sobre cómo interconectar los distintos sensores que se pueden encontrar en el mercado, o fabricar de forma casera, con la plataforma Mindstorms de LEGO. Para ello se hará uso ARDUINO, un entorno de desarrollo abierto basado en microcontrolador.

miércoles, 23 de febrero de 2011

Primeras pruebas

Las primeras pruebas de comunicación entre el NXT y una placa Arduino Duemilanove se han realizado con éxito, usando la siguiente configuración:

- Pines 2 y 3 del NXT (Rojo y negro) (tierra) --> Arduino GND
- Pin 4 del NXT (alimentacion) (verde) --> Arduino 5V
- Pin 5 del NXT (Amarillo) (SCL) --> Arduino A5
- Pin 6 del NXT (Azul) (SDA) --> Arduino A4

La primera prueba consiste simplemente en solicitar datos (Tipo de sensor, versión e identificador) desde el robot a Arduino, y todo ha ido sin problemas. Voy a poner a continuación el código de ambas partes.

CÓDIGO ESCRITO EN LEJOS PARA EL MINDSTORM

import lejos.nxt.*; 
import lejos.nxt.I2CPort;
import lejos.nxt.I2CSensor;

public class ArduCom {

public static void main(String[] args) throws Exception{ 
byte[] bufOut =new byte[10];
byte [] readData = new byte[10];
String Tipo = "";
String ID ="";
String Ver="";
for (int i=0;i<readData.length;i++){
readData[i] = 0;
bufOut[i] = 5;
}
I2CSensor Arduino = new I2CSensor(SensorPort.S1);
Arduino.setAddress(1); 
Thread.sleep(500);
Ver = Arduino.getVersion();
System.out.println("Ver: "+Ver);
Thread.sleep(100);
Tipo = Arduino.getSensorType();
System.out.println("Tipo: "+Tipo);
Thread.sleep(100);
ID = Arduino.getProductID();
System.out.println("ID: "+ID);
Thread.sleep(10000);
}
}



CÓDIGO PARA ARDUINO

#include <Wire.h> //Para gestionar las comunicaciones

//Definiciones y variables globales

uint8_t SensorVersion[9] = " V0.1   ";
uint8_t SensorName[9] =    "Arduino ";
uint8_t SensorType[9] =    "Casero  ";

byte rec;

void setup(){
  
  Serial.begin(9600);
  Wire.begin(1); //Nos unimos como esclavos con dir. 1
  Wire.onRequest(requestEvent); //Rutinas para cuando llegue algo
  Wire.onReceive(receiveEvent); 
}


void loop(){
  
}

void receiveEvent(int len){ //Devuelve el nº de bytes recibidos 
  while (0 < Wire.available() ) {
    rec = Wire.receive();
  } //While
}

void requestEvent(){
  if (rec == 0x00){ //Version del sensor
    Wire.send(SensorVersion, 8);
  } else if (rec == 0x08){ //Nombre del sensor
    Wire.send(SensorName, 8);
  } else if (rec == 0x10){ //Tipo del sensor
    Wire.send(SensorType, 8);
  } else {
     Wire.send("Error de com"); 
  }

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.