You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.6 KiB
94 lines
2.6 KiB
'''
|
|
# @file DFRobot_AS3935_ordinary.py
|
|
# @brief SEN0290 Lightning Sensor
|
|
# @n This sensor can detect lightning and display the distance and intensity of the lightning within 40 km
|
|
# @n It can be set as indoor or outdoor mode.
|
|
# @n The module has three I2C, these addresses are:
|
|
# @n AS3935_ADD1 0x01 A0 = 1 A1 = 0
|
|
# @n AS3935_ADD2 0x02 A0 = 0 A1 = 1
|
|
# @n AS3935_ADD3 0x03 A0 = 1 A1 = 1
|
|
# @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
|
|
# @licence The MIT License (MIT)
|
|
# @author [TangJie](jie.tang@dfrobot.com)
|
|
# @version V1.0.2
|
|
# @date 2019-09-28
|
|
# @url https://github.com/DFRobor/DFRobot_AS3935
|
|
'''
|
|
|
|
import sys
|
|
sys.path.append('../')
|
|
import time
|
|
from DFRobot_AS3935_Lib import DFRobot_AS3935
|
|
import RPi.GPIO as GPIO
|
|
from datetime import datetime
|
|
|
|
#I2C address
|
|
AS3935_I2C_ADDR1 = 0X01
|
|
AS3935_I2C_ADDR2 = 0X02
|
|
AS3935_I2C_ADDR3 = 0X03
|
|
|
|
#Antenna tuning capcitance (must be integer multiple of 8, 8 - 120 pf)
|
|
AS3935_CAPACITANCE = 96
|
|
IRQ_PIN = 7
|
|
|
|
#Indoor/outdoor mode selection
|
|
AS3935_INDOORS = 0
|
|
AS3935_OUTDOORS = 1
|
|
AS3935_MODE = AS3935_INDOORS
|
|
|
|
#Enable/disable disturber detection
|
|
AS3935_DIST_DIS = 0
|
|
AS3935_DIST_EN = 1
|
|
AS3935_DIST = AS3935_DIST_EN
|
|
|
|
GPIO.setmode(GPIO.BOARD)
|
|
|
|
sensor = DFRobot_AS3935(AS3935_I2C_ADDR3, bus = 1)
|
|
if (sensor.reset()):
|
|
print("init sensor sucess.")
|
|
else:
|
|
print("init sensor fail")
|
|
while True:
|
|
pass
|
|
|
|
#Configure sensor
|
|
sensor.manual_cal(AS3935_CAPACITANCE, AS3935_MODE, AS3935_DIST)
|
|
|
|
# Connect the IRQ and GND pin to the oscilloscope.
|
|
# uncomment the following sentences to fine tune the antenna for better performance.
|
|
# This will dispaly the antenna's resonance frequency/16 on IRQ pin (The resonance frequency will be divided by 16 on this pin)
|
|
# Tuning AS3935_CAPACITANCE to make the frequency within 500/16 kHz plus 3.5% to 500/16 kHz minus 3.5%
|
|
#
|
|
# sensor.setLco_fdiv(0)
|
|
# sensor.set_irq_output_source(3)
|
|
|
|
#view all register data
|
|
#sensor.print_all_regs()
|
|
|
|
def callback_handle(channel):
|
|
global sensor
|
|
time.sleep(0.005)
|
|
intSrc = sensor.get_interrupt_src()
|
|
if intSrc == 1:
|
|
lightning_distKm = sensor.get_lightning_distKm()
|
|
print('Lightning occurs!')
|
|
print('Distance: %dkm'%lightning_distKm)
|
|
|
|
lightning_energy_val = sensor.get_strike_energy_raw()
|
|
print('Intensity: %d '%lightning_energy_val)
|
|
elif intSrc == 2:
|
|
print('Disturber discovered!')
|
|
elif intSrc == 3:
|
|
print('Noise level too high!')
|
|
else:
|
|
pass
|
|
#Set to input mode
|
|
GPIO.setup(IRQ_PIN, GPIO.IN)
|
|
#Set the interrupt pin, the interrupt function, rising along the trigger
|
|
GPIO.add_event_detect(IRQ_PIN, GPIO.RISING, callback = callback_handle)
|
|
print("start lightning detect.")
|
|
|
|
while True:
|
|
time.sleep(1.0)
|
|
|
|
|
|
|