2

我实际上是 DIY 硬件项目的新手,需要帮助寻找可以在加速度计状态从移动到停止或停止到移动时向我的 Arduino 板发送信号的加速度计。我想这样做的原因是为了节省电路板上的电池。我希望它仅在加速度计状态处于移动状态并且如果状态变为停止时运行,板应该运行一段时间然后进入睡眠状态。我有以下挑战需要考虑。

  1. 加速度计应该消耗更少的电池,因为这个实验的全部目的是节省电池。
  2. 加速度计必须独立于电路板,就像电源管理扩展一样,它将根据其状态控制 Arduino 的电源。
  3. 必须便宜。

任何帮助是极大的赞赏。提前致谢。

4

1 回答 1

2

您必须使用加速度计的外部中断。所以你必须注意你的传感器模块提供了这样的中断能力。一个好的模块可以是Adafruit 的带 I2C/SPI(基于 ADXL 芯片)的三轴加速度计,售价 17.50 美元。

此外,您需要一个带有中断引脚的 Arduino。大多数 Arduino 至少有两个中断引脚(数字 0(在数字引脚 2 上)和 1(在数字引脚 3 上))。

PKMC构建了使用加速度计中断 Arduino 的必要步骤,如下所示:

  1. 将 ADXL 中断引脚 1 连接到 Arduino 引脚 2 或引脚 3
  2. 设置加速度计的参数(例如)
 //set ADXL interrupts
 //enable single tap interrupt
 //writeRegister(ADXL345_REG_INT_ENABLE, 0b01000000);

 //enable single and double tap interrupt
 writeRegister(ADXL345_REG_INT_ENABLE, 0b01100000);

 //map all interrupts to pin1
 writeRegister(ADXL345_REG_INT_MAP, 0b00000000);

 // single tap configuration
 writeRegister(ADXL345_REG_DUR, 0x1F); // 625us/LSB
 writeRegister(ADXL345_REG_THRESH_TAP, 48); 
 writeRegister(ADXL345_REG_TAP_AXES, 0b111); // enable tap detection on x,y,z axes

 //double tap configuration
 writeRegister(ADXL345_REG_LATENT, 0x50);
 writeRegister(ADXL345_REG_WINDOW, 0xff);
  1. 在设置代码中分配 Arduino INT0 (interrupt0)(或 INT1 (interrupt0),如果您选择了 Pin 3)
attachInterrupt(0, accelInterrupt, RISING);
  1. 在主循环之前编写 INT0 中断程序
void accelInterrupt(){
    //...
}

并提供了一个带有加速度计和新像素的示例(和代码)。

我相信这个例子可以帮助你!

于 2015-08-03T06:42:39.093 回答