寻找加速度计来控制继电器
Looking for accelerometer to control a relay
我实际上是 DIY 硬件项目的新手,需要帮助寻找可以在加速度计状态从移动到停止或停止到移动时向我的 Arduino 板发送信号的加速度计。我想这样做的原因是为了节省板上的电池电量。我希望它仅在加速度计状态处于移动状态时才处于 运行ning 状态,并且如果状态变为停止状态,板应该 运行 一段时间然后进入睡眠状态。我有以下挑战需要考虑。
- 加速度计的整体目的应该是消耗更少的电池
因为这个实验是为了省电。
- 加速度计必须独立于电路板,就像电源管理扩展一样,它将根据其状态控制 Arduino 的电源。
- 一定要便宜。
非常感谢任何帮助。提前致谢。
您必须使用加速度计的外部中断。
所以你要注意你的传感器模块提供了这样的中断能力。
一个好的模块可以是 Adafruit 的 Triple-Axis Accelerometer w/ I2C/SPI(基于 ADXL 芯片),售价 17.50 美元。
另外,你需要一个带有中断引脚的Arduino。大多数 Arduino 至少有两个中断引脚(数字 0(在数字引脚 2 上)和 1(在数字引脚 3 上))。
PKMC 用加速度计中断 Arduino 的必要步骤如下:
- 将 ADXL 中断引脚 1 连接到 Arduino 引脚 2 或引脚 3
- 设置加速度计的参数(例如)
//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);
- 在设置代码中分配 Arduino INT0(中断 0)(如果您选择引脚 3,则分配给 INT1(中断 0))
attachInterrupt(0, accelInterrupt, RISING);
- 在主循环之前编写 INT0 中断例程
void accelInterrupt(){
//...
}
并提供一个 example (and the code) 带有加速度计和 neopixels。
我相信这个例子可以帮助到你!
我实际上是 DIY 硬件项目的新手,需要帮助寻找可以在加速度计状态从移动到停止或停止到移动时向我的 Arduino 板发送信号的加速度计。我想这样做的原因是为了节省板上的电池电量。我希望它仅在加速度计状态处于移动状态时才处于 运行ning 状态,并且如果状态变为停止状态,板应该 运行 一段时间然后进入睡眠状态。我有以下挑战需要考虑。
- 加速度计的整体目的应该是消耗更少的电池 因为这个实验是为了省电。
- 加速度计必须独立于电路板,就像电源管理扩展一样,它将根据其状态控制 Arduino 的电源。
- 一定要便宜。
非常感谢任何帮助。提前致谢。
您必须使用加速度计的外部中断。 所以你要注意你的传感器模块提供了这样的中断能力。 一个好的模块可以是 Adafruit 的 Triple-Axis Accelerometer w/ I2C/SPI(基于 ADXL 芯片),售价 17.50 美元。
另外,你需要一个带有中断引脚的Arduino。大多数 Arduino 至少有两个中断引脚(数字 0(在数字引脚 2 上)和 1(在数字引脚 3 上))。
PKMC 用加速度计中断 Arduino 的必要步骤如下:
- 将 ADXL 中断引脚 1 连接到 Arduino 引脚 2 或引脚 3
- 设置加速度计的参数(例如)
//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);
- 在设置代码中分配 Arduino INT0(中断 0)(如果您选择引脚 3,则分配给 INT1(中断 0))
attachInterrupt(0, accelInterrupt, RISING);
- 在主循环之前编写 INT0 中断例程
void accelInterrupt(){
//...
}
并提供一个 example (and the code) 带有加速度计和 neopixels。
我相信这个例子可以帮助到你!