Problema al conectar Nano v3 al sensor de proximidad de Sharp

0

Estoy intentando conectar un El sensor de distancia IR analógico Sharp GP2Y0E02A a un nano v3. Acepta 2.7 - 3.3 v, así que lo tengo conectado a 3.3 v del arduino, pero no obtengo salida en serie, simplemente se deja en blanco. Cuando cambio el código a algo un poco similar (ver código debajo del código de buggy a continuación) obtengo valores de voltaje. Así que creo que el problema podría estar en el código que estoy usando para convertir el voltaje a cm debajo.

Código de error (voltaje a cm)

/***************************************************************
  Arduino GP2Y0E02B example code
  Gets range from GP2Y0E02B and prints it to the serial monitor.

  By James Henderson 2014
***************************************************************/

#include <Wire.h>

int distance = 0;                // Stores the calculated distance 
byte high, low = 0;              // High and low byte of distance
int shift = 0;                   // Value in shift bit register

#define ADDRESS       0x80 >> 1  // Arduino uses 7 bit addressing so we shift address right one bit
#define DISTANCE_REG  0x5E
#define SHIFT         0x35

void setup()
{
  // Start comms
  Wire.begin();
  Serial.begin(19200);

  delay(50);  // Delay so everything can power up

  // Read the sift bit register from the module, used in calculating range
  Wire.beginTransmission(ADDRESS);    
  Wire.write(SHIFT);
  Wire.endTransmission();

  Wire.requestFrom(ADDRESS, 1);
  while(Wire.available() == 0);
  shift = Wire.read();
}

void loop()
{
  // Request and read the 2 address bytes from the GP2Y0E02B
  Wire.beginTransmission(ADDRESS);
  Wire.write(DISTANCE_REG);
  Wire.endTransmission();

  Wire.requestFrom(ADDRESS, 2);

  while(Wire.available() < 2);

  high = Wire.read();
  low = Wire.read();

  distance = (high * 16 + low)/16/(int)pow(2,shift); // Calculate the range in CM

  Serial.print("Distance is ");
  Serial.print(distance);
  Serial.println("CM");

  delay(50);
}

Ejemplo simple (funciona al dar voltaje)

int sensorpin = 5; // pin analógico usado para conectar el sensor agudo int val = 0; // variable para almacenar los valores del sensor (inicialmente cero)

void setup()
{
  Serial.begin(9600);               // starts the serial monitor
}

void loop()
{
  val = analogRead(sensorpin);       // reads the value of the sharp sensor
  Serial.println(val);            // prints the value of the sensor to the serial monitor
  delay(100);                    // wait for this much time before printing next value
}

Esquema

    
pregunta condo1234

1 respuesta

2

El problema es que está utilizando i2c (el protocal detrás de la biblioteca de cables) para comunicarse con un dispositivo analógico. El sensor que ha elegido devuelve la distancia al controlador como un voltaje analógico en el rango de -0.3 a + 2.8V (consulte la hoja de datos vinculada desde la página de la tienda). Por lo tanto, no puede comunicarse con él a través de un protocal digital.

Para que este trabajo funcione, cabléalo de esta manera:

simular este circuito : esquema creado usando CircuitLab

El código que necesitas para controlarlo debería verse así:

void setup()
{
  // Start serial connecton back to PC
  Serial.begin(19200);  
}

void loop()
{
  // Enable the sensor
  digitalWrite(15, HIGH);

  // Wait for it to turn on
  delay(100);

  // Read the analog value from the device
  value = analogRead(0);

  // power down the sensor
  digitalWrite(15, LOW);

  distance = /* do math here, see datasheet for typical values */; // Calculate the range in CM

  Serial.print("Distance is ");
  Serial.print(distance);
  Serial.println("CM");

  delay(50);
}

También recomiendo encarecidamente leer la hoja de datos del dispositivo que ordenó con cuidado.

EDITAR: noté que el código que estás utilizando es para el GP2Y0E02 B no GP2Y0E02 A . El GP2Y0E02B se controla digitalmente a través de I2C, su GP2Y0E02A solo genera un valor analógico. ¿Es posible que hayas pedido la versión incorrecta del sensor?

    
respondido por el Segfault

Lea otras preguntas en las etiquetas