用树莓派检测闪电
可以使用多种方法来检测闪电。通常,它涉及感应撞击产生的电磁辐射。大多数人可能在某个时候在 AM 收音机上听到过静电、噼啪声和爆裂声。一些探测器能够检测到云中产生的闪光,即使在白天由于阳光而通常无法被人眼看到的情况下也是如此。有时,闪电会发出短暂的伽马辐射脉冲——这是国际空间站上的一种新仪器将要研究的东西。
在这篇文章中,我将探讨使用 RaspberryPi 连接来自 ams(奥地利 Mikro Systeme)的 AS3935 富兰克林闪电传感器 IC。 AS3935 是一种可编程传感器,可以检测最远 40 公里外的闪电活动。它使用专有的硬连线算法过滤掉噪音和人为“干扰物”,并估计到风暴前缘的距离;具有可编程检测级别、阈值设置和天线调谐;与之前许多地面闪电传感器不同的是,它可以检测云对地和云内闪电活动。
详情
我没有小批量地收集特定组件、布置 PCB 并尝试手工焊接相当小的 (4x4mm) MLPQ-16 封装,而是使用了 Embedded Adventures 的 MOD-1016 分线板。 AS3935 需要 2.4 – 5.5V 的电源电压范围,这将与 RaspberryPi 的 3.3v GPIO 逻辑电平完美配合。它可以通过 SPI 或 I2C 接口。默认情况下,MOD-1016 配置为使用 I2C,但可以通过板上的几个焊料跳线轻松切换为使用 SPI。在我的设置中,我将坚持使用默认的 I2C 配置。
这个项目对我来说很好地介绍了 I2C 协议。我之前使用过 1-Wire 协议来连接一些 DS18B20 温度传感器,但 I2C 的使用范围要广泛得多,所以我很高兴有机会深入研究它。在这篇文章中,我将介绍从 RaspberryPi 通过 I2C 与 AS3935 通信所需的详细信息,但如果您想了解更多信息,Byte Paradigm 提供了对 I2C 和 SPI 的精彩介绍。
如果您尚未将 RaspberryPi 配置为使用 I2C 协议,则必须安装几个软件包并加载几个内核模块。 Adafruit 这里有一个很棒的指南,但基本上你只需要安装 python-smbus 和 i2c 工具 包,并加载 i2c-bcm2708 和 i2c-dev 内核模块。在 Raspbian 发行版上执行此操作可能会像这样:
### 安装包~ $ sudo apt-get install python-smbus~ $ sudo apt-get install i2c-tools### 加载内核模块~ $ sudo modprobe i2c-bcm2708~ $ sudo modprobe i2c-dev### 确保模块在启动时加载~ $ echo "i2c-bcm2708i2c-dev" |须藤 tee -a /etc/modules
将 MOD-1016 连接到 RaspberryPi 相对简单。使用 I2C,您只需要两根线(SDA 和 SCL)——当然,除了电源线和地线——与多个设备进行通信。 AS3935 发出中断以提醒微控制器发生事件,因此我们需要一根额外的电线。我使用标准面包板和来自 Adafruit 的 RaspberryPi Cobbler 来模拟电路。 MOD-1016 (AS3935) 像这样连接到树莓派:
MOD-1016 | 树莓派 |
---|---|
接地 | 地面 |
VCC | 3.3v(引脚 1) |
中断请求 | GPIO 17(引脚 11) |
SCL | SCL(引脚 5) |
SDA | SDA(引脚 3) |
关于 I2C 需要注意的一件事是,它是为芯片间通信而设计的,通常在同一 PCB 上的集成电路之间进行通信。在 I2C 中,线路由上拉电阻保持高电平并拉低以指示相反的状态。将线路恢复到 VCC 所需的时间取决于上拉电阻和总线电容的值。 I2C 规范将最大电容限制为 400pF,这通常将实际距离限制在几米以内。如果需要,有一些方法可以扩展最大长度。最明显的是 I2C 总线扩展器。降低时钟频率也有助于增加最大距离。另外,请注意,如果使用 CAT-5 之类的双绞线电缆进行 I2C 连接,不要将 SCL 和 SDA 线一起运行在同一双绞线上。使用单独的线对并将每对线中的另一条线接地。
下图显示了 MOD-1016 突破试验板以及来自 Embedded Adventures 的 MS5611 气压传感器和来自 Adafruit 的 FTDI 朋友。
一切都连接好后,您可以使用命令 i2cdetect 以查看 I2C 是否正常工作以及是否可以与传感器通信。如果使用较旧的 RaspberryPi(具有 256MB 内存),您将运行如下所示的命令,其中 I2C 总线 ID 为 0。如果使用较新的 RaspberryPi,请改用 1。在下面的输出中,您可以看到已正确检测到 AS3935 (0x03) 和 MS5611 (0x76)。
~ $ sudo i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 abcde f00:03 -- -- -- -- -- -- -- -- -- -- -- -- - -10:-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --20:-- -- -- -- -- -- -- - -- -- -- -- -- -- -- -- -- --30:-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - --40:-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --50:-- -- -- -- -- -- - -- -- -- -- -- -- -- -- -- -- --60:-- -- -- -- -- -- -- -- -- -- -- -- -- -- - -- --70:-- -- -- -- -- -- 76 --
现在要实际使用传感器,我们需要能够与其进行交互。这是通过读取和写入芯片内的寄存器来完成的。寄存器是用于存储配置和输入/输出等位的内存位置。在某种程度上,它们就像数字 DIP 开关,其中位或位系列用于指示或设置各种状态。例如,对于 AS3935,可以通过切换第三个寄存器 (0x02) 的第 7 位(位 6)来清除算法建立的统计数据。描述寄存器位置和功能的表格和映射可以在器件的数据表中找到。例如,
大多数语言和平台都有可用于 I2C 的工具或库。例如,在 Linux 上,i2c-tools 包提供了i2cdetect、i2cget、等实用程序 i2cdump , 和 i2cset 可以从命令行使用。对于 python,python-smbus 提供的 SMBus 模块 包提供访问 I2C 总线所需的绑定。尽管通常有更高级别的库可用于抽象出处理单个寄存器的细节的设备。不必知道要读取或写入哪些寄存器,您通常只需实例化一个类并调用与特定设备交互的方法即可。
为了在 python 中使用 AS3935,可以使用 Phil Fenstermacher 编写的 RaspberryPi-AS3935 库。可以在 GitHub 页面上找到安装说明。它提供了有用的方法以及一个不错的演示脚本来帮助您启动和运行。要查看可用的方法及其参数,请查看 RPi_AS3935.py 文件。
AS3935 使用并联 RLC 电路作为天线,需要调谐到 500kHz ±3.5% 的谐振频率。为了补偿差异,通过可以以 8pF 的步长激活的调谐电容器在内部提供高达 120pF 的电流。通过寄存器设置,AS3935 可以在 IRQ 引脚上输出谐振频率,允许外部设备测量它并通过激活必要的调谐电容器来适当地调谐天线。幸运的是,Embedded Adventures 的 MOD-1016 突破带有显示在防静电袋外部的调谐电容器值。这使得校准程序更加简单。使用上述库时,只需调用 calibrate() 方法并将调谐电容器值作为参数传递。有关天线设计的更多详细信息,请参阅 AS3935 AMS 硬件设计指南。
更多细节:用树莓派检测闪电
制造工艺
- Raspberry Pi 温度记录器
- 使用 DS18B20 读取温度 |树莓派 2
- 使用 RASPBERRY PI 测量温度
- 使用 Raspberry Pi 监测温度
- 传感器数据与 Raspberry Pi 微处理器的集成
- 带有 Sensorflare 和 RaspberryPi 的 433MHz 智能家居控制器
- 带有 t cobbler plus 的 Raspberry pi 2 水报警器
- ThingSpeak 温度监视器与 Raspberry Pi
- 使用 Raspberry Pi 的简单 DIY 婴儿哭闹检测器
- 使用树莓派进行平移/倾斜面部跟踪
- 使用 Raspberry pi 通过 GPIO 检测按钮按下
- 带有 Raspberry Pi 和湿度传感器的 Aeroponics