3.3v voltaje de salida en arduino mini

1

Estoy aprendiendo a usar el LSM9DS0 de Adafruit y he creado este código de manera tal que un LED se encenderá cuando detecte movimiento en el acelerómetro, específicamente cuando la magnitud supera un cierto umbral (MOVE_THRESHOLD). Corrí el código en un Uno y funcionó muy bien. Ahora que estoy tratando de ejecutarlo en un Mini Pro de 3.3V, por lo tanto, la necesidad de que el pin 10 esté siempre encendido para alimentar el sensor, no está funcionando. Cuando comento acceldata (), el pin está registrando 5V a diferencia de cómo debería registrar 3.3V, ya que es un tablero de 3.3V ( If el pin se ha configurado como una SALIDA con pinMode (), su voltaje se ajustará al valor correspondiente: 5V (o 3.3V en placas de 3.3V) para ALTO, 0V (tierra) para LOW. ). Una vez que se implementa acceldata (), el pin no lee 3.3V o incluso 5V, sino 0V. Estoy seguro de que esto es algo obvio en acceldata () que me estoy perdiendo, pero todavía me lo estoy perdiendo. Tampoco tengo claro por qué el pin 10 está leyendo 5V cuando debería estar leyendo 3.3V.

#include<Wire.h>#include<SPI.h>#include<Adafruit_LSM9DS0.h>#include<Adafruit_Sensor.h>//i2c,callstheFlora9DOFAdafruit_LSM9DS0lsm=Adafruit_LSM9DS0();//YoucanalsousesoftwareSPI//Adafruit_LSM9DS0lsm=Adafruit_LSM9DS0(13,12,11,10,9);//OrhardwareSPI!Inthiscase,onlyCSpinsarepassedin//Adafruit_LSM9DS0lsm=Adafruit_LSM9DS0(10,9);//messwiththisnumbertoadjustblinking//lowernumber=moresensitive#defineMOVE_THRESHOLD100voidsetupSensor(){//1.)Settheaccelerometerrangelsm.setupAccel(lsm.LSM9DS0_ACCELRANGE_2G);//lsm.setupAccel(lsm.LSM9DS0_ACCELRANGE_4G);//lsm.setupAccel(lsm.LSM9DS0_ACCELRANGE_6G);//lsm.setupAccel(lsm.LSM9DS0_ACCELRANGE_8G);//lsm.setupAccel(lsm.LSM9DS0_ACCELRANGE_16G);//2.)Setthemagnetometersensitivitylsm.setupMag(lsm.LSM9DS0_MAGGAIN_2GAUSS);//lsm.setupMag(lsm.LSM9DS0_MAGGAIN_4GAUSS);//lsm.setupMag(lsm.LSM9DS0_MAGGAIN_8GAUSS);//lsm.setupMag(lsm.LSM9DS0_MAGGAIN_12GAUSS);//3.)Setupthegyroscopelsm.setupGyro(lsm.LSM9DS0_GYROSCALE_245DPS);//lsm.setupGyro(lsm.LSM9DS0_GYROSCALE_500DPS);//lsm.setupGyro(lsm.LSM9DS0_GYROSCALE_2000DPS);}voidsetup(){//Pin10toalwaysbeontopowertheLSM9DS0pinMode(10,OUTPUT);//Pin13toturnonwhenachangeinaccelerationisdetectedpinMode(13,OUTPUT);#ifndefESP8266while(!Serial);//willpauseZero,Leonardo,etcuntilserialconsoleopens#endifSerial.begin(9600);Serial.println("LSM raw read demo");

  // Try to initialise and warn if we couldn't detect the chip
  if (!lsm.begin())
  {
    Serial.println("Oops ... unable to initialize the LSM9DS0. Check your wiring!");
    while (1);
  }
  Serial.println("Found LSM9DS0 9DOF");
  Serial.println("");
  Serial.println("");
}

void loop() 
{
  //Pin 10 to always be on to power the LSM9DS0 
  digitalWrite(10, HIGH);
  //Takes the acceleration data, produces vector, detects change in vector to turn on pin 13 LED
  acceldata();
}

void acceldata()
{
  lsm.read();
  Serial.print("Accel X: "); Serial.print((int)lsm.accelData.x); Serial.print(" ");
  Serial.print("Y: "); Serial.print((int)lsm.accelData.y);       Serial.print(" ");
  Serial.print("Z: "); Serial.println((int)lsm.accelData.z);     Serial.print(" ");
/*  Serial.print("Mag X: "); Serial.print((int)lsm.magData.x);     Serial.print(" ");
  Serial.print("Y: "); Serial.print((int)lsm.magData.y);         Serial.print(" ");
  Serial.print("Z: "); Serial.println((int)lsm.magData.z);       Serial.print(" ");
  Serial.print("Gyro X: "); Serial.print((int)lsm.gyroData.x);   Serial.print(" ");
  Serial.print("Y: "); Serial.print((int)lsm.gyroData.y);        Serial.print(" ");
  Serial.print("Z: "); Serial.println((int)lsm.gyroData.z);      Serial.println(" ");
  Serial.print("Temp: "); Serial.print((int)lsm.temperature);    Serial.println(" ");
*/
  delay(1000);

  // Get the magnitude (length) of the 3 axis vector
  // http://en.wikipedia.org/wiki/Euclidean_vector#Length
  double storedVector = lsm.accelData.x*lsm.accelData.x;
  storedVector += lsm.accelData.y*lsm.accelData.y;
  storedVector += lsm.accelData.z*lsm.accelData.z;
  storedVector = sqrt(storedVector);
  Serial.print("Len: "); Serial.println(storedVector);

  // wait a bit
  delay(50);

  // get new data!
  lsm.read();
  double newVector = lsm.accelData.x*lsm.accelData.x;
  newVector += lsm.accelData.y*lsm.accelData.y;
  newVector += lsm.accelData.z*lsm.accelData.z;
  newVector = sqrt(newVector);
  Serial.print("New Len: "); Serial.println(newVector);



  // are we moving 
  if (abs(newVector - storedVector) > MOVE_THRESHOLD) {
    Serial.println("Twinkle!");
    Serial.print("Delta_a: "); Serial.println(newVector - storedVector);
    digitalWrite(13, HIGH); 
  }
  else
  {
    digitalWrite(13, LOW);
  }
}
    
pregunta Proserpia

0 respuestas

Lea otras preguntas en las etiquetas